ccxt 4.3.70 → 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.
- package/README.md +6 -5
- package/dist/ccxt.browser.min.js +13 -10
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/abstract/paradex.js +9 -0
- package/dist/cjs/src/base/Exchange.js +49 -0
- package/dist/cjs/src/paradex.js +2075 -0
- package/dist/cjs/src/pro/bequant.js +4 -0
- package/dist/cjs/src/pro/paradex.js +365 -0
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +100 -0
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -0
- package/dist/cjs/src/static_dependencies/scure-starknet/index.js +284 -0
- package/dist/cjs/src/static_dependencies/starknet/constants.js +60 -0
- package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +26 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +8 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +13 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +56 -0
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +15 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +44 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +122 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +137 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +61 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +218 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +66 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +281 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +33 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +37 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +156 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +250 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +215 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +112 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +206 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +58 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +57 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +76 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +92 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +48 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +101 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +334 -0
- package/dist/cjs/src/woo.js +4 -2
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/paradex.d.ts +43 -0
- package/js/src/abstract/paradex.js +11 -0
- package/js/src/base/Exchange.d.ts +7 -0
- package/js/src/base/Exchange.js +45 -0
- package/js/src/paradex.d.ts +76 -0
- package/js/src/paradex.js +2075 -0
- package/js/src/pro/bequant.js +4 -0
- package/js/src/pro/paradex.d.ts +15 -0
- package/js/src/pro/paradex.js +366 -0
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +24 -0
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
- package/js/src/static_dependencies/scure-starknet/index.d.ts +79 -0
- package/js/src/static_dependencies/scure-starknet/index.js +323 -0
- package/js/src/static_dependencies/starknet/constants.d.ts +61 -0
- package/js/src/static_dependencies/starknet/constants.js +67 -0
- package/js/src/static_dependencies/starknet/index.d.ts +7 -0
- package/js/src/static_dependencies/starknet/index.js +50 -0
- package/js/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
- package/js/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
- package/js/src/static_dependencies/starknet/types/calldata.js +28 -0
- package/js/src/static_dependencies/starknet/types/index.d.ts +13 -0
- package/js/src/static_dependencies/starknet/types/index.js +16 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
- package/js/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
- package/js/src/static_dependencies/starknet/types/lib/index.js +52 -0
- package/js/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
- package/js/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/js/src/static_dependencies/starknet/utils/address.d.ts +53 -0
- package/js/src/static_dependencies/starknet/utils/address.js +89 -0
- package/js/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
- package/js/src/static_dependencies/starknet/utils/assert.js +17 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
- package/js/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
- package/js/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
- package/js/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
- package/js/src/static_dependencies/starknet/utils/encode.js +282 -0
- package/js/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +224 -0
- package/js/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
- package/js/src/static_dependencies/starknet/utils/hash/index.js +13 -0
- package/js/src/static_dependencies/starknet/utils/json.d.ts +24 -0
- package/js/src/static_dependencies/starknet/utils/json.js +43 -0
- package/js/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
- package/js/src/static_dependencies/starknet/utils/merkle.js +84 -0
- package/js/src/static_dependencies/starknet/utils/num.d.ts +182 -0
- package/js/src/static_dependencies/starknet/utils/num.js +244 -0
- package/js/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
- package/js/src/static_dependencies/starknet/utils/selector.js +85 -0
- package/js/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
- package/js/src/static_dependencies/starknet/utils/shortString.js +96 -0
- package/js/src/static_dependencies/starknet/utils/starknetId.d.ts +113 -0
- package/js/src/static_dependencies/starknet/utils/starknetId.js +265 -0
- package/js/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
- package/js/src/static_dependencies/starknet/utils/typedData.js +321 -0
- package/js/src/static_dependencies/starknet/utils/uint256.d.ts +21 -0
- package/js/src/static_dependencies/starknet/utils/uint256.js +32 -0
- package/js/src/static_dependencies/starknet/utils/url.d.ts +29 -0
- package/js/src/static_dependencies/starknet/utils/url.js +70 -0
- package/js/src/woo.js +4 -2
- 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,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
|
+
}
|