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.
- 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/examples/js/cli.js +8 -4
- 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/base/types.d.ts +10 -10
- 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,224 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Class Hash
|
|
9
|
+
*/
|
|
10
|
+
import { poseidonHashMany } from '../../../scure-starknet/index.js';
|
|
11
|
+
import { ADDR_BOUND, API_VERSION } from '../../constants.js';
|
|
12
|
+
import { CallData } from '../calldata/index.js';
|
|
13
|
+
import { felt } from '../calldata/cairo.js';
|
|
14
|
+
import { pedersen, poseidonHash, keccak } from '../../../scure-starknet/index.js';
|
|
15
|
+
import { addHexPrefix, utf8ToArray } from '../encode.js';
|
|
16
|
+
import { parse, stringify } from '../json.js';
|
|
17
|
+
import { toHex } from '../num.js';
|
|
18
|
+
import { encodeShortString, isString } from '../shortString.js';
|
|
19
|
+
export function computePedersenHash(a, b) {
|
|
20
|
+
return pedersen(BigInt(a), BigInt(b));
|
|
21
|
+
}
|
|
22
|
+
export function computePoseidonHash(a, b) {
|
|
23
|
+
return toHex(poseidonHash(BigInt(a), BigInt(b)));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Compute pedersen hash from data
|
|
27
|
+
* @returns format: hex-string - pedersen hash
|
|
28
|
+
*/
|
|
29
|
+
export function computeHashOnElements(data) {
|
|
30
|
+
return [...data, data.length]
|
|
31
|
+
.reduce((x, y) => pedersen(BigInt(x), BigInt(y)), 0)
|
|
32
|
+
.toString();
|
|
33
|
+
}
|
|
34
|
+
export const computePedersenHashOnElements = computeHashOnElements;
|
|
35
|
+
export function computePoseidonHashOnElements(data) {
|
|
36
|
+
return toHex(poseidonHashMany(data.map((x) => BigInt(x))));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Calculate contract address from class hash
|
|
40
|
+
* @returns format: hex-string
|
|
41
|
+
*/
|
|
42
|
+
export function calculateContractAddressFromHash(salt, classHash, constructorCalldata, deployerAddress) {
|
|
43
|
+
const compiledCalldata = CallData.compile(constructorCalldata);
|
|
44
|
+
const constructorCalldataHash = computeHashOnElements(compiledCalldata);
|
|
45
|
+
const CONTRACT_ADDRESS_PREFIX = felt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'
|
|
46
|
+
const hash = computeHashOnElements([
|
|
47
|
+
CONTRACT_ADDRESS_PREFIX,
|
|
48
|
+
deployerAddress,
|
|
49
|
+
salt,
|
|
50
|
+
classHash,
|
|
51
|
+
constructorCalldataHash,
|
|
52
|
+
]);
|
|
53
|
+
return toHex(BigInt(hash) % ADDR_BOUND);
|
|
54
|
+
}
|
|
55
|
+
function nullSkipReplacer(key, value) {
|
|
56
|
+
if (key === 'attributes' || key === 'accessible_scopes') {
|
|
57
|
+
return Array.isArray(value) && value.length === 0 ? undefined : value;
|
|
58
|
+
}
|
|
59
|
+
if (key === 'debug_info') {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return value === null ? undefined : value;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format json-string to conform starknet json-string
|
|
66
|
+
* @param json json-string
|
|
67
|
+
* @returns format: json-string
|
|
68
|
+
*/
|
|
69
|
+
export function formatSpaces(json) {
|
|
70
|
+
let insideQuotes = false;
|
|
71
|
+
const newString = [];
|
|
72
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
73
|
+
for (const char of json) {
|
|
74
|
+
if (char === '"' && (newString.length > 0 && newString.slice(-1)[0] === '\\') === false) {
|
|
75
|
+
insideQuotes = !insideQuotes;
|
|
76
|
+
}
|
|
77
|
+
if (insideQuotes) {
|
|
78
|
+
newString.push(char);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// eslint-disable-next-line no-nested-ternary
|
|
82
|
+
newString.push(char === ':' ? ': ' : char === ',' ? ', ' : char);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return newString.join('');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Compute hinted class hash for legacy compiled contract (Cairo 0)
|
|
89
|
+
* @returns format: hex-string
|
|
90
|
+
*/
|
|
91
|
+
export default function computeHintedClassHash(compiledContract) {
|
|
92
|
+
const { abi, program } = compiledContract;
|
|
93
|
+
const contractClass = { abi, program };
|
|
94
|
+
const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));
|
|
95
|
+
return addHexPrefix(keccak(utf8ToArray(serializedJson)).toString(16));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Computes the class hash for legacy compiled contract (Cairo 0)
|
|
99
|
+
* @returns format: hex-string
|
|
100
|
+
*/
|
|
101
|
+
export function computeLegacyContractClassHash(contract) {
|
|
102
|
+
const compiledContract = isString(contract)
|
|
103
|
+
? parse(contract)
|
|
104
|
+
: contract;
|
|
105
|
+
const apiVersion = toHex(API_VERSION);
|
|
106
|
+
const externalEntryPointsHash = computeHashOnElements(compiledContract.entry_points_by_type.EXTERNAL.flatMap((e) => [e.selector, e.offset]));
|
|
107
|
+
const l1HandlerEntryPointsHash = computeHashOnElements(compiledContract.entry_points_by_type.L1_HANDLER.flatMap((e) => [e.selector, e.offset]));
|
|
108
|
+
const constructorEntryPointHash = computeHashOnElements(compiledContract.entry_points_by_type.CONSTRUCTOR.flatMap((e) => [e.selector, e.offset]));
|
|
109
|
+
const builtinsHash = computeHashOnElements(compiledContract.program.builtins.map((s) => encodeShortString(s)));
|
|
110
|
+
const hintedClassHash = computeHintedClassHash(compiledContract);
|
|
111
|
+
const dataHash = computeHashOnElements(compiledContract.program.data);
|
|
112
|
+
return computeHashOnElements([
|
|
113
|
+
apiVersion,
|
|
114
|
+
externalEntryPointsHash,
|
|
115
|
+
l1HandlerEntryPointsHash,
|
|
116
|
+
constructorEntryPointHash,
|
|
117
|
+
builtinsHash,
|
|
118
|
+
hintedClassHash,
|
|
119
|
+
dataHash,
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
// Cairo 1 Contract Hashes
|
|
123
|
+
function hashBuiltins(builtins) {
|
|
124
|
+
return poseidonHashMany(builtins.flatMap((it) => {
|
|
125
|
+
return BigInt(encodeShortString(it));
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
function hashEntryPoint(data) {
|
|
129
|
+
const base = data.flatMap((it) => {
|
|
130
|
+
return [BigInt(it.selector), BigInt(it.offset), hashBuiltins(it.builtins)];
|
|
131
|
+
});
|
|
132
|
+
return poseidonHashMany(base);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Compute hash of the bytecode for Sierra v1.5.0 onwards (Cairo 2.6.0)
|
|
136
|
+
* Each segment is Poseidon hashed.
|
|
137
|
+
* The global hash is : 1 + PoseidonHash(len0, h0, len1, h1, ...)
|
|
138
|
+
* @param casm compiled Sierra CASM file content.
|
|
139
|
+
* @returns the bytecode hash as bigint.
|
|
140
|
+
*/
|
|
141
|
+
export function hashByteCodeSegments(casm) {
|
|
142
|
+
const byteCode = casm.bytecode.map((n) => BigInt(n));
|
|
143
|
+
const bytecodeSegmentLengths = casm.bytecode_segment_lengths ?? [];
|
|
144
|
+
let segmentStart = 0;
|
|
145
|
+
const hashLeaves = bytecodeSegmentLengths.flatMap((len) => {
|
|
146
|
+
const segment = byteCode.slice(segmentStart, (segmentStart += len));
|
|
147
|
+
return [BigInt(len), poseidonHashMany(segment)];
|
|
148
|
+
});
|
|
149
|
+
return 1n + poseidonHashMany(hashLeaves);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Compute compiled class hash for contract (Cairo 1)
|
|
153
|
+
* @returns format: hex-string
|
|
154
|
+
*/
|
|
155
|
+
export function computeCompiledClassHash(casm) {
|
|
156
|
+
const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';
|
|
157
|
+
// Hash compiled class version
|
|
158
|
+
const compiledClassVersion = BigInt(encodeShortString(COMPILED_CLASS_VERSION));
|
|
159
|
+
// Hash external entry points.
|
|
160
|
+
const externalEntryPointsHash = hashEntryPoint(casm.entry_points_by_type.EXTERNAL);
|
|
161
|
+
// Hash L1 handler entry points.
|
|
162
|
+
const l1Handlers = hashEntryPoint(casm.entry_points_by_type.L1_HANDLER);
|
|
163
|
+
// Hash constructor entry points.
|
|
164
|
+
const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);
|
|
165
|
+
// Hash bytecode.
|
|
166
|
+
const bytecode = casm.bytecode_segment_lengths
|
|
167
|
+
? hashByteCodeSegments(casm)
|
|
168
|
+
: poseidonHashMany(casm.bytecode.map((it) => BigInt(it)));
|
|
169
|
+
return toHex(poseidonHashMany([
|
|
170
|
+
compiledClassVersion,
|
|
171
|
+
externalEntryPointsHash,
|
|
172
|
+
l1Handlers,
|
|
173
|
+
constructor,
|
|
174
|
+
bytecode,
|
|
175
|
+
]));
|
|
176
|
+
}
|
|
177
|
+
function hashEntryPointSierra(data) {
|
|
178
|
+
const base = data.flatMap((it) => {
|
|
179
|
+
return [BigInt(it.selector), BigInt(it.function_idx)];
|
|
180
|
+
});
|
|
181
|
+
return poseidonHashMany(base);
|
|
182
|
+
}
|
|
183
|
+
function hashAbi(sierra) {
|
|
184
|
+
const indentString = formatSpaces(stringify(sierra.abi, null));
|
|
185
|
+
return BigInt(addHexPrefix(keccak(utf8ToArray(indentString)).toString(16)));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Compute sierra contract class hash (Cairo 1)
|
|
189
|
+
* @returns format: hex-string
|
|
190
|
+
*/
|
|
191
|
+
export function computeSierraContractClassHash(sierra) {
|
|
192
|
+
const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';
|
|
193
|
+
// Hash class version
|
|
194
|
+
const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));
|
|
195
|
+
// Hash external entry points.
|
|
196
|
+
const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);
|
|
197
|
+
// Hash L1 handler entry points.
|
|
198
|
+
const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);
|
|
199
|
+
// Hash constructor entry points.
|
|
200
|
+
const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);
|
|
201
|
+
// Hash abi_hash.
|
|
202
|
+
const abiHash = hashAbi(sierra);
|
|
203
|
+
// Hash Sierra program.
|
|
204
|
+
const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it) => BigInt(it)));
|
|
205
|
+
return toHex(poseidonHashMany([
|
|
206
|
+
compiledClassVersion,
|
|
207
|
+
externalEntryPointsHash,
|
|
208
|
+
l1Handlers,
|
|
209
|
+
constructor,
|
|
210
|
+
abiHash,
|
|
211
|
+
sierraProgram,
|
|
212
|
+
]));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Compute ClassHash (sierra or legacy) based on provided contract
|
|
216
|
+
* @returns format: hex-string
|
|
217
|
+
*/
|
|
218
|
+
export function computeContractClassHash(contract) {
|
|
219
|
+
const compiledContract = isString(contract) ? parse(contract) : contract;
|
|
220
|
+
if ('sierra_program' in compiledContract) {
|
|
221
|
+
return computeSierraContractClassHash(compiledContract);
|
|
222
|
+
}
|
|
223
|
+
return computeLegacyContractClassHash(compiledContract);
|
|
224
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Hashes Exports
|
|
9
|
+
*/
|
|
10
|
+
export * as poseidon from '../../../noble-curves/abstract/poseidon.js';
|
|
11
|
+
export * from '../selector.js'; // Preserve legacy export structure
|
|
12
|
+
// export * from './transactionHash/index.js';
|
|
13
|
+
export * from './classHash.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert JSON string to JSON object
|
|
3
|
+
*
|
|
4
|
+
* NOTE: the String() wrapping is used so the behavior conforms to JSON.parse()
|
|
5
|
+
* which can accept simple data types but is not represented in the default typing
|
|
6
|
+
* @param x JSON string
|
|
7
|
+
*/
|
|
8
|
+
export declare const parse: (x: string) => any;
|
|
9
|
+
/**
|
|
10
|
+
* Convert JSON string to JSON object with all numbers as bigint
|
|
11
|
+
* @param x JSON string
|
|
12
|
+
*/
|
|
13
|
+
export declare const parseAlwaysAsBig: (x: string) => any;
|
|
14
|
+
/**
|
|
15
|
+
* Convert JSON object to JSON string
|
|
16
|
+
*
|
|
17
|
+
* NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()
|
|
18
|
+
* which can also return undefined but is not represented in the default typing
|
|
19
|
+
* json.NumberStringifier[]
|
|
20
|
+
* @returns JSON string
|
|
21
|
+
*/
|
|
22
|
+
export declare const stringify: (value: unknown, replacer?: any, space?: string | number | undefined, numberStringifiers?: any[] | undefined) => string;
|
|
23
|
+
/** @deprecated equivalent to 'stringify', alias will be removed */
|
|
24
|
+
export declare const stringifyAlwaysAsBig: (value: unknown, replacer?: any, space?: string | number | undefined, numberStringifiers?: any[] | undefined) => string;
|
|
@@ -0,0 +1,43 @@
|
|
|
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 * as json from 'lossless-json';
|
|
8
|
+
const json = global.JSON;
|
|
9
|
+
/**
|
|
10
|
+
* Convert string to number or bigint based on size
|
|
11
|
+
*/
|
|
12
|
+
const parseIntAsNumberOrBigInt = (x) => {
|
|
13
|
+
// if (!json.isInteger(x)) return parseFloat(x);
|
|
14
|
+
const v = parseInt(x, 10);
|
|
15
|
+
return Number.isSafeInteger(v) ? v : BigInt(x);
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Convert JSON string to JSON object
|
|
19
|
+
*
|
|
20
|
+
* NOTE: the String() wrapping is used so the behavior conforms to JSON.parse()
|
|
21
|
+
* which can accept simple data types but is not represented in the default typing
|
|
22
|
+
* @param x JSON string
|
|
23
|
+
*/
|
|
24
|
+
// export const parse = (x: string): any => json.parse(String(x), undefined, parseIntAsNumberOrBigInt);
|
|
25
|
+
export const parse = (x) => json.parse(String(x), undefined);
|
|
26
|
+
/**
|
|
27
|
+
* Convert JSON string to JSON object with all numbers as bigint
|
|
28
|
+
* @param x JSON string
|
|
29
|
+
*/
|
|
30
|
+
// json.parse(String(x), undefined, json.parseNumberAndBigInt);
|
|
31
|
+
export const parseAlwaysAsBig = (x) => json.parse(String(x), undefined);
|
|
32
|
+
/**
|
|
33
|
+
* Convert JSON object to JSON string
|
|
34
|
+
*
|
|
35
|
+
* NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()
|
|
36
|
+
* which can also return undefined but is not represented in the default typing
|
|
37
|
+
* json.NumberStringifier[]
|
|
38
|
+
* @returns JSON string
|
|
39
|
+
*/
|
|
40
|
+
// json.stringify(value, replacer, space, numberStringifiers)!;
|
|
41
|
+
export const stringify = (value, replacer, space, numberStringifiers) => json.stringify(value, replacer, space);
|
|
42
|
+
/** @deprecated equivalent to 'stringify', alias will be removed */
|
|
43
|
+
export const stringifyAlwaysAsBig = stringify;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BigNumberish } from '../types/index.js';
|
|
2
|
+
export declare class MerkleTree {
|
|
3
|
+
leaves: string[];
|
|
4
|
+
branches: string[][];
|
|
5
|
+
root: string;
|
|
6
|
+
hashMethod: (a: BigNumberish, b: BigNumberish) => string;
|
|
7
|
+
constructor(leafHashes: string[], hashMethod?: (a: BigNumberish, b: BigNumberish) => string);
|
|
8
|
+
/**
|
|
9
|
+
* Create Merkle tree
|
|
10
|
+
* @param leaves hex-string array
|
|
11
|
+
* @returns format: hex-string; Merkle tree root
|
|
12
|
+
*/
|
|
13
|
+
private build;
|
|
14
|
+
/**
|
|
15
|
+
* Create hash from ordered a and b, Pedersen hash default
|
|
16
|
+
* @returns format: hex-string
|
|
17
|
+
*/
|
|
18
|
+
static hash(a: BigNumberish, b: BigNumberish, hashMethod?: (a: BigNumberish, b: BigNumberish) => string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Return path to leaf
|
|
21
|
+
* @param leaf hex-string
|
|
22
|
+
* @param branch hex-string array
|
|
23
|
+
* @param hashPath hex-string array
|
|
24
|
+
* @returns format: hex-string array
|
|
25
|
+
*/
|
|
26
|
+
getProof(leaf: string, branch?: string[], hashPath?: string[]): string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Test Merkle tree path
|
|
30
|
+
* @param root hex-string
|
|
31
|
+
* @param leaf hex-string
|
|
32
|
+
* @param path hex-string array
|
|
33
|
+
* @param hashMethod hash method override, Pedersen default
|
|
34
|
+
*/
|
|
35
|
+
export declare function proofMerklePath(root: string, leaf: string, path: string[], hashMethod?: (a: BigNumberish, b: BigNumberish) => string): boolean;
|
|
@@ -0,0 +1,84 @@
|
|
|
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 { computePedersenHash } from './hash/index.js';
|
|
8
|
+
export class MerkleTree {
|
|
9
|
+
constructor(leafHashes, hashMethod = computePedersenHash) {
|
|
10
|
+
this.branches = [];
|
|
11
|
+
this.hashMethod = hashMethod;
|
|
12
|
+
this.leaves = leafHashes;
|
|
13
|
+
this.root = this.build(leafHashes);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create Merkle tree
|
|
17
|
+
* @param leaves hex-string array
|
|
18
|
+
* @returns format: hex-string; Merkle tree root
|
|
19
|
+
*/
|
|
20
|
+
build(leaves) {
|
|
21
|
+
if (leaves.length === 1) {
|
|
22
|
+
return leaves[0];
|
|
23
|
+
}
|
|
24
|
+
if (leaves.length !== this.leaves.length) {
|
|
25
|
+
this.branches.push(leaves);
|
|
26
|
+
}
|
|
27
|
+
const newLeaves = [];
|
|
28
|
+
for (let i = 0; i < leaves.length; i += 2) {
|
|
29
|
+
if (i + 1 === leaves.length) {
|
|
30
|
+
newLeaves.push(MerkleTree.hash(leaves[i], '0x0', this.hashMethod));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1], this.hashMethod));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return this.build(newLeaves);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create hash from ordered a and b, Pedersen hash default
|
|
40
|
+
* @returns format: hex-string
|
|
41
|
+
*/
|
|
42
|
+
static hash(a, b, hashMethod = computePedersenHash) {
|
|
43
|
+
const [aSorted, bSorted] = [BigInt(a), BigInt(b)].sort((x, y) => (x >= y ? 1 : -1));
|
|
44
|
+
return hashMethod(aSorted, bSorted);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return path to leaf
|
|
48
|
+
* @param leaf hex-string
|
|
49
|
+
* @param branch hex-string array
|
|
50
|
+
* @param hashPath hex-string array
|
|
51
|
+
* @returns format: hex-string array
|
|
52
|
+
*/
|
|
53
|
+
getProof(leaf, branch = this.leaves, hashPath = []) {
|
|
54
|
+
const index = branch.indexOf(leaf);
|
|
55
|
+
if (index === -1) {
|
|
56
|
+
throw new Error('leaf not found');
|
|
57
|
+
}
|
|
58
|
+
if (branch.length === 1) {
|
|
59
|
+
return hashPath;
|
|
60
|
+
}
|
|
61
|
+
const isLeft = index % 2 === 0;
|
|
62
|
+
const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';
|
|
63
|
+
const newHashPath = [...hashPath, neededBranch];
|
|
64
|
+
const currentBranchLevelIndex = this.leaves.length === branch.length
|
|
65
|
+
? -1
|
|
66
|
+
: this.branches.findIndex((b) => b.length === branch.length);
|
|
67
|
+
const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];
|
|
68
|
+
return this.getProof(MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf, this.hashMethod), nextBranch, newHashPath);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Test Merkle tree path
|
|
73
|
+
* @param root hex-string
|
|
74
|
+
* @param leaf hex-string
|
|
75
|
+
* @param path hex-string array
|
|
76
|
+
* @param hashMethod hash method override, Pedersen default
|
|
77
|
+
*/
|
|
78
|
+
export function proofMerklePath(root, leaf, path, hashMethod = computePedersenHash) {
|
|
79
|
+
if (path.length === 0) {
|
|
80
|
+
return root === leaf;
|
|
81
|
+
}
|
|
82
|
+
const [next, ...rest] = path;
|
|
83
|
+
return proofMerklePath(root, MerkleTree.hash(leaf, next, hashMethod), rest, hashMethod);
|
|
84
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { BigNumberish } from '../types/index.js';
|
|
2
|
+
/** @deprecated prefer importing from 'types' over 'num' */
|
|
3
|
+
export type { BigNumberish };
|
|
4
|
+
/**
|
|
5
|
+
* Test if string is hex-string
|
|
6
|
+
* @param hex hex-string
|
|
7
|
+
* @returns {boolean} True if the input string is a hexadecimal string, false otherwise
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const hexString1 = "0x2fd23d9182193775423497fc0c472e156c57c69e4089a1967fb288a2d84e914";
|
|
11
|
+
* const result1 = isHex(hexString1);
|
|
12
|
+
* // result1 = true
|
|
13
|
+
*
|
|
14
|
+
* const hexString2 = "2fd23d9182193775423497fc0c472e156c57c69e4089a1967fb288a2d84e914";
|
|
15
|
+
* const result2 = isHex(hexString2);
|
|
16
|
+
* // result2 = false
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function isHex(hex: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Convert BigNumberish to bigint
|
|
22
|
+
*/
|
|
23
|
+
export declare function toBigInt(value: BigNumberish): bigint;
|
|
24
|
+
/**
|
|
25
|
+
* Test if value is bigint
|
|
26
|
+
*/
|
|
27
|
+
export declare function isBigInt(value: any): value is bigint;
|
|
28
|
+
/**
|
|
29
|
+
* Convert BigNumberish to hex-string
|
|
30
|
+
* @returns format: hex-string
|
|
31
|
+
*/
|
|
32
|
+
export declare function toHex(number: BigNumberish): string;
|
|
33
|
+
/**
|
|
34
|
+
* Alias of ToHex
|
|
35
|
+
*/
|
|
36
|
+
export declare const toHexString: typeof toHex;
|
|
37
|
+
/**
|
|
38
|
+
* Convert BigNumberish to storage-key-string
|
|
39
|
+
*
|
|
40
|
+
* Same as toHex but conforming to the STORAGE_KEY pattern `^0x0[0-7]{1}[a-fA-F0-9]{0,62}$`.
|
|
41
|
+
*
|
|
42
|
+
* A storage key is represented as up to 62 hex digits, 3 bits, and 5 leading zeroes:
|
|
43
|
+
* `0x0 + [0-7] + 62 hex = 0x + 64 hex`
|
|
44
|
+
* @returns format: storage-key-string
|
|
45
|
+
*/
|
|
46
|
+
export declare function toStorageKey(number: BigNumberish): string;
|
|
47
|
+
/**
|
|
48
|
+
* Convert hexadecimal string to decimal string
|
|
49
|
+
* @param hex hex-string
|
|
50
|
+
* @returns format: decimal string
|
|
51
|
+
*/
|
|
52
|
+
export declare function hexToDecimalString(hex: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Remove hex string leading zero and lowercase it
|
|
55
|
+
* @example '0x01A...' -> '0x1a..'
|
|
56
|
+
* @param hex hex-string
|
|
57
|
+
* @returns format: hex-string
|
|
58
|
+
*/
|
|
59
|
+
export declare const cleanHex: (hex: string) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Asserts input is equal to or greater then lowerBound and lower then upperBound.
|
|
62
|
+
*
|
|
63
|
+
* The `inputName` parameter is used in the assertion message.
|
|
64
|
+
* @param input Value to check
|
|
65
|
+
* @param lowerBound Lower bound value
|
|
66
|
+
* @param upperBound Upper bound value
|
|
67
|
+
* @param inputName Name of the input for error message
|
|
68
|
+
* @Throws Error if input is out of range
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const input1:BigNumberish = 10;
|
|
72
|
+
* assertInRange(input1, 5, 20, 'value')
|
|
73
|
+
*
|
|
74
|
+
* const input2: BigNumberish = 25;
|
|
75
|
+
* assertInRange(input2, 5, 20, 'value');
|
|
76
|
+
* // Throws Error: Message not signable, invalid value length.
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function assertInRange(input: BigNumberish, lowerBound: BigNumberish, upperBound: BigNumberish, inputName?: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Convert BigNumberish array to decimal string array
|
|
82
|
+
* @returns format: decimal string array
|
|
83
|
+
*/
|
|
84
|
+
export declare function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[];
|
|
85
|
+
/**
|
|
86
|
+
* Convert BigNumberish array to hexadecimal string array
|
|
87
|
+
* @returns format: hex-string array
|
|
88
|
+
*/
|
|
89
|
+
export declare function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Test if string is whole number (0, 1, 2, 3...)
|
|
92
|
+
*/
|
|
93
|
+
export declare const isStringWholeNumber: (value: string) => boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Convert string to decimal string
|
|
96
|
+
* @returns format: decimal string
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const result = getDecimalString("0x1a");
|
|
100
|
+
* // result = "26"
|
|
101
|
+
*
|
|
102
|
+
* const result2 = getDecimalString("Hello");
|
|
103
|
+
* // Throws Error: "Hello need to be hex-string or whole-number-string"
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function getDecimalString(value: string): string;
|
|
107
|
+
/**
|
|
108
|
+
* Convert string to hexadecimal string
|
|
109
|
+
* @returns format: hex-string
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const result = getHexString("123");
|
|
113
|
+
* // result = "0x7b"
|
|
114
|
+
*
|
|
115
|
+
* const result2 = getHexString("Hello");
|
|
116
|
+
* // Throws Error: Hello need to be hex-string or whole-number-string
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function getHexString(value: string): string;
|
|
120
|
+
/**
|
|
121
|
+
* Convert string array to hex-string array
|
|
122
|
+
* @returns format: hex-string array
|
|
123
|
+
*/
|
|
124
|
+
export declare function getHexStringArray(value: Array<string>): string[];
|
|
125
|
+
/**
|
|
126
|
+
* Convert boolean to "0" or "1"
|
|
127
|
+
* @param value The boolean value to be converted.
|
|
128
|
+
* @returns {boolean} Returns true if the value is a number, otherwise returns false.
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* const result = toCairoBool(true);
|
|
132
|
+
* // result ="1"
|
|
133
|
+
*
|
|
134
|
+
* const result2 = toCairoBool(false);
|
|
135
|
+
* // result2 = "0"
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export declare const toCairoBool: (value: boolean) => string;
|
|
139
|
+
/**
|
|
140
|
+
* Convert hex-string to an array of Bytes (Uint8Array)
|
|
141
|
+
* @param value hex-string
|
|
142
|
+
*/
|
|
143
|
+
export declare function hexToBytes(value: string): Uint8Array;
|
|
144
|
+
/**
|
|
145
|
+
*
|
|
146
|
+
* @param number value to be increased
|
|
147
|
+
* @param percent integer as percent ex. 50 for 50%
|
|
148
|
+
* @returns increased value
|
|
149
|
+
*/
|
|
150
|
+
export declare function addPercent(number: BigNumberish, percent: number): bigint;
|
|
151
|
+
/**
|
|
152
|
+
* Check if a value is a number.
|
|
153
|
+
*
|
|
154
|
+
* @param {unknown} value - The value to check.
|
|
155
|
+
* @returns {boolean} Returns true if the value is a number, otherwise returns false.
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const result = isNumber(123);
|
|
159
|
+
* // result = true
|
|
160
|
+
*
|
|
161
|
+
* const result2 = isNumber("123");
|
|
162
|
+
* // result2 = false
|
|
163
|
+
* ```
|
|
164
|
+
* @return {boolean} Returns true if the value is a number, otherwise returns false.
|
|
165
|
+
*/
|
|
166
|
+
export declare function isNumber(value: unknown): value is number;
|
|
167
|
+
/**
|
|
168
|
+
* Checks if a given value is of boolean type.
|
|
169
|
+
*
|
|
170
|
+
* @param {unknown} value - The value to check.
|
|
171
|
+
* @returns {boolean} - True if the value is of boolean type, false otherwise.
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* const result = isBoolean(true);
|
|
175
|
+
* // result = true
|
|
176
|
+
*
|
|
177
|
+
* const result2 = isBoolean(false);
|
|
178
|
+
* // result2 = false
|
|
179
|
+
* ```
|
|
180
|
+
* @return {boolean} - True if the value is of boolean type, false otherwise.
|
|
181
|
+
*/
|
|
182
|
+
export declare function isBoolean(value: unknown): value is boolean;
|