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,63 @@
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 var CairoResultVariant;
8
+ (function (CairoResultVariant) {
9
+ CairoResultVariant[CairoResultVariant["Ok"] = 0] = "Ok";
10
+ CairoResultVariant[CairoResultVariant["Err"] = 1] = "Err";
11
+ })(CairoResultVariant || (CairoResultVariant = {}));
12
+ /**
13
+ * Class to handle Cairo Result
14
+ * @param variant CairoResultVariant.Ok or CairoResultVariant.Err
15
+ * @param resultContent value of type T or U.
16
+ * @returns an instance representing a Cairo Result.
17
+ * @example
18
+ * ```typescript
19
+ * const myOption = new CairoResult<BigNumberish, CustomError>(CairoResultVariant.Ok, "0x54dda8");
20
+ * ```
21
+ */
22
+ export class CairoResult {
23
+ constructor(variant, resultContent) {
24
+ if (!(variant in CairoResultVariant)) {
25
+ throw new Error('Wrong variant : should be CairoResultVariant.Ok or .Err.');
26
+ }
27
+ if (variant === CairoResultVariant.Ok) {
28
+ this.Ok = resultContent;
29
+ this.Err = undefined;
30
+ }
31
+ else {
32
+ this.Ok = undefined;
33
+ this.Err = resultContent;
34
+ }
35
+ }
36
+ /**
37
+ *
38
+ * @returns the content of the valid variant of a Cairo Result.
39
+ */
40
+ unwrap() {
41
+ if (typeof this.Ok !== 'undefined') {
42
+ return this.Ok;
43
+ }
44
+ if (typeof this.Err !== 'undefined') {
45
+ return this.Err;
46
+ }
47
+ throw new Error('Both Result.Ok and .Err are undefined. Not authorized.');
48
+ }
49
+ /**
50
+ *
51
+ * @returns true if the valid variant is 'Ok'.
52
+ */
53
+ isOk() {
54
+ return !(typeof this.Ok === 'undefined');
55
+ }
56
+ /**
57
+ *
58
+ * @returns true if the valid variant is 'isErr'.
59
+ */
60
+ isErr() {
61
+ return !(typeof this.Err === 'undefined');
62
+ }
63
+ }
@@ -0,0 +1,3 @@
1
+ export * from './CairoCustomEnum.js';
2
+ export * from './CairoOption.js';
3
+ export * from './CairoResult.js';
@@ -0,0 +1,9 @@
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 * from './CairoCustomEnum.js';
8
+ export * from './CairoOption.js';
9
+ export * from './CairoResult.js';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Formats the given data based on the provided type definition.
3
+ *
4
+ * @param {any} data - The data to be formatted.
5
+ * @param {any} type - The type definition for the data.
6
+ * @param {any} [sameType] - The same type definition to be used (optional).
7
+ * @returns - The formatted data.
8
+ */
9
+ export default function formatter(data: Record<string, any>, type: Record<string, any>, sameType?: any): Record<string, any>;
@@ -0,0 +1,67 @@
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 { isBigInt } from '../num.js';
8
+ import { decodeShortString } from '../shortString.js';
9
+ const guard = {
10
+ isBN: (data, type, key) => {
11
+ if (!isBigInt(data[key]))
12
+ throw new Error(`Data and formatter mismatch on ${key}:${type[key]}, expected response data ${key}:${data[key]} to be BN instead it is ${typeof data[key]}`);
13
+ },
14
+ unknown: (data, type, key) => {
15
+ throw new Error(`Unhandled formatter type on ${key}:${type[key]} for data ${key}:${data[key]}`);
16
+ },
17
+ };
18
+ /**
19
+ * Formats the given data based on the provided type definition.
20
+ *
21
+ * @param {any} data - The data to be formatted.
22
+ * @param {any} type - The type definition for the data.
23
+ * @param {any} [sameType] - The same type definition to be used (optional).
24
+ * @returns - The formatted data.
25
+ */
26
+ export default function formatter(data, type, sameType) {
27
+ // match data element with type element
28
+ return Object.entries(data).reduce((acc, [key, value]) => {
29
+ const elType = sameType ?? type[key];
30
+ if (!(key in type) && !sameType) {
31
+ // no type definition for element return original element
32
+ acc[key] = value;
33
+ return acc;
34
+ }
35
+ if (elType === 'string') {
36
+ if (Array.isArray(data[key])) {
37
+ // long string (felt*)
38
+ const arrayStr = formatter(data[key], data[key].map((_) => elType));
39
+ acc[key] = Object.values(arrayStr).join('');
40
+ return acc;
41
+ }
42
+ guard.isBN(data, type, key);
43
+ acc[key] = decodeShortString(value);
44
+ return acc;
45
+ }
46
+ if (elType === 'number') {
47
+ guard.isBN(data, type, key);
48
+ acc[key] = Number(value);
49
+ return acc;
50
+ }
51
+ if (typeof elType === 'function') {
52
+ acc[key] = elType(value);
53
+ return acc;
54
+ }
55
+ if (Array.isArray(elType)) {
56
+ const arrayObj = formatter(data[key], elType, elType[0]);
57
+ acc[key] = Object.values(arrayObj);
58
+ return acc;
59
+ }
60
+ if (typeof elType === 'object') {
61
+ acc[key] = formatter(data[key], elType);
62
+ return acc;
63
+ }
64
+ guard.unknown(data, type, key);
65
+ return acc;
66
+ }, {});
67
+ }
@@ -0,0 +1,89 @@
1
+ import { Abi, AbiEnums, AbiStructs, AllowArray, ArgsOrCalldata, Calldata, HexCalldata, RawArgs, Result, ValidateType } from '../../types/index.js';
2
+ import { AbiParserInterface } from './parser/interface.js';
3
+ export * as cairo from './cairo.js';
4
+ export * as byteArray from './byteArray.js';
5
+ export declare class CallData {
6
+ abi: Abi;
7
+ parser: AbiParserInterface;
8
+ protected readonly structs: AbiStructs;
9
+ protected readonly enums: AbiEnums;
10
+ constructor(abi: Abi);
11
+ /**
12
+ * Validate arguments passed to the method as corresponding to the ones in the abi
13
+ * @param type ValidateType - type of the method
14
+ * @param method string - name of the method
15
+ * @param args ArgsOrCalldata - arguments that are passed to the method
16
+ */
17
+ validate(type: ValidateType, method: string, args?: ArgsOrCalldata): void;
18
+ /**
19
+ * Compile contract callData with abi
20
+ * Parse the calldata by using input fields from the abi for that method
21
+ * @param method string - method name
22
+ * @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).
23
+ * @return Calldata - parsed arguments in format that contract is expecting
24
+ * @example
25
+ * ```typescript
26
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
27
+ * ```
28
+ * ```typescript
29
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
30
+ * ```
31
+ */
32
+ compile(method: string, argsCalldata: RawArgs): Calldata;
33
+ /**
34
+ * Compile contract callData without abi
35
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
36
+ * @returns Calldata
37
+ */
38
+ static compile(rawArgs: RawArgs): Calldata;
39
+ /**
40
+ * Parse elements of the response array and structuring them into response object
41
+ * @param method string - method name
42
+ * @param response string[] - response from the method
43
+ * @return Result - parsed response corresponding to the abi
44
+ */
45
+ parse(method: string, response: string[]): Result;
46
+ /**
47
+ * Format cairo method response data to native js values based on provided format schema
48
+ * @param method string - cairo method name
49
+ * @param response string[] - cairo method response
50
+ * @param format object - formatter object schema
51
+ * @returns Result - parsed and formatted response object
52
+ */
53
+ format(method: string, response: string[], format: object): Result;
54
+ /**
55
+ * Helper to extract structs from abi
56
+ * @param abi Abi
57
+ * @returns AbiStructs - structs from abi
58
+ */
59
+ static getAbiStruct(abi: Abi): AbiStructs;
60
+ /**
61
+ * Helper to extract enums from abi
62
+ * @param abi Abi
63
+ * @returns AbiEnums - enums from abi
64
+ */
65
+ static getAbiEnum(abi: Abi): AbiEnums;
66
+ /**
67
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
68
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
69
+ * @returns Calldata
70
+ */
71
+ static toCalldata(rawCalldata?: RawArgs): Calldata;
72
+ /**
73
+ * Helper: Convert raw to HexCalldata
74
+ * @param raw HexCalldata | RawCalldata | RawArgs
75
+ * @returns HexCalldata
76
+ */
77
+ static toHex(raw?: RawArgs): HexCalldata;
78
+ /**
79
+ * Parse the elements of a contract response and structure them into one or several Result.
80
+ * In Cairo 0, arrays are not supported.
81
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
82
+ * @param response string[] - serialized data corresponding to typeCairo.
83
+ * @return Result or Result[] - parsed response corresponding to typeData.
84
+ * @example
85
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
86
+ * result = { address: 1193046n, is_claimed: true }
87
+ */
88
+ decodeParameters(typeCairo: AllowArray<string>, response: string[]): AllowArray<Result>;
89
+ }
@@ -0,0 +1,280 @@
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
+ /* eslint-disable no-plusplus */
8
+ import { ValidateType, } from '../../types/index.js';
9
+ import assert from '../assert.js';
10
+ import { isBigInt, toHex } from '../num.js';
11
+ import { getSelectorFromName } from '../selector.js';
12
+ import { isLongText } from '../shortString.js';
13
+ import { byteArrayFromString } from './byteArray.js';
14
+ import { felt, isCairo1Type, isLen } from './cairo.js';
15
+ import { CairoOptionVariant, CairoResultVariant, } from './enum/index.js';
16
+ import formatter from './formatter.js';
17
+ import { createAbiParser, isNoConstructorValid } from './parser/index.js';
18
+ import orderPropsByAbi from './propertyOrder.js';
19
+ import { parseCalldataField } from './requestParser.js';
20
+ import responseParser from './responseParser.js';
21
+ import validateFields from './validate.js';
22
+ export * as cairo from './cairo.js';
23
+ export * as byteArray from './byteArray.js';
24
+ export class CallData {
25
+ constructor(abi) {
26
+ this.structs = CallData.getAbiStruct(abi);
27
+ this.enums = CallData.getAbiEnum(abi);
28
+ this.parser = createAbiParser(abi);
29
+ this.abi = this.parser.getLegacyFormat();
30
+ }
31
+ /**
32
+ * Validate arguments passed to the method as corresponding to the ones in the abi
33
+ * @param type ValidateType - type of the method
34
+ * @param method string - name of the method
35
+ * @param args ArgsOrCalldata - arguments that are passed to the method
36
+ */
37
+ validate(type, method, args = []) {
38
+ // ensure provided method of type exists
39
+ if (type !== ValidateType.DEPLOY) {
40
+ const invocableFunctionNames = this.abi
41
+ .filter((abi) => {
42
+ if (abi.type !== 'function')
43
+ return false;
44
+ const isView = abi.stateMutability === 'view' || abi.state_mutability === 'view';
45
+ return type === ValidateType.INVOKE ? !isView : isView;
46
+ })
47
+ .map((abi) => abi.name);
48
+ assert(invocableFunctionNames.includes(method), `${type === ValidateType.INVOKE ? 'invocable' : 'viewable'} method not found in abi`);
49
+ }
50
+ // get requested method from abi
51
+ const abiMethod = this.abi.find((abi) => type === ValidateType.DEPLOY
52
+ ? abi.name === method && abi.type === 'constructor'
53
+ : abi.name === method && abi.type === 'function');
54
+ if (isNoConstructorValid(method, args, abiMethod)) {
55
+ return;
56
+ }
57
+ // validate arguments length
58
+ const inputsLength = this.parser.methodInputsLength(abiMethod);
59
+ if (args.length !== inputsLength) {
60
+ throw Error(`Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`);
61
+ }
62
+ // validate parameters
63
+ validateFields(abiMethod, args, this.structs, this.enums);
64
+ }
65
+ /**
66
+ * Compile contract callData with abi
67
+ * Parse the calldata by using input fields from the abi for that method
68
+ * @param method string - method name
69
+ * @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).
70
+ * @return Calldata - parsed arguments in format that contract is expecting
71
+ * @example
72
+ * ```typescript
73
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
74
+ * ```
75
+ * ```typescript
76
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
77
+ * ```
78
+ */
79
+ compile(method, argsCalldata) {
80
+ const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method);
81
+ if (isNoConstructorValid(method, argsCalldata, abiMethod)) {
82
+ return [];
83
+ }
84
+ let args;
85
+ if (Array.isArray(argsCalldata)) {
86
+ args = argsCalldata;
87
+ }
88
+ else {
89
+ // order the object
90
+ const orderedObject = orderPropsByAbi(argsCalldata, abiMethod.inputs, this.structs, this.enums);
91
+ args = Object.values(orderedObject);
92
+ // // validate array elements to abi
93
+ validateFields(abiMethod, args, this.structs, this.enums);
94
+ }
95
+ const argsIterator = args[Symbol.iterator]();
96
+ const callArray = abiMethod.inputs.reduce((acc, input) => isLen(input.name) && !isCairo1Type(input.type)
97
+ ? acc
98
+ : acc.concat(parseCalldataField(argsIterator, input, this.structs, this.enums)), []);
99
+ // add compiled property to array object
100
+ Object.defineProperty(callArray, '__compiled__', {
101
+ enumerable: false,
102
+ writable: false,
103
+ value: true,
104
+ });
105
+ return callArray;
106
+ }
107
+ /**
108
+ * Compile contract callData without abi
109
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
110
+ * @returns Calldata
111
+ */
112
+ static compile(rawArgs) {
113
+ const createTree = (obj) => {
114
+ const getEntries = (o, prefix = '.') => {
115
+ const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;
116
+ return Object.entries(oe).flatMap(([k, v]) => {
117
+ let value = v;
118
+ if (k === 'entrypoint')
119
+ value = getSelectorFromName(value);
120
+ else if (isLongText(value))
121
+ value = byteArrayFromString(value);
122
+ const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;
123
+ if (isBigInt(value))
124
+ return [[`${prefix}${kk}`, felt(value)]];
125
+ if (Object(value) === value) {
126
+ const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));
127
+ const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];
128
+ if (keys.includes('isSome') && keys.includes('isNone')) {
129
+ // Option
130
+ const myOption = value;
131
+ const variantNb = myOption.isSome()
132
+ ? CairoOptionVariant.Some
133
+ : CairoOptionVariant.None;
134
+ if (myOption.isSome())
135
+ return getEntries({ 0: variantNb, 1: myOption.unwrap() }, `${prefix}${kk}.`);
136
+ return [[`${prefix}${kk}`, felt(variantNb)]];
137
+ }
138
+ if (keys.includes('isOk') && keys.includes('isErr')) {
139
+ // Result
140
+ const myResult = value;
141
+ const variantNb = myResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err;
142
+ return getEntries({ 0: variantNb, 1: myResult.unwrap() }, `${prefix}${kk}.`);
143
+ }
144
+ if (keys.includes('variant') && keys.includes('activeVariant')) {
145
+ // CustomEnum
146
+ const myEnum = value;
147
+ const activeVariant = myEnum.activeVariant();
148
+ const listVariants = Object.keys(myEnum.variant);
149
+ const activeVariantNb = listVariants.findIndex((variant) => variant === activeVariant);
150
+ if (typeof myEnum.unwrap() === 'object' &&
151
+ Object.keys(myEnum.unwrap()).length === 0 // empty object : {}
152
+ ) {
153
+ return [[`${prefix}${kk}`, felt(activeVariantNb)]];
154
+ }
155
+ return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`);
156
+ }
157
+ // normal object
158
+ return getEntries(value, `${prefix}${kk}.`);
159
+ }
160
+ return [[`${prefix}${kk}`, felt(value)]];
161
+ });
162
+ };
163
+ const result = Object.fromEntries(getEntries(obj));
164
+ return result;
165
+ };
166
+ let callTreeArray;
167
+ if (!Array.isArray(rawArgs)) {
168
+ // flatten structs, tuples, add array length. Process leafs as Felt
169
+ const callTree = createTree(rawArgs);
170
+ // convert to array
171
+ callTreeArray = Object.values(callTree);
172
+ }
173
+ else {
174
+ // already compiled data but modified or raw args provided as array, recompile it
175
+ // recreate tree
176
+ const callObj = { ...rawArgs };
177
+ const callTree = createTree(callObj);
178
+ callTreeArray = Object.values(callTree);
179
+ }
180
+ // add compiled property to array object
181
+ Object.defineProperty(callTreeArray, '__compiled__', {
182
+ enumerable: false,
183
+ writable: false,
184
+ value: true,
185
+ });
186
+ return callTreeArray;
187
+ }
188
+ /**
189
+ * Parse elements of the response array and structuring them into response object
190
+ * @param method string - method name
191
+ * @param response string[] - response from the method
192
+ * @return Result - parsed response corresponding to the abi
193
+ */
194
+ parse(method, response) {
195
+ const { outputs } = this.abi.find((abi) => abi.name === method);
196
+ const responseIterator = response.flat()[Symbol.iterator]();
197
+ const parsed = outputs.flat().reduce((acc, output, idx) => {
198
+ const propName = output.name ?? idx;
199
+ acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);
200
+ if (acc[propName] && acc[`${propName}_len`]) {
201
+ delete acc[`${propName}_len`];
202
+ }
203
+ return acc;
204
+ }, {});
205
+ // Cairo1 avoid object.0 structure
206
+ return Object.keys(parsed).length === 1 && 0 in parsed ? parsed[0] : parsed;
207
+ }
208
+ /**
209
+ * Format cairo method response data to native js values based on provided format schema
210
+ * @param method string - cairo method name
211
+ * @param response string[] - cairo method response
212
+ * @param format object - formatter object schema
213
+ * @returns Result - parsed and formatted response object
214
+ */
215
+ format(method, response, format) {
216
+ const parsed = this.parse(method, response);
217
+ return formatter(parsed, format);
218
+ }
219
+ /**
220
+ * Helper to extract structs from abi
221
+ * @param abi Abi
222
+ * @returns AbiStructs - structs from abi
223
+ */
224
+ static getAbiStruct(abi) {
225
+ return abi
226
+ .filter((abiEntry) => abiEntry.type === 'struct')
227
+ .reduce((acc, abiEntry) => ({
228
+ ...acc,
229
+ [abiEntry.name]: abiEntry,
230
+ }), {});
231
+ }
232
+ /**
233
+ * Helper to extract enums from abi
234
+ * @param abi Abi
235
+ * @returns AbiEnums - enums from abi
236
+ */
237
+ static getAbiEnum(abi) {
238
+ const fullEnumList = abi
239
+ .filter((abiEntry) => abiEntry.type === 'enum')
240
+ .reduce((acc, abiEntry) => ({
241
+ ...acc,
242
+ [abiEntry.name]: abiEntry,
243
+ }), {});
244
+ delete fullEnumList['core::bool'];
245
+ return fullEnumList;
246
+ }
247
+ /**
248
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
249
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
250
+ * @returns Calldata
251
+ */
252
+ static toCalldata(rawCalldata = []) {
253
+ return CallData.compile(rawCalldata);
254
+ }
255
+ /**
256
+ * Helper: Convert raw to HexCalldata
257
+ * @param raw HexCalldata | RawCalldata | RawArgs
258
+ * @returns HexCalldata
259
+ */
260
+ static toHex(raw = []) {
261
+ const calldata = CallData.compile(raw);
262
+ return calldata.map((it) => toHex(it));
263
+ }
264
+ /**
265
+ * Parse the elements of a contract response and structure them into one or several Result.
266
+ * In Cairo 0, arrays are not supported.
267
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
268
+ * @param response string[] - serialized data corresponding to typeCairo.
269
+ * @return Result or Result[] - parsed response corresponding to typeData.
270
+ * @example
271
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
272
+ * result = { address: 1193046n, is_claimed: true }
273
+ */
274
+ decodeParameters(typeCairo, response) {
275
+ const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo];
276
+ const responseIterator = response.flat()[Symbol.iterator]();
277
+ const decodedArray = typeCairoArray.map((typeParam) => responseParser(responseIterator, { name: '', type: typeParam }, this.structs, this.enums));
278
+ return decodedArray.length === 1 ? decodedArray[0] : decodedArray;
279
+ }
280
+ }
@@ -0,0 +1,5 @@
1
+ import { Abi, FunctionAbi, RawArgs } from '../../../types/index.js';
2
+ import { AbiParserInterface } from './interface.js';
3
+ export declare function createAbiParser(abi: Abi): AbiParserInterface;
4
+ export declare function getAbiVersion(abi: Abi): 1 | 0 | 2;
5
+ export declare function isNoConstructorValid(method: string, argsCalldata: RawArgs, abiMethod?: FunctionAbi): boolean;
@@ -0,0 +1,30 @@
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 { isCairo1Abi } from '../cairo.js';
8
+ import { AbiParser1 } from './parser-0-1.1.0.js';
9
+ import { AbiParser2 } from './parser-2.0.0.js';
10
+ export function createAbiParser(abi) {
11
+ const version = getAbiVersion(abi);
12
+ if (version === 0 || version === 1) {
13
+ return new AbiParser1(abi);
14
+ }
15
+ if (version === 2) {
16
+ return new AbiParser2(abi);
17
+ }
18
+ throw Error(`Unsupported ABI version ${version}`);
19
+ }
20
+ export function getAbiVersion(abi) {
21
+ if (abi.find((it) => it.type === 'interface'))
22
+ return 2;
23
+ if (isCairo1Abi(abi))
24
+ return 1;
25
+ return 0;
26
+ }
27
+ export function isNoConstructorValid(method, argsCalldata, abiMethod) {
28
+ // No constructor in abi and validly empty args
29
+ return method === 'constructor' && !abiMethod && !argsCalldata.length;
30
+ }
@@ -0,0 +1,20 @@
1
+ import { Abi, FunctionAbi } from '../../../types/index.js';
2
+ export declare abstract class AbiParserInterface {
3
+ /**
4
+ * Helper to calculate inputs length from abi
5
+ * @param abiMethod FunctionAbi
6
+ * @return number
7
+ */
8
+ abstract methodInputsLength(abiMethod: FunctionAbi): number;
9
+ /**
10
+ *
11
+ * @param name string
12
+ * @return FunctionAbi | undefined
13
+ */
14
+ abstract getMethod(name: string): FunctionAbi | undefined;
15
+ /**
16
+ * Return Abi in legacy format
17
+ * @return Abi
18
+ */
19
+ abstract getLegacyFormat(): Abi;
20
+ }
@@ -0,0 +1,8 @@
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 AbiParserInterface {
8
+ }
@@ -0,0 +1,24 @@
1
+ import { Abi, FunctionAbi } from '../../../types/index.js';
2
+ import { AbiParserInterface } from './interface.js';
3
+ export declare class AbiParser1 implements AbiParserInterface {
4
+ abi: Abi;
5
+ constructor(abi: Abi);
6
+ /**
7
+ * abi method inputs length without '_len' inputs
8
+ * cairo 0 reducer
9
+ * @param abiMethod FunctionAbi
10
+ * @returns number
11
+ */
12
+ methodInputsLength(abiMethod: FunctionAbi): number;
13
+ /**
14
+ * get method definition from abi
15
+ * @param name string
16
+ * @returns FunctionAbi | undefined
17
+ */
18
+ getMethod(name: string): FunctionAbi | undefined;
19
+ /**
20
+ * Get Abi in legacy format
21
+ * @returns Abi
22
+ */
23
+ getLegacyFormat(): Abi;
24
+ }
@@ -0,0 +1,36 @@
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 { isLen } from '../cairo.js';
8
+ export class AbiParser1 {
9
+ constructor(abi) {
10
+ this.abi = abi;
11
+ }
12
+ /**
13
+ * abi method inputs length without '_len' inputs
14
+ * cairo 0 reducer
15
+ * @param abiMethod FunctionAbi
16
+ * @returns number
17
+ */
18
+ methodInputsLength(abiMethod) {
19
+ return abiMethod.inputs.reduce((acc, input) => (!isLen(input.name) ? acc + 1 : acc), 0);
20
+ }
21
+ /**
22
+ * get method definition from abi
23
+ * @param name string
24
+ * @returns FunctionAbi | undefined
25
+ */
26
+ getMethod(name) {
27
+ return this.abi.find((it) => it.name === name);
28
+ }
29
+ /**
30
+ * Get Abi in legacy format
31
+ * @returns Abi
32
+ */
33
+ getLegacyFormat() {
34
+ return this.abi;
35
+ }
36
+ }