ccxt 4.3.69 → 4.3.71

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 (187) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +13 -10
  3. package/dist/cjs/ccxt.js +8 -1
  4. package/dist/cjs/src/abstract/paradex.js +9 -0
  5. package/dist/cjs/src/ascendex.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +55 -0
  7. package/dist/cjs/src/binance.js +1 -1
  8. package/dist/cjs/src/blofin.js +63 -6
  9. package/dist/cjs/src/bybit.js +1 -1
  10. package/dist/cjs/src/coinbaseinternational.js +168 -2
  11. package/dist/cjs/src/cryptocom.js +9 -1
  12. package/dist/cjs/src/hitbtc.js +1 -1
  13. package/dist/cjs/src/paradex.js +2075 -0
  14. package/dist/cjs/src/poloniex.js +1 -0
  15. package/dist/cjs/src/pro/bequant.js +4 -0
  16. package/dist/cjs/src/pro/blofin.js +665 -0
  17. package/dist/cjs/src/pro/coinbaseinternational.js +154 -9
  18. package/dist/cjs/src/pro/cryptocom.js +3 -1
  19. package/dist/cjs/src/pro/hitbtc.js +26 -8
  20. package/dist/cjs/src/pro/okx.js +7 -0
  21. package/dist/cjs/src/pro/paradex.js +365 -0
  22. package/dist/cjs/src/pro/poloniex.js +37 -12
  23. package/dist/cjs/src/pro/woo.js +5 -4
  24. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +100 -0
  25. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -0
  26. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +284 -0
  27. package/dist/cjs/src/static_dependencies/starknet/constants.js +60 -0
  28. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +26 -0
  29. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +8 -0
  30. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +13 -0
  31. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +56 -0
  32. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +19 -0
  33. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +15 -0
  34. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +44 -0
  35. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +122 -0
  36. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +137 -0
  37. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +61 -0
  38. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +218 -0
  39. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  40. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  41. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  42. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +66 -0
  43. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +281 -0
  44. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +33 -0
  45. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +37 -0
  46. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  47. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +156 -0
  48. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +250 -0
  49. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +215 -0
  50. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +112 -0
  51. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +206 -0
  52. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +58 -0
  53. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +57 -0
  54. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +76 -0
  55. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +92 -0
  56. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +48 -0
  57. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +101 -0
  58. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +334 -0
  59. package/dist/cjs/src/woo.js +4 -2
  60. package/js/ccxt.d.ts +11 -2
  61. package/js/ccxt.js +8 -2
  62. package/js/src/abstract/coinbaseinternational.d.ts +1 -1
  63. package/js/src/abstract/paradex.d.ts +43 -0
  64. package/js/src/abstract/paradex.js +11 -0
  65. package/js/src/ascendex.js +1 -1
  66. package/js/src/base/Exchange.d.ts +8 -0
  67. package/js/src/base/Exchange.js +51 -0
  68. package/js/src/binance.js +1 -1
  69. package/js/src/blofin.d.ts +1 -1
  70. package/js/src/blofin.js +63 -6
  71. package/js/src/bybit.js +1 -1
  72. package/js/src/coinbaseinternational.d.ts +6 -1
  73. package/js/src/coinbaseinternational.js +168 -2
  74. package/js/src/cryptocom.js +10 -2
  75. package/js/src/hitbtc.js +1 -1
  76. package/js/src/paradex.d.ts +76 -0
  77. package/js/src/paradex.js +2075 -0
  78. package/js/src/poloniex.js +1 -0
  79. package/js/src/pro/bequant.js +4 -0
  80. package/js/src/pro/blofin.d.ts +39 -0
  81. package/js/src/pro/blofin.js +668 -0
  82. package/js/src/pro/coinbaseinternational.d.ts +5 -1
  83. package/js/src/pro/coinbaseinternational.js +155 -10
  84. package/js/src/pro/cryptocom.js +4 -2
  85. package/js/src/pro/hitbtc.d.ts +1 -1
  86. package/js/src/pro/hitbtc.js +26 -8
  87. package/js/src/pro/okx.js +7 -0
  88. package/js/src/pro/paradex.d.ts +15 -0
  89. package/js/src/pro/paradex.js +366 -0
  90. package/js/src/pro/poloniex.js +37 -12
  91. package/js/src/pro/woo.js +5 -4
  92. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +24 -0
  93. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  94. package/js/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  95. package/js/src/static_dependencies/scure-starknet/index.js +323 -0
  96. package/js/src/static_dependencies/starknet/constants.d.ts +61 -0
  97. package/js/src/static_dependencies/starknet/constants.js +67 -0
  98. package/js/src/static_dependencies/starknet/index.d.ts +7 -0
  99. package/js/src/static_dependencies/starknet/index.js +50 -0
  100. package/js/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  101. package/js/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  102. package/js/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  103. package/js/src/static_dependencies/starknet/types/calldata.js +28 -0
  104. package/js/src/static_dependencies/starknet/types/index.d.ts +13 -0
  105. package/js/src/static_dependencies/starknet/types/index.js +16 -0
  106. package/js/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  107. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  108. package/js/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  109. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  110. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  111. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  112. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  113. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  114. package/js/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  115. package/js/src/static_dependencies/starknet/types/lib/index.js +52 -0
  116. package/js/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  117. package/js/src/static_dependencies/starknet/types/typedData.js +19 -0
  118. package/js/src/static_dependencies/starknet/utils/address.d.ts +53 -0
  119. package/js/src/static_dependencies/starknet/utils/address.js +89 -0
  120. package/js/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  121. package/js/src/static_dependencies/starknet/utils/assert.js +17 -0
  122. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  123. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  124. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  125. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  126. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  127. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  128. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  129. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  130. package/js/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  131. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  132. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  133. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  134. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  135. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  136. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  137. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  138. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  139. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  140. package/js/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  141. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  142. package/js/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  143. package/js/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  144. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  145. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  146. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  147. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  148. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  149. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  150. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  151. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  152. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  153. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  154. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  155. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  156. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  157. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  158. package/js/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  159. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  160. package/js/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  161. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  162. package/js/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  163. package/js/src/static_dependencies/starknet/utils/encode.js +282 -0
  164. package/js/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  165. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +224 -0
  166. package/js/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  167. package/js/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  168. package/js/src/static_dependencies/starknet/utils/json.d.ts +24 -0
  169. package/js/src/static_dependencies/starknet/utils/json.js +43 -0
  170. package/js/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  171. package/js/src/static_dependencies/starknet/utils/merkle.js +84 -0
  172. package/js/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  173. package/js/src/static_dependencies/starknet/utils/num.js +244 -0
  174. package/js/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  175. package/js/src/static_dependencies/starknet/utils/selector.js +85 -0
  176. package/js/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  177. package/js/src/static_dependencies/starknet/utils/shortString.js +96 -0
  178. package/js/src/static_dependencies/starknet/utils/starknetId.d.ts +113 -0
  179. package/js/src/static_dependencies/starknet/utils/starknetId.js +265 -0
  180. package/js/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  181. package/js/src/static_dependencies/starknet/utils/typedData.js +321 -0
  182. package/js/src/static_dependencies/starknet/utils/uint256.d.ts +21 -0
  183. package/js/src/static_dependencies/starknet/utils/uint256.js +32 -0
  184. package/js/src/static_dependencies/starknet/utils/url.d.ts +29 -0
  185. package/js/src/static_dependencies/starknet/utils/url.js +70 -0
  186. package/js/src/woo.js +4 -2
  187. package/package.json +1 -1
@@ -0,0 +1,281 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var calldata = require('../../types/calldata.js');
6
+ require('../../types/lib/index.js');
7
+ var assert = require('../assert.js');
8
+ var num = require('../num.js');
9
+ var selector = require('../selector.js');
10
+ var shortString = require('../shortString.js');
11
+ var byteArray = require('./byteArray.js');
12
+ var cairo = require('./cairo.js');
13
+ var CairoOption = require('./enum/CairoOption.js');
14
+ var CairoResult = require('./enum/CairoResult.js');
15
+ var formatter = require('./formatter.js');
16
+ var index = require('./parser/index.js');
17
+ var propertyOrder = require('./propertyOrder.js');
18
+ var requestParser = require('./requestParser.js');
19
+ var responseParser = require('./responseParser.js');
20
+ var validate = require('./validate.js');
21
+
22
+ /* eslint-disable no-plusplus */
23
+ class CallData {
24
+ constructor(abi) {
25
+ this.structs = CallData.getAbiStruct(abi);
26
+ this.enums = CallData.getAbiEnum(abi);
27
+ this.parser = index.createAbiParser(abi);
28
+ this.abi = this.parser.getLegacyFormat();
29
+ }
30
+ /**
31
+ * Validate arguments passed to the method as corresponding to the ones in the abi
32
+ * @param type ValidateType - type of the method
33
+ * @param method string - name of the method
34
+ * @param args ArgsOrCalldata - arguments that are passed to the method
35
+ */
36
+ validate(type, method, args = []) {
37
+ // ensure provided method of type exists
38
+ if (type !== calldata.ValidateType.DEPLOY) {
39
+ const invocableFunctionNames = this.abi
40
+ .filter((abi) => {
41
+ if (abi.type !== 'function')
42
+ return false;
43
+ const isView = abi.stateMutability === 'view' || abi.state_mutability === 'view';
44
+ return type === calldata.ValidateType.INVOKE ? !isView : isView;
45
+ })
46
+ .map((abi) => abi.name);
47
+ assert(invocableFunctionNames.includes(method), `${type === calldata.ValidateType.INVOKE ? 'invocable' : 'viewable'} method not found in abi`);
48
+ }
49
+ // get requested method from abi
50
+ const abiMethod = this.abi.find((abi) => type === calldata.ValidateType.DEPLOY
51
+ ? abi.name === method && abi.type === 'constructor'
52
+ : abi.name === method && abi.type === 'function');
53
+ if (index.isNoConstructorValid(method, args, abiMethod)) {
54
+ return;
55
+ }
56
+ // validate arguments length
57
+ const inputsLength = this.parser.methodInputsLength(abiMethod);
58
+ if (args.length !== inputsLength) {
59
+ throw Error(`Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`);
60
+ }
61
+ // validate parameters
62
+ validate(abiMethod, args, this.structs, this.enums);
63
+ }
64
+ /**
65
+ * Compile contract callData with abi
66
+ * Parse the calldata by using input fields from the abi for that method
67
+ * @param method string - method name
68
+ * @param argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order).
69
+ * @return Calldata - parsed arguments in format that contract is expecting
70
+ * @example
71
+ * ```typescript
72
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
73
+ * ```
74
+ * ```typescript
75
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
76
+ * ```
77
+ */
78
+ compile(method, argsCalldata) {
79
+ const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method);
80
+ if (index.isNoConstructorValid(method, argsCalldata, abiMethod)) {
81
+ return [];
82
+ }
83
+ let args;
84
+ if (Array.isArray(argsCalldata)) {
85
+ args = argsCalldata;
86
+ }
87
+ else {
88
+ // order the object
89
+ const orderedObject = propertyOrder(argsCalldata, abiMethod.inputs, this.structs, this.enums);
90
+ args = Object.values(orderedObject);
91
+ // // validate array elements to abi
92
+ validate(abiMethod, args, this.structs, this.enums);
93
+ }
94
+ const argsIterator = args[Symbol.iterator]();
95
+ const callArray = abiMethod.inputs.reduce((acc, input) => cairo.isLen(input.name) && !cairo.isCairo1Type(input.type)
96
+ ? acc
97
+ : acc.concat(requestParser.parseCalldataField(argsIterator, input, this.structs, this.enums)), []);
98
+ // add compiled property to array object
99
+ Object.defineProperty(callArray, '__compiled__', {
100
+ enumerable: false,
101
+ writable: false,
102
+ value: true,
103
+ });
104
+ return callArray;
105
+ }
106
+ /**
107
+ * Compile contract callData without abi
108
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
109
+ * @returns Calldata
110
+ */
111
+ static compile(rawArgs) {
112
+ const createTree = (obj) => {
113
+ const getEntries = (o, prefix = '.') => {
114
+ const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;
115
+ return Object.entries(oe).flatMap(([k, v]) => {
116
+ let value = v;
117
+ if (k === 'entrypoint')
118
+ value = selector.getSelectorFromName(value);
119
+ else if (shortString.isLongText(value))
120
+ value = byteArray.byteArrayFromString(value);
121
+ const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;
122
+ if (num.isBigInt(value))
123
+ return [[`${prefix}${kk}`, cairo.felt(value)]];
124
+ if (Object(value) === value) {
125
+ const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));
126
+ const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];
127
+ if (keys.includes('isSome') && keys.includes('isNone')) {
128
+ // Option
129
+ const myOption = value;
130
+ const variantNb = myOption.isSome()
131
+ ? CairoOption.CairoOptionVariant.Some
132
+ : CairoOption.CairoOptionVariant.None;
133
+ if (myOption.isSome())
134
+ return getEntries({ 0: variantNb, 1: myOption.unwrap() }, `${prefix}${kk}.`);
135
+ return [[`${prefix}${kk}`, cairo.felt(variantNb)]];
136
+ }
137
+ if (keys.includes('isOk') && keys.includes('isErr')) {
138
+ // Result
139
+ const myResult = value;
140
+ const variantNb = myResult.isOk() ? CairoResult.CairoResultVariant.Ok : CairoResult.CairoResultVariant.Err;
141
+ return getEntries({ 0: variantNb, 1: myResult.unwrap() }, `${prefix}${kk}.`);
142
+ }
143
+ if (keys.includes('variant') && keys.includes('activeVariant')) {
144
+ // CustomEnum
145
+ const myEnum = value;
146
+ const activeVariant = myEnum.activeVariant();
147
+ const listVariants = Object.keys(myEnum.variant);
148
+ const activeVariantNb = listVariants.findIndex((variant) => variant === activeVariant);
149
+ if (typeof myEnum.unwrap() === 'object' &&
150
+ Object.keys(myEnum.unwrap()).length === 0 // empty object : {}
151
+ ) {
152
+ return [[`${prefix}${kk}`, cairo.felt(activeVariantNb)]];
153
+ }
154
+ return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`);
155
+ }
156
+ // normal object
157
+ return getEntries(value, `${prefix}${kk}.`);
158
+ }
159
+ return [[`${prefix}${kk}`, cairo.felt(value)]];
160
+ });
161
+ };
162
+ const result = Object.fromEntries(getEntries(obj));
163
+ return result;
164
+ };
165
+ let callTreeArray;
166
+ if (!Array.isArray(rawArgs)) {
167
+ // flatten structs, tuples, add array length. Process leafs as Felt
168
+ const callTree = createTree(rawArgs);
169
+ // convert to array
170
+ callTreeArray = Object.values(callTree);
171
+ }
172
+ else {
173
+ // already compiled data but modified or raw args provided as array, recompile it
174
+ // recreate tree
175
+ const callObj = { ...rawArgs };
176
+ const callTree = createTree(callObj);
177
+ callTreeArray = Object.values(callTree);
178
+ }
179
+ // add compiled property to array object
180
+ Object.defineProperty(callTreeArray, '__compiled__', {
181
+ enumerable: false,
182
+ writable: false,
183
+ value: true,
184
+ });
185
+ return callTreeArray;
186
+ }
187
+ /**
188
+ * Parse elements of the response array and structuring them into response object
189
+ * @param method string - method name
190
+ * @param response string[] - response from the method
191
+ * @return Result - parsed response corresponding to the abi
192
+ */
193
+ parse(method, response) {
194
+ const { outputs } = this.abi.find((abi) => abi.name === method);
195
+ const responseIterator = response.flat()[Symbol.iterator]();
196
+ const parsed = outputs.flat().reduce((acc, output, idx) => {
197
+ const propName = output.name ?? idx;
198
+ acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);
199
+ if (acc[propName] && acc[`${propName}_len`]) {
200
+ delete acc[`${propName}_len`];
201
+ }
202
+ return acc;
203
+ }, {});
204
+ // Cairo1 avoid object.0 structure
205
+ return Object.keys(parsed).length === 1 && 0 in parsed ? parsed[0] : parsed;
206
+ }
207
+ /**
208
+ * Format cairo method response data to native js values based on provided format schema
209
+ * @param method string - cairo method name
210
+ * @param response string[] - cairo method response
211
+ * @param format object - formatter object schema
212
+ * @returns Result - parsed and formatted response object
213
+ */
214
+ format(method, response, format) {
215
+ const parsed = this.parse(method, response);
216
+ return formatter(parsed, format);
217
+ }
218
+ /**
219
+ * Helper to extract structs from abi
220
+ * @param abi Abi
221
+ * @returns AbiStructs - structs from abi
222
+ */
223
+ static getAbiStruct(abi) {
224
+ return abi
225
+ .filter((abiEntry) => abiEntry.type === 'struct')
226
+ .reduce((acc, abiEntry) => ({
227
+ ...acc,
228
+ [abiEntry.name]: abiEntry,
229
+ }), {});
230
+ }
231
+ /**
232
+ * Helper to extract enums from abi
233
+ * @param abi Abi
234
+ * @returns AbiEnums - enums from abi
235
+ */
236
+ static getAbiEnum(abi) {
237
+ const fullEnumList = abi
238
+ .filter((abiEntry) => abiEntry.type === 'enum')
239
+ .reduce((acc, abiEntry) => ({
240
+ ...acc,
241
+ [abiEntry.name]: abiEntry,
242
+ }), {});
243
+ delete fullEnumList['core::bool'];
244
+ return fullEnumList;
245
+ }
246
+ /**
247
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
248
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
249
+ * @returns Calldata
250
+ */
251
+ static toCalldata(rawCalldata = []) {
252
+ return CallData.compile(rawCalldata);
253
+ }
254
+ /**
255
+ * Helper: Convert raw to HexCalldata
256
+ * @param raw HexCalldata | RawCalldata | RawArgs
257
+ * @returns HexCalldata
258
+ */
259
+ static toHex(raw = []) {
260
+ const calldata = CallData.compile(raw);
261
+ return calldata.map((it) => num.toHex(it));
262
+ }
263
+ /**
264
+ * Parse the elements of a contract response and structure them into one or several Result.
265
+ * In Cairo 0, arrays are not supported.
266
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
267
+ * @param response string[] - serialized data corresponding to typeCairo.
268
+ * @return Result or Result[] - parsed response corresponding to typeData.
269
+ * @example
270
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
271
+ * result = { address: 1193046n, is_claimed: true }
272
+ */
273
+ decodeParameters(typeCairo, response) {
274
+ const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo];
275
+ const responseIterator = response.flat()[Symbol.iterator]();
276
+ const decodedArray = typeCairoArray.map((typeParam) => responseParser(responseIterator, { name: '', type: typeParam }, this.structs, this.enums));
277
+ return decodedArray.length === 1 ? decodedArray[0] : decodedArray;
278
+ }
279
+ }
280
+
281
+ exports.CallData = CallData;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var cairo = require('../cairo.js');
6
+ var parser01_1_0 = require('./parser-0-1.1.0.js');
7
+ var parser2_0_0 = require('./parser-2.0.0.js');
8
+
9
+ function createAbiParser(abi) {
10
+ const version = getAbiVersion(abi);
11
+ if (version === 0 || version === 1) {
12
+ return new parser01_1_0.AbiParser1(abi);
13
+ }
14
+ if (version === 2) {
15
+ return new parser2_0_0.AbiParser2(abi);
16
+ }
17
+ throw Error(`Unsupported ABI version ${version}`);
18
+ }
19
+ function getAbiVersion(abi) {
20
+ if (abi.find((it) => it.type === 'interface'))
21
+ return 2;
22
+ if (cairo.isCairo1Abi(abi))
23
+ return 1;
24
+ return 0;
25
+ }
26
+ function isNoConstructorValid(method, argsCalldata, abiMethod) {
27
+ // No constructor in abi and validly empty args
28
+ return method === 'constructor' && !abiMethod && !argsCalldata.length;
29
+ }
30
+
31
+ exports.createAbiParser = createAbiParser;
32
+ exports.getAbiVersion = getAbiVersion;
33
+ exports.isNoConstructorValid = isNoConstructorValid;
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var cairo = require('../cairo.js');
6
+
7
+ class AbiParser1 {
8
+ constructor(abi) {
9
+ this.abi = abi;
10
+ }
11
+ /**
12
+ * abi method inputs length without '_len' inputs
13
+ * cairo 0 reducer
14
+ * @param abiMethod FunctionAbi
15
+ * @returns number
16
+ */
17
+ methodInputsLength(abiMethod) {
18
+ return abiMethod.inputs.reduce((acc, input) => (!cairo.isLen(input.name) ? acc + 1 : acc), 0);
19
+ }
20
+ /**
21
+ * get method definition from abi
22
+ * @param name string
23
+ * @returns FunctionAbi | undefined
24
+ */
25
+ getMethod(name) {
26
+ return this.abi.find((it) => it.name === name);
27
+ }
28
+ /**
29
+ * Get Abi in legacy format
30
+ * @returns Abi
31
+ */
32
+ getLegacyFormat() {
33
+ return this.abi;
34
+ }
35
+ }
36
+
37
+ exports.AbiParser1 = AbiParser1;
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ class AbiParser2 {
6
+ constructor(abi) {
7
+ this.abi = abi;
8
+ }
9
+ /**
10
+ * abi method inputs length
11
+ * @param abiMethod FunctionAbi
12
+ * @returns number
13
+ */
14
+ methodInputsLength(abiMethod) {
15
+ return abiMethod.inputs.length;
16
+ }
17
+ /**
18
+ * get method definition from abi
19
+ * @param name string
20
+ * @returns FunctionAbi | undefined
21
+ */
22
+ getMethod(name) {
23
+ const intf = this.abi.find((it) => it.type === 'interface');
24
+ return intf.items.find((it) => it.name === name);
25
+ }
26
+ /**
27
+ * Get Abi in legacy format
28
+ * @returns Abi
29
+ */
30
+ getLegacyFormat() {
31
+ return this.abi.flatMap((e) => {
32
+ if (e.type === 'interface') {
33
+ return e.items;
34
+ }
35
+ return e;
36
+ });
37
+ }
38
+ }
39
+
40
+ exports.AbiParser2 = AbiParser2;
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ var uint256 = require('../cairoDataTypes/uint256.js');
4
+ var uint512 = require('../cairoDataTypes/uint512.js');
5
+ var cairo = require('./cairo.js');
6
+ var CairoCustomEnum = require('./enum/CairoCustomEnum.js');
7
+ var CairoOption = require('./enum/CairoOption.js');
8
+ var CairoResult = require('./enum/CairoResult.js');
9
+ var tuple = require('./tuple.js');
10
+ var shortString = require('../shortString.js');
11
+
12
+ function errorU256(key) {
13
+ return Error(`Your object includes the property : ${key}, containing an Uint256 object without the 'low' and 'high' keys.`);
14
+ }
15
+ function errorU512(key) {
16
+ return Error(`Your object includes the property : ${key}, containing an Uint512 object without the 'limb0' to 'limb3' keys.`);
17
+ }
18
+ function orderPropsByAbi(unorderedObject, abiOfObject, structs, enums) {
19
+ const orderInput = (unorderedItem, abiType) => {
20
+ if (cairo.isTypeArray(abiType)) {
21
+ return orderArray(unorderedItem, abiType);
22
+ }
23
+ if (cairo.isTypeEnum(abiType, enums)) {
24
+ const abiObj = enums[abiType];
25
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
26
+ return orderEnum(unorderedItem, abiObj);
27
+ }
28
+ if (cairo.isTypeTuple(abiType)) {
29
+ return orderTuple(unorderedItem, abiType);
30
+ }
31
+ if (cairo.isTypeEthAddress(abiType)) {
32
+ return unorderedItem;
33
+ }
34
+ if (cairo.isTypeByteArray(abiType)) {
35
+ return unorderedItem;
36
+ }
37
+ if (cairo.isTypeSecp256k1Point(abiType)) {
38
+ return unorderedItem;
39
+ }
40
+ if (uint256.CairoUint256.isAbiType(abiType)) {
41
+ const u256 = unorderedItem;
42
+ if (typeof u256 !== 'object') {
43
+ // BigNumberish --> just copy
44
+ return u256;
45
+ }
46
+ if (!('low' in u256 && 'high' in u256)) {
47
+ throw errorU256(abiType);
48
+ }
49
+ return { low: u256.low, high: u256.high };
50
+ }
51
+ if (uint512.CairoUint512.isAbiType(abiType)) {
52
+ const u512 = unorderedItem;
53
+ if (typeof u512 !== 'object') {
54
+ // BigNumberish --> just copy
55
+ return u512;
56
+ }
57
+ if (!['limb0', 'limb1', 'limb2', 'limb3'].every((key) => key in u512)) {
58
+ throw errorU512(abiType);
59
+ }
60
+ return { limb0: u512.limb0, limb1: u512.limb1, limb2: u512.limb2, limb3: u512.limb3 };
61
+ }
62
+ if (cairo.isTypeStruct(abiType, structs)) {
63
+ const abiOfStruct = structs[abiType].members;
64
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
65
+ return orderStruct(unorderedItem, abiOfStruct);
66
+ }
67
+ // literals
68
+ return unorderedItem;
69
+ };
70
+ const orderStruct = (unorderedObject2, abiObject) => {
71
+ const orderedObject2 = abiObject.reduce((orderedObject, abiParam) => {
72
+ const setProperty = (value) => Object.defineProperty(orderedObject, abiParam.name, {
73
+ enumerable: true,
74
+ value: value ?? unorderedObject2[abiParam.name],
75
+ });
76
+ if (unorderedObject2[abiParam.name] === 'undefined') {
77
+ if (cairo.isCairo1Type(abiParam.type) || !cairo.isLen(abiParam.name)) {
78
+ throw Error(`Your object needs a property with key : ${abiParam.name} .`);
79
+ }
80
+ }
81
+ setProperty(orderInput(unorderedObject2[abiParam.name], abiParam.type));
82
+ return orderedObject;
83
+ }, {});
84
+ return orderedObject2;
85
+ };
86
+ function orderArray(myArray, abiParam) {
87
+ const typeInArray = cairo.getArrayType(abiParam);
88
+ if (shortString.isString(myArray)) {
89
+ return myArray; // longstring
90
+ }
91
+ return myArray.map((myElem) => orderInput(myElem, typeInArray));
92
+ }
93
+ function orderTuple(unorderedObject2, abiParam) {
94
+ const typeList = tuple(abiParam);
95
+ const orderedObject2 = typeList.reduce((orderedObject, abiTypeCairoX, index) => {
96
+ const myObjKeys = Object.keys(unorderedObject2);
97
+ const setProperty = (value) => Object.defineProperty(orderedObject, index.toString(), {
98
+ enumerable: true,
99
+ value: value ?? unorderedObject2[myObjKeys[index]],
100
+ });
101
+ const abiType = abiTypeCairoX?.type ? abiTypeCairoX.type : abiTypeCairoX; // Named tuple, or tuple
102
+ setProperty(orderInput(unorderedObject2[myObjKeys[index]], abiType));
103
+ return orderedObject;
104
+ }, {});
105
+ return orderedObject2;
106
+ }
107
+ const orderEnum = (unorderedObject2, abiObject) => {
108
+ if (cairo.isTypeResult(abiObject.name)) {
109
+ const unorderedResult = unorderedObject2;
110
+ const resultOkType = abiObject.name.substring(abiObject.name.indexOf('<') + 1, abiObject.name.lastIndexOf(','));
111
+ const resultErrType = abiObject.name.substring(abiObject.name.indexOf(',') + 1, abiObject.name.lastIndexOf('>'));
112
+ if (unorderedResult.isOk()) {
113
+ return new CairoResult.CairoResult(CairoResult.CairoResultVariant.Ok, orderInput(unorderedObject2.unwrap(), resultOkType));
114
+ }
115
+ return new CairoResult.CairoResult(CairoResult.CairoResultVariant.Err, orderInput(unorderedObject2.unwrap(), resultErrType));
116
+ }
117
+ if (cairo.isTypeOption(abiObject.name)) {
118
+ const unorderedOption = unorderedObject2;
119
+ const resultSomeType = abiObject.name.substring(abiObject.name.indexOf('<') + 1, abiObject.name.lastIndexOf('>'));
120
+ if (unorderedOption.isSome()) {
121
+ return new CairoOption.CairoOption(CairoOption.CairoOptionVariant.Some, orderInput(unorderedOption.unwrap(), resultSomeType));
122
+ }
123
+ // none(())
124
+ return new CairoOption.CairoOption(CairoOption.CairoOptionVariant.None, {});
125
+ }
126
+ // custom Enum
127
+ const unorderedCustomEnum = unorderedObject2;
128
+ const variants = Object.entries(unorderedCustomEnum.variant);
129
+ const newEntries = variants.map((variant) => {
130
+ if (typeof variant[1] === 'undefined') {
131
+ return variant;
132
+ }
133
+ const variantType = abiObject.type.substring(abiObject.type.lastIndexOf('<') + 1, abiObject.type.lastIndexOf('>'));
134
+ if (variantType === '()') {
135
+ return variant;
136
+ }
137
+ return [variant[0], orderInput(unorderedCustomEnum.unwrap(), variantType)];
138
+ });
139
+ return new CairoCustomEnum.CairoCustomEnum(Object.fromEntries(newEntries));
140
+ };
141
+ // Order Call Parameters
142
+ const finalOrderedObject = abiOfObject.reduce((orderedObject, abiParam) => {
143
+ const setProperty = (value) => Object.defineProperty(orderedObject, abiParam.name, {
144
+ enumerable: true,
145
+ value,
146
+ });
147
+ if (cairo.isLen(abiParam.name) && !cairo.isCairo1Type(abiParam.type)) {
148
+ return orderedObject;
149
+ }
150
+ setProperty(orderInput(unorderedObject[abiParam.name], abiParam.type));
151
+ return orderedObject;
152
+ }, {});
153
+ return finalOrderedObject;
154
+ }
155
+
156
+ module.exports = orderPropsByAbi;