ccxt 4.3.70 → 4.3.72

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 (153) hide show
  1. package/README.md +6 -5
  2. package/dist/ccxt.browser.min.js +13 -10
  3. package/dist/cjs/ccxt.js +6 -1
  4. package/dist/cjs/src/abstract/paradex.js +9 -0
  5. package/dist/cjs/src/base/Exchange.js +49 -0
  6. package/dist/cjs/src/paradex.js +2075 -0
  7. package/dist/cjs/src/pro/bequant.js +4 -0
  8. package/dist/cjs/src/pro/paradex.js +365 -0
  9. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +100 -0
  10. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -0
  11. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +284 -0
  12. package/dist/cjs/src/static_dependencies/starknet/constants.js +60 -0
  13. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +26 -0
  14. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +8 -0
  15. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +13 -0
  16. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +56 -0
  17. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +19 -0
  18. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +15 -0
  19. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +44 -0
  20. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +122 -0
  21. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +137 -0
  22. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +61 -0
  23. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +218 -0
  24. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  25. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  26. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  27. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +66 -0
  28. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +281 -0
  29. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +33 -0
  30. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +37 -0
  31. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  32. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +156 -0
  33. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +250 -0
  34. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +215 -0
  35. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +112 -0
  36. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +206 -0
  37. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +58 -0
  38. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +57 -0
  39. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +76 -0
  40. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +92 -0
  41. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +48 -0
  42. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +101 -0
  43. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +334 -0
  44. package/dist/cjs/src/woo.js +4 -2
  45. package/examples/js/cli.js +8 -4
  46. package/js/ccxt.d.ts +8 -2
  47. package/js/ccxt.js +6 -2
  48. package/js/src/abstract/paradex.d.ts +43 -0
  49. package/js/src/abstract/paradex.js +11 -0
  50. package/js/src/base/Exchange.d.ts +7 -0
  51. package/js/src/base/Exchange.js +45 -0
  52. package/js/src/base/types.d.ts +10 -10
  53. package/js/src/paradex.d.ts +76 -0
  54. package/js/src/paradex.js +2075 -0
  55. package/js/src/pro/bequant.js +4 -0
  56. package/js/src/pro/paradex.d.ts +15 -0
  57. package/js/src/pro/paradex.js +366 -0
  58. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +24 -0
  59. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  60. package/js/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  61. package/js/src/static_dependencies/scure-starknet/index.js +323 -0
  62. package/js/src/static_dependencies/starknet/constants.d.ts +61 -0
  63. package/js/src/static_dependencies/starknet/constants.js +67 -0
  64. package/js/src/static_dependencies/starknet/index.d.ts +7 -0
  65. package/js/src/static_dependencies/starknet/index.js +50 -0
  66. package/js/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  67. package/js/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  68. package/js/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  69. package/js/src/static_dependencies/starknet/types/calldata.js +28 -0
  70. package/js/src/static_dependencies/starknet/types/index.d.ts +13 -0
  71. package/js/src/static_dependencies/starknet/types/index.js +16 -0
  72. package/js/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  73. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  74. package/js/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  75. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  76. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  77. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  78. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  79. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  80. package/js/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  81. package/js/src/static_dependencies/starknet/types/lib/index.js +52 -0
  82. package/js/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  83. package/js/src/static_dependencies/starknet/types/typedData.js +19 -0
  84. package/js/src/static_dependencies/starknet/utils/address.d.ts +53 -0
  85. package/js/src/static_dependencies/starknet/utils/address.js +89 -0
  86. package/js/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  87. package/js/src/static_dependencies/starknet/utils/assert.js +17 -0
  88. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  89. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  90. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  91. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  92. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  93. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  94. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  95. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  96. package/js/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  97. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  98. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  99. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  100. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  101. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  102. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  103. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  104. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  105. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  106. package/js/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  107. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  108. package/js/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  109. package/js/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  110. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  111. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  112. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  113. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  114. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  115. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  116. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  117. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  118. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  119. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  120. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  121. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  122. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  123. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  124. package/js/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  125. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  126. package/js/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  127. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  128. package/js/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  129. package/js/src/static_dependencies/starknet/utils/encode.js +282 -0
  130. package/js/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  131. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +224 -0
  132. package/js/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  133. package/js/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  134. package/js/src/static_dependencies/starknet/utils/json.d.ts +24 -0
  135. package/js/src/static_dependencies/starknet/utils/json.js +43 -0
  136. package/js/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  137. package/js/src/static_dependencies/starknet/utils/merkle.js +84 -0
  138. package/js/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  139. package/js/src/static_dependencies/starknet/utils/num.js +244 -0
  140. package/js/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  141. package/js/src/static_dependencies/starknet/utils/selector.js +85 -0
  142. package/js/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  143. package/js/src/static_dependencies/starknet/utils/shortString.js +96 -0
  144. package/js/src/static_dependencies/starknet/utils/starknetId.d.ts +113 -0
  145. package/js/src/static_dependencies/starknet/utils/starknetId.js +265 -0
  146. package/js/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  147. package/js/src/static_dependencies/starknet/utils/typedData.js +321 -0
  148. package/js/src/static_dependencies/starknet/utils/uint256.d.ts +21 -0
  149. package/js/src/static_dependencies/starknet/utils/uint256.js +32 -0
  150. package/js/src/static_dependencies/starknet/utils/url.d.ts +29 -0
  151. package/js/src/static_dependencies/starknet/utils/url.js +70 -0
  152. package/js/src/woo.js +4 -2
  153. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import { Abi, FunctionAbi } from '../../../types/index.js';
2
+ import { AbiParserInterface } from './interface.js';
3
+ export declare class AbiParser2 implements AbiParserInterface {
4
+ abi: Abi;
5
+ constructor(abi: Abi);
6
+ /**
7
+ * abi method inputs length
8
+ * @param abiMethod FunctionAbi
9
+ * @returns number
10
+ */
11
+ methodInputsLength(abiMethod: FunctionAbi): number;
12
+ /**
13
+ * get method definition from abi
14
+ * @param name string
15
+ * @returns FunctionAbi | undefined
16
+ */
17
+ getMethod(name: string): FunctionAbi | undefined;
18
+ /**
19
+ * Get Abi in legacy format
20
+ * @returns Abi
21
+ */
22
+ getLegacyFormat(): Abi;
23
+ }
@@ -0,0 +1,40 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ export class AbiParser2 {
8
+ constructor(abi) {
9
+ this.abi = abi;
10
+ }
11
+ /**
12
+ * abi method inputs length
13
+ * @param abiMethod FunctionAbi
14
+ * @returns number
15
+ */
16
+ methodInputsLength(abiMethod) {
17
+ return abiMethod.inputs.length;
18
+ }
19
+ /**
20
+ * get method definition from abi
21
+ * @param name string
22
+ * @returns FunctionAbi | undefined
23
+ */
24
+ getMethod(name) {
25
+ const intf = this.abi.find((it) => it.type === 'interface');
26
+ return intf.items.find((it) => it.name === name);
27
+ }
28
+ /**
29
+ * Get Abi in legacy format
30
+ * @returns Abi
31
+ */
32
+ getLegacyFormat() {
33
+ return this.abi.flatMap((e) => {
34
+ if (e.type === 'interface') {
35
+ return e.items;
36
+ }
37
+ return e;
38
+ });
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ import { AbiEntry, AbiEnums, AbiStructs, RawArgsObject } from '../../types/index.js';
2
+ export default function orderPropsByAbi(unorderedObject: RawArgsObject, abiOfObject: AbiEntry[], structs: AbiStructs, enums: AbiEnums): object;
@@ -0,0 +1,155 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ import { CairoUint256 } from '../cairoDataTypes/uint256.js';
8
+ import { CairoUint512 } from '../cairoDataTypes/uint512.js';
9
+ import { getArrayType, isCairo1Type, isLen, isTypeArray, isTypeByteArray, isTypeEnum, isTypeEthAddress, isTypeOption, isTypeResult, isTypeSecp256k1Point, isTypeStruct, isTypeTuple, } from './cairo.js';
10
+ import { CairoCustomEnum, CairoOption, CairoOptionVariant, CairoResult, CairoResultVariant, } from './enum/index.js';
11
+ import extractTupleMemberTypes from './tuple.js';
12
+ import { isString } from '../shortString.js';
13
+ function errorU256(key) {
14
+ return Error(`Your object includes the property : ${key}, containing an Uint256 object without the 'low' and 'high' keys.`);
15
+ }
16
+ function errorU512(key) {
17
+ return Error(`Your object includes the property : ${key}, containing an Uint512 object without the 'limb0' to 'limb3' keys.`);
18
+ }
19
+ export default function orderPropsByAbi(unorderedObject, abiOfObject, structs, enums) {
20
+ const orderInput = (unorderedItem, abiType) => {
21
+ if (isTypeArray(abiType)) {
22
+ return orderArray(unorderedItem, abiType);
23
+ }
24
+ if (isTypeEnum(abiType, enums)) {
25
+ const abiObj = enums[abiType];
26
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
27
+ return orderEnum(unorderedItem, abiObj);
28
+ }
29
+ if (isTypeTuple(abiType)) {
30
+ return orderTuple(unorderedItem, abiType);
31
+ }
32
+ if (isTypeEthAddress(abiType)) {
33
+ return unorderedItem;
34
+ }
35
+ if (isTypeByteArray(abiType)) {
36
+ return unorderedItem;
37
+ }
38
+ if (isTypeSecp256k1Point(abiType)) {
39
+ return unorderedItem;
40
+ }
41
+ if (CairoUint256.isAbiType(abiType)) {
42
+ const u256 = unorderedItem;
43
+ if (typeof u256 !== 'object') {
44
+ // BigNumberish --> just copy
45
+ return u256;
46
+ }
47
+ if (!('low' in u256 && 'high' in u256)) {
48
+ throw errorU256(abiType);
49
+ }
50
+ return { low: u256.low, high: u256.high };
51
+ }
52
+ if (CairoUint512.isAbiType(abiType)) {
53
+ const u512 = unorderedItem;
54
+ if (typeof u512 !== 'object') {
55
+ // BigNumberish --> just copy
56
+ return u512;
57
+ }
58
+ if (!['limb0', 'limb1', 'limb2', 'limb3'].every((key) => key in u512)) {
59
+ throw errorU512(abiType);
60
+ }
61
+ return { limb0: u512.limb0, limb1: u512.limb1, limb2: u512.limb2, limb3: u512.limb3 };
62
+ }
63
+ if (isTypeStruct(abiType, structs)) {
64
+ const abiOfStruct = structs[abiType].members;
65
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
66
+ return orderStruct(unorderedItem, abiOfStruct);
67
+ }
68
+ // literals
69
+ return unorderedItem;
70
+ };
71
+ const orderStruct = (unorderedObject2, abiObject) => {
72
+ const orderedObject2 = abiObject.reduce((orderedObject, abiParam) => {
73
+ const setProperty = (value) => Object.defineProperty(orderedObject, abiParam.name, {
74
+ enumerable: true,
75
+ value: value ?? unorderedObject2[abiParam.name],
76
+ });
77
+ if (unorderedObject2[abiParam.name] === 'undefined') {
78
+ if (isCairo1Type(abiParam.type) || !isLen(abiParam.name)) {
79
+ throw Error(`Your object needs a property with key : ${abiParam.name} .`);
80
+ }
81
+ }
82
+ setProperty(orderInput(unorderedObject2[abiParam.name], abiParam.type));
83
+ return orderedObject;
84
+ }, {});
85
+ return orderedObject2;
86
+ };
87
+ function orderArray(myArray, abiParam) {
88
+ const typeInArray = getArrayType(abiParam);
89
+ if (isString(myArray)) {
90
+ return myArray; // longstring
91
+ }
92
+ return myArray.map((myElem) => orderInput(myElem, typeInArray));
93
+ }
94
+ function orderTuple(unorderedObject2, abiParam) {
95
+ const typeList = extractTupleMemberTypes(abiParam);
96
+ const orderedObject2 = typeList.reduce((orderedObject, abiTypeCairoX, index) => {
97
+ const myObjKeys = Object.keys(unorderedObject2);
98
+ const setProperty = (value) => Object.defineProperty(orderedObject, index.toString(), {
99
+ enumerable: true,
100
+ value: value ?? unorderedObject2[myObjKeys[index]],
101
+ });
102
+ const abiType = abiTypeCairoX?.type ? abiTypeCairoX.type : abiTypeCairoX; // Named tuple, or tuple
103
+ setProperty(orderInput(unorderedObject2[myObjKeys[index]], abiType));
104
+ return orderedObject;
105
+ }, {});
106
+ return orderedObject2;
107
+ }
108
+ const orderEnum = (unorderedObject2, abiObject) => {
109
+ if (isTypeResult(abiObject.name)) {
110
+ const unorderedResult = unorderedObject2;
111
+ const resultOkType = abiObject.name.substring(abiObject.name.indexOf('<') + 1, abiObject.name.lastIndexOf(','));
112
+ const resultErrType = abiObject.name.substring(abiObject.name.indexOf(',') + 1, abiObject.name.lastIndexOf('>'));
113
+ if (unorderedResult.isOk()) {
114
+ return new CairoResult(CairoResultVariant.Ok, orderInput(unorderedObject2.unwrap(), resultOkType));
115
+ }
116
+ return new CairoResult(CairoResultVariant.Err, orderInput(unorderedObject2.unwrap(), resultErrType));
117
+ }
118
+ if (isTypeOption(abiObject.name)) {
119
+ const unorderedOption = unorderedObject2;
120
+ const resultSomeType = abiObject.name.substring(abiObject.name.indexOf('<') + 1, abiObject.name.lastIndexOf('>'));
121
+ if (unorderedOption.isSome()) {
122
+ return new CairoOption(CairoOptionVariant.Some, orderInput(unorderedOption.unwrap(), resultSomeType));
123
+ }
124
+ // none(())
125
+ return new CairoOption(CairoOptionVariant.None, {});
126
+ }
127
+ // custom Enum
128
+ const unorderedCustomEnum = unorderedObject2;
129
+ const variants = Object.entries(unorderedCustomEnum.variant);
130
+ const newEntries = variants.map((variant) => {
131
+ if (typeof variant[1] === 'undefined') {
132
+ return variant;
133
+ }
134
+ const variantType = abiObject.type.substring(abiObject.type.lastIndexOf('<') + 1, abiObject.type.lastIndexOf('>'));
135
+ if (variantType === '()') {
136
+ return variant;
137
+ }
138
+ return [variant[0], orderInput(unorderedCustomEnum.unwrap(), variantType)];
139
+ });
140
+ return new CairoCustomEnum(Object.fromEntries(newEntries));
141
+ };
142
+ // Order Call Parameters
143
+ const finalOrderedObject = abiOfObject.reduce((orderedObject, abiParam) => {
144
+ const setProperty = (value) => Object.defineProperty(orderedObject, abiParam.name, {
145
+ enumerable: true,
146
+ value,
147
+ });
148
+ if (isLen(abiParam.name) && !isCairo1Type(abiParam.type)) {
149
+ return orderedObject;
150
+ }
151
+ setProperty(orderInput(unorderedObject[abiParam.name], abiParam.type));
152
+ return orderedObject;
153
+ }, {});
154
+ return finalOrderedObject;
155
+ }
@@ -0,0 +1,11 @@
1
+ import { AbiEntry, AbiEnums, AbiStructs } from '../../types/index.js';
2
+ /**
3
+ * Parse one field of the calldata by using input field from the abi for that method
4
+ *
5
+ * @param argsIterator - Iterator for value of the field
6
+ * @param input - input(field) information from the abi that will be used to parse the data
7
+ * @param structs - structs from abi
8
+ * @param enums - enums from abi
9
+ * @return {string | string[]} - parsed arguments in format that contract is expecting
10
+ */
11
+ export declare function parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry, structs: AbiStructs, enums: AbiEnums): string | string[];
@@ -0,0 +1,248 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ import { CairoUint256 } from '../cairoDataTypes/uint256.js';
8
+ import { CairoUint512 } from '../cairoDataTypes/uint512.js';
9
+ import { addHexPrefix, removeHexPrefix } from '../encode.js';
10
+ import { toHex } from '../num.js';
11
+ import { encodeShortString, isString, isText, splitLongString } from '../shortString.js';
12
+ import { byteArrayFromString } from './byteArray.js';
13
+ import { felt, getArrayType, isTypeArray, isTypeBytes31, isTypeEnum, isTypeOption, isTypeResult, isTypeSecp256k1Point, isTypeStruct, isTypeTuple, uint256, } from './cairo.js';
14
+ import { CairoOptionVariant, CairoResultVariant, } from './enum/index.js';
15
+ import extractTupleMemberTypes from './tuple.js';
16
+ /**
17
+ * parse base types
18
+ * @param type type from abi
19
+ * @param val value provided
20
+ * @returns string | string[]
21
+ */
22
+ function parseBaseTypes(type, val) {
23
+ switch (true) {
24
+ case CairoUint256.isAbiType(type):
25
+ return new CairoUint256(val).toApiRequest();
26
+ case CairoUint512.isAbiType(type):
27
+ return new CairoUint512(val).toApiRequest();
28
+ case isTypeBytes31(type):
29
+ return encodeShortString(val.toString());
30
+ case isTypeSecp256k1Point(type): {
31
+ const pubKeyETH = removeHexPrefix(toHex(val)).padStart(128, '0');
32
+ const pubKeyETHy = uint256(addHexPrefix(pubKeyETH.slice(-64)));
33
+ const pubKeyETHx = uint256(addHexPrefix(pubKeyETH.slice(0, -64)));
34
+ return [
35
+ felt(pubKeyETHx.low),
36
+ felt(pubKeyETHx.high),
37
+ felt(pubKeyETHy.low),
38
+ felt(pubKeyETHy.high),
39
+ ];
40
+ }
41
+ default:
42
+ return felt(val);
43
+ }
44
+ }
45
+ /**
46
+ * Parse tuple type string to array of known objects
47
+ * @param element request element
48
+ * @param typeStr tuple type string
49
+ * @returns Tupled[]
50
+ */
51
+ function parseTuple(element, typeStr) {
52
+ const memberTypes = extractTupleMemberTypes(typeStr);
53
+ const elements = Object.values(element);
54
+ if (elements.length !== memberTypes.length) {
55
+ throw Error(`ParseTuple: provided and expected abi tuple size do not match.
56
+ provided: ${elements}
57
+ expected: ${memberTypes}`);
58
+ }
59
+ return memberTypes.map((it, dx) => {
60
+ return {
61
+ element: elements[dx],
62
+ type: it.type ?? it,
63
+ };
64
+ });
65
+ }
66
+ function parseByteArray(element) {
67
+ const myByteArray = byteArrayFromString(element);
68
+ return [
69
+ myByteArray.data.length.toString(),
70
+ ...myByteArray.data.map((bn) => bn.toString()),
71
+ myByteArray.pending_word.toString(),
72
+ myByteArray.pending_word_len.toString(),
73
+ ];
74
+ }
75
+ /**
76
+ * Deep parse of the object that has been passed to the method
77
+ *
78
+ * @param element - element that needs to be parsed
79
+ * @param type - name of the method
80
+ * @param structs - structs from abi
81
+ * @param enums - enums from abi
82
+ * @return {string | string[]} - parsed arguments in format that contract is expecting
83
+ */
84
+ function parseCalldataValue(element, type, structs, enums) {
85
+ if (element === undefined) {
86
+ throw Error(`Missing parameter for type ${type}`);
87
+ }
88
+ // value is Array
89
+ if (Array.isArray(element)) {
90
+ const result = [];
91
+ result.push(felt(element.length)); // Add length to array
92
+ const arrayType = getArrayType(type);
93
+ return element.reduce((acc, it) => {
94
+ return acc.concat(parseCalldataValue(it, arrayType, structs, enums));
95
+ }, result);
96
+ }
97
+ // checking if the passed element is struct
98
+ if (structs[type] && structs[type].members.length) {
99
+ if (CairoUint256.isAbiType(type)) {
100
+ return new CairoUint256(element).toApiRequest();
101
+ }
102
+ if (CairoUint512.isAbiType(type)) {
103
+ return new CairoUint512(element).toApiRequest();
104
+ }
105
+ if (type === 'core::starknet::eth_address::EthAddress')
106
+ return parseBaseTypes(type, element);
107
+ if (type === 'core::byte_array::ByteArray')
108
+ return parseByteArray(element);
109
+ const { members } = structs[type];
110
+ const subElement = element;
111
+ return members.reduce((acc, it) => {
112
+ return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs, enums));
113
+ }, []);
114
+ }
115
+ // check if abi element is tuple
116
+ if (isTypeTuple(type)) {
117
+ const tupled = parseTuple(element, type);
118
+ return tupled.reduce((acc, it) => {
119
+ const parsedData = parseCalldataValue(it.element, it.type, structs, enums);
120
+ return acc.concat(parsedData);
121
+ }, []);
122
+ }
123
+ // check if u256 C1v0
124
+ if (CairoUint256.isAbiType(type)) {
125
+ return new CairoUint256(element).toApiRequest();
126
+ }
127
+ // check if u512
128
+ if (CairoUint512.isAbiType(type)) {
129
+ return new CairoUint512(element).toApiRequest();
130
+ }
131
+ // check if Enum
132
+ if (isTypeEnum(type, enums)) {
133
+ const { variants } = enums[type];
134
+ // Option Enum
135
+ if (isTypeOption(type)) {
136
+ const myOption = element;
137
+ if (myOption.isSome()) {
138
+ const listTypeVariant = variants.find((variant) => variant.name === 'Some');
139
+ if (typeof listTypeVariant === 'undefined') {
140
+ throw Error(`Error in abi : Option has no 'Some' variant.`);
141
+ }
142
+ const typeVariantSome = listTypeVariant.type;
143
+ if (typeVariantSome === '()') {
144
+ return CairoOptionVariant.Some.toString();
145
+ }
146
+ const parsedParameter = parseCalldataValue(myOption.unwrap(), typeVariantSome, structs, enums);
147
+ if (Array.isArray(parsedParameter)) {
148
+ return [CairoOptionVariant.Some.toString(), ...parsedParameter];
149
+ }
150
+ return [CairoOptionVariant.Some.toString(), parsedParameter];
151
+ }
152
+ return CairoOptionVariant.None.toString();
153
+ }
154
+ // Result Enum
155
+ if (isTypeResult(type)) {
156
+ const myResult = element;
157
+ if (myResult.isOk()) {
158
+ const listTypeVariant = variants.find((variant) => variant.name === 'Ok');
159
+ if (typeof listTypeVariant === 'undefined') {
160
+ throw Error(`Error in abi : Result has no 'Ok' variant.`);
161
+ }
162
+ const typeVariantOk = listTypeVariant.type;
163
+ if (typeVariantOk === '()') {
164
+ return CairoResultVariant.Ok.toString();
165
+ }
166
+ const parsedParameter = parseCalldataValue(myResult.unwrap(), typeVariantOk, structs, enums);
167
+ if (Array.isArray(parsedParameter)) {
168
+ return [CairoResultVariant.Ok.toString(), ...parsedParameter];
169
+ }
170
+ return [CairoResultVariant.Ok.toString(), parsedParameter];
171
+ }
172
+ // is Result::Err
173
+ const listTypeVariant = variants.find((variant) => variant.name === 'Err');
174
+ if (typeof listTypeVariant === 'undefined') {
175
+ throw Error(`Error in abi : Result has no 'Err' variant.`);
176
+ }
177
+ const typeVariantErr = listTypeVariant.type;
178
+ if (typeVariantErr === '()') {
179
+ return CairoResultVariant.Err.toString();
180
+ }
181
+ const parsedParameter = parseCalldataValue(myResult.unwrap(), typeVariantErr, structs, enums);
182
+ if (Array.isArray(parsedParameter)) {
183
+ return [CairoResultVariant.Err.toString(), ...parsedParameter];
184
+ }
185
+ return [CairoResultVariant.Err.toString(), parsedParameter];
186
+ }
187
+ // Custom Enum
188
+ const myEnum = element;
189
+ const activeVariant = myEnum.activeVariant();
190
+ const listTypeVariant = variants.find((variant) => variant.name === activeVariant);
191
+ if (typeof listTypeVariant === 'undefined') {
192
+ throw Error(`Not find in abi : Enum has no '${activeVariant}' variant.`);
193
+ }
194
+ const typeActiveVariant = listTypeVariant.type;
195
+ const numActiveVariant = variants.findIndex((variant) => variant.name === activeVariant); // can not fail due to check of listTypeVariant
196
+ if (typeActiveVariant === '()') {
197
+ return numActiveVariant.toString();
198
+ }
199
+ const parsedParameter = parseCalldataValue(myEnum.unwrap(), typeActiveVariant, structs, enums);
200
+ if (Array.isArray(parsedParameter)) {
201
+ return [numActiveVariant.toString(), ...parsedParameter];
202
+ }
203
+ return [numActiveVariant.toString(), parsedParameter];
204
+ }
205
+ if (typeof element === 'object') {
206
+ throw Error(`Parameter ${element} do not align with abi parameter ${type}`);
207
+ }
208
+ return parseBaseTypes(type, element);
209
+ }
210
+ /**
211
+ * Parse one field of the calldata by using input field from the abi for that method
212
+ *
213
+ * @param argsIterator - Iterator for value of the field
214
+ * @param input - input(field) information from the abi that will be used to parse the data
215
+ * @param structs - structs from abi
216
+ * @param enums - enums from abi
217
+ * @return {string | string[]} - parsed arguments in format that contract is expecting
218
+ */
219
+ export function parseCalldataField(argsIterator, input, structs, enums) {
220
+ const { name, type } = input;
221
+ let { value } = argsIterator.next();
222
+ switch (true) {
223
+ // Array
224
+ case isTypeArray(type):
225
+ if (!Array.isArray(value) && !isText(value)) {
226
+ throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`);
227
+ }
228
+ if (isString(value)) {
229
+ // long string match cairo felt*
230
+ value = splitLongString(value);
231
+ }
232
+ return parseCalldataValue(value, input.type, structs, enums);
233
+ case type === 'core::starknet::eth_address::EthAddress':
234
+ return parseBaseTypes(type, value);
235
+ // Struct or Tuple
236
+ case isTypeStruct(type, structs) ||
237
+ isTypeTuple(type) ||
238
+ CairoUint256.isAbiType(type) ||
239
+ CairoUint256.isAbiType(type):
240
+ return parseCalldataValue(value, type, structs, enums);
241
+ // Enums
242
+ case isTypeEnum(type, enums):
243
+ return parseCalldataValue(value, type, structs, enums);
244
+ // Felt or unhandled
245
+ default:
246
+ return parseBaseTypes(type, value);
247
+ }
248
+ }
@@ -0,0 +1,11 @@
1
+ import { AbiEntry, AbiEnums, AbiStructs, Args, EventEntry, ParsedStruct } from '../../types/index.js';
2
+ /**
3
+ * Parse elements of the response and structuring them into one field by using output property from the abi for that method
4
+ *
5
+ * @param responseIterator - iterator of the response
6
+ * @param output - output(field) information from the abi that will be used to parse the data
7
+ * @param structs - structs from abi
8
+ * @param parsedResult
9
+ * @return - parsed response corresponding to the abi structure of the field
10
+ */
11
+ export default function responseParser(responseIterator: Iterator<string>, output: AbiEntry | EventEntry, structs?: AbiStructs, enums?: AbiEnums, parsedResult?: Args | ParsedStruct): any;