ccxt 4.3.69 → 4.3.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/ccxt.browser.min.js +13 -10
- package/dist/cjs/ccxt.js +8 -1
- package/dist/cjs/src/abstract/paradex.js +9 -0
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/base/Exchange.js +55 -0
- package/dist/cjs/src/binance.js +1 -1
- package/dist/cjs/src/blofin.js +63 -6
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/coinbaseinternational.js +168 -2
- package/dist/cjs/src/cryptocom.js +9 -1
- package/dist/cjs/src/hitbtc.js +1 -1
- package/dist/cjs/src/paradex.js +2075 -0
- package/dist/cjs/src/poloniex.js +1 -0
- package/dist/cjs/src/pro/bequant.js +4 -0
- package/dist/cjs/src/pro/blofin.js +665 -0
- package/dist/cjs/src/pro/coinbaseinternational.js +154 -9
- package/dist/cjs/src/pro/cryptocom.js +3 -1
- package/dist/cjs/src/pro/hitbtc.js +26 -8
- package/dist/cjs/src/pro/okx.js +7 -0
- package/dist/cjs/src/pro/paradex.js +365 -0
- package/dist/cjs/src/pro/poloniex.js +37 -12
- package/dist/cjs/src/pro/woo.js +5 -4
- 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 +11 -2
- package/js/ccxt.js +8 -2
- package/js/src/abstract/coinbaseinternational.d.ts +1 -1
- package/js/src/abstract/paradex.d.ts +43 -0
- package/js/src/abstract/paradex.js +11 -0
- package/js/src/ascendex.js +1 -1
- package/js/src/base/Exchange.d.ts +8 -0
- package/js/src/base/Exchange.js +51 -0
- package/js/src/binance.js +1 -1
- package/js/src/blofin.d.ts +1 -1
- package/js/src/blofin.js +63 -6
- package/js/src/bybit.js +1 -1
- package/js/src/coinbaseinternational.d.ts +6 -1
- package/js/src/coinbaseinternational.js +168 -2
- package/js/src/cryptocom.js +10 -2
- package/js/src/hitbtc.js +1 -1
- package/js/src/paradex.d.ts +76 -0
- package/js/src/paradex.js +2075 -0
- package/js/src/poloniex.js +1 -0
- package/js/src/pro/bequant.js +4 -0
- package/js/src/pro/blofin.d.ts +39 -0
- package/js/src/pro/blofin.js +668 -0
- package/js/src/pro/coinbaseinternational.d.ts +5 -1
- package/js/src/pro/coinbaseinternational.js +155 -10
- package/js/src/pro/cryptocom.js +4 -2
- package/js/src/pro/hitbtc.d.ts +1 -1
- package/js/src/pro/hitbtc.js +26 -8
- package/js/src/pro/okx.js +7 -0
- package/js/src/pro/paradex.d.ts +15 -0
- package/js/src/pro/paradex.js +366 -0
- package/js/src/pro/poloniex.js +37 -12
- package/js/src/pro/woo.js +5 -4
- 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,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,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;
|