@aeternity/aepp-sdk 12.0.0 → 12.1.2

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 +20765 -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 +36 -34
  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 +172 -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
@@ -0,0 +1,16 @@
1
+ import coinAmount from './coin-amount';
2
+ import { IllegalArgumentError } from '../../../utils/errors';
3
+ import { MIN_GAS_PRICE } from '../constants';
4
+
5
+ export default {
6
+ ...coinAmount,
7
+
8
+ serializeAettos(value: string | undefined = MIN_GAS_PRICE.toString()): string {
9
+ if (+value < MIN_GAS_PRICE) {
10
+ throw new IllegalArgumentError(`Gas price ${value.toString()} must be bigger then ${MIN_GAS_PRICE}`);
11
+ }
12
+ return value;
13
+ },
14
+
15
+ serialize: coinAmount.serializeOptional,
16
+ };
@@ -0,0 +1,45 @@
1
+ import _field from './field';
2
+ import _uInt from './u-int';
3
+ import _shortUInt from './short-u-int';
4
+ import _coinAmount from './coin-amount';
5
+
6
+ import _deposit from './deposit';
7
+ import _fee from './fee';
8
+ import _gasLimit from './gas-limit';
9
+ import _gasPrice from './gas-price';
10
+ import _name from './name';
11
+ import _nameFee from './name-fee';
12
+ import _nameId from './name-id';
13
+
14
+ // TODO: remove after fixing https://github.com/Gerrit0/typedoc-plugin-missing-exports/issues/15
15
+ const field = _field;
16
+ const uInt = _uInt;
17
+ const shortUInt = _shortUInt;
18
+ const coinAmount = _coinAmount;
19
+
20
+ const deposit = _deposit;
21
+ const fee = _fee;
22
+ const gasLimit = _gasLimit;
23
+ const gasPrice = _gasPrice;
24
+ const name = _name;
25
+ const nameFee = _nameFee;
26
+ const nameId = _nameId;
27
+
28
+ export type Field = typeof field | typeof uInt | typeof shortUInt | typeof coinAmount
29
+ | typeof deposit | typeof fee | typeof gasLimit | typeof gasPrice | typeof name | typeof nameFee
30
+ | typeof nameId;
31
+
32
+ export {
33
+ field,
34
+ uInt,
35
+ shortUInt,
36
+ coinAmount,
37
+
38
+ deposit,
39
+ fee,
40
+ gasLimit,
41
+ gasPrice,
42
+ name,
43
+ nameFee,
44
+ nameId,
45
+ };
@@ -0,0 +1,32 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { getMinimumNameFee } from '../helpers';
3
+ import { InsufficientNameFeeError } from '../../../utils/errors';
4
+ import { Int } from './u-int';
5
+ import coinAmount from './coin-amount';
6
+ import { AensName } from '../constants';
7
+
8
+ export default {
9
+ ...coinAmount,
10
+
11
+ serializeAettos(
12
+ _value: string | undefined,
13
+ txFields: { name: AensName },
14
+ ): string {
15
+ const minNameFee = getMinimumNameFee(txFields.name);
16
+ const value = new BigNumber(_value ?? minNameFee);
17
+ if (minNameFee.gt(value)) throw new InsufficientNameFeeError(value, minNameFee);
18
+ return value.toFixed();
19
+ },
20
+
21
+ /**
22
+ * @param value - AENS name fee Buffer
23
+ * @param txFields - Transaction fields
24
+ * @param txFields.name - AENS Name in transaction
25
+ */
26
+ serialize(
27
+ value: Int | undefined,
28
+ txFields: { name: AensName } & Parameters<typeof coinAmount['serialize']>[1],
29
+ ): Buffer {
30
+ return coinAmount.serializeOptional.call(this, value, txFields);
31
+ },
32
+ };
@@ -0,0 +1,20 @@
1
+ import { AensName } from '../constants';
2
+ import { produceNameId, isNameValid } from '../helpers';
3
+ import { writeId, readId } from '../address';
4
+ import { Encoded } from '../../../utils/encoder';
5
+
6
+ export default {
7
+ /**
8
+ * @param value - AENS name ID
9
+ */
10
+ serialize(value: AensName | Encoded.Name): Buffer {
11
+ return writeId(isNameValid(value) ? produceNameId(value) : value);
12
+ },
13
+
14
+ /**
15
+ * @param value - AENS name ID Buffer
16
+ */
17
+ deserialize(value: Buffer): Encoded.Name {
18
+ return readId(value) as Encoded.Name;
19
+ },
20
+ };
@@ -0,0 +1,18 @@
1
+ import field from './field';
2
+ import { AensName } from '../constants';
3
+
4
+ export default {
5
+ /**
6
+ * @param value - AENS name
7
+ */
8
+ serialize(value: AensName): Buffer {
9
+ return field.serialize(value);
10
+ },
11
+
12
+ /**
13
+ * @param value - AENS name
14
+ */
15
+ deserialize(value: Buffer): AensName {
16
+ return field.deserialize(value) as AensName;
17
+ },
18
+ };
@@ -0,0 +1,11 @@
1
+ import uInt from './u-int';
2
+
3
+ export default {
4
+ serialize(value: number): Buffer {
5
+ return uInt.serialize(value);
6
+ },
7
+
8
+ deserialize(value: Buffer): number {
9
+ return +uInt.deserialize(value);
10
+ },
11
+ };
@@ -0,0 +1,16 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { readInt, writeInt } from '../helpers';
3
+ import { ArgumentError } from '../../../utils/errors';
4
+
5
+ export type Int = number | string | BigNumber;
6
+
7
+ export default {
8
+ serialize(value: Int): Buffer {
9
+ if (value < 0) throw new ArgumentError('value', 'greater or equal to 0', value);
10
+ return writeInt(value);
11
+ },
12
+
13
+ deserialize(value: Buffer): string {
14
+ return readInt(value);
15
+ },
16
+ };
@@ -1,253 +1,248 @@
1
- import BigNumber from 'bignumber.js'
2
- import { hash, salt } from '../../utils/crypto'
3
- import { encode, decode, EncodedData, EncodingType } from '../../utils/encoder'
4
- import { toBytes } from '../../utils/bytes'
5
- import { concatBuffers } from '../../utils/other'
1
+ import BigNumber from 'bignumber.js';
2
+ import { genSalt, hash } from '../../utils/crypto';
6
3
  import {
7
- ID_TAG_PREFIX,
8
- PREFIX_ID_TAG,
4
+ decode, encode, Encoded, Encoding,
5
+ } from '../../utils/encoder';
6
+ import { toBytes } from '../../utils/bytes';
7
+ import { concatBuffers } from '../../utils/other';
8
+ import {
9
+ AensName,
9
10
  NAME_BID_RANGES,
10
- NAME_FEE_BID_INCREMENT,
11
11
  NAME_BID_TIMEOUT_BLOCKS,
12
+ NAME_FEE_BID_INCREMENT,
12
13
  NAME_MAX_LENGTH_FEE,
13
- POINTER_KEY_BY_PREFIX,
14
- AensName
15
- } from './constants'
16
- import { ceil } from '../../utils/bignumber'
17
- import {
18
- TagNotFoundError,
19
- PrefixNotFoundError,
20
- IllegalBidFeeError,
21
- ArgumentError
22
- } from '../../utils/errors'
14
+ } from './constants';
15
+ import { ceil } from '../../utils/bignumber';
16
+ import { ArgumentError, IllegalBidFeeError } from '../../utils/errors';
17
+ import { NamePointer } from '../../apis/node';
18
+ import { readId, writeId } from './address';
23
19
 
24
20
  /**
25
21
  * JavaScript-based Transaction builder helper function's
26
22
  */
27
23
 
28
- export const createSalt = salt
29
-
30
- export { encode, decode }
31
-
32
- export interface Pointer {
33
- key: string
34
- id: string
35
- }
36
-
37
24
  /**
38
25
  * Build a contract public key
26
+ * @category contract
39
27
  * @param ownerId - The public key of the owner account
40
28
  * @param nonce - the nonce of the transaction
41
29
  * @returns Contract public key
42
30
  */
43
- export function buildContractId (ownerId: EncodedData<'ak'>, nonce: number | BigNumber): EncodedData<'ct'> {
44
- const ownerIdAndNonce = Buffer.from([...decode(ownerId), ...toBytes(nonce)])
45
- const b2bHash = hash(ownerIdAndNonce)
46
- return encode(b2bHash, 'ct')
31
+ export function buildContractId(
32
+ ownerId: Encoded.AccountAddress,
33
+ nonce: number | BigNumber,
34
+ ): Encoded.ContractAddress {
35
+ const ownerIdAndNonce = Buffer.from([...decode(ownerId), ...toBytes(nonce)]);
36
+ const b2bHash = hash(ownerIdAndNonce);
37
+ return encode(b2bHash, Encoding.ContractAddress);
47
38
  }
48
39
 
49
40
  /**
50
41
  * Build a oracle query id
42
+ * @category oracle
51
43
  * @param senderId - The public key of the sender account
52
44
  * @param nonce - the nonce of the transaction
53
45
  * @param oracleId - The oracle public key
54
46
  * @returns Contract public key
55
47
  */
56
- export function oracleQueryId (
57
- senderId: EncodedData<'ak'>,
48
+ export function oracleQueryId(
49
+ senderId: Encoded.AccountAddress,
58
50
  nonce: number | BigNumber | string,
59
- oracleId: EncodedData<'ok'>
60
- ): EncodedData<'oq'> {
61
- function _int32 (val: number | string | BigNumber): Buffer {
62
- const nonceBE = toBytes(val, true)
63
- return concatBuffers([Buffer.alloc(32 - nonceBE.length), nonceBE])
51
+ oracleId: Encoded.OracleAddress,
52
+ ): Encoded.OracleQueryId {
53
+ function _int32(val: number | string | BigNumber): Buffer {
54
+ const nonceBE = toBytes(val, true);
55
+ return concatBuffers([Buffer.alloc(32 - nonceBE.length), nonceBE]);
64
56
  }
65
57
 
66
58
  const b2bHash = hash(
67
- Buffer.from([...decode(senderId), ..._int32(nonce), ...decode(oracleId)]))
68
- return encode(b2bHash, 'oq')
59
+ Buffer.from([...decode(senderId), ..._int32(nonce), ...decode(oracleId)]),
60
+ );
61
+ return encode(b2bHash, Encoding.OracleQueryId);
69
62
  }
70
63
 
71
64
  /**
72
65
  * Format the salt into a 64-byte hex string
66
+ * @category transaction builder
73
67
  * @param salt - Random number
74
68
  * @returns Zero-padded hex string of salt
75
69
  */
76
- export function formatSalt (salt: number): Buffer {
77
- return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex')
70
+ export function formatSalt(salt: number): Buffer {
71
+ return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex');
78
72
  }
79
73
 
80
74
  /**
81
75
  * Encode an AENS name
82
- *
76
+ * @category AENS
83
77
  * @param name - Name to encode
84
78
  * @returns `nm_` prefixed encoded AENS name
85
79
  */
86
- export function produceNameId (name: AensName): EncodedData<'nm'> {
87
- return encode(hash(name.toLowerCase()), 'nm')
80
+ export function produceNameId(name: AensName): Encoded.Name {
81
+ return encode(hash(name.toLowerCase()), Encoding.Name);
88
82
  }
89
83
 
90
84
  /**
91
85
  * Generate the commitment hash by hashing the formatted salt and
92
86
  * name, base 58 encoding the result and prepending 'cm_'
93
- *
87
+ * @category transaction builder
94
88
  * @param name - Name to be registered
95
89
  * @param salt - Random salt
96
90
  * @returns Commitment hash
97
91
  */
98
- export function commitmentHash (name: AensName, salt: number = createSalt()): EncodedData<'cm'> {
99
- return encode(hash(concatBuffers([Buffer.from(name.toLowerCase()), formatSalt(salt)])), 'cm')
100
- }
101
-
102
- /**
103
- * Utility function to create and _id type
104
- * @param hashId - Encoded hash
105
- * @returns Buffer Buffer with ID tag and decoded HASh
106
- */
107
- export function writeId (hashId: string): Buffer {
108
- if (typeof hashId !== 'string') throw new ArgumentError('hashId', 'a string', hashId)
109
- const prefix = hashId.slice(0, 2) as keyof typeof PREFIX_ID_TAG
110
- const idTag = PREFIX_ID_TAG[prefix]
111
- if (idTag == null) throw new TagNotFoundError(prefix)
112
- return Buffer.from([...toBytes(idTag), ...decode(hashId as EncodedData<EncodingType>)])
113
- }
114
-
115
- /**
116
- * Utility function to read and _id type
117
- * @param buf - Data
118
- * @returns Encoided hash string with prefix
119
- */
120
- export function readId (buf: Buffer): string {
121
- const tag = Buffer.from(buf).readUIntBE(0, 1)
122
- const prefix = ID_TAG_PREFIX[tag]
123
- if (prefix == null) throw new PrefixNotFoundError(tag)
124
- return encode(buf.slice(1, buf.length), prefix)
92
+ export function commitmentHash(
93
+ name: AensName,
94
+ salt: number = genSalt(),
95
+ ): Encoded.Commitment {
96
+ return encode(
97
+ hash(concatBuffers([Buffer.from(name.toLowerCase()), formatSalt(salt)])),
98
+ Encoding.Commitment,
99
+ );
125
100
  }
126
101
 
127
102
  /**
128
103
  * Utility function to convert int to bytes
104
+ * @category transaction builder
129
105
  * @param val - Value
130
106
  * @returns Buffer Buffer from number(BigEndian)
131
107
  */
132
- export function writeInt (val: number | string | BigNumber): Buffer {
133
- return toBytes(val, true)
108
+ export function writeInt(val: number | string | BigNumber): Buffer {
109
+ return toBytes(val, true);
134
110
  }
135
111
 
136
112
  /**
137
113
  * Utility function to convert bytes to int
114
+ * @category transaction builder
138
115
  * @param buf - Value
139
116
  * @returns Buffer Buffer from number(BigEndian)
140
117
  */
141
- export function readInt (buf: Buffer = Buffer.from([])): string {
142
- return new BigNumber(Buffer.from(buf).toString('hex'), 16).toString(10)
118
+ export function readInt(buf: Buffer = Buffer.from([])): string {
119
+ return new BigNumber(Buffer.from(buf).toString('hex'), 16).toString(10);
143
120
  }
144
121
 
145
122
  /**
146
123
  * Helper function to build pointers for name update TX
124
+ * @category transaction builder
147
125
  * @param pointers - Array of pointers
148
126
  * `([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])`
149
127
  * @returns Serialized pointers array
150
128
  */
151
- export function buildPointers (pointers: Pointer[]): Buffer[][] {
129
+ export function buildPointers(pointers: NamePointer[]): Buffer[][] {
152
130
  return pointers.map(
153
- p => [
131
+ (p) => [
154
132
  toBytes(p.key),
155
- writeId(p.id)
156
- ]
157
- )
133
+ writeId(p.id as Parameters<typeof writeId>[0]),
134
+ ],
135
+ );
158
136
  }
159
137
 
160
138
  /**
161
139
  * Helper function to read pointers from name update TX
140
+ * @category transaction builder
162
141
  * @param pointers - Array of pointers
163
142
  * @returns Deserialize pointer array
164
143
  */
165
- export function readPointers (pointers: Array<[key: string, id: Buffer]>): Pointer[] {
144
+ export function readPointers(pointers: Array<[key: string, id: Buffer]>): NamePointer[] {
166
145
  return pointers.map(
167
- ([key, id]) => Object.assign({
146
+ ([key, id]) => ({
168
147
  key: key.toString(),
169
- id: readId(id)
170
- })
171
- )
148
+ id: readId(id),
149
+ }),
150
+ );
172
151
  }
173
152
 
174
- const AENS_SUFFIX = '.chain'
153
+ const AENS_SUFFIX = '.chain';
175
154
 
176
155
  /**
177
156
  * Is AENS name valid
157
+ * @category AENS
178
158
  * @param name - AENS name
179
159
  */
180
- export function isNameValid (name: string): name is AensName {
160
+ export function isNameValid(name: string): name is AensName {
181
161
  // TODO: probably there are stronger requirements
182
- return name.endsWith(AENS_SUFFIX)
162
+ return name.endsWith(AENS_SUFFIX);
183
163
  }
184
164
 
165
+ const encodingToPointerKey = [
166
+ [Encoding.AccountAddress, 'account_pubkey'],
167
+ [Encoding.OracleAddress, 'oracle_pubkey'],
168
+ [Encoding.ContractAddress, 'contract_pubkey'],
169
+ [Encoding.Channel, 'channel'],
170
+ ] as const;
171
+
185
172
  /**
173
+ * @category AENS
186
174
  * @param identifier - account/oracle/contract address, or channel
187
175
  * @returns default AENS pointer key
188
176
  */
189
- export function getDefaultPointerKey (
190
- identifier: EncodedData<keyof typeof POINTER_KEY_BY_PREFIX>
191
- ): POINTER_KEY_BY_PREFIX {
192
- decode(identifier)
193
- const prefix = identifier.substring(0, 2) as keyof typeof POINTER_KEY_BY_PREFIX
194
- return POINTER_KEY_BY_PREFIX[prefix]
177
+ export function getDefaultPointerKey(
178
+ identifier: Encoded.Generic<typeof encodingToPointerKey[number][0]>,
179
+ ): typeof encodingToPointerKey[number][1] {
180
+ decode(identifier);
181
+ const encoding = identifier.substring(0, 2);
182
+ const result = encodingToPointerKey.find(([e]) => e === encoding)?.[1];
183
+ if (result != null) return result;
184
+ throw new ArgumentError(
185
+ 'identifier',
186
+ `prefixed with one of ${encodingToPointerKey.map(([e]) => `${e}_`).join(', ')}`,
187
+ identifier,
188
+ );
195
189
  }
196
190
 
197
191
  /**
198
192
  * Get the minimum AENS name fee
199
- *
193
+ * @category AENS
200
194
  * @param name - the AENS name to get the fee for
201
195
  * @returns the minimum fee for the AENS name auction
202
196
  */
203
- export function getMinimumNameFee (name: AensName): BigNumber {
204
- const nameLength = name.length - AENS_SUFFIX.length
205
- return NAME_BID_RANGES[Math.min(nameLength, NAME_MAX_LENGTH_FEE)]
197
+ export function getMinimumNameFee(name: AensName): BigNumber {
198
+ const nameLength = name.length - AENS_SUFFIX.length;
199
+ return NAME_BID_RANGES[Math.min(nameLength, NAME_MAX_LENGTH_FEE)];
206
200
  }
207
201
 
208
202
  /**
209
203
  * Compute bid fee for AENS auction
210
- *
204
+ * @category AENS
211
205
  * @param name - the AENS name to get the fee for
212
206
  * @param options - Options
213
207
  * @param options.startFee - Auction start fee
214
208
  * @param options.increment - Bid multiplier(In percentage, must be between 0 and 1)
215
209
  * @returns Bid fee
216
210
  */
217
- export function computeBidFee (
211
+ export function computeBidFee(
218
212
  name: AensName,
219
213
  { startFee, increment = NAME_FEE_BID_INCREMENT }:
220
- { startFee?: number | string | BigNumber, increment?: number } = {}
214
+ { startFee?: number | string | BigNumber; increment?: number } = {},
221
215
  ): BigNumber {
222
- if (!(Number(increment) === increment && increment % 1 !== 0)) throw new IllegalBidFeeError(`Increment must be float. Current increment ${increment}`)
223
- if (increment < NAME_FEE_BID_INCREMENT) throw new IllegalBidFeeError(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`)
216
+ if (!(Number(increment) === increment && increment % 1 !== 0)) throw new IllegalBidFeeError(`Increment must be float. Current increment ${increment}`);
217
+ if (increment < NAME_FEE_BID_INCREMENT) throw new IllegalBidFeeError(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`);
224
218
  // FIXME: increment should be used somehow here
225
219
  return ceil(
226
220
  new BigNumber(startFee ?? getMinimumNameFee(name))
227
- .times(new BigNumber(NAME_FEE_BID_INCREMENT).plus(1))
228
- )
221
+ .times(new BigNumber(NAME_FEE_BID_INCREMENT).plus(1)),
222
+ );
229
223
  }
230
224
 
231
225
  /**
232
226
  * Compute auction end height
233
- *
227
+ * @category AENS
234
228
  * @param name - Name to compute auction end for
235
229
  * @param claimHeight - Auction starting height
236
230
  * @see {@link https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L273}
237
231
  * @returns Auction end height
238
232
  */
239
- export function computeAuctionEndBlock (name: AensName, claimHeight: number): number {
240
- const length = name.length - AENS_SUFFIX.length
241
- const h = (length <= 4 && 62 * NAME_BID_TIMEOUT_BLOCKS) ||
242
- (length <= 8 && 31 * NAME_BID_TIMEOUT_BLOCKS) ||
243
- (length <= 12 && NAME_BID_TIMEOUT_BLOCKS) ||
244
- 0
245
- return h + claimHeight
233
+ export function computeAuctionEndBlock(name: AensName, claimHeight: number): number {
234
+ const length = name.length - AENS_SUFFIX.length;
235
+ const h = (length <= 4 && 62 * NAME_BID_TIMEOUT_BLOCKS)
236
+ || (length <= 8 && 31 * NAME_BID_TIMEOUT_BLOCKS)
237
+ || (length <= 12 && NAME_BID_TIMEOUT_BLOCKS)
238
+ || 0;
239
+ return h + claimHeight;
246
240
  }
247
241
 
248
242
  /**
249
243
  * Is name accept going to auction
244
+ * @category AENS
250
245
  */
251
- export function isAuctionName (name: AensName): boolean {
252
- return name.length < 13 + AENS_SUFFIX.length
246
+ export function isAuctionName(name: AensName): boolean {
247
+ return name.length < 13 + AENS_SUFFIX.length;
253
248
  }