@ocap/tx-protocols 1.28.8 → 1.29.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 (284) hide show
  1. package/esm/execute.d.mts +53 -0
  2. package/esm/execute.mjs +225 -0
  3. package/esm/index.d.mts +95 -0
  4. package/esm/index.mjs +100 -0
  5. package/esm/pipes/ensure-cost.d.mts +18 -0
  6. package/esm/pipes/ensure-cost.mjs +136 -0
  7. package/esm/pipes/ensure-gas.d.mts +14 -0
  8. package/esm/pipes/ensure-gas.mjs +38 -0
  9. package/esm/protocols/account/delegate.d.mts +4 -0
  10. package/esm/protocols/account/delegate.mjs +195 -0
  11. package/esm/protocols/account/migrate.d.mts +4 -0
  12. package/esm/protocols/account/migrate.mjs +130 -0
  13. package/esm/protocols/account/revoke-delegate.d.mts +4 -0
  14. package/esm/protocols/account/revoke-delegate.mjs +102 -0
  15. package/esm/protocols/asset/acquire-v2.d.mts +9 -0
  16. package/esm/protocols/asset/acquire-v2.mjs +213 -0
  17. package/esm/protocols/asset/acquire-v3.d.mts +17 -0
  18. package/esm/protocols/asset/acquire-v3.mjs +265 -0
  19. package/esm/protocols/asset/calls/transfer-token.d.mts +4 -0
  20. package/esm/protocols/asset/calls/transfer-token.mjs +36 -0
  21. package/esm/protocols/asset/calls/transfer.d.mts +4 -0
  22. package/esm/protocols/asset/calls/transfer.mjs +32 -0
  23. package/esm/protocols/asset/consume.d.mts +4 -0
  24. package/esm/protocols/asset/consume.mjs +92 -0
  25. package/esm/protocols/asset/create.d.mts +4 -0
  26. package/esm/protocols/asset/create.mjs +136 -0
  27. package/esm/protocols/asset/mint.d.mts +4 -0
  28. package/esm/protocols/asset/mint.mjs +156 -0
  29. package/esm/protocols/asset/pipes/exec-mint-hook.d.mts +24 -0
  30. package/esm/protocols/asset/pipes/exec-mint-hook.mjs +54 -0
  31. package/esm/protocols/asset/pipes/extract-factory-tokens.d.mts +21 -0
  32. package/esm/protocols/asset/pipes/extract-factory-tokens.mjs +22 -0
  33. package/esm/protocols/asset/pipes/verify-itx-address.d.mts +32 -0
  34. package/esm/protocols/asset/pipes/verify-itx-address.mjs +56 -0
  35. package/esm/protocols/asset/pipes/verify-itx-assets.d.mts +18 -0
  36. package/esm/protocols/asset/pipes/verify-itx-assets.mjs +27 -0
  37. package/esm/protocols/asset/pipes/verify-itx-variables.d.mts +17 -0
  38. package/esm/protocols/asset/pipes/verify-itx-variables.mjs +20 -0
  39. package/esm/protocols/asset/pipes/verify-mint-limit.d.mts +15 -0
  40. package/esm/protocols/asset/pipes/verify-mint-limit.mjs +14 -0
  41. package/esm/protocols/asset/update.d.mts +4 -0
  42. package/esm/protocols/asset/update.mjs +111 -0
  43. package/esm/protocols/factory/create.d.mts +29 -0
  44. package/esm/protocols/factory/create.mjs +155 -0
  45. package/esm/protocols/governance/claim-stake.d.mts +27 -0
  46. package/esm/protocols/governance/claim-stake.mjs +220 -0
  47. package/esm/protocols/governance/return-stake.d.mts +27 -0
  48. package/esm/protocols/governance/return-stake.mjs +211 -0
  49. package/esm/protocols/governance/revoke-stake.d.mts +27 -0
  50. package/esm/protocols/governance/revoke-stake.mjs +178 -0
  51. package/esm/protocols/governance/slash-stake.d.mts +17 -0
  52. package/esm/protocols/governance/slash-stake.mjs +213 -0
  53. package/esm/protocols/governance/stake.d.mts +15 -0
  54. package/esm/protocols/governance/stake.mjs +270 -0
  55. package/esm/protocols/rollup/claim-reward.d.mts +11 -0
  56. package/esm/protocols/rollup/claim-reward.mjs +322 -0
  57. package/esm/protocols/rollup/close.d.mts +4 -0
  58. package/esm/protocols/rollup/close.mjs +105 -0
  59. package/esm/protocols/rollup/create-block.d.mts +11 -0
  60. package/esm/protocols/rollup/create-block.mjs +303 -0
  61. package/esm/protocols/rollup/create.d.mts +4 -0
  62. package/esm/protocols/rollup/create.mjs +164 -0
  63. package/esm/protocols/rollup/join.d.mts +4 -0
  64. package/esm/protocols/rollup/join.mjs +152 -0
  65. package/esm/protocols/rollup/leave.d.mts +4 -0
  66. package/esm/protocols/rollup/leave.mjs +137 -0
  67. package/esm/protocols/rollup/migrate.d.mts +4 -0
  68. package/esm/protocols/rollup/migrate.mjs +85 -0
  69. package/esm/protocols/rollup/pause.d.mts +4 -0
  70. package/esm/protocols/rollup/pause.mjs +76 -0
  71. package/esm/protocols/rollup/pipes/ensure-validator.d.mts +6 -0
  72. package/esm/protocols/rollup/pipes/ensure-validator.mjs +12 -0
  73. package/esm/protocols/rollup/pipes/verify-evidence.d.mts +15 -0
  74. package/esm/protocols/rollup/pipes/verify-evidence.mjs +29 -0
  75. package/esm/protocols/rollup/pipes/verify-signers.d.mts +15 -0
  76. package/esm/protocols/rollup/pipes/verify-signers.mjs +36 -0
  77. package/esm/protocols/rollup/pipes/verify-status.d.mts +13 -0
  78. package/esm/protocols/rollup/pipes/verify-status.mjs +26 -0
  79. package/esm/protocols/rollup/resume.d.mts +4 -0
  80. package/esm/protocols/rollup/resume.mjs +79 -0
  81. package/esm/protocols/rollup/update.d.mts +4 -0
  82. package/esm/protocols/rollup/update.mjs +111 -0
  83. package/esm/protocols/token/create.d.mts +4 -0
  84. package/esm/protocols/token/create.mjs +150 -0
  85. package/esm/protocols/token/deposit-v2.d.mts +11 -0
  86. package/esm/protocols/token/deposit-v2.mjs +216 -0
  87. package/esm/protocols/token/withdraw-v2.d.mts +9 -0
  88. package/esm/protocols/token/withdraw-v2.mjs +222 -0
  89. package/esm/protocols/token-factory/burn.d.mts +15 -0
  90. package/esm/protocols/token-factory/burn.mjs +233 -0
  91. package/esm/protocols/token-factory/create.d.mts +4 -0
  92. package/esm/protocols/token-factory/create.mjs +254 -0
  93. package/esm/protocols/token-factory/mint.d.mts +15 -0
  94. package/esm/protocols/token-factory/mint.mjs +234 -0
  95. package/esm/protocols/token-factory/pipes/calc-reserve.d.mts +21 -0
  96. package/esm/protocols/token-factory/pipes/calc-reserve.mjs +34 -0
  97. package/esm/protocols/token-factory/pipes/verify-icon.d.mts +14 -0
  98. package/esm/protocols/token-factory/pipes/verify-icon.mjs +18 -0
  99. package/esm/protocols/token-factory/pipes/verify-ownership.d.mts +12 -0
  100. package/esm/protocols/token-factory/pipes/verify-ownership.mjs +63 -0
  101. package/esm/protocols/token-factory/pipes/verify-url.d.mts +12 -0
  102. package/esm/protocols/token-factory/pipes/verify-url.mjs +26 -0
  103. package/esm/protocols/token-factory/update.d.mts +10 -0
  104. package/esm/protocols/token-factory/update.mjs +152 -0
  105. package/esm/protocols/trade/exchange-v2.d.mts +9 -0
  106. package/esm/protocols/trade/exchange-v2.mjs +239 -0
  107. package/esm/protocols/trade/transfer-v2.d.mts +9 -0
  108. package/esm/protocols/trade/transfer-v2.mjs +226 -0
  109. package/esm/protocols/trade/transfer-v3.d.mts +17 -0
  110. package/esm/protocols/trade/transfer-v3.mjs +270 -0
  111. package/esm/util.d.mts +141 -0
  112. package/esm/util.mjs +278 -0
  113. package/lib/_virtual/rolldown_runtime.cjs +29 -0
  114. package/lib/execute.cjs +231 -0
  115. package/lib/execute.d.cts +53 -0
  116. package/lib/index.cjs +105 -0
  117. package/lib/index.d.cts +95 -0
  118. package/lib/pipes/ensure-cost.cjs +141 -0
  119. package/lib/pipes/ensure-cost.d.cts +18 -0
  120. package/lib/pipes/ensure-gas.cjs +41 -0
  121. package/lib/pipes/ensure-gas.d.cts +14 -0
  122. package/lib/protocols/account/delegate.cjs +201 -0
  123. package/lib/protocols/account/delegate.d.cts +4 -0
  124. package/lib/protocols/account/migrate.cjs +135 -0
  125. package/lib/protocols/account/migrate.d.cts +4 -0
  126. package/lib/protocols/account/revoke-delegate.cjs +107 -0
  127. package/lib/protocols/account/revoke-delegate.d.cts +4 -0
  128. package/lib/protocols/asset/acquire-v2.cjs +216 -0
  129. package/lib/protocols/asset/acquire-v2.d.cts +9 -0
  130. package/lib/protocols/asset/acquire-v3.cjs +269 -0
  131. package/lib/protocols/asset/acquire-v3.d.cts +17 -0
  132. package/lib/protocols/asset/calls/transfer-token.cjs +40 -0
  133. package/lib/protocols/asset/calls/transfer-token.d.cts +4 -0
  134. package/lib/protocols/asset/calls/transfer.cjs +35 -0
  135. package/lib/protocols/asset/calls/transfer.d.cts +4 -0
  136. package/lib/protocols/asset/consume.cjs +95 -0
  137. package/lib/protocols/asset/consume.d.cts +4 -0
  138. package/lib/protocols/asset/create.cjs +140 -0
  139. package/lib/protocols/asset/create.d.cts +4 -0
  140. package/lib/protocols/asset/mint.cjs +159 -0
  141. package/lib/protocols/asset/mint.d.cts +4 -0
  142. package/lib/protocols/asset/pipes/exec-mint-hook.cjs +57 -0
  143. package/lib/protocols/asset/pipes/exec-mint-hook.d.cts +24 -0
  144. package/lib/protocols/asset/pipes/extract-factory-tokens.cjs +25 -0
  145. package/lib/protocols/asset/pipes/extract-factory-tokens.d.cts +21 -0
  146. package/lib/protocols/asset/pipes/verify-itx-address.cjs +59 -0
  147. package/lib/protocols/asset/pipes/verify-itx-address.d.cts +32 -0
  148. package/lib/protocols/asset/pipes/verify-itx-assets.cjs +29 -0
  149. package/lib/protocols/asset/pipes/verify-itx-assets.d.cts +18 -0
  150. package/lib/protocols/asset/pipes/verify-itx-variables.cjs +22 -0
  151. package/lib/protocols/asset/pipes/verify-itx-variables.d.cts +17 -0
  152. package/lib/protocols/asset/pipes/verify-mint-limit.cjs +16 -0
  153. package/lib/protocols/asset/pipes/verify-mint-limit.d.cts +15 -0
  154. package/lib/protocols/asset/update.cjs +114 -0
  155. package/lib/protocols/asset/update.d.cts +4 -0
  156. package/lib/protocols/factory/create.cjs +161 -0
  157. package/lib/protocols/factory/create.d.cts +29 -0
  158. package/lib/protocols/governance/claim-stake.cjs +223 -0
  159. package/lib/protocols/governance/claim-stake.d.cts +27 -0
  160. package/lib/protocols/governance/return-stake.cjs +215 -0
  161. package/lib/protocols/governance/return-stake.d.cts +27 -0
  162. package/lib/protocols/governance/revoke-stake.cjs +182 -0
  163. package/lib/protocols/governance/revoke-stake.d.cts +27 -0
  164. package/lib/protocols/governance/slash-stake.cjs +217 -0
  165. package/lib/protocols/governance/slash-stake.d.cts +17 -0
  166. package/lib/protocols/governance/stake.cjs +275 -0
  167. package/lib/protocols/governance/stake.d.cts +15 -0
  168. package/lib/protocols/rollup/claim-reward.cjs +328 -0
  169. package/lib/protocols/rollup/claim-reward.d.cts +11 -0
  170. package/lib/protocols/rollup/close.cjs +107 -0
  171. package/lib/protocols/rollup/close.d.cts +4 -0
  172. package/lib/protocols/rollup/create-block.cjs +309 -0
  173. package/lib/protocols/rollup/create-block.d.cts +11 -0
  174. package/lib/protocols/rollup/create.cjs +169 -0
  175. package/lib/protocols/rollup/create.d.cts +4 -0
  176. package/lib/protocols/rollup/join.cjs +157 -0
  177. package/lib/protocols/rollup/join.d.cts +4 -0
  178. package/lib/protocols/rollup/leave.cjs +141 -0
  179. package/lib/protocols/rollup/leave.d.cts +4 -0
  180. package/lib/protocols/rollup/migrate.cjs +87 -0
  181. package/lib/protocols/rollup/migrate.d.cts +4 -0
  182. package/lib/protocols/rollup/pause.cjs +78 -0
  183. package/lib/protocols/rollup/pause.d.cts +4 -0
  184. package/lib/protocols/rollup/pipes/ensure-validator.cjs +14 -0
  185. package/lib/protocols/rollup/pipes/ensure-validator.d.cts +6 -0
  186. package/lib/protocols/rollup/pipes/verify-evidence.cjs +32 -0
  187. package/lib/protocols/rollup/pipes/verify-evidence.d.cts +15 -0
  188. package/lib/protocols/rollup/pipes/verify-signers.cjs +39 -0
  189. package/lib/protocols/rollup/pipes/verify-signers.d.cts +15 -0
  190. package/lib/protocols/rollup/pipes/verify-status.cjs +28 -0
  191. package/lib/protocols/rollup/pipes/verify-status.d.cts +13 -0
  192. package/lib/protocols/rollup/resume.cjs +81 -0
  193. package/lib/protocols/rollup/resume.d.cts +4 -0
  194. package/lib/protocols/rollup/update.cjs +114 -0
  195. package/lib/protocols/rollup/update.d.cts +4 -0
  196. package/lib/protocols/token/create.cjs +156 -0
  197. package/lib/protocols/token/create.d.cts +4 -0
  198. package/lib/protocols/token/deposit-v2.cjs +219 -0
  199. package/lib/protocols/token/deposit-v2.d.cts +11 -0
  200. package/lib/protocols/token/withdraw-v2.cjs +225 -0
  201. package/lib/protocols/token/withdraw-v2.d.cts +9 -0
  202. package/lib/protocols/token-factory/burn.cjs +236 -0
  203. package/lib/protocols/token-factory/burn.d.cts +15 -0
  204. package/lib/protocols/token-factory/create.cjs +260 -0
  205. package/lib/protocols/token-factory/create.d.cts +4 -0
  206. package/lib/protocols/token-factory/mint.cjs +237 -0
  207. package/lib/protocols/token-factory/mint.d.cts +15 -0
  208. package/lib/protocols/token-factory/pipes/calc-reserve.cjs +38 -0
  209. package/lib/protocols/token-factory/pipes/calc-reserve.d.cts +21 -0
  210. package/lib/protocols/token-factory/pipes/verify-icon.cjs +22 -0
  211. package/lib/protocols/token-factory/pipes/verify-icon.d.cts +14 -0
  212. package/lib/protocols/token-factory/pipes/verify-ownership.cjs +66 -0
  213. package/lib/protocols/token-factory/pipes/verify-ownership.d.cts +12 -0
  214. package/lib/protocols/token-factory/pipes/verify-url.cjs +29 -0
  215. package/lib/protocols/token-factory/pipes/verify-url.d.cts +12 -0
  216. package/lib/protocols/token-factory/update.cjs +155 -0
  217. package/lib/protocols/token-factory/update.d.cts +10 -0
  218. package/lib/protocols/trade/exchange-v2.cjs +243 -0
  219. package/lib/protocols/trade/exchange-v2.d.cts +9 -0
  220. package/lib/protocols/trade/transfer-v2.cjs +229 -0
  221. package/lib/protocols/trade/transfer-v2.d.cts +9 -0
  222. package/lib/protocols/trade/transfer-v3.cjs +274 -0
  223. package/lib/protocols/trade/transfer-v3.d.cts +17 -0
  224. package/lib/util.cjs +296 -0
  225. package/lib/util.d.cts +141 -0
  226. package/package.json +49 -22
  227. package/tools/fixtures.ts +564 -0
  228. package/lib/execute.js +0 -254
  229. package/lib/index.js +0 -117
  230. package/lib/pipes/ensure-cost.js +0 -193
  231. package/lib/pipes/ensure-gas.js +0 -48
  232. package/lib/protocols/account/delegate.js +0 -223
  233. package/lib/protocols/account/migrate.js +0 -153
  234. package/lib/protocols/account/revoke-delegate.js +0 -110
  235. package/lib/protocols/asset/acquire-v2.js +0 -262
  236. package/lib/protocols/asset/acquire-v3.js +0 -330
  237. package/lib/protocols/asset/calls/README.md +0 -5
  238. package/lib/protocols/asset/calls/transfer-token.js +0 -36
  239. package/lib/protocols/asset/calls/transfer.js +0 -28
  240. package/lib/protocols/asset/consume.js +0 -105
  241. package/lib/protocols/asset/create.js +0 -151
  242. package/lib/protocols/asset/mint.js +0 -199
  243. package/lib/protocols/asset/pipes/exec-mint-hook.js +0 -62
  244. package/lib/protocols/asset/pipes/extract-factory-tokens.js +0 -18
  245. package/lib/protocols/asset/pipes/verify-itx-address.js +0 -54
  246. package/lib/protocols/asset/pipes/verify-itx-assets.js +0 -51
  247. package/lib/protocols/asset/pipes/verify-itx-variables.js +0 -26
  248. package/lib/protocols/asset/pipes/verify-mint-limit.js +0 -13
  249. package/lib/protocols/asset/update.js +0 -131
  250. package/lib/protocols/factory/create.js +0 -191
  251. package/lib/protocols/governance/claim-stake.js +0 -266
  252. package/lib/protocols/governance/return-stake.js +0 -248
  253. package/lib/protocols/governance/revoke-stake.js +0 -172
  254. package/lib/protocols/governance/slash-stake.js +0 -271
  255. package/lib/protocols/governance/stake.js +0 -303
  256. package/lib/protocols/rollup/claim-reward.js +0 -342
  257. package/lib/protocols/rollup/close.js +0 -104
  258. package/lib/protocols/rollup/create-block.js +0 -413
  259. package/lib/protocols/rollup/create.js +0 -197
  260. package/lib/protocols/rollup/join.js +0 -182
  261. package/lib/protocols/rollup/leave.js +0 -145
  262. package/lib/protocols/rollup/migrate.js +0 -85
  263. package/lib/protocols/rollup/pause.js +0 -75
  264. package/lib/protocols/rollup/pipes/ensure-validator.js +0 -12
  265. package/lib/protocols/rollup/pipes/verify-evidence.js +0 -37
  266. package/lib/protocols/rollup/pipes/verify-signers.js +0 -87
  267. package/lib/protocols/rollup/pipes/verify-status.js +0 -30
  268. package/lib/protocols/rollup/resume.js +0 -75
  269. package/lib/protocols/rollup/update.js +0 -122
  270. package/lib/protocols/token/create.js +0 -199
  271. package/lib/protocols/token/deposit-v2.js +0 -290
  272. package/lib/protocols/token/withdraw-v2.js +0 -305
  273. package/lib/protocols/token-factory/burn.js +0 -371
  274. package/lib/protocols/token-factory/create.js +0 -342
  275. package/lib/protocols/token-factory/mint.js +0 -385
  276. package/lib/protocols/token-factory/pipes/calc-reserve.js +0 -37
  277. package/lib/protocols/token-factory/pipes/verify-icon.js +0 -27
  278. package/lib/protocols/token-factory/pipes/verify-ownership.js +0 -93
  279. package/lib/protocols/token-factory/pipes/verify-url.js +0 -32
  280. package/lib/protocols/token-factory/update.js +0 -208
  281. package/lib/protocols/trade/exchange-v2.js +0 -239
  282. package/lib/protocols/trade/transfer-v2.js +0 -233
  283. package/lib/protocols/trade/transfer-v3.js +0 -333
  284. package/lib/util.js +0 -442
@@ -0,0 +1,215 @@
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
3
+ const require_util = require('../../util.cjs');
4
+ const require_pipes_ensure_cost = require('../../pipes/ensure-cost.cjs');
5
+ const require_pipes_ensure_gas = require('../../pipes/ensure-gas.cjs');
6
+ let _ocap_tx_pipeline = require("@ocap/tx-pipeline");
7
+ let _ocap_util_lib_error = require("@ocap/util/lib/error");
8
+ let _ocap_state = require("@ocap/state");
9
+ let _ocap_util = require("@ocap/util");
10
+ let debug = require("debug");
11
+ debug = require_rolldown_runtime.__toESM(debug);
12
+ let _ocap_util_lib_get_list_field = require("@ocap/util/lib/get-list-field");
13
+ let _arcblock_validator = require("@arcblock/validator");
14
+ let _ocap_util_lib_get_related_addr = require("@ocap/util/lib/get-related-addr");
15
+ let lodash_isEmpty = require("lodash/isEmpty");
16
+ lodash_isEmpty = require_rolldown_runtime.__toESM(lodash_isEmpty);
17
+
18
+ //#region src/protocols/governance/return-stake.ts
19
+ const debug$1 = (0, debug.default)("@ocap/tx-protocols:return-stake");
20
+ const runner = new _ocap_tx_pipeline.Runner("return_stake");
21
+ runner.use(_ocap_tx_pipeline.pipes.VerifyMultiSig(0));
22
+ const schema = _arcblock_validator.Joi.object({
23
+ address: _arcblock_validator.Joi.DID().prefix().role("ROLE_STAKE").required(),
24
+ message: _arcblock_validator.Joi.string().trim().min(1).max(256).required(),
25
+ outputsList: _arcblock_validator.schemas.multiInput.min(1).required(),
26
+ data: _arcblock_validator.Joi.any().optional().allow(null)
27
+ }).options({
28
+ stripUnknown: true,
29
+ noDefaults: false
30
+ });
31
+ runner.use(({ itx }, next) => {
32
+ const { error } = schema.validate(itx);
33
+ return next(error ? new _ocap_util_lib_error.CustomError("INVALID_TX", `Invalid itx: ${error.message}`) : void 0);
34
+ });
35
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTxInput({
36
+ fieldKey: "itx.outputs",
37
+ inputsKey: "outputs",
38
+ sendersKey: "receivers",
39
+ tokensKey: "tokens",
40
+ assetsKey: "assets"
41
+ }));
42
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
43
+ error: "INSUFFICIENT_DATA",
44
+ message: "Can not return stake without any output",
45
+ fn: (ctx) => {
46
+ const context = ctx;
47
+ return !((0, lodash_isEmpty.default)(context.tokens) && (0, lodash_isEmpty.default)(context.assets));
48
+ }
49
+ }]));
50
+ runner.use(_ocap_tx_pipeline.pipes.VerifyListSize({ listKey: [
51
+ "outputs",
52
+ "receivers",
53
+ "tokens",
54
+ "assets"
55
+ ] }));
56
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
57
+ from: "tx.from",
58
+ to: "senderState",
59
+ status: "INVALID_SENDER_STATE",
60
+ table: "account"
61
+ }));
62
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
63
+ from: "receivers",
64
+ to: "receiverStates",
65
+ status: "INVALID_RECEIVER_STATE",
66
+ table: "account"
67
+ }));
68
+ runner.use(_ocap_tx_pipeline.pipes.VerifyBlocked({ stateKeys: ["receiverStates"] }));
69
+ runner.use(_ocap_tx_pipeline.pipes.VerifyAccountMigration({
70
+ stateKey: "senderState",
71
+ addressKey: "tx.from"
72
+ }));
73
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
74
+ from: "itx.address",
75
+ to: "stakeState",
76
+ status: "INVALID_STAKE_STATE",
77
+ table: "stake"
78
+ }));
79
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([
80
+ {
81
+ error: "INVALID_TX",
82
+ message: "Can only return from none-self staking",
83
+ fn: (ctx) => {
84
+ const context = ctx;
85
+ return context.stakeState.sender !== context.stakeState.receiver;
86
+ }
87
+ },
88
+ {
89
+ error: "INVALID_TX",
90
+ message: "Can only return stake from receiver",
91
+ fn: (ctx) => {
92
+ const context = ctx;
93
+ return (0, _ocap_util_lib_get_related_addr.getRelatedAddresses)(context.senderState).includes(context.stakeState.receiver);
94
+ }
95
+ },
96
+ {
97
+ error: "INVALID_TX",
98
+ message: "Can only return stake to sender",
99
+ fn: (ctx) => {
100
+ const context = ctx;
101
+ return (context.receiverStates || []).every((x) => (0, _ocap_util_lib_get_related_addr.getRelatedAddresses)(x).includes(context.stakeState.sender));
102
+ }
103
+ }
104
+ ]));
105
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
106
+ from: "tokens",
107
+ to: "tokenStates",
108
+ status: "INVALID_TOKEN",
109
+ table: "token"
110
+ }));
111
+ runner.use((context, next) => {
112
+ const { stakeState } = context;
113
+ const outputs = context.outputs || [];
114
+ const tokens = {};
115
+ outputs.forEach((output) => {
116
+ (0, _ocap_util_lib_get_list_field.getListField)(output, "tokens").forEach(({ address, value }) => {
117
+ if (typeof tokens[address] === "undefined") tokens[address] = new _ocap_util.BN(0);
118
+ tokens[address] = tokens[address].add(new _ocap_util.BN(value));
119
+ });
120
+ });
121
+ context.lockedState = {
122
+ address: stakeState.address,
123
+ tokens: { ...stakeState.tokens || {} },
124
+ assets: [...stakeState.assets || []]
125
+ };
126
+ context.tokenCondition = {
127
+ owner: stakeState.address,
128
+ tokens: Object.keys(tokens).map((address) => ({
129
+ address,
130
+ value: tokens[address]
131
+ }))
132
+ };
133
+ next();
134
+ });
135
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTokenBalance({
136
+ ownerKey: "lockedState",
137
+ conditionKey: "tokenCondition"
138
+ }));
139
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
140
+ error: "INVALID_TX",
141
+ message: "Can not return assets that are not locked in the stake",
142
+ fn: (ctx) => {
143
+ const context = ctx;
144
+ return (context.assets || []).every((x) => (context.lockedState?.assets || []).includes(x));
145
+ }
146
+ }]));
147
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
148
+ from: "assets",
149
+ to: "assetStates",
150
+ status: "INVALID_ASSET_STATE",
151
+ table: "asset"
152
+ }));
153
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTransferrable({ assets: "assetStates" }));
154
+ runner.use(_ocap_tx_pipeline.pipes.VerifyUpdater({
155
+ assetKey: "assetStates",
156
+ ownerKey: "stakeState"
157
+ }));
158
+ runner.use(require_pipes_ensure_gas.default((context) => {
159
+ const result = {
160
+ create: 0,
161
+ update: 2,
162
+ payment: 0
163
+ };
164
+ if (context.receiverStates) result.update += context.receiverStates.length;
165
+ if (context.assetStates) result.update += context.assetStates.length;
166
+ return result;
167
+ }));
168
+ runner.use(require_pipes_ensure_cost.default({ attachSenderChanges: true }));
169
+ runner.use(_ocap_tx_pipeline.pipes.TakeStateSnapshot());
170
+ runner.use(async (context, next) => {
171
+ const { tx, itx, outputs = [], statedb, senderState, receiverStates = [], assetStates = [], stakeState, updateVaults, senderChange } = context;
172
+ const receiverUpdates = {};
173
+ const assetUpdates = {};
174
+ const stakeUpdates = {
175
+ tokens: stakeState.tokens || {},
176
+ assets: stakeState.assets || []
177
+ };
178
+ outputs.forEach((x) => {
179
+ const { owner } = x;
180
+ const tokensList = (0, _ocap_util_lib_get_list_field.getListField)(x, "tokens");
181
+ const assetsList = (0, _ocap_util_lib_get_list_field.getListField)(x, "assets");
182
+ stakeUpdates.assets = stakeUpdates.assets.filter((a) => assetsList.includes(a) === false);
183
+ stakeUpdates.tokens = require_util.applyTokenUpdates(tokensList, { tokens: stakeUpdates.tokens }, "sub").tokens;
184
+ const ownerState = receiverStates.find((s) => (0, _ocap_util_lib_get_related_addr.getRelatedAddresses)(s).includes(owner));
185
+ receiverUpdates[ownerState.address] = require_util.applyTokenUpdates(tokensList, ownerState, "add");
186
+ if (senderChange && ownerState.address === senderChange.address) receiverUpdates[ownerState.address] = require_util.applyTokenChange(receiverUpdates[ownerState.address], senderChange);
187
+ assetsList.forEach((a) => {
188
+ assetUpdates[a] = { owner: ownerState.address };
189
+ });
190
+ });
191
+ const [newSenderState, newReceiverStates, newStakeState, newAssetStates] = await Promise.all([
192
+ statedb.account.update(senderState.address, _ocap_state.account.update(senderState, Object.assign({ nonce: tx.nonce }, senderChange ? require_util.applyTokenChange(senderState, senderChange) : {}), context), context),
193
+ Promise.all(receiverStates.map((x) => statedb.account.update(x.address, _ocap_state.account.update(x, receiverUpdates[x.address], context), context))),
194
+ statedb.stake.update(stakeState.address, _ocap_state.stake.update(stakeState, stakeUpdates, context), context),
195
+ Promise.all(assetStates.map((x) => statedb.asset.update(x.address, _ocap_state.asset.update(x, assetUpdates[x.address], context), context)))
196
+ ]);
197
+ if (updateVaults) await updateVaults();
198
+ context.senderState = newSenderState;
199
+ context.receiverStates = newReceiverStates;
200
+ context.stakeState = newStakeState;
201
+ context.assetStates = newAssetStates;
202
+ debug$1("return-stake", {
203
+ address: itx.address,
204
+ stakeUpdates,
205
+ assetUpdates,
206
+ senderChange,
207
+ ...receiverUpdates
208
+ });
209
+ next();
210
+ }, { persistError: true });
211
+ runner.use(_ocap_tx_pipeline.pipes.VerifyStateDiff());
212
+ var return_stake_default = runner;
213
+
214
+ //#endregion
215
+ exports.default = return_stake_default;
@@ -0,0 +1,27 @@
1
+ import { BN } from "@ocap/util";
2
+
3
+ //#region src/protocols/governance/return-stake.d.ts
4
+ /** Token input type */
5
+ interface TokenInput {
6
+ address: string;
7
+ value: string;
8
+ }
9
+ /** Multi-input type */
10
+ interface MultiInput {
11
+ owner: string;
12
+ tokensList?: TokenInput[];
13
+ tokens?: TokenInput[];
14
+ assetsList?: string[];
15
+ assets?: string[];
16
+ }
17
+ /** Token condition type */
18
+ interface TokenCondition {
19
+ owner: string;
20
+ tokens: Array<{
21
+ address: string;
22
+ value: BN;
23
+ }>;
24
+ }
25
+ declare const runner: any;
26
+ //#endregion
27
+ export { MultiInput, TokenCondition, TokenInput, runner as default };
@@ -0,0 +1,182 @@
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
3
+ const require_util = require('../../util.cjs');
4
+ const require_pipes_ensure_cost = require('../../pipes/ensure-cost.cjs');
5
+ const require_pipes_ensure_gas = require('../../pipes/ensure-gas.cjs');
6
+ let _ocap_tx_pipeline = require("@ocap/tx-pipeline");
7
+ let _ocap_util_lib_error = require("@ocap/util/lib/error");
8
+ let _ocap_state = require("@ocap/state");
9
+ let _ocap_util = require("@ocap/util");
10
+ let debug = require("debug");
11
+ debug = require_rolldown_runtime.__toESM(debug);
12
+ let _ocap_util_lib_get_list_field = require("@ocap/util/lib/get-list-field");
13
+ let _arcblock_validator = require("@arcblock/validator");
14
+ let _ocap_util_lib_get_related_addr = require("@ocap/util/lib/get-related-addr");
15
+ let lodash_isEmpty = require("lodash/isEmpty");
16
+ lodash_isEmpty = require_rolldown_runtime.__toESM(lodash_isEmpty);
17
+
18
+ //#region src/protocols/governance/revoke-stake.ts
19
+ const debug$1 = (0, debug.default)("@ocap/tx-protocols:revoke-stake");
20
+ const runner = new _ocap_tx_pipeline.Runner("revoke_stake");
21
+ runner.use(_ocap_tx_pipeline.pipes.VerifyMultiSig(0));
22
+ const schema = _arcblock_validator.Joi.object({
23
+ address: _arcblock_validator.Joi.DID().prefix().role("ROLE_STAKE").required(),
24
+ outputsList: _arcblock_validator.schemas.multiInput.min(1).required(),
25
+ data: _arcblock_validator.Joi.any().optional().allow(null)
26
+ }).options({
27
+ stripUnknown: true,
28
+ noDefaults: false
29
+ });
30
+ runner.use(({ itx }, next) => {
31
+ const { error } = schema.validate(itx);
32
+ return next(error ? new _ocap_util_lib_error.CustomError("INVALID_TX", `Invalid itx: ${error.message}`) : void 0);
33
+ });
34
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTxInput({
35
+ fieldKey: "itx.outputs",
36
+ inputsKey: "outputs",
37
+ sendersKey: "receivers",
38
+ tokensKey: "tokens",
39
+ assetsKey: "assets"
40
+ }));
41
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
42
+ error: "INSUFFICIENT_DATA",
43
+ message: "Can not revoke stake without any output",
44
+ fn: (ctx) => {
45
+ const context = ctx;
46
+ return !((0, lodash_isEmpty.default)(context.tokens) && (0, lodash_isEmpty.default)(context.assets));
47
+ }
48
+ }]));
49
+ runner.use(_ocap_tx_pipeline.pipes.VerifyListSize({ listKey: [
50
+ "outputs",
51
+ "receivers",
52
+ "tokens",
53
+ "assets"
54
+ ] }));
55
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
56
+ from: "tx.from",
57
+ to: "senderState",
58
+ status: "INVALID_SENDER_STATE",
59
+ table: "account"
60
+ }));
61
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
62
+ from: "receivers",
63
+ to: "receiverStates",
64
+ status: "INVALID_RECEIVER_STATE",
65
+ table: "account"
66
+ }));
67
+ runner.use(_ocap_tx_pipeline.pipes.VerifyBlocked({ stateKeys: ["receiverStates"] }));
68
+ runner.use(_ocap_tx_pipeline.pipes.VerifyAccountMigration({
69
+ stateKey: "senderState",
70
+ addressKey: "tx.from"
71
+ }));
72
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
73
+ from: "itx.address",
74
+ to: "stakeState",
75
+ status: "INVALID_STAKE_STATE",
76
+ table: "stake"
77
+ }));
78
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([
79
+ {
80
+ error: "SENDER_NOT_MATCH",
81
+ message: "You are not allowed to revoke stake from this address",
82
+ fn: (ctx) => {
83
+ const context = ctx;
84
+ return (0, _ocap_util_lib_get_related_addr.getRelatedAddresses)(context.senderState).includes(context.stakeState.sender);
85
+ }
86
+ },
87
+ {
88
+ error: "STAKE_NOT_REVOCABLE",
89
+ message: "This stake address is not revocable",
90
+ fn: (ctx) => {
91
+ return ctx.stakeState.revocable;
92
+ }
93
+ },
94
+ {
95
+ error: "INVALID_TX",
96
+ message: "Can not revoke assets that are not locked in the stake",
97
+ fn: (ctx) => {
98
+ const context = ctx;
99
+ return (context.assets || []).every((x) => (context.stakeState.assets || []).includes(x));
100
+ }
101
+ }
102
+ ]));
103
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
104
+ from: "tokens",
105
+ to: "tokenStates",
106
+ status: "INVALID_TOKEN",
107
+ table: "token"
108
+ }));
109
+ runner.use((context, next) => {
110
+ const { outputs = [], stakeState } = context;
111
+ const tokens = {};
112
+ outputs.forEach((output) => {
113
+ (0, _ocap_util_lib_get_list_field.getListField)(output, "tokens").forEach(({ address, value }) => {
114
+ if (typeof tokens[address] === "undefined") tokens[address] = new _ocap_util.BN(0);
115
+ tokens[address] = tokens[address].add(new _ocap_util.BN(value));
116
+ });
117
+ });
118
+ context.tokenCondition = {
119
+ owner: stakeState.address,
120
+ tokens: Object.keys(tokens).map((address) => ({
121
+ address,
122
+ value: tokens[address]
123
+ }))
124
+ };
125
+ next();
126
+ });
127
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTokenBalance({
128
+ ownerKey: "stakeState",
129
+ conditionKey: "tokenCondition"
130
+ }));
131
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
132
+ from: "assets",
133
+ to: "assetStates",
134
+ status: "OK",
135
+ table: "asset"
136
+ }));
137
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTransferrable({ assets: "assetStates" }));
138
+ runner.use(_ocap_tx_pipeline.pipes.VerifyUpdater({
139
+ assetKey: "assetStates",
140
+ ownerKey: "stakeState"
141
+ }));
142
+ runner.use(require_pipes_ensure_gas.default(() => ({
143
+ create: 0,
144
+ update: 2,
145
+ payment: 0
146
+ })));
147
+ runner.use(require_pipes_ensure_cost.default({ attachSenderChanges: true }));
148
+ runner.use(_ocap_tx_pipeline.pipes.TakeStateSnapshot());
149
+ runner.use(async (context, next) => {
150
+ const { tx, itx, outputs = [], statedb, senderState, senderUpdates, stakeState, updateVaults } = context;
151
+ const stakeUpdates = {
152
+ tokens: stakeState.tokens || {},
153
+ assets: stakeState.assets || [],
154
+ revokedTokens: stakeState.revokedTokens || {},
155
+ revokedAssets: stakeState.revokedAssets || []
156
+ };
157
+ outputs.forEach((x) => {
158
+ const tokensList = (0, _ocap_util_lib_get_list_field.getListField)(x, "tokens");
159
+ const assetsList = (0, _ocap_util_lib_get_list_field.getListField)(x, "assets");
160
+ stakeUpdates.tokens = require_util.applyTokenUpdates(tokensList, { tokens: stakeUpdates.tokens }, "sub").tokens;
161
+ stakeUpdates.assets = stakeUpdates.assets.filter((a) => assetsList.includes(a) === false);
162
+ stakeUpdates.revokedTokens = require_util.applyTokenUpdates(tokensList, { tokens: stakeUpdates.revokedTokens }, "add").tokens;
163
+ stakeUpdates.revokedAssets = stakeUpdates.revokedAssets.concat(...assetsList);
164
+ });
165
+ const [newSenderState, newStakeState] = await Promise.all([statedb.account.update(senderState.address, _ocap_state.account.update(senderState, {
166
+ nonce: tx.nonce,
167
+ ...senderUpdates
168
+ }, context), context), statedb.stake.update(stakeState.address, _ocap_state.stake.update(stakeState, stakeUpdates, context), context)]);
169
+ if (updateVaults) await updateVaults();
170
+ context.senderState = newSenderState;
171
+ context.stakeState = newStakeState;
172
+ debug$1("revoke-stake", {
173
+ address: itx.address,
174
+ stakeUpdates
175
+ });
176
+ next();
177
+ }, { persistError: true });
178
+ runner.use(_ocap_tx_pipeline.pipes.VerifyStateDiff());
179
+ var revoke_stake_default = runner;
180
+
181
+ //#endregion
182
+ exports.default = revoke_stake_default;
@@ -0,0 +1,27 @@
1
+ import { BN } from "@ocap/util";
2
+
3
+ //#region src/protocols/governance/revoke-stake.d.ts
4
+ /** Token input type */
5
+ interface TokenInput {
6
+ address: string;
7
+ value: string;
8
+ }
9
+ /** Multi-input type - uses List suffix in proto but runtime has both */
10
+ interface MultiOutput {
11
+ owner: string;
12
+ tokensList?: TokenInput[];
13
+ tokens?: TokenInput[];
14
+ assetsList?: string[];
15
+ assets?: string[];
16
+ }
17
+ /** Token condition type for VerifyTokenBalance */
18
+ interface TokenCondition {
19
+ owner: string;
20
+ tokens: Array<{
21
+ address: string;
22
+ value: BN;
23
+ }>;
24
+ }
25
+ declare const runner: any;
26
+ //#endregion
27
+ export { MultiOutput, TokenCondition, TokenInput, runner as default };
@@ -0,0 +1,217 @@
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
3
+ const require_util = require('../../util.cjs');
4
+ const require_pipes_ensure_cost = require('../../pipes/ensure-cost.cjs');
5
+ const require_pipes_ensure_gas = require('../../pipes/ensure-gas.cjs');
6
+ let _ocap_tx_pipeline = require("@ocap/tx-pipeline");
7
+ let _ocap_util_lib_error = require("@ocap/util/lib/error");
8
+ let _ocap_state = require("@ocap/state");
9
+ let _ocap_util = require("@ocap/util");
10
+ let debug = require("debug");
11
+ debug = require_rolldown_runtime.__toESM(debug);
12
+ let _ocap_util_lib_get_list_field = require("@ocap/util/lib/get-list-field");
13
+ let _arcblock_validator = require("@arcblock/validator");
14
+ let _ocap_util_lib_get_related_addr = require("@ocap/util/lib/get-related-addr");
15
+ let lodash_isEmpty = require("lodash/isEmpty");
16
+ lodash_isEmpty = require_rolldown_runtime.__toESM(lodash_isEmpty);
17
+
18
+ //#region src/protocols/governance/slash-stake.ts
19
+ const debug$1 = (0, debug.default)("@ocap/tx-protocols:slash-stake");
20
+ const runner = new _ocap_tx_pipeline.Runner("slash_stake");
21
+ runner.use(_ocap_tx_pipeline.pipes.VerifyMultiSig(0));
22
+ const schema = _arcblock_validator.Joi.object({
23
+ address: _arcblock_validator.Joi.DID().prefix().role("ROLE_STAKE").required(),
24
+ message: _arcblock_validator.Joi.string().trim().min(1).max(256).required(),
25
+ outputsList: _arcblock_validator.schemas.multiInput.min(1).required(),
26
+ data: _arcblock_validator.Joi.any().optional().allow(null)
27
+ }).options({
28
+ stripUnknown: true,
29
+ noDefaults: false
30
+ });
31
+ runner.use(({ itx }, next) => {
32
+ const { error } = schema.validate(itx);
33
+ return next(error ? new _ocap_util_lib_error.CustomError("INVALID_TX", `Invalid itx: ${error.message}`) : void 0);
34
+ });
35
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTxInput({
36
+ fieldKey: "itx.outputs",
37
+ inputsKey: "outputs",
38
+ sendersKey: "receivers",
39
+ tokensKey: "tokens",
40
+ assetsKey: "assets"
41
+ }));
42
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
43
+ error: "INSUFFICIENT_DATA",
44
+ message: "Can not slash stake without any output",
45
+ fn: (ctx) => {
46
+ const context = ctx;
47
+ return !((0, lodash_isEmpty.default)(context.tokens || []) && (0, lodash_isEmpty.default)(context.assets || []));
48
+ }
49
+ }]));
50
+ runner.use(_ocap_tx_pipeline.pipes.VerifyListSize({ listKey: [
51
+ "outputs",
52
+ "receivers",
53
+ "tokens",
54
+ "assets"
55
+ ] }));
56
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
57
+ from: "tx.from",
58
+ to: "senderState",
59
+ status: "INVALID_SENDER_STATE",
60
+ table: "account"
61
+ }));
62
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
63
+ from: "receivers",
64
+ to: "receiverStates",
65
+ status: "INVALID_RECEIVER_STATE",
66
+ table: "account"
67
+ }));
68
+ runner.use(_ocap_tx_pipeline.pipes.VerifyBlocked({ stateKeys: ["receiverStates"] }));
69
+ runner.use(_ocap_tx_pipeline.pipes.VerifyAccountMigration({
70
+ stateKey: "senderState",
71
+ addressKey: "tx.from"
72
+ }));
73
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
74
+ from: "itx.address",
75
+ to: "stakeState",
76
+ status: "INVALID_STAKE_STATE",
77
+ table: "stake"
78
+ }));
79
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
80
+ from: "stakeState.slashers",
81
+ to: "slasherStates",
82
+ status: "INVALID_SLASH_STATE",
83
+ table: "account"
84
+ }));
85
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
86
+ error: "INVALID_TX",
87
+ message: "You are not allowed to slash from this stake",
88
+ fn: (ctx) => {
89
+ const context = ctx;
90
+ const slasherStates = context.slasherStates || [];
91
+ return ((0, lodash_isEmpty.default)(slasherStates) ? [context.stakeState.receiver] : slasherStates.map((x) => x.address)).includes(context.senderState.address);
92
+ }
93
+ }, {
94
+ error: "INVALID_TX",
95
+ message: "Can only send slashed token/assets to vault or specified slasher",
96
+ fn: (ctx) => {
97
+ const context = ctx;
98
+ const slasherStates = context.slasherStates || [];
99
+ return (context.receivers || []).every((x) => x === context.config.vaults.slashedStake || slasherStates.some((s) => s.address === x));
100
+ }
101
+ }]));
102
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
103
+ from: "tokens",
104
+ to: "tokenStates",
105
+ status: "INVALID_TOKEN",
106
+ table: "token"
107
+ }));
108
+ runner.use((context, next) => {
109
+ const { outputs = [], stakeState } = context;
110
+ const tokens = {};
111
+ outputs.forEach((output) => {
112
+ (0, _ocap_util_lib_get_list_field.getListField)(output, "tokens").forEach(({ address, value }) => {
113
+ if (typeof tokens[address] === "undefined") tokens[address] = new _ocap_util.BN(0);
114
+ tokens[address] = tokens[address].add(new _ocap_util.BN(value));
115
+ });
116
+ });
117
+ const lockedState = {
118
+ address: stakeState.address,
119
+ tokens: { ...stakeState.tokens },
120
+ assets: [...stakeState.assets || [], ...stakeState.revokedAssets || []]
121
+ };
122
+ Object.keys(stakeState.revokedTokens || {}).forEach((address) => {
123
+ lockedState.tokens[address] = new _ocap_util.BN(stakeState.revokedTokens[address] || "0").add(new _ocap_util.BN(stakeState.tokens[address] || "0")).toString(10);
124
+ });
125
+ context.lockedState = lockedState;
126
+ context.tokenCondition = {
127
+ owner: stakeState.address,
128
+ tokens: Object.keys(tokens).map((address) => ({
129
+ address,
130
+ value: tokens[address]
131
+ }))
132
+ };
133
+ next();
134
+ });
135
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTokenBalance({
136
+ ownerKey: "lockedState",
137
+ conditionKey: "tokenCondition"
138
+ }));
139
+ runner.use(_ocap_tx_pipeline.pipes.VerifyInfo([{
140
+ error: "INVALID_TX",
141
+ message: "Can not slash assets that are not locked in the stake",
142
+ fn: (ctx) => {
143
+ const context = ctx;
144
+ return (context.assets || []).every((x) => (context.lockedState?.assets || []).includes(x));
145
+ }
146
+ }]));
147
+ runner.use(_ocap_tx_pipeline.pipes.ExtractState({
148
+ from: "assets",
149
+ to: "assetStates",
150
+ status: "INVALID_ASSET_STATE",
151
+ table: "asset"
152
+ }));
153
+ runner.use(_ocap_tx_pipeline.pipes.VerifyTransferrable({ assets: "assetStates" }));
154
+ runner.use(_ocap_tx_pipeline.pipes.VerifyUpdater({
155
+ assetKey: "assetStates",
156
+ ownerKey: "stakeState"
157
+ }));
158
+ runner.use(require_pipes_ensure_gas.default((context) => {
159
+ const result = {
160
+ create: 0,
161
+ update: 2,
162
+ payment: 0
163
+ };
164
+ if (context.receiverStates) result.update += context.receiverStates.length;
165
+ if (context.assetStates) result.update += context.assetStates.length;
166
+ return result;
167
+ }));
168
+ runner.use(require_pipes_ensure_cost.default({ attachSenderChanges: true }));
169
+ runner.use(_ocap_tx_pipeline.pipes.TakeStateSnapshot());
170
+ runner.use(async (context, next) => {
171
+ const { tx, itx, outputs = [], statedb, senderState, receiverStates = [], assetStates = [], stakeState, updateVaults, senderChange } = context;
172
+ const receiverUpdates = {};
173
+ const assetUpdates = {};
174
+ const stakeUpdates = {
175
+ tokens: stakeState.tokens || {},
176
+ assets: stakeState.assets || [],
177
+ revokedTokens: stakeState.revokedTokens || {},
178
+ revokedAssets: stakeState.revokedAssets || []
179
+ };
180
+ outputs.forEach((x) => {
181
+ const { owner } = x;
182
+ const tokensList = (0, _ocap_util_lib_get_list_field.getListField)(x, "tokens");
183
+ const assetsList = (0, _ocap_util_lib_get_list_field.getListField)(x, "assets");
184
+ stakeUpdates.assets = stakeUpdates.assets.filter((a) => assetsList.includes(a) === false);
185
+ stakeUpdates.revokedAssets = stakeUpdates.revokedAssets.filter((a) => assetsList.includes(a) === false);
186
+ const [newTokens, newRevoked] = require_util.applyTokenUpdates(tokensList, [{ tokens: stakeUpdates.tokens }, { tokens: stakeUpdates.revokedTokens }], "sub");
187
+ stakeUpdates.tokens = newTokens.tokens;
188
+ stakeUpdates.revokedTokens = newRevoked.tokens;
189
+ const ownerState = receiverStates.find((s) => (0, _ocap_util_lib_get_related_addr.getRelatedAddresses)(s).includes(owner));
190
+ receiverUpdates[ownerState.address] = require_util.applyTokenUpdates(tokensList, ownerState, "add");
191
+ if (senderChange && ownerState.address === senderChange.address) receiverUpdates[ownerState.address] = require_util.applyTokenChange(receiverUpdates[ownerState.address], senderChange);
192
+ assetsList.forEach((a) => {
193
+ assetUpdates[a] = { owner: ownerState.address };
194
+ });
195
+ });
196
+ const [newSenderState, newReceiverStates, newStakeState, newAssetStates] = await Promise.all([
197
+ statedb.account.update(senderState.address, _ocap_state.account.update(senderState, Object.assign({ nonce: tx.nonce }, receiverUpdates[senderState.address] || (senderChange ? require_util.applyTokenChange(senderState, senderChange) : {})), context), context),
198
+ Promise.all(receiverStates.filter((x) => x.address !== senderState.address).map((x) => statedb.account.update(x.address, _ocap_state.account.update(x, receiverUpdates[x.address], context), context))),
199
+ statedb.stake.update(stakeState.address, _ocap_state.stake.update(stakeState, stakeUpdates, context), context),
200
+ Promise.all(assetStates.map((x) => statedb.asset.update(x.address, _ocap_state.asset.update(x, assetUpdates[x.address], context), context)))
201
+ ]);
202
+ if (updateVaults) await updateVaults();
203
+ context.senderState = newSenderState;
204
+ context.receiverStates = newReceiverStates;
205
+ context.stakeState = newStakeState;
206
+ context.assetStates = newAssetStates;
207
+ debug$1("slash-stake", {
208
+ address: itx.address,
209
+ stakeUpdates
210
+ });
211
+ next();
212
+ }, { persistError: true });
213
+ runner.use(_ocap_tx_pipeline.pipes.VerifyStateDiff());
214
+ var slash_stake_default = runner;
215
+
216
+ //#endregion
217
+ exports.default = slash_stake_default;
@@ -0,0 +1,17 @@
1
+ //#region src/protocols/governance/slash-stake.d.ts
2
+ /** Token input type */
3
+ interface TokenInput {
4
+ address: string;
5
+ value: string;
6
+ }
7
+ /** Multi-output type */
8
+ interface MultiOutput {
9
+ owner: string;
10
+ tokensList?: TokenInput[];
11
+ tokens?: TokenInput[];
12
+ assetsList?: string[];
13
+ assets?: string[];
14
+ }
15
+ declare const runner: any;
16
+ //#endregion
17
+ export { MultiOutput, TokenInput, runner as default };