@aeternity/aepp-sdk 10.0.0-beta.1 → 11.0.1

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 (250) hide show
  1. package/README.md +15 -14
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -27
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/account/{base.js → base.mjs} +23 -11
  10. package/es/account/base.mjs.map +1 -0
  11. package/es/account/{memory.js → memory.mjs} +29 -14
  12. package/es/account/memory.mjs.map +1 -0
  13. package/es/account/{multiple.js → multiple.mjs} +14 -11
  14. package/es/account/multiple.mjs.map +1 -0
  15. package/es/ae/{aens.js → aens.mjs} +69 -59
  16. package/es/ae/aens.mjs.map +1 -0
  17. package/es/ae/{aepp.js → aepp.mjs} +9 -9
  18. package/es/ae/aepp.mjs.map +1 -0
  19. package/es/ae/contract.mjs +159 -0
  20. package/es/ae/contract.mjs.map +1 -0
  21. package/es/ae/{index.js → index.mjs} +12 -10
  22. package/es/ae/index.mjs.map +1 -0
  23. package/es/ae/{oracle.js → oracle.mjs} +37 -20
  24. package/es/ae/oracle.mjs.map +1 -0
  25. package/es/ae/{universal.js → universal.mjs} +10 -10
  26. package/es/ae/universal.mjs.map +1 -0
  27. package/es/ae/{wallet.js → wallet.mjs} +10 -10
  28. package/es/ae/wallet.mjs.map +1 -0
  29. package/es/aepp-wallet-communication/schema.d.ts +74 -0
  30. package/es/bignumber.d.ts +1 -7
  31. package/es/chain/{index.js → index.mjs} +28 -8
  32. package/es/chain/index.mjs.map +1 -0
  33. package/es/chain/{node.js → node.mjs} +133 -90
  34. package/es/chain/node.mjs.map +1 -0
  35. package/es/channel/{handlers.js → handlers.mjs} +18 -20
  36. package/es/channel/handlers.mjs.map +1 -0
  37. package/es/channel/{index.js → index.mjs} +43 -22
  38. package/es/channel/index.mjs.map +1 -0
  39. package/es/channel/{internal.js → internal.mjs} +51 -35
  40. package/es/channel/internal.mjs.map +1 -0
  41. package/es/contract/aci.mjs +477 -0
  42. package/es/contract/aci.mjs.map +1 -0
  43. package/es/contract/compiler.mjs +115 -0
  44. package/es/contract/compiler.mjs.map +1 -0
  45. package/es/contract/ga/helpers.mjs +30 -0
  46. package/es/contract/ga/helpers.mjs.map +1 -0
  47. package/es/contract/ga/{index.js → index.mjs} +40 -28
  48. package/es/contract/ga/index.mjs.map +1 -0
  49. package/es/encoder.d.ts +26 -0
  50. package/es/errors.d.ts +284 -0
  51. package/es/index.mjs +57 -0
  52. package/es/index.mjs.map +1 -0
  53. package/es/node-pool/{index.js → index.mjs} +15 -12
  54. package/es/node-pool/index.mjs.map +1 -0
  55. package/es/{node.js → node.mjs} +17 -11
  56. package/es/node.mjs.map +1 -0
  57. package/es/tx/builder/constants.mjs +108 -0
  58. package/es/tx/builder/constants.mjs.map +1 -0
  59. package/es/tx/builder/field-types.mjs +74 -0
  60. package/es/tx/builder/field-types.mjs.map +1 -0
  61. package/es/tx/builder/helpers.mjs +321 -0
  62. package/es/tx/builder/helpers.mjs.map +1 -0
  63. package/es/tx/builder/{index.js → index.mjs} +92 -74
  64. package/es/tx/builder/index.mjs.map +1 -0
  65. package/es/tx/builder/{schema.js → schema.mjs} +16 -172
  66. package/es/tx/builder/schema.mjs.map +1 -0
  67. package/es/tx/{index.js → index.mjs} +106 -14
  68. package/es/tx/index.mjs.map +1 -0
  69. package/es/tx/{tx-object.js → tx-object.mjs} +31 -18
  70. package/es/tx/tx-object.mjs.map +1 -0
  71. package/es/tx/{tx.js → tx.mjs} +15 -14
  72. package/es/tx/tx.mjs.map +1 -0
  73. package/es/tx/{validator.js → validator.mjs} +72 -33
  74. package/es/tx/validator.mjs.map +1 -0
  75. package/es/typings/blakejs/index.d.mjs +2 -0
  76. package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
  77. package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +10 -8
  78. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
  79. package/es/utils/aepp-wallet-communication/connection/{browser-window-message.js → browser-window-message.mjs} +25 -17
  80. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
  81. package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +7 -3
  82. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
  83. package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +15 -8
  84. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
  85. package/es/utils/aepp-wallet-communication/{helpers.js → helpers.mjs} +3 -14
  86. package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
  87. package/es/utils/aepp-wallet-communication/rpc/{aepp-rpc.js → aepp-rpc.mjs} +126 -72
  88. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
  89. package/es/utils/aepp-wallet-communication/rpc/{rpc-client.js → rpc-client.mjs} +23 -14
  90. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
  91. package/es/utils/aepp-wallet-communication/rpc/{wallet-rpc.js → wallet-rpc.mjs} +116 -91
  92. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
  93. package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
  94. package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
  95. package/es/utils/aepp-wallet-communication/{wallet-detector.js → wallet-detector.mjs} +6 -5
  96. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  97. package/es/utils/{amount-formatter.js → amount-formatter.mjs} +14 -7
  98. package/es/utils/amount-formatter.mjs.map +1 -0
  99. package/es/utils/{async-init.js → async-init.mjs} +8 -11
  100. package/es/utils/async-init.mjs.map +1 -0
  101. package/es/utils/{bignumber.js → bignumber.mjs} +2 -9
  102. package/es/utils/bignumber.mjs.map +1 -0
  103. package/es/utils/{bytes.js → bytes.mjs} +16 -8
  104. package/es/utils/bytes.mjs.map +1 -0
  105. package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
  106. package/es/utils/crypto-ts.mjs.map +1 -0
  107. package/es/utils/{crypto.js → crypto.mjs} +42 -156
  108. package/es/utils/crypto.mjs.map +1 -0
  109. package/es/utils/encoder.mjs +106 -0
  110. package/es/utils/encoder.mjs.map +1 -0
  111. package/es/utils/errors.mjs +689 -0
  112. package/es/utils/errors.mjs.map +1 -0
  113. package/es/utils/{hd-wallet.js → hd-wallet.mjs} +33 -34
  114. package/es/utils/hd-wallet.mjs.map +1 -0
  115. package/es/utils/{json-big.js → json-big.mjs} +1 -1
  116. package/es/utils/{json-big.js.map → json-big.mjs.map} +1 -1
  117. package/es/utils/{keystore.js → keystore.mjs} +63 -51
  118. package/es/utils/keystore.mjs.map +1 -0
  119. package/es/utils/{mptree.js → mptree.mjs} +21 -12
  120. package/es/utils/mptree.mjs.map +1 -0
  121. package/es/utils/{other.js → other.mjs} +2 -2
  122. package/es/utils/other.mjs.map +1 -0
  123. package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
  124. package/es/utils/{semver-satisfies.js.map → semver-satisfies.mjs.map} +1 -1
  125. package/es/utils/{string.js → string.mjs} +1 -1
  126. package/es/utils/{string.js.map → string.mjs.map} +1 -1
  127. package/es/utils/{swagger.js → swagger.mjs} +49 -15
  128. package/es/utils/swagger.mjs.map +1 -0
  129. package/package.json +49 -58
  130. package/src/account/base.js +3 -1
  131. package/src/account/memory.js +13 -8
  132. package/src/account/multiple.js +16 -6
  133. package/src/ae/aens.js +52 -58
  134. package/src/ae/aepp.js +2 -2
  135. package/src/ae/contract.js +21 -154
  136. package/src/ae/index.js +6 -4
  137. package/src/ae/oracle.js +33 -14
  138. package/src/ae/universal.js +4 -2
  139. package/src/ae/wallet.js +2 -2
  140. package/src/chain/index.js +29 -6
  141. package/src/chain/node.js +95 -65
  142. package/src/channel/handlers.js +30 -20
  143. package/src/channel/index.js +46 -16
  144. package/src/channel/internal.js +35 -30
  145. package/src/contract/aci.js +376 -0
  146. package/src/contract/compiler.js +22 -113
  147. package/src/contract/ga/helpers.js +10 -6
  148. package/src/contract/ga/index.js +31 -24
  149. package/src/index.js +9 -8
  150. package/src/node-pool/index.js +13 -10
  151. package/src/node.js +11 -10
  152. package/src/tx/builder/constants.js +100 -0
  153. package/src/tx/builder/field-types.js +61 -0
  154. package/src/tx/builder/helpers.js +99 -103
  155. package/src/tx/builder/index.js +81 -40
  156. package/src/tx/builder/schema.js +44 -132
  157. package/src/tx/index.js +101 -12
  158. package/src/tx/tx-object.js +35 -15
  159. package/src/tx/tx.js +110 -35
  160. package/src/tx/validator.js +25 -5
  161. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +11 -5
  162. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +35 -13
  163. package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
  164. package/src/utils/aepp-wallet-communication/content-script-bridge.js +14 -7
  165. package/src/utils/aepp-wallet-communication/helpers.js +6 -14
  166. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +106 -57
  167. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
  168. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +95 -53
  169. package/src/utils/aepp-wallet-communication/schema.ts +80 -0
  170. package/src/utils/aepp-wallet-communication/wallet-detector.js +6 -2
  171. package/src/utils/amount-formatter.ts +4 -3
  172. package/src/utils/async-init.js +10 -6
  173. package/src/utils/bignumber.ts +1 -9
  174. package/src/utils/bytes.ts +3 -2
  175. package/src/utils/crypto-ts.ts +2 -2
  176. package/src/utils/crypto.js +11 -155
  177. package/src/utils/encoder.ts +101 -0
  178. package/src/utils/errors.ts +683 -0
  179. package/src/utils/hd-wallet.js +11 -26
  180. package/src/utils/keystore.js +57 -53
  181. package/src/utils/mptree.ts +12 -6
  182. package/src/utils/swagger.js +68 -45
  183. package/es/account/base.js.map +0 -1
  184. package/es/account/memory.js.map +0 -1
  185. package/es/account/multiple.js.map +0 -1
  186. package/es/ae/aens.js.map +0 -1
  187. package/es/ae/aepp.js.map +0 -1
  188. package/es/ae/contract.js +0 -308
  189. package/es/ae/contract.js.map +0 -1
  190. package/es/ae/index.js.map +0 -1
  191. package/es/ae/oracle.js.map +0 -1
  192. package/es/ae/universal.js.map +0 -1
  193. package/es/ae/wallet.js.map +0 -1
  194. package/es/chain/index.js.map +0 -1
  195. package/es/chain/node.js.map +0 -1
  196. package/es/channel/handlers.js.map +0 -1
  197. package/es/channel/index.js.map +0 -1
  198. package/es/channel/internal.js.map +0 -1
  199. package/es/contract/aci/helpers.js +0 -298
  200. package/es/contract/aci/helpers.js.map +0 -1
  201. package/es/contract/aci/index.js +0 -356
  202. package/es/contract/aci/index.js.map +0 -1
  203. package/es/contract/aci/transformation.js +0 -66
  204. package/es/contract/aci/transformation.js.map +0 -1
  205. package/es/contract/compiler.js +0 -242
  206. package/es/contract/compiler.js.map +0 -1
  207. package/es/contract/ga/helpers.js +0 -22
  208. package/es/contract/ga/helpers.js.map +0 -1
  209. package/es/contract/ga/index.js.map +0 -1
  210. package/es/contract/index.js +0 -158
  211. package/es/contract/index.js.map +0 -1
  212. package/es/index.js +0 -56
  213. package/es/index.js.map +0 -1
  214. package/es/node-pool/index.js.map +0 -1
  215. package/es/node.js.map +0 -1
  216. package/es/tx/builder/helpers.js +0 -318
  217. package/es/tx/builder/helpers.js.map +0 -1
  218. package/es/tx/builder/index.js.map +0 -1
  219. package/es/tx/builder/schema.js.map +0 -1
  220. package/es/tx/index.js.map +0 -1
  221. package/es/tx/tx-object.js.map +0 -1
  222. package/es/tx/tx.js.map +0 -1
  223. package/es/tx/validator.js.map +0 -1
  224. package/es/typings/blakejs/index.d.js +0 -2
  225. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  226. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  227. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  228. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  229. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  230. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  231. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  232. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  233. package/es/utils/aepp-wallet-communication/schema.js +0 -107
  234. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  235. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  236. package/es/utils/amount-formatter.js.map +0 -1
  237. package/es/utils/async-init.js.map +0 -1
  238. package/es/utils/bignumber.js.map +0 -1
  239. package/es/utils/bytes.js.map +0 -1
  240. package/es/utils/crypto-ts.js.map +0 -1
  241. package/es/utils/crypto.js.map +0 -1
  242. package/es/utils/hd-wallet.js.map +0 -1
  243. package/es/utils/keystore.js.map +0 -1
  244. package/es/utils/mptree.js.map +0 -1
  245. package/es/utils/other.js.map +0 -1
  246. package/es/utils/swagger.js.map +0 -1
  247. package/src/contract/aci/index.js +0 -310
  248. package/src/contract/aci/transformation.js +0 -72
  249. package/src/contract/index.js +0 -159
  250. package/src/utils/aepp-wallet-communication/schema.js +0 -108
@@ -1,11 +1,21 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
1
5
  import BigNumber from 'bignumber.js';
2
- import { decode as rlpDecode, encode as rlpEncode } from 'rlp';
3
- import { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter';
4
- import { hash } from '../../utils/crypto';
5
- import { DEFAULT_FEE, FIELD_TYPES, OBJECT_ID_TX_TYPE, PREFIX_ID_TAG, TX_DESERIALIZATION_SCHEMA, TX_FEE_BASE_GAS, TX_FEE_OTHER_GAS, TX_SERIALIZATION_SCHEMA, TX_TYPE, VALIDATION_MESSAGE, VSN } from './schema';
6
- import { readInt, readId, readPointers, writeId, writeInt, buildPointers, encode, decode } from './helpers';
7
- import { toBytes } from '../../utils/bytes';
8
- import MPTree from '../../utils/mptree';
6
+ import _rlp from 'rlp';
7
+ const {
8
+ decode: rlpDecode,
9
+ encode: rlpEncode
10
+ } = _rlp;
11
+ import { AE_AMOUNT_FORMATS, formatAmount } from "../../utils/amount-formatter.mjs";
12
+ import { hash } from "../../utils/crypto.mjs";
13
+ import { Field } from "./field-types.mjs";
14
+ import { DEFAULT_FEE, FIELD_TYPES, OBJECT_ID_TX_TYPE, TX_DESERIALIZATION_SCHEMA, TX_FEE_BASE_GAS, TX_FEE_OTHER_GAS, TX_SERIALIZATION_SCHEMA, TX_TYPE, VSN } from "./schema.mjs";
15
+ import { readInt, readId, readPointers, writeId, writeInt, buildPointers, encode, decode } from "./helpers.mjs";
16
+ import { toBytes } from "../../utils/bytes.mjs";
17
+ import MPTree from "../../utils/mptree.mjs";
18
+ import { InvalidTxParamsError, SchemaNotFoundError } from "../../utils/errors.mjs";
9
19
  /**
10
20
  * JavaScript-based Transaction builder
11
21
  * @module @aeternity/aepp-sdk/es/tx/builder
@@ -26,14 +36,12 @@ function deserializeField(value, type, prefix) {
26
36
  {
27
37
  const [vm,, abi] = value;
28
38
  return {
29
- vmVersion: readInt(Buffer.from([vm])),
30
- abiVersion: readInt(Buffer.from([abi]))
39
+ vmVersion: readInt(_Buffer.from([vm])),
40
+ abiVersion: readInt(_Buffer.from([abi]))
31
41
  };
32
42
  }
33
43
 
34
44
  case FIELD_TYPES.amount:
35
- return readInt(value);
36
-
37
45
  case FIELD_TYPES.int:
38
46
  return readInt(value);
39
47
 
@@ -111,11 +119,14 @@ function deserializeField(value, type, prefix) {
111
119
  }, {});
112
120
 
113
121
  default:
122
+ if (type.prototype instanceof Field) return type.deserialize(value);
114
123
  return value;
115
124
  }
116
125
  }
117
126
 
118
- function serializeField(value, type, prefix) {
127
+ function serializeField(value, type, prefix, params) {
128
+ var _value$rlpEncoded;
129
+
119
130
  switch (type) {
120
131
  case FIELD_TYPES.amount:
121
132
  case FIELD_TYPES.int:
@@ -128,7 +139,7 @@ function serializeField(value, type, prefix) {
128
139
  return value.map(writeId);
129
140
 
130
141
  case FIELD_TYPES.bool:
131
- return Buffer.from([value ? 1 : 0]);
142
+ return _Buffer.from([value ? 1 : 0]);
132
143
 
133
144
  case FIELD_TYPES.binary:
134
145
  return decode(value, prefix);
@@ -137,10 +148,10 @@ function serializeField(value, type, prefix) {
137
148
  return decode(value, 'ss');
138
149
 
139
150
  case FIELD_TYPES.hex:
140
- return Buffer.from(value, 'hex');
151
+ return _Buffer.from(value, 'hex');
141
152
 
142
153
  case FIELD_TYPES.signatures:
143
- return value.map(Buffer.from);
154
+ return value.map(_Buffer.from);
144
155
 
145
156
  case FIELD_TYPES.payload:
146
157
  return typeof value === 'string' && value.split('_')[0] === 'ba' ? decode(value, 'ba') : toBytes(value);
@@ -152,13 +163,13 @@ function serializeField(value, type, prefix) {
152
163
  return buildPointers(value);
153
164
 
154
165
  case FIELD_TYPES.rlpBinary:
155
- return value.rlpEncoded ?? value;
166
+ return (_value$rlpEncoded = value.rlpEncoded) !== null && _value$rlpEncoded !== void 0 ? _value$rlpEncoded : value;
156
167
 
157
168
  case FIELD_TYPES.mptrees:
158
169
  return value.map(t => t.serialize());
159
170
 
160
171
  case FIELD_TYPES.ctVersion:
161
- return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);
172
+ return _Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);
162
173
 
163
174
  case FIELD_TYPES.callReturnType:
164
175
  switch (value) {
@@ -176,60 +187,56 @@ function serializeField(value, type, prefix) {
176
187
  }
177
188
 
178
189
  default:
190
+ if (type.prototype instanceof Field) return type.serialize(value, params);
179
191
  return value;
180
192
  }
181
193
  }
182
194
 
183
- function validateField(value, key, type, prefix) {
184
- const assert = (valid, params) => valid ? {} : {
185
- [key]: VALIDATION_MESSAGE[type](params)
186
- }; // All fields are required
187
-
188
-
189
- if (value === undefined || value === null) return {
190
- [key]: 'Field is required'
191
- }; // Validate type of value
195
+ function validateField(value, type, prefix) {
196
+ // All fields are required
197
+ if (value === undefined || value === null) return 'Field is required'; // Validate type of value
192
198
 
193
199
  switch (type) {
194
200
  case FIELD_TYPES.amount:
195
201
  case FIELD_TYPES.int:
196
202
  {
197
- const isMinusValue = (!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).lt(0);
198
- return assert((!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).gte(0), {
199
- value,
200
- isMinusValue
201
- });
203
+ if (isNaN(value) && !BigNumber.isBigNumber(value)) {
204
+ return `${value} is not of type Number or BigNumber`;
205
+ }
206
+
207
+ if (new BigNumber(value).lt(0)) return `${value} must be >= 0`;
208
+ return;
202
209
  }
203
210
 
204
211
  case FIELD_TYPES.id:
205
212
  {
206
213
  const prefixes = Array.isArray(prefix) ? prefix : [prefix];
207
- const p = prefixes.find(p => p === value.split('_')[0]);
208
- return assert(p && PREFIX_ID_TAG[value.split('_')[0]], {
209
- value,
210
- prefix
211
- });
212
- }
213
214
 
214
- case FIELD_TYPES.binary:
215
- return assert(value.split('_')[0] === prefix, {
216
- prefix,
217
- value
218
- });
215
+ if (!prefixes.includes(value.split('_')[0])) {
216
+ return `'${value}' prefix doesn't match expected prefix '${prefix}'`;
217
+ }
219
218
 
220
- case FIELD_TYPES.string:
221
- return assert(true);
219
+ return;
220
+ }
222
221
 
223
222
  case FIELD_TYPES.ctVersion:
224
- return assert(typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'abiVersion') && Object.prototype.hasOwnProperty.call(value, 'vmVersion'));
223
+ if (!(value !== null && value !== void 0 && value.abiVersion) || !(value !== null && value !== void 0 && value.vmVersion)) {
224
+ return 'Value must be an object with "vmVersion" and "abiVersion" fields';
225
+ }
226
+
227
+ return;
225
228
 
226
229
  case FIELD_TYPES.pointers:
227
- return assert(Array.isArray(value) && !value.find(e => e !== Object(e)), {
228
- value
229
- });
230
+ if (!Array.isArray(value)) return 'Value must be of type Array';
231
+
232
+ if (value.some(p => !(p !== null && p !== void 0 && p.key) || !(p !== null && p !== void 0 && p.id))) {
233
+ return 'Value must contains only object\'s like \'{key: "account_pubkey", id: "ak_lkamsflkalsdalksdlasdlasdlamd"}\'';
234
+ }
235
+
236
+ if (value.length > 32) {
237
+ return `Expected 32 pointers or less, got ${value.length} instead`;
238
+ }
230
239
 
231
- default:
232
- return {};
233
240
  }
234
241
  }
235
242
 
@@ -401,13 +408,17 @@ export function validateParams(params, schema, _ref8) {
401
408
  let {
402
409
  excludeKeys = []
403
410
  } = _ref8;
404
- return schema.filter(_ref9 => {
411
+ return Object.fromEntries(schema // TODO: allow optional keys in schema
412
+ .filter(_ref9 => {
405
413
  let [key] = _ref9;
406
- return !excludeKeys.includes(key) && key !== 'payload';
407
- }).reduce((acc, _ref10) => {
414
+ return !excludeKeys.includes(key) && !['payload', 'nameFee', 'deposit'].includes(key);
415
+ }).map(_ref10 => {
408
416
  let [key, type, prefix] = _ref10;
409
- return Object.assign(acc, validateField(params[key], key, type, prefix));
410
- }, {});
417
+ return [key, validateField(params[key], type, prefix)];
418
+ }).filter(_ref11 => {
419
+ let [, message] = _ref11;
420
+ return message;
421
+ }));
411
422
  }
412
423
  /**
413
424
  * Build binary transaction
@@ -416,8 +427,8 @@ export function validateParams(params, schema, _ref8) {
416
427
  * @param {Object} params Object with tx params
417
428
  * @param {Array} schema Transaction schema
418
429
  * @param {Object} [options={}] options
419
- * @param {Array} [options.excludeKeys=[]] excludeKeys Array of keys to exclude for validation and build
420
- * @param {String} [options.denomination='aettos'] denomination Denomination of amounts (default: aettos)
430
+ * @param {String[]} [options.excludeKeys=[]] Array of keys to exclude for validation and build
431
+ * @param {String} [options.denomination='aettos'] Denomination of amounts
421
432
  * @throws {Error} Validation error
422
433
  * @return {Array} Array with binary fields of transaction
423
434
  */
@@ -427,8 +438,8 @@ export function buildRawTx(params, schema) {
427
438
  excludeKeys = [],
428
439
  denomination = AE_AMOUNT_FORMATS.AETTOS
429
440
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
430
- const filteredSchema = schema.filter(_ref11 => {
431
- let [key] = _ref11;
441
+ const filteredSchema = schema.filter(_ref12 => {
442
+ let [key] = _ref12;
432
443
  return !excludeKeys.includes(key);
433
444
  }); // Transform `amount` type fields to `aettos`
434
445
 
@@ -441,12 +452,12 @@ export function buildRawTx(params, schema) {
441
452
  });
442
453
 
443
454
  if (Object.keys(valid).length) {
444
- throw new Error('Transaction build error. ' + JSON.stringify(valid));
455
+ throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid));
445
456
  }
446
457
 
447
- return filteredSchema.map(_ref12 => {
448
- let [key, fieldType, prefix] = _ref12;
449
- return serializeField(params[key], fieldType, prefix);
458
+ return filteredSchema.map(_ref13 => {
459
+ let [key, fieldType, prefix] = _ref13;
460
+ return serializeField(params[key], fieldType, prefix, params);
450
461
  });
451
462
  }
452
463
  /**
@@ -459,8 +470,8 @@ export function buildRawTx(params, schema) {
459
470
  */
460
471
 
461
472
  export function unpackRawTx(binary, schema) {
462
- return schema.reduce((acc, _ref13, index) => {
463
- let [key, fieldType, prefix] = _ref13;
473
+ return schema.reduce((acc, _ref14, index) => {
474
+ let [key, fieldType, prefix] = _ref14;
464
475
  return Object.assign(acc, {
465
476
  [key]: deserializeField(binary[index], fieldType, prefix)
466
477
  });
@@ -474,22 +485,22 @@ export function unpackRawTx(binary, schema) {
474
485
  * @return {Object} Schema
475
486
  */
476
487
 
477
- const getSchema = _ref14 => {
488
+ const getSchema = _ref15 => {
478
489
  let {
479
490
  vsn,
480
491
  objId,
481
492
  type
482
- } = _ref14;
493
+ } = _ref15;
483
494
  const isDeserialize = !!objId;
484
495
  const firstKey = isDeserialize ? objId : type;
485
496
  const schema = isDeserialize ? TX_DESERIALIZATION_SCHEMA : TX_SERIALIZATION_SCHEMA;
486
497
 
487
498
  if (!schema[firstKey]) {
488
- throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`);
499
+ throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`);
489
500
  }
490
501
 
491
502
  if (!schema[firstKey][vsn]) {
492
- throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`);
503
+ throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`);
493
504
  }
494
505
 
495
506
  return schema[firstKey][vsn];
@@ -501,10 +512,13 @@ const getSchema = _ref14 => {
501
512
  * @param {Object} params Object with tx params
502
513
  * @param {String} type Transaction type
503
514
  * @param {Object} [options={}] options
504
- * @param {Object} [options.excludeKeys] excludeKeys Array of keys to exclude for validation and build
515
+ * @param {String[]} [options.excludeKeys] Array of keys to exclude for validation and build
505
516
  * @param {String} [options.prefix] Prefix of transaction
506
517
  * @throws {Error} Validation error
507
- * @return {Object} { tx, rlpEncoded, binary } Object with tx -> Base64Check transaction hash with 'tx_' prefix, rlp encoded transaction and binary transaction
518
+ * @returns {Object} object
519
+ * @returns {String} object.tx Base64Check transaction hash with 'tx_' prefix
520
+ * @returns {Buffer} object.rlpEncoded rlp encoded transaction
521
+ * @returns {Array<Buffer>} object.binary binary transaction
508
522
  */
509
523
 
510
524
 
@@ -539,10 +553,14 @@ export function buildTx(params, type) {
539
553
  * Unpack transaction hash
540
554
  * @function
541
555
  * @alias module:@aeternity/aepp-sdk/es/tx/builder
542
- * @param {String|Buffer} encodedTx String or RLP encoded transaction array (if fromRlpBinary flag is true)
556
+ * @param {String|Buffer} encodedTx String or RLP encoded transaction array
557
+ * (if fromRlpBinary flag is true)
543
558
  * @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)
544
559
  * @param {String} prefix - Prefix of data
545
- * @return {Object} { tx, rlpEncoded, binary } Object with tx -> Object with transaction param's, rlp encoded transaction and binary transaction
560
+ * @returns {Object} object
561
+ * @returns {Object} object.tx Object with transaction param's
562
+ * @returns {Buffer} object.rlpEncoded rlp encoded transaction
563
+ * @returns {Array<Buffer>} object.binary binary transaction
546
564
  */
547
565
 
548
566
  export function unpackTx(encodedTx) {
@@ -585,4 +603,4 @@ export default {
585
603
  validateParams,
586
604
  buildTxHash
587
605
  };
588
- //# sourceMappingURL=index.js.map
606
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tx/builder/index.js"],"names":["BigNumber","AE_AMOUNT_FORMATS","formatAmount","hash","Field","DEFAULT_FEE","FIELD_TYPES","OBJECT_ID_TX_TYPE","TX_DESERIALIZATION_SCHEMA","TX_FEE_BASE_GAS","TX_FEE_OTHER_GAS","TX_SERIALIZATION_SCHEMA","TX_TYPE","VSN","readInt","readId","readPointers","writeId","writeInt","buildPointers","encode","decode","toBytes","MPTree","InvalidTxParamsError","SchemaNotFoundError","ORACLE_TTL_TYPES","delta","block","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","amount","int","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","prototype","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","undefined","isNaN","isBigNumber","lt","prefixes","Array","isArray","includes","some","p","key","length","transformParams","schema","denomination","filter","_","schemaKeys","k","Object","entries","getOracleRelativeTtl","txType","ttlKey","oracleRegister","oracleExtend","oracleQuery","oracleResponse","calculateMinFee","gas","vsn","multiplier","times","actualFee","buildFee","fee","expected","eq","txWithOutFee","buildTx","txSize","plus","relativeTtl","innerTxSize","gaMeta","payingFor","tx","encodedTx","calculateFee","showWarning","console","warn","validateParams","excludeKeys","fromEntries","message","buildRawTx","AETTOS","filteredSchema","valid","keys","JSON","stringify","fieldType","unpackRawTx","index","assign","getSchema","objId","isDeserialize","firstKey","tag","e","rlpEncode","txObject","fromRlpBinary","rlpDecode","buildTxHash","rawTx","data","startsWith"],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js'\nimport { decode as rlpDecode, encode as rlpEncode } from 'rlp'\nimport { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'\nimport { hash } from '../../utils/crypto'\nimport { Field } from './field-types'\n\nimport {\n DEFAULT_FEE,\n FIELD_TYPES,\n OBJECT_ID_TX_TYPE,\n TX_DESERIALIZATION_SCHEMA,\n TX_FEE_BASE_GAS,\n TX_FEE_OTHER_GAS,\n TX_SERIALIZATION_SCHEMA,\n TX_TYPE,\n VSN\n} from './schema'\nimport {\n readInt,\n readId,\n readPointers,\n writeId,\n writeInt,\n buildPointers,\n encode,\n decode\n} from './helpers'\nimport { toBytes } from '../../utils/bytes'\nimport MPTree from '../../utils/mptree'\nimport { InvalidTxParamsError, SchemaNotFoundError } from '../../utils/errors'\n\n/**\n * JavaScript-based Transaction builder\n * @module @aeternity/aepp-sdk/es/tx/builder\n * @export TxBuilder\n * @example import { TxBuilder } from '@aeternity/aepp-sdk'\n */\n\nconst ORACLE_TTL_TYPES = {\n delta: 'delta',\n block: 'block'\n}\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField (value, type, prefix) {\n if (!value) return ''\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value\n return { vmVersion: readInt(Buffer.from([vm])), abiVersion: readInt(Buffer.from([abi])) }\n }\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\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)\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(value, true)\n case FIELD_TYPES.rlpBinaries:\n return value.map(v => unpackTx(v, true))\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 => unpackTx(v, true))\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)]\n case FIELD_TYPES.mptrees:\n return value.map(t => new MPTree(t))\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0': return 'ok'\n case '1': return 'error'\n case '2': return 'revert'\n default: return value\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value\n .reduce(\n (acc, [funHash, fnName, argType, outType]) =>\n ({ ...acc, [fnName.toString()]: { funHash, argType, outType } }),\n {}\n )\n default:\n if (type.prototype instanceof Field) return type.deserialize(value)\n return value\n }\n}\n\nfunction serializeField (value, type, prefix, params) {\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\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 ? 1 : 0])\n case FIELD_TYPES.binary:\n return decode(value, prefix)\n case FIELD_TYPES.stateTree:\n return decode(value, 'ss')\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, '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 => 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.prototype instanceof Field) return type.serialize(value, params)\n return value\n }\n}\n\nfunction validateField (value, type, prefix) {\n // All fields are required\n if (value === undefined || 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 if (isNaN(value) && !BigNumber.isBigNumber(value)) {\n return `${value} is not of type Number or BigNumber`\n }\n if (new BigNumber(value).lt(0)) return `${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 return `'${value}' prefix doesn't match expected prefix '${prefix}'`\n }\n return\n }\n case FIELD_TYPES.ctVersion:\n if (!value?.abiVersion || !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 => !p?.key || !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 (params, schema, { denomination } = {}) {\n params = schema\n .filter(([_, t]) => t === FIELD_TYPES.amount)\n .reduce(\n (acc, [key]) => ({ ...params, [key]: formatAmount(params[key], { denomination }) }),\n params\n )\n const schemaKeys = schema.map(([k]) => k)\n return Object\n .entries(params)\n .reduce(\n (acc, [key, value]) => {\n if (schemaKeys.includes(key)) acc[key] = value\n if (['oracleTtl', 'queryTtl', 'responseTtl'].includes(key)) {\n acc[`${key}Type`] = value.type === ORACLE_TTL_TYPES.delta ? 0 : 1\n acc[`${key}Value`] = value.value\n }\n return acc\n },\n {}\n )\n}\n\n// INTERFACE\n\nfunction getOracleRelativeTtl (params, txType) {\n const ttlKey = {\n [TX_TYPE.oracleRegister]: 'oracleTtl',\n [TX_TYPE.oracleExtend]: 'oracleTtl',\n [TX_TYPE.oracleQuery]: 'queryTtl',\n [TX_TYPE.oracleResponse]: 'responseTtl'\n }[txType]\n\n if (params[ttlKey] || params[`${ttlKey}Value`]) {\n return params[`${ttlKey}Value`] || params[ttlKey].value\n }\n return 1\n}\n\n/**\n * Calculate min fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/index\n * @rtype (txType, { gas = 0, params }) => String\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateMinFee('spendTx', { gas, params })\n */\nexport function calculateMinFee (txType, { gas = 0, params, vsn }) {\n const multiplier = BigNumber(1e9) // 10^9 GAS_PRICE\n if (!params) return BigNumber(DEFAULT_FEE).times(multiplier).toString(10)\n\n let actualFee = buildFee(txType, { params: { ...params, fee: 0 }, multiplier, gas, vsn })\n let expected = BigNumber(0)\n\n while (!actualFee.eq(expected)) {\n actualFee = buildFee(txType, { params: { ...params, fee: actualFee }, multiplier, gas, vsn })\n expected = actualFee\n }\n return expected.toString(10)\n}\n\n/**\n * Calculate fee based on tx type and params\n * @param txType\n * @param params\n * @param gas\n * @param multiplier\n * @param vsn\n * @return {BigNumber}\n */\nfunction buildFee (txType, { params, gas = 0, multiplier, vsn }) {\n const { rlpEncoded: txWithOutFee } = buildTx({ ...params }, txType, { vsn })\n const txSize = txWithOutFee.length\n return TX_FEE_BASE_GAS(txType)\n .plus(TX_FEE_OTHER_GAS(txType, txSize, {\n relativeTtl: getOracleRelativeTtl(params, txType),\n innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)\n ? params.tx.tx.encodedTx.rlpEncoded.length\n : 0\n }))\n .times(multiplier)\n}\n\n/**\n * Calculate fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @rtype (fee, txType, gas = 0) => String\n * @param {String|Number} fee - fee\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateFee(null, 'spendTx', { gas, params })\n */\nexport function calculateFee (fee = 0, txType, { gas = 0, params, showWarning = true, vsn } = {}) {\n if (!params && showWarning) console.warn(`Can't build transaction fee, we will use DEFAULT_FEE(${DEFAULT_FEE})`)\n\n return fee || calculateMinFee(txType, { params, gas, vsn })\n}\n\n/**\n * Validate transaction params\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Array} excludeKeys Array of keys to exclude for validation\n * @return {Object} Object with validation errors\n */\nexport function validateParams (params, schema, { excludeKeys = [] }) {\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key) &&\n !['payload', 'nameFee', 'deposit'].includes(key))\n .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])\n .filter(([, message]) => message)\n )\n}\n\n/**\n * Build binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Object} [options={}] options\n * @param {String[]} [options.excludeKeys=[]] Array of keys to exclude for validation and build\n * @param {String} [options.denomination='aettos'] Denomination of amounts\n * @throws {Error} Validation error\n * @return {Array} Array with binary fields of transaction\n */\nexport function buildRawTx (\n params,\n schema,\n { excludeKeys = [], denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n) {\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) {\n throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))\n }\n\n return filteredSchema\n .map(([key, fieldType, prefix]) => serializeField(params[key], fieldType, prefix, params))\n}\n\n/**\n * Unpack binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Array} binary Array with binary transaction field's\n * @param {Array} schema Transaction schema\n * @return {Object} Object with transaction field's\n */\nexport function unpackRawTx (binary, schema) {\n return schema\n .reduce(\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 * Get transaction serialization/deserialization schema\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {{ vsn: String, objId: Number, type: String }}\n * @throws {Error} Schema not found error\n * @return {Object} Schema\n */\nconst getSchema = ({ vsn, objId, type }) => {\n const isDeserialize = !!objId\n const firstKey = isDeserialize ? objId : type\n const schema = isDeserialize ? TX_DESERIALIZATION_SCHEMA : TX_SERIALIZATION_SCHEMA\n\n if (!schema[firstKey]) {\n throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`)\n }\n if (!schema[firstKey][vsn]) {\n throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`)\n }\n return schema[firstKey][vsn]\n}\n\n/**\n * Build transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {String} type Transaction type\n * @param {Object} [options={}] options\n * @param {String[]} [options.excludeKeys] Array of keys to exclude for validation and build\n * @param {String} [options.prefix] Prefix of transaction\n * @throws {Error} Validation error\n * @returns {Object} object\n * @returns {String} object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns {Buffer} object.rlpEncoded rlp encoded transaction\n * @returns {Array<Buffer>} object.binary binary transaction\n */\nexport function buildTx (\n params,\n type,\n { excludeKeys = [], prefix = 'tx', vsn = VSN, denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n) {\n const [schema, tag] = getSchema({ type, vsn })\n const binary = buildRawTx(\n { ...params, VSN: vsn, tag },\n schema,\n { excludeKeys, denomination: params.denomination || denomination }\n ).filter(e => e !== undefined)\n\n const rlpEncoded = rlpEncode(binary)\n const tx = encode(rlpEncoded, prefix)\n\n return { tx, rlpEncoded, binary, txObject: unpackRawTx(binary, schema) }\n}\n\n/**\n * Unpack transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String|Buffer} encodedTx String or RLP encoded transaction array\n * (if fromRlpBinary flag is true)\n * @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)\n * @param {String} prefix - Prefix of data\n * @returns {Object} object\n * @returns {Object} object.tx Object with transaction param's\n * @returns {Buffer} object.rlpEncoded rlp encoded transaction\n * @returns {Array<Buffer>} object.binary binary transaction\n */\nexport function unpackTx (encodedTx, fromRlpBinary = false, prefix = 'tx') {\n const rlpEncoded = fromRlpBinary ? encodedTx : decode(encodedTx, prefix)\n const binary = rlpDecode(rlpEncoded)\n\n const objId = readInt(binary[0])\n const vsn = readInt(binary[1])\n const [schema] = getSchema({ objId, vsn })\n\n return { txType: OBJECT_ID_TX_TYPE[objId], tx: unpackRawTx(binary, schema), rlpEncoded, binary }\n}\n\n/**\n * Build a transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String | Buffer} rawTx base64 or rlp encoded transaction\n * @return {String} Transaction hash\n */\nexport function buildTxHash (rawTx) {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx, 'tx') : rawTx\n return encode(hash(data), 'th')\n}\n\nexport default {\n calculateMinFee,\n calculateFee,\n unpackTx,\n unpackRawTx,\n buildTx,\n buildRawTx,\n validateParams,\n buildTxHash\n}\n"],"file":"index.mjs"}