@aeternity/aepp-sdk 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +2 -1
  5. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +20764 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +7 -7
  10. package/es/AeSdk.mjs.map +1 -1
  11. package/es/AeSdkAepp.d.ts +4 -3
  12. package/es/AeSdkAepp.mjs +2 -1
  13. package/es/AeSdkAepp.mjs.map +1 -1
  14. package/es/AeSdkBase.d.ts +22 -21
  15. package/es/AeSdkBase.mjs +25 -21
  16. package/es/AeSdkBase.mjs.map +1 -1
  17. package/es/AeSdkWallet.d.ts +4 -3
  18. package/es/AeSdkWallet.mjs +5 -1
  19. package/es/AeSdkWallet.mjs.map +1 -1
  20. package/es/Node.d.ts +7 -10
  21. package/es/Node.mjs +63 -57
  22. package/es/Node.mjs.map +1 -1
  23. package/es/account/Base.d.ts +7 -4
  24. package/es/account/Base.mjs +3 -3
  25. package/es/account/Base.mjs.map +1 -1
  26. package/es/account/Memory.d.ts +5 -4
  27. package/es/account/Memory.mjs +24 -2
  28. package/es/account/Memory.mjs.map +1 -1
  29. package/es/account/Rpc.d.ts +6 -6
  30. package/es/account/Rpc.mjs +3 -2
  31. package/es/account/Rpc.mjs.map +1 -1
  32. package/es/aens.d.ts +27 -14
  33. package/es/aens.mjs +27 -21
  34. package/es/aens.mjs.map +1 -1
  35. package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
  37. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  38. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  44. package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
  51. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  52. package/es/aepp-wallet-communication/schema.d.ts +17 -2
  53. package/es/aepp-wallet-communication/schema.mjs +54 -17
  54. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  55. package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
  56. package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
  57. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  58. package/es/apis/node/models/index.d.ts +6 -2
  59. package/es/apis/node/models/index.mjs.map +1 -1
  60. package/es/apis/node/models/mappers.mjs +4 -2
  61. package/es/apis/node/models/mappers.mjs.map +1 -1
  62. package/es/chain.d.ts +92 -64
  63. package/es/chain.mjs +190 -154
  64. package/es/chain.mjs.map +1 -1
  65. package/es/channel/handlers.d.ts +3 -3
  66. package/es/channel/handlers.mjs +42 -44
  67. package/es/channel/handlers.mjs.map +1 -1
  68. package/es/channel/index.d.ts +43 -52
  69. package/es/channel/index.mjs +46 -49
  70. package/es/channel/index.mjs.map +1 -1
  71. package/es/channel/internal.d.ts +16 -15
  72. package/es/channel/internal.mjs +67 -62
  73. package/es/channel/internal.mjs.map +1 -1
  74. package/es/contract/Compiler.d.ts +1 -0
  75. package/es/contract/Compiler.mjs +5 -4
  76. package/es/contract/Compiler.mjs.map +1 -1
  77. package/es/contract/aci.d.ts +17 -15
  78. package/es/contract/aci.mjs +58 -45
  79. package/es/contract/aci.mjs.map +1 -1
  80. package/es/contract/ga.d.ts +16 -15
  81. package/es/contract/ga.mjs +12 -7
  82. package/es/contract/ga.mjs.map +1 -1
  83. package/es/contract/methods.d.ts +9 -6
  84. package/es/contract/methods.mjs +9 -6
  85. package/es/contract/methods.mjs.map +1 -1
  86. package/es/deprecated/index.d.ts +143 -0
  87. package/es/deprecated/index.mjs +162 -0
  88. package/es/deprecated/index.mjs.map +1 -0
  89. package/es/deprecated/methods.d.ts +18 -0
  90. package/es/deprecated/methods.mjs +26 -0
  91. package/es/deprecated/methods.mjs.map +1 -0
  92. package/es/index.d.ts +4 -1
  93. package/es/index.mjs +4 -1
  94. package/es/index.mjs.map +1 -1
  95. package/es/oracle.d.ts +69 -62
  96. package/es/oracle.mjs +121 -103
  97. package/es/oracle.mjs.map +1 -1
  98. package/es/spend.d.ts +16 -15
  99. package/es/spend.mjs +19 -30
  100. package/es/spend.mjs.map +1 -1
  101. package/es/tx/builder/address.d.ts +25 -0
  102. package/es/tx/builder/address.mjs +45 -0
  103. package/es/tx/builder/address.mjs.map +1 -0
  104. package/es/tx/builder/constants.d.ts +55 -26
  105. package/es/tx/builder/constants.mjs +60 -38
  106. package/es/tx/builder/constants.mjs.map +1 -1
  107. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  108. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  109. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  110. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  111. package/es/tx/builder/field-types/deposit.mjs +19 -0
  112. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  113. package/es/tx/builder/field-types/fee.d.ts +25 -0
  114. package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
  115. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  116. package/es/tx/builder/field-types/field.d.ts +6 -0
  117. package/es/tx/builder/field-types/field.mjs +15 -0
  118. package/es/tx/builder/field-types/field.mjs.map +1 -0
  119. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  120. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  121. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  122. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  123. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  124. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  125. package/es/tx/builder/field-types/index.d.ts +70 -0
  126. package/es/tx/builder/field-types/index.mjs +25 -0
  127. package/es/tx/builder/field-types/index.mjs.map +1 -0
  128. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  129. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  130. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  131. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  132. package/es/tx/builder/field-types/name-id.mjs +19 -0
  133. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  134. package/es/tx/builder/field-types/name.d.ts +13 -0
  135. package/es/tx/builder/field-types/name.mjs +18 -0
  136. package/es/tx/builder/field-types/name.mjs.map +1 -0
  137. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  138. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  139. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  140. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  141. package/es/tx/builder/field-types/u-int.mjs +14 -0
  142. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  143. package/es/tx/builder/helpers.d.ts +27 -33
  144. package/es/tx/builder/helpers.mjs +41 -47
  145. package/es/tx/builder/helpers.mjs.map +1 -1
  146. package/es/tx/builder/index.d.ts +25 -12
  147. package/es/tx/builder/index.mjs +74 -83
  148. package/es/tx/builder/index.mjs.map +1 -1
  149. package/es/tx/builder/schema.d.ts +995 -144
  150. package/es/tx/builder/schema.mjs +121 -170
  151. package/es/tx/builder/schema.mjs.map +1 -1
  152. package/es/tx/index.d.ts +28 -27
  153. package/es/tx/index.mjs +97 -117
  154. package/es/tx/index.mjs.map +1 -1
  155. package/es/tx/validator.d.ts +4 -3
  156. package/es/tx/validator.mjs +79 -92
  157. package/es/tx/validator.mjs.map +1 -1
  158. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
  159. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
  160. package/es/typings/bip32-path/index.d.mjs.map +1 -1
  161. package/es/typings/blakejs/index.d.mjs.map +1 -1
  162. package/es/typings/sha-js/index.d.mjs +2 -0
  163. package/es/typings/sha-js/index.d.mjs.map +1 -0
  164. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
  165. package/es/utils/amount-formatter.d.ts +9 -9
  166. package/es/utils/amount-formatter.mjs +17 -17
  167. package/es/utils/amount-formatter.mjs.map +1 -1
  168. package/es/utils/autorest.mjs +7 -7
  169. package/es/utils/autorest.mjs.map +1 -1
  170. package/es/utils/bignumber.mjs +2 -1
  171. package/es/utils/bignumber.mjs.map +1 -1
  172. package/es/utils/bytes.mjs +1 -1
  173. package/es/utils/bytes.mjs.map +1 -1
  174. package/es/utils/crypto.d.ts +8 -23
  175. package/es/utils/crypto.mjs +15 -41
  176. package/es/utils/crypto.mjs.map +1 -1
  177. package/es/utils/encoder-types.d.ts +61 -0
  178. package/es/utils/encoder-types.mjs +36 -0
  179. package/es/utils/encoder-types.mjs.map +1 -0
  180. package/es/utils/encoder.d.ts +6 -7
  181. package/es/utils/encoder.mjs +42 -26
  182. package/es/utils/encoder.mjs.map +1 -1
  183. package/es/utils/errors.d.ts +1 -11
  184. package/es/utils/errors.mjs +4 -20
  185. package/es/utils/errors.mjs.map +1 -1
  186. package/es/utils/hd-wallet.d.ts +18 -2
  187. package/es/utils/hd-wallet.mjs +64 -34
  188. package/es/utils/hd-wallet.mjs.map +1 -1
  189. package/es/utils/json-big.mjs +2 -2
  190. package/es/utils/json-big.mjs.map +1 -1
  191. package/es/utils/keystore.mjs +4 -2
  192. package/es/utils/keystore.mjs.map +1 -1
  193. package/es/utils/mptree.d.ts +2 -2
  194. package/es/utils/mptree.mjs +11 -6
  195. package/es/utils/mptree.mjs.map +1 -1
  196. package/es/utils/other.d.ts +8 -2
  197. package/es/utils/other.mjs +15 -3
  198. package/es/utils/other.mjs.map +1 -1
  199. package/es/utils/semver-satisfies.d.ts +1 -1
  200. package/es/utils/semver-satisfies.mjs +2 -2
  201. package/es/utils/semver-satisfies.mjs.map +1 -1
  202. package/es/utils/string.mjs.map +1 -1
  203. package/package.json +35 -33
  204. package/src/AeSdk.ts +30 -27
  205. package/src/AeSdkAepp.ts +93 -84
  206. package/src/AeSdkBase.ts +148 -130
  207. package/src/AeSdkWallet.ts +172 -156
  208. package/src/Node.ts +108 -102
  209. package/src/account/Base.ts +42 -32
  210. package/src/account/Memory.ts +45 -30
  211. package/src/account/Rpc.ts +32 -30
  212. package/src/aens.ts +124 -108
  213. package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
  214. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
  215. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
  216. package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
  217. package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
  218. package/src/aepp-wallet-communication/rpc/types.ts +32 -32
  219. package/src/aepp-wallet-communication/schema.ts +117 -74
  220. package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
  221. package/src/apis/node/code-model-v4.yaml +54 -20
  222. package/src/apis/node/models/index.ts +6 -2
  223. package/src/apis/node/models/mappers.ts +4 -2
  224. package/src/chain.ts +286 -228
  225. package/src/channel/handlers.ts +424 -372
  226. package/src/channel/index.ts +285 -251
  227. package/src/channel/internal.ts +248 -232
  228. package/src/contract/Compiler.ts +22 -21
  229. package/src/contract/aci.ts +267 -258
  230. package/src/contract/ga.ts +93 -72
  231. package/src/contract/methods.ts +32 -27
  232. package/src/deprecated/index.ts +170 -0
  233. package/src/deprecated/methods.ts +25 -0
  234. package/src/index.ts +37 -32
  235. package/src/oracle.ts +211 -189
  236. package/src/spend.ts +82 -70
  237. package/src/tx/builder/address.ts +50 -0
  238. package/src/tx/builder/constants.ts +82 -52
  239. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  240. package/src/tx/builder/field-types/deposit.ts +21 -0
  241. package/src/tx/builder/field-types/fee.ts +143 -0
  242. package/src/tx/builder/field-types/field.ts +9 -0
  243. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  244. package/src/tx/builder/field-types/gas-price.ts +16 -0
  245. package/src/tx/builder/field-types/index.ts +45 -0
  246. package/src/tx/builder/field-types/name-fee.ts +32 -0
  247. package/src/tx/builder/field-types/name-id.ts +20 -0
  248. package/src/tx/builder/field-types/name.ts +18 -0
  249. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  250. package/src/tx/builder/field-types/u-int.ts +16 -0
  251. package/src/tx/builder/helpers.ts +112 -117
  252. package/src/tx/builder/index.ts +203 -197
  253. package/src/tx/builder/schema.ts +421 -465
  254. package/src/tx/index.ts +128 -135
  255. package/src/tx/validator.ts +165 -161
  256. package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
  257. package/src/typings/@aeternity__uuid/index.d.ts +3 -1
  258. package/src/typings/bip32-path/index.d.ts +6 -6
  259. package/src/typings/blakejs/index.d.ts +4 -32
  260. package/src/typings/sha-js/index.d.ts +5 -0
  261. package/src/typings/tweetnacl-auth/index.d.ts +2 -2
  262. package/src/utils/amount-formatter.ts +41 -41
  263. package/src/utils/autorest.ts +57 -54
  264. package/src/utils/bignumber.ts +7 -6
  265. package/src/utils/bytes.ts +19 -19
  266. package/src/utils/crypto.ts +82 -94
  267. package/src/utils/encoder-types.ts +63 -0
  268. package/src/utils/encoder.ts +104 -56
  269. package/src/utils/errors.ts +246 -264
  270. package/src/utils/hd-wallet.ts +114 -82
  271. package/src/utils/json-big.ts +16 -15
  272. package/src/utils/keystore.ts +65 -62
  273. package/src/utils/mptree.ts +59 -56
  274. package/src/utils/other.ts +26 -18
  275. package/src/utils/semver-satisfies.ts +15 -11
  276. package/src/utils/string.ts +10 -10
  277. package/es/tx/builder/field-types.d.ts +0 -62
  278. package/es/tx/builder/field-types.mjs +0 -126
  279. package/es/tx/builder/field-types.mjs.map +0 -1
  280. package/es/tx/min-fee.d.ts +0 -20
  281. package/es/tx/min-fee.mjs.map +0 -1
  282. package/src/tx/builder/field-types.ts +0 -111
  283. package/src/tx/min-fee.ts +0 -136
@@ -3,25 +3,27 @@ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/ins
3
3
  const {
4
4
  Buffer: _Buffer
5
5
  } = _buffer;
6
- import BigNumber from 'bignumber.js';
7
6
  import _rlp from 'rlp';
8
7
  const {
9
8
  decode: rlpDecode,
10
9
  encode: rlpEncode
11
10
  } = _rlp;
12
- import { AE_AMOUNT_FORMATS, formatAmount } from "../../utils/amount-formatter.mjs";
11
+ import { decode, encode, Encoding } from "../../utils/encoder.mjs";
12
+ import { AE_AMOUNT_FORMATS } from "../../utils/amount-formatter.mjs";
13
13
  import { hash } from "../../utils/crypto.mjs";
14
- import { FIELD_TYPES, TX_SCHEMA, TX_TYPE } from "./schema.mjs";
15
- import { readInt, readId, readPointers, writeId, writeInt, buildPointers, encode, decode, buildContractId } from "./helpers.mjs";
14
+ import { FIELD_TYPES, TX_SCHEMA } from "./schema.mjs";
15
+ import { Tag } from "./constants.mjs";
16
+ import { buildContractId, buildPointers, readInt, readPointers, writeInt } from "./helpers.mjs";
17
+ import { readId, writeId } from "./address.mjs";
16
18
  import { toBytes } from "../../utils/bytes.mjs";
17
19
  import MPTree from "../../utils/mptree.mjs";
18
- import { ArgumentError, InvalidTxParamsError, SchemaNotFoundError, DecodeError } from "../../utils/errors.mjs";
20
+ import { ArgumentError, DecodeError, InvalidTxParamsError, SchemaNotFoundError } from "../../utils/errors.mjs";
19
21
  import { isKeyOfObject } from "../../utils/other.mjs";
22
+
20
23
  /**
21
24
  * JavaScript-based Transaction builder
22
25
  */
23
26
  // SERIALIZE AND DESERIALIZE PART
24
-
25
27
  function deserializeField(value, type, prefix) {
26
28
  if (value == null) return '';
27
29
 
@@ -35,15 +37,10 @@ function deserializeField(value, type, prefix) {
35
37
  };
36
38
  }
37
39
 
38
- case FIELD_TYPES.amount:
39
- case FIELD_TYPES.int:
40
40
  case FIELD_TYPES.abiVersion:
41
41
  case FIELD_TYPES.ttlType:
42
42
  return readInt(value);
43
43
 
44
- case FIELD_TYPES.shortInt:
45
- return +readInt(value);
46
-
47
44
  case FIELD_TYPES.id:
48
45
  return readId(value);
49
46
 
@@ -57,22 +54,24 @@ function deserializeField(value, type, prefix) {
57
54
  return encode(value, prefix);
58
55
 
59
56
  case FIELD_TYPES.stateTree:
60
- return encode(value, 'ss');
57
+ return encode(value, Encoding.StateTrees);
61
58
 
62
59
  case FIELD_TYPES.string:
63
60
  return value.toString();
64
61
 
65
62
  case FIELD_TYPES.payload:
66
- return encode(value, 'ba');
63
+ return encode(value, Encoding.Bytearray);
67
64
 
68
65
  case FIELD_TYPES.pointers:
69
66
  return readPointers(value);
70
67
 
71
68
  case FIELD_TYPES.rlpBinary:
72
- return unpackTx(encode(value, 'tx'));
69
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
70
+ return unpackTx(encode(value, Encoding.Transaction));
73
71
 
74
72
  case FIELD_TYPES.rlpBinaries:
75
- return value.map(v => unpackTx(encode(v, 'tx')));
73
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
74
+ return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
76
75
 
77
76
  case FIELD_TYPES.rawBinary:
78
77
  return value;
@@ -81,7 +80,8 @@ function deserializeField(value, type, prefix) {
81
80
  return value.toString('hex');
82
81
 
83
82
  case FIELD_TYPES.offChainUpdates:
84
- return value.map(v => unpackTx(encode(v, 'tx')));
83
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
84
+ return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
85
85
 
86
86
  case FIELD_TYPES.callStack:
87
87
  // TODO: fix this
@@ -118,8 +118,8 @@ function deserializeField(value, type, prefix) {
118
118
  }, {});
119
119
 
120
120
  default:
121
- if (type instanceof Object && 'deserialize' in type) return type.deserialize(value);
122
- return value;
121
+ if (typeof type === 'number') return value;
122
+ return type.deserialize(value);
123
123
  }
124
124
  }
125
125
 
@@ -127,9 +127,6 @@ function serializeField(value, type, params) {
127
127
  var _value$rlpEncoded;
128
128
 
129
129
  switch (type) {
130
- case FIELD_TYPES.amount:
131
- case FIELD_TYPES.int:
132
- case FIELD_TYPES.shortInt:
133
130
  case FIELD_TYPES.abiVersion:
134
131
  case FIELD_TYPES.ttlType:
135
132
  return writeInt(value);
@@ -168,7 +165,7 @@ function serializeField(value, type, params) {
168
165
  return (_value$rlpEncoded = value.rlpEncoded) !== null && _value$rlpEncoded !== void 0 ? _value$rlpEncoded : value;
169
166
 
170
167
  case FIELD_TYPES.mptrees:
171
- return value.map(t => t.serialize(''));
168
+ return value.map(t => t.serialize());
172
169
 
173
170
  case FIELD_TYPES.ctVersion:
174
171
  return _Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);
@@ -189,8 +186,9 @@ function serializeField(value, type, params) {
189
186
  }
190
187
 
191
188
  default:
192
- if (type instanceof Object && 'serialize' in type) return type.serialize(value, params);
193
- return value;
189
+ if (typeof type === 'number') return value; // @ts-expect-error will be solved after removing the whole serializeField function
190
+
191
+ return type.serialize(value, params);
194
192
  }
195
193
  }
196
194
 
@@ -199,18 +197,6 @@ function validateField(value, type, prefix) {
199
197
  if (value == null) return 'Field is required'; // Validate type of value
200
198
 
201
199
  switch (type) {
202
- case FIELD_TYPES.amount:
203
- case FIELD_TYPES.int:
204
- case FIELD_TYPES.shortInt:
205
- {
206
- if (isNaN(value) && !BigNumber.isBigNumber(value)) {
207
- return `${String(value)} is not of type Number or BigNumber`;
208
- }
209
-
210
- if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`;
211
- return;
212
- }
213
-
214
200
  case FIELD_TYPES.id:
215
201
  {
216
202
  const prefixes = Array.isArray(prefix) ? prefix : [prefix];
@@ -223,7 +209,7 @@ function validateField(value, type, prefix) {
223
209
  return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`;
224
210
  }
225
211
 
226
- return;
212
+ return undefined;
227
213
  }
228
214
 
229
215
  case FIELD_TYPES.ctVersion:
@@ -231,7 +217,7 @@ function validateField(value, type, prefix) {
231
217
  return 'Value must be an object with "vmVersion" and "abiVersion" fields';
232
218
  }
233
219
 
234
- return;
220
+ return undefined;
235
221
 
236
222
  case FIELD_TYPES.pointers:
237
223
  if (!Array.isArray(value)) return 'Value must be of type Array';
@@ -244,28 +230,15 @@ function validateField(value, type, prefix) {
244
230
  return `Expected 32 pointers or less, got ${value.length} instead`;
245
231
  }
246
232
 
247
- }
248
- }
233
+ return undefined;
249
234
 
250
- function transformParams(params, schema) {
251
- let {
252
- denomination
253
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
254
- params = schema.filter(_ref2 => {
255
- let [, t] = _ref2;
256
- return t === FIELD_TYPES.amount;
257
- }).reduce((params, _ref3) => {
258
- let [key] = _ref3;
259
- return { ...params,
260
- [key]: formatAmount(params[key], {
261
- denomination
262
- })
263
- };
264
- }, params);
265
- return params;
235
+ default:
236
+ return undefined;
237
+ }
266
238
  }
267
239
  /**
268
240
  * Validate transaction params
241
+ * @category transaction builder
269
242
  * @param params - Object with tx params
270
243
  * @param schema - Transaction schema
271
244
  * @param excludeKeys - Array of keys to exclude for validation
@@ -273,42 +246,47 @@ function transformParams(params, schema) {
273
246
  */
274
247
 
275
248
 
276
- export function validateParams(params, schema, _ref4) {
249
+ export function validateParams(params, schema, _ref2) {
277
250
  let {
278
251
  excludeKeys = []
279
- } = _ref4;
252
+ } = _ref2;
280
253
  return Object.fromEntries(schema // TODO: allow optional keys in schema
281
- .filter(_ref5 => {
254
+ .filter(_ref3 => {
282
255
  var _context;
283
256
 
284
- let [key] = _ref5;
285
- return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key) && !_includesInstanceProperty(_context = ['payload', 'nameFee', 'deposit', 'gasPrice']).call(_context, key);
286
- }).map(_ref6 => {
287
- let [key, type, prefix] = _ref6;
257
+ let [key] = _ref3;
258
+ return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key) && !_includesInstanceProperty(_context = ['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit']).call(_context, key);
259
+ }).map(_ref4 => {
260
+ let [key, type, prefix] = _ref4;
288
261
  return [key, validateField(params[key], type, prefix)];
289
- }).filter(_ref7 => {
290
- let [, message] = _ref7;
262
+ }).filter(_ref5 => {
263
+ let [, message] = _ref5;
291
264
  return message;
292
265
  }));
293
266
  }
294
267
  /**
295
268
  * Unpack binary transaction
269
+ * @category transaction builder
296
270
  * @param binary - Array with binary transaction field's
297
271
  * @param schema - Transaction schema
298
272
  * @returns Object with transaction field's
299
273
  */
300
274
 
301
275
  export function unpackRawTx(binary, schema) {
302
- return schema.reduce((acc, _ref8, index) => {
303
- let [key, fieldType, prefix] = _ref8;
276
+ return schema.reduce((acc, _ref6, index) => {
277
+ let [key, fieldType, prefix] = _ref6;
304
278
  return Object.assign(acc, {
305
279
  [key]: deserializeField(binary[index], fieldType, prefix)
306
280
  });
307
281
  }, {});
308
282
  }
283
+ /**
284
+ * @category transaction builder
285
+ */
309
286
 
310
287
  /**
311
288
  * Build transaction hash
289
+ * @category transaction builder
312
290
  * @param _params - Object with tx params
313
291
  * @param type - Transaction type
314
292
  * @param options - options
@@ -326,24 +304,21 @@ export function buildTx(_params, type) {
326
304
 
327
305
  let {
328
306
  excludeKeys = [],
329
- prefix = 'tx',
307
+ prefix = Encoding.Transaction,
330
308
  vsn,
331
309
  denomination = AE_AMOUNT_FORMATS.AETTOS
332
310
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
333
311
  const schemas = TX_SCHEMA[type];
334
312
  (_vsn = vsn) !== null && _vsn !== void 0 ? _vsn : vsn = Math.max(...Object.keys(schemas).map(a => +a));
335
- if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', TX_TYPE[type], vsn);
313
+ if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);
336
314
  const schema = schemas[vsn];
337
- let params = _params;
315
+ const params = _params;
338
316
  params.VSN = vsn;
339
317
  params.tag = type;
340
- const filteredSchema = schema.filter(_ref9 => {
341
- let [key] = _ref9;
318
+ params.denomination = denomination;
319
+ const filteredSchema = schema.filter(_ref7 => {
320
+ let [key] = _ref7;
342
321
  return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key);
343
- }); // Transform `amount` type fields to `aettos`
344
-
345
- params = transformParams(params, filteredSchema, {
346
- denomination
347
322
  }); // Validation
348
323
 
349
324
  const valid = validateParams(params, schema, {
@@ -351,12 +326,22 @@ export function buildTx(_params, type) {
351
326
  });
352
327
 
353
328
  if (Object.keys(valid).length > 0) {
354
- throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid));
329
+ throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);
355
330
  }
356
331
 
357
- const binary = filteredSchema.map(_ref10 => {
358
- let [key, fieldType] = _ref10;
359
- return serializeField(params[key], fieldType, params);
332
+ const binary = filteredSchema.map(_ref8 => {
333
+ let [key, fieldType] = _ref8;
334
+ return serializeField(params[key], fieldType, { ...params,
335
+ txType: type,
336
+ rebuildTx: overrideParams => buildTx({ ...params,
337
+ ...overrideParams
338
+ }, type, {
339
+ excludeKeys,
340
+ prefix: Encoding.Transaction,
341
+ vsn,
342
+ denomination
343
+ })
344
+ });
360
345
  }).filter(e => e !== undefined);
361
346
  const rlpEncoded = rlpEncode(binary);
362
347
  const tx = encode(rlpEncoded, prefix);
@@ -367,9 +352,13 @@ export function buildTx(_params, type) {
367
352
  txObject: unpackRawTx(binary, schema)
368
353
  };
369
354
  }
355
+ /**
356
+ * @category transaction builder
357
+ */
370
358
 
371
359
  /**
372
360
  * Unpack transaction hash
361
+ * @category transaction builder
373
362
  * @param encodedTx - Transaction to unpack
374
363
  * @param txType - Expected transaction type
375
364
  * @returns object
@@ -381,7 +370,7 @@ export function unpackTx(encodedTx, txType) {
381
370
  const binary = rlpDecode(rlpEncoded);
382
371
  const objId = +readInt(binary[0]);
383
372
  if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);
384
- if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${TX_TYPE[txType]} tag, got ${TX_TYPE[objId]} instead`);
373
+ if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);
385
374
  const vsn = +readInt(binary[1]);
386
375
  if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);
387
376
  const schema = TX_SCHEMA[objId][vsn];
@@ -393,16 +382,18 @@ export function unpackTx(encodedTx, txType) {
393
382
  }
394
383
  /**
395
384
  * Build a transaction hash
385
+ * @category transaction builder
396
386
  * @param rawTx - base64 or rlp encoded transaction
397
387
  * @returns Transaction hash
398
388
  */
399
389
 
400
390
  export function buildTxHash(rawTx) {
401
391
  const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx) : rawTx;
402
- return encode(hash(data), 'th');
392
+ return encode(hash(data), Encoding.TxHash);
403
393
  }
404
394
  /**
405
395
  * Build a contract public key by contractCreateTx or gaAttach
396
+ * @category contract
406
397
  * @param contractTx - Transaction
407
398
  * @returns Contract public key
408
399
  */
@@ -415,7 +406,7 @@ export function buildContractIdByContractTx(contractTx) {
415
406
  tx
416
407
  } = unpackTx(contractTx);
417
408
 
418
- if (!_includesInstanceProperty(_context2 = [TX_TYPE.contractCreate, TX_TYPE.gaAttach]).call(_context2, txType)) {
409
+ if (!_includesInstanceProperty(_context2 = [Tag.ContractCreateTx, Tag.GaAttachTx]).call(_context2, txType)) {
419
410
  throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);
420
411
  }
421
412
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["BigNumber","AE_AMOUNT_FORMATS","formatAmount","hash","FIELD_TYPES","TX_SCHEMA","TX_TYPE","readInt","readId","readPointers","writeId","writeInt","buildPointers","encode","decode","buildContractId","toBytes","MPTree","ArgumentError","InvalidTxParamsError","SchemaNotFoundError","DecodeError","isKeyOfObject","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","amount","int","ttlType","shortInt","id","ids","map","bool","binary","stateTree","string","toString","payload","pointers","rlpBinary","unpackTx","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","Object","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","isNaN","isBigNumber","String","lt","prefixes","Array","isArray","Boolean","some","p","key","length","transformParams","schema","denomination","filter","validateParams","excludeKeys","fromEntries","message","unpackRawTx","index","fieldType","assign","buildTx","_params","vsn","AETTOS","schemas","Math","max","keys","a","VSN","tag","filteredSchema","valid","JSON","stringify","e","undefined","rlpEncode","tx","txObject","encodedTx","txType","rlpDecode","objId","buildTxHash","rawTx","data","startsWith","buildContractIdByContractTx","contractTx","contractCreate","gaAttach","ownerId","nonce"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { EncodedData, EncodingType } from './../../utils/encoder'\nimport BigNumber from 'bignumber.js'\nimport { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp'\nimport { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'\nimport { hash } from '../../utils/crypto'\nimport { Field } from './field-types'\n\nimport {\n FIELD_TYPES,\n RawTxObject,\n TxField,\n TxTypeSchemas,\n TxParamsCommon,\n TX_SCHEMA,\n TX_TYPE,\n TxSchema\n} from './schema'\nimport {\n readInt,\n readId,\n readPointers,\n writeId,\n writeInt,\n buildPointers,\n encode,\n decode,\n Pointer,\n buildContractId\n} from './helpers'\nimport { toBytes } from '../../utils/bytes'\nimport MPTree, { MPTreeBinary } from '../../utils/mptree'\nimport { ArgumentError, InvalidTxParamsError, SchemaNotFoundError, DecodeError } from '../../utils/errors'\nimport { isKeyOfObject } from '../../utils/other'\n\n/**\n * JavaScript-based Transaction builder\n */\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField (\n value: any,\n type: FIELD_TYPES | typeof Field,\n prefix?: EncodingType | EncodingType[]\n): any {\n if (value == null) return ''\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value\n return {\n vmVersion: readInt(Buffer.from([vm])),\n abiVersion: readInt(Buffer.from([abi]))\n }\n }\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return readInt(value)\n case FIELD_TYPES.shortInt:\n return +readInt(value)\n case FIELD_TYPES.id:\n return readId(value)\n case FIELD_TYPES.ids:\n return value.map(readId)\n case FIELD_TYPES.bool:\n return value[0] === 1\n case FIELD_TYPES.binary:\n return encode(value, prefix as EncodingType)\n case FIELD_TYPES.stateTree:\n return encode(value, 'ss')\n case FIELD_TYPES.string:\n return value.toString()\n case FIELD_TYPES.payload:\n return encode(value, 'ba')\n case FIELD_TYPES.pointers:\n return readPointers(value)\n case FIELD_TYPES.rlpBinary:\n return unpackTx(encode(value, 'tx'))\n case FIELD_TYPES.rlpBinaries:\n return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))\n case FIELD_TYPES.rawBinary:\n return value\n case FIELD_TYPES.hex:\n return value.toString('hex')\n case FIELD_TYPES.offChainUpdates:\n return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)]\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTreeBinary) => new MPTree(t))\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0':\n return 'ok'\n case '1':\n return 'error'\n case '2':\n return 'revert'\n default:\n return value\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value.reduce(\n (acc: object, [funHash, fnName, argType, outType]: [\n funHash: Buffer,\n fnName: string,\n argType: string,\n outType: string\n ]) => ({\n ...acc,\n [fnName.toString()]: { funHash, argType, outType }\n }),\n {}\n )\n default:\n if (type instanceof Object && 'deserialize' in type) return type.deserialize(value)\n return value\n }\n}\n\nfunction serializeField (\n value: any, type: FIELD_TYPES | typeof Field, params: any\n): any {\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.shortInt:\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return writeInt(value)\n case FIELD_TYPES.id:\n return writeId(value)\n case FIELD_TYPES.ids:\n return value.map(writeId)\n case FIELD_TYPES.bool:\n return Buffer.from([(value === true) ? 1 : 0])\n case FIELD_TYPES.binary:\n return decode(value)\n case FIELD_TYPES.stateTree:\n return decode(value)\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex')\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from)\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value as EncodedData<'ba'>)\n : toBytes(value)\n case FIELD_TYPES.string:\n return toBytes(value)\n case FIELD_TYPES.pointers:\n return buildPointers(value)\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value\n case FIELD_TYPES.mptrees:\n return value.map((t: typeof Field) => t.serialize(''))\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0)\n case 'error': return writeInt(1)\n case 'revert': return writeInt(2)\n default: return value\n }\n default:\n if (type instanceof Object && 'serialize' in type) return type.serialize(value, params)\n return value\n }\n}\n\nfunction validateField (\n value: any,\n type: FIELD_TYPES | typeof Field,\n prefix?: EncodingType | EncodingType[]\n): string | undefined {\n // All fields are required\n if (value == null) return 'Field is required'\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.shortInt: {\n if (isNaN(value) && !BigNumber.isBigNumber(value)) {\n return `${String(value)} is not of type Number or BigNumber`\n }\n if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`\n return\n }\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n if (!prefixes.includes(value.split('_')[0])) {\n if (prefix == null) { return `'${String(value)}' prefix doesn't exist'` }\n return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`\n }\n return\n }\n case FIELD_TYPES.ctVersion:\n if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {\n return 'Value must be an object with \"vmVersion\" and \"abiVersion\" fields'\n }\n return\n case FIELD_TYPES.pointers:\n if (!Array.isArray(value)) return 'Value must be of type Array'\n if (value.some((p: Pointer) => !(Boolean(p.key) && Boolean(p.id)))) {\n return 'Value must contains only object\\'s like \\'{key: \"account_pubkey\", id: \"ak_lkamsflkalsdalksdlasdlasdlamd\"}\\''\n }\n if (value.length > 32) {\n return `Expected 32 pointers or less, got ${value.length} instead`\n }\n }\n}\n\nfunction transformParams (\n params: TxParamsCommon,\n schema: TxField[],\n { denomination }: {denomination?: AE_AMOUNT_FORMATS} = {}\n): any {\n params = schema\n .filter(([, t]) => t === FIELD_TYPES.amount)\n .reduce(\n (params: TxParamsCommon, [key]) => ({\n ...params,\n [key]: formatAmount(params[key as keyof TxParamsCommon], { denomination })\n }),\n params\n )\n return params\n}\n\n/**\n * Validate transaction params\n * @param params - Object with tx params\n * @param schema - Transaction schema\n * @param excludeKeys - Array of keys to exclude for validation\n * @returns Object with validation errors\n */\nexport function validateParams (\n params: any, schema: TxField[], { excludeKeys = [] }: { excludeKeys: string[] }\n): object {\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key) &&\n !['payload', 'nameFee', 'deposit', 'gasPrice'].includes(key))\n .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])\n .filter(([, message]) => message)\n )\n}\n\n/**\n * Unpack binary transaction\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nexport function unpackRawTx<Tx extends TxSchema> (\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[]\n): RawTxObject<Tx> {\n return schema\n .reduce<any>(\n (\n acc,\n [key, fieldType, prefix],\n index\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {}\n )\n}\n\nexport interface BuiltTx<Tx extends TxSchema, Prefix extends EncodingType> {\n tx: EncodedData<Prefix>\n rlpEncoded: Uint8Array\n binary: Uint8Array\n txObject: RawTxObject<Tx>\n}\n\n/**\n * Build transaction hash\n * @param _params - Object with tx params\n * @param type - Transaction type\n * @param options - options\n * @param options.excludeKeys - Array of keys to exclude for validation and build\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<TxType extends TX_TYPE, Prefix> (\n _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },\n type: TxType,\n { excludeKeys = [], prefix = 'tx', vsn, denomination = AE_AMOUNT_FORMATS.AETTOS }: {\n excludeKeys?: string[]\n prefix?: EncodingType\n vsn?: number\n denomination?: AE_AMOUNT_FORMATS\n } = {}\n): BuiltTx<TxSchema, Prefix extends EncodingType ? Prefix : 'tx'> {\n const schemas = TX_SCHEMA[type]\n\n vsn ??= Math.max(...Object.keys(schemas).map(a => +a))\n if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', TX_TYPE[type], vsn)\n\n const schema = schemas[vsn] as unknown as TxField[]\n\n let params = _params as TxParamsCommon & { onNode: Node }\n params.VSN = vsn\n params.tag = type\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))\n\n // Transform `amount` type fields to `aettos`\n params = transformParams(params, filteredSchema, { denomination })\n // Validation\n const valid = validateParams(params, schema, { excludeKeys })\n if (Object.keys(valid).length > 0) {\n throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))\n }\n\n const binary = filteredSchema\n .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, EncodingType]) => serializeField(\n params[key], fieldType, params))\n .filter(e => e !== undefined)\n\n const rlpEncoded = rlpEncode(binary)\n const tx = encode(rlpEncoded, prefix)\n return {\n tx,\n rlpEncoded,\n binary,\n txObject: unpackRawTx<TxTypeSchemas[TX_TYPE]>(binary, schema)\n } as any\n}\n\nexport interface TxUnpacked<Tx extends TxSchema> {\n txType: TX_TYPE\n tx: RawTxObject<Tx>\n rlpEncoded: Uint8Array\n}\n/**\n * Unpack transaction hash\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends TX_TYPE> (\n encodedTx: EncodedData<'tx' | 'pi'>, txType?: TxType\n): TxUnpacked<TxTypeSchemas[TxType]> {\n const rlpEncoded = decode(encodedTx)\n const binary = rlpDecode(rlpEncoded)\n const objId = +readInt(binary[0] as Buffer)\n if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`)\n if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${TX_TYPE[txType]} tag, got ${TX_TYPE[objId]} instead`)\n const vsn = +readInt(binary[1] as Buffer)\n if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn)\n const schema = TX_SCHEMA[objId][vsn]\n return {\n txType: objId,\n tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),\n rlpEncoded\n }\n}\n\n/**\n * Build a transaction hash\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash (rawTx: EncodedData<'tx'> | Uint8Array): EncodedData<'th'> {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx\n return encode(hash(data), 'th')\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx (contractTx: EncodedData<'tx'>): EncodedData<'ct'> {\n const { txType, tx } = unpackTx<TX_TYPE.contractCreate | TX_TYPE.gaAttach>(contractTx)\n if (![TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType)\n }\n return buildContractId(tx.ownerId, +tx.nonce)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["decode","encode","Encoding","AE_AMOUNT_FORMATS","hash","FIELD_TYPES","TX_SCHEMA","Tag","buildContractId","buildPointers","readInt","readPointers","writeInt","readId","writeId","toBytes","MPTree","ArgumentError","DecodeError","InvalidTxParamsError","SchemaNotFoundError","isKeyOfObject","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","ttlType","id","ids","map","bool","binary","stateTree","StateTrees","string","toString","payload","Bytearray","pointers","rlpBinary","unpackTx","Transaction","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","prefixes","Array","isArray","String","undefined","Boolean","some","p","key","length","validateParams","schema","excludeKeys","Object","fromEntries","filter","message","unpackRawTx","index","fieldType","assign","buildTx","_params","vsn","denomination","AETTOS","schemas","Math","max","keys","a","VSN","tag","filteredSchema","valid","JSON","stringify","txType","rebuildTx","overrideParams","e","rlpEncode","tx","txObject","encodedTx","rlpDecode","objId","buildTxHash","rawTx","data","startsWith","TxHash","buildContractIdByContractTx","contractTx","ContractCreateTx","GaAttachTx","ownerId","nonce"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp';\nimport {\n decode, encode, Encoded, Encoding,\n} from '../../utils/encoder';\nimport { AE_AMOUNT_FORMATS } from '../../utils/amount-formatter';\nimport { hash } from '../../utils/crypto';\nimport { Field } from './field-types';\nimport {\n FIELD_TYPES,\n RawTxObject,\n TX_SCHEMA,\n TxField,\n TxParamsCommon,\n TxSchema,\n TxTypeSchemas,\n} from './schema';\nimport { Tag } from './constants';\nimport {\n buildContractId, buildPointers, readInt, readPointers, writeInt,\n} from './helpers';\nimport { readId, writeId } from './address';\nimport { toBytes } from '../../utils/bytes';\nimport MPTree, { MPTreeBinary } from '../../utils/mptree';\nimport {\n ArgumentError,\n DecodeError,\n InvalidTxParamsError,\n SchemaNotFoundError,\n} from '../../utils/errors';\nimport { isKeyOfObject } from '../../utils/other';\nimport { NamePointer } from '../../apis/node';\n\n/**\n * JavaScript-based Transaction builder\n */\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField(\n value: any,\n type: FIELD_TYPES | Field,\n prefix?: Encoding | Encoding[],\n): any {\n if (value == null) return '';\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value;\n return {\n vmVersion: readInt(Buffer.from([vm])),\n abiVersion: readInt(Buffer.from([abi])),\n };\n }\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return readInt(value);\n case FIELD_TYPES.id:\n return readId(value);\n case FIELD_TYPES.ids:\n return value.map(readId);\n case FIELD_TYPES.bool:\n return value[0] === 1;\n case FIELD_TYPES.binary:\n return encode(value, prefix as Encoding);\n case FIELD_TYPES.stateTree:\n return encode(value, Encoding.StateTrees);\n case FIELD_TYPES.string:\n return value.toString();\n case FIELD_TYPES.payload:\n return encode(value, Encoding.Bytearray);\n case FIELD_TYPES.pointers:\n return readPointers(value);\n case FIELD_TYPES.rlpBinary:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return unpackTx(encode(value, Encoding.Transaction));\n case FIELD_TYPES.rlpBinaries:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.rawBinary:\n return value;\n case FIELD_TYPES.hex:\n return value.toString('hex');\n case FIELD_TYPES.offChainUpdates:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)];\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTreeBinary) => new MPTree(t));\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0':\n return 'ok';\n case '1':\n return 'error';\n case '2':\n return 'revert';\n default:\n return value;\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value.reduce(\n (acc: object, [funHash, fnName, argType, outType]: [\n funHash: Buffer,\n fnName: string,\n argType: string,\n outType: string,\n ]) => ({\n ...acc,\n [fnName.toString()]: { funHash, argType, outType },\n }),\n {},\n );\n default:\n if (typeof type === 'number') return value;\n return type.deserialize(value);\n }\n}\n\nfunction serializeField(value: any, type: FIELD_TYPES | Field, params: any): any {\n switch (type) {\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return writeInt(value);\n case FIELD_TYPES.id:\n return writeId(value);\n case FIELD_TYPES.ids:\n return value.map(writeId);\n case FIELD_TYPES.bool:\n return Buffer.from([(value === true) ? 1 : 0]);\n case FIELD_TYPES.binary:\n return decode(value);\n case FIELD_TYPES.stateTree:\n return decode(value);\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex');\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from);\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value as Encoded.Bytearray)\n : toBytes(value);\n case FIELD_TYPES.string:\n return toBytes(value);\n case FIELD_TYPES.pointers:\n return buildPointers(value);\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value;\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTree) => t.serialize());\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0);\n case 'error': return writeInt(1);\n case 'revert': return writeInt(2);\n default: return value;\n }\n default:\n if (typeof type === 'number') return value;\n // @ts-expect-error will be solved after removing the whole serializeField function\n return type.serialize(value, params);\n }\n}\n\nfunction validateField(\n value: any,\n type: FIELD_TYPES | Field,\n prefix?: Encoding | Encoding[],\n): string | undefined {\n // All fields are required\n if (value == null) return 'Field is required';\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix];\n if (!prefixes.includes(value.split('_')[0])) {\n if (prefix == null) { return `'${String(value)}' prefix doesn't exist'`; }\n return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`;\n }\n return undefined;\n }\n case FIELD_TYPES.ctVersion:\n if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {\n return 'Value must be an object with \"vmVersion\" and \"abiVersion\" fields';\n }\n return undefined;\n case FIELD_TYPES.pointers:\n if (!Array.isArray(value)) return 'Value must be of type Array';\n if (value.some((p: NamePointer) => !(Boolean(p.key) && Boolean(p.id)))) {\n return 'Value must contains only object\\'s like \\'{key: \"account_pubkey\", id: \"ak_lkamsflkalsdalksdlasdlasdlamd\"}\\'';\n }\n if (value.length > 32) {\n return `Expected 32 pointers or less, got ${value.length} instead`;\n }\n return undefined;\n default:\n return undefined;\n }\n}\n\n/**\n * Validate transaction params\n * @category transaction builder\n * @param params - Object with tx params\n * @param schema - Transaction schema\n * @param excludeKeys - Array of keys to exclude for validation\n * @returns Object with validation errors\n */\nexport function validateParams(\n params: any,\n schema: TxField[],\n { excludeKeys = [] }: { excludeKeys: string[] },\n): object {\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key)\n && !['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit'].includes(key))\n .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])\n .filter(([, message]) => message),\n );\n}\n\n/**\n * Unpack binary transaction\n * @category transaction builder\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nexport function unpackRawTx<Tx extends TxSchema>(\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[],\n): RawTxObject<Tx> {\n return schema\n .reduce<any>(\n (\n acc,\n [key, fieldType, prefix],\n index,\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {},\n );\n}\n\n/**\n * @category transaction builder\n */\nexport interface BuiltTx<Tx extends TxSchema, Prefix extends Encoding> {\n tx: Encoded.Generic<Prefix>;\n rlpEncoded: Uint8Array;\n binary: Uint8Array;\n txObject: RawTxObject<Tx>;\n}\n\n/**\n * Build transaction hash\n * @category transaction builder\n * @param _params - Object with tx params\n * @param type - Transaction type\n * @param options - options\n * @param options.excludeKeys - Array of keys to exclude for validation and build\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<TxType extends Tag, Prefix>(\n _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },\n type: TxType,\n {\n excludeKeys = [],\n prefix = Encoding.Transaction,\n vsn,\n denomination = AE_AMOUNT_FORMATS.AETTOS,\n }: {\n excludeKeys?: string[];\n prefix?: Encoding;\n vsn?: number;\n denomination?: AE_AMOUNT_FORMATS;\n } = {},\n): BuiltTx<TxSchema, Prefix extends Encoding ? Prefix : Encoding.Transaction> {\n const schemas = TX_SCHEMA[type];\n\n vsn ??= Math.max(...Object.keys(schemas).map((a) => +a));\n if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);\n\n const schema = schemas[vsn] as unknown as TxField[];\n\n const params = _params as TxParamsCommon & { onNode: Node; denomination?: AE_AMOUNT_FORMATS };\n params.VSN = vsn;\n params.tag = type;\n params.denomination = denomination;\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key));\n\n // Validation\n const valid = validateParams(params, schema, { excludeKeys });\n if (Object.keys(valid).length > 0) {\n throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);\n }\n\n const binary = filteredSchema\n .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, Encoding]) => (\n serializeField(\n params[key],\n fieldType,\n {\n ...params,\n txType: type,\n rebuildTx: (overrideParams: any) => buildTx(\n { ...params, ...overrideParams },\n type,\n {\n excludeKeys, prefix: Encoding.Transaction, vsn, denomination,\n },\n ),\n },\n )\n ))\n .filter((e) => e !== undefined);\n\n const rlpEncoded = rlpEncode(binary);\n const tx = encode(rlpEncoded, prefix);\n return {\n tx,\n rlpEncoded,\n binary,\n txObject: unpackRawTx<TxTypeSchemas[Tag]>(binary, schema),\n } as any;\n}\n\n/**\n * @category transaction builder\n */\nexport interface TxUnpacked<Tx extends TxSchema> {\n txType: Tag;\n tx: RawTxObject<Tx>;\n rlpEncoded: Uint8Array;\n}\n/**\n * Unpack transaction hash\n * @category transaction builder\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends Tag>(\n encodedTx: Encoded.Transaction | Encoded.Poi,\n txType?: TxType,\n): TxUnpacked<TxTypeSchemas[TxType]> {\n const rlpEncoded = decode(encodedTx);\n const binary = rlpDecode(rlpEncoded);\n const objId = +readInt(binary[0] as Buffer);\n if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);\n if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);\n const vsn = +readInt(binary[1] as Buffer);\n if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);\n const schema = TX_SCHEMA[objId][vsn];\n return {\n txType: objId,\n tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),\n rlpEncoded,\n };\n}\n\n/**\n * Build a transaction hash\n * @category transaction builder\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash(rawTx: Encoded.Transaction | Uint8Array): Encoded.TxHash {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx;\n return encode(hash(data), Encoding.TxHash);\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @category contract\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx(\n contractTx: Encoded.Transaction,\n): Encoded.ContractAddress {\n const { txType, tx } = unpackTx<Tag.ContractCreateTx | Tag.GaAttachTx>(contractTx);\n if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);\n }\n return buildContractId(tx.ownerId, +tx.nonce);\n}\n"],"mappings":"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"}