starknet 5.24.0 → 5.24.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/utils/encode.ts","../src/types/index.ts","../src/types/account.ts","../src/types/calldata.ts","../src/types/lib/contract/index.ts","../src/types/lib/index.ts","../src/types/api/rpc.ts","../src/types/api/jsonrpc/index.ts","../src/types/api/rpcspec/errors.ts","../src/types/api/rpcspec/components.ts","../src/types/api/rpcspec/nonspec.ts","../src/types/api/sequencer.ts","../src/utils/assert.ts","../src/utils/num.ts","../src/utils/selector.ts","../src/utils/shortString.ts","../src/utils/calldata/cairo.ts","../src/utils/uint256.ts","../src/utils/calldata/enum/CairoCustomEnum.ts","../src/utils/calldata/enum/CairoOption.ts","../src/utils/calldata/enum/CairoResult.ts","../src/utils/calldata/formatter.ts","../src/utils/calldata/parser/parser-0-1.1.0.ts","../src/utils/calldata/parser/parser-2.0.0.ts","../src/utils/calldata/parser/index.ts","../src/utils/calldata/tuple.ts","../src/utils/calldata/propertyOrder.ts","../src/utils/calldata/requestParser.ts","../src/utils/calldata/responseParser.ts","../src/utils/calldata/validate.ts","../src/utils/calldata/index.ts","../src/utils/hash.ts","../src/utils/ec.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/contract.ts","../src/utils/fetchPonyfill.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/utils/starknetId.ts","../src/provider/starknetId.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/default.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData.ts","../src/utils/merkle.ts","../src/signer/default.ts","../src/utils/events.ts","../src/account/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/account/interface.ts","../src/utils/events/index.ts","../src/contract/default.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/utils/address.ts","../src/index.ts"],"sourcesContent":["export { IS_BROWSER } from './utils/encode';\n\n/**\n * Cairo Felt support storing max 31 character\n */\nexport const TEXT_TO_FELT_MAX_LEN = 31;\n\nexport const HEX_STR_TRANSACTION_VERSION_1 = '0x1';\nexport const HEX_STR_TRANSACTION_VERSION_2 = '0x2';\nexport const BN_TRANSACTION_VERSION_1 = 1n;\nexport const BN_TRANSACTION_VERSION_2 = 2n;\nexport const BN_FEE_TRANSACTION_VERSION_1 = 2n ** 128n + BN_TRANSACTION_VERSION_1;\nexport const BN_FEE_TRANSACTION_VERSION_2 = 2n ** 128n + BN_TRANSACTION_VERSION_2;\n\nexport const ZERO = 0n;\nexport const MASK_250 = 2n ** 250n - 1n; // 2 ** 250 - 1\nexport const MASK_251 = 2n ** 251n;\nexport const API_VERSION = ZERO;\n\nexport enum BaseUrl {\n SN_MAIN = 'https://alpha-mainnet.starknet.io',\n SN_GOERLI = 'https://alpha4.starknet.io',\n}\n\nexport enum NetworkName {\n SN_MAIN = 'SN_MAIN',\n SN_GOERLI = 'SN_GOERLI',\n}\n\nexport enum StarknetChainId {\n SN_MAIN = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n SN_GOERLI = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI')\n}\n\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\nexport const RPC_GOERLI_NODES = [\n 'https://starknet-testnet.public.blastapi.io/rpc/v0.5',\n 'https://limited-rpc.nethermind.io/goerli-juno/v0_5',\n];\n\nexport const RPC_MAINNET_NODES = [\n 'https://starknet-mainnet.public.blastapi.io/rpc/v0.5',\n 'https://limited-rpc.nethermind.io/mainnet-juno/v0_5',\n];\n","import { base64 } from '@scure/base';\n\n/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\n/**\n * Some functions recreated from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is not a dependency to avoid using `Buffer` which only works in node and not browsers\n */\n\n/**\n * Convert array buffer to string\n *\n * *[internal usage]*\n */\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\n/**\n * Convert utf8-string to Uint8Array\n *\n * *[internal usage]*\n */\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Convert utf8-string to Uint8Array\n *\n * @deprecated equivalent to 'utf8ToArray', alias will be removed\n */\nexport function stringToArrayBuffer(str: string): Uint8Array {\n return utf8ToArray(str);\n}\n\n/**\n * Convert string to array buffer (browser and node compatible)\n */\nexport function atobUniversal(a: string): Uint8Array {\n return base64.decode(a);\n}\n\n/**\n * Convert array buffer to string (browser and node compatible)\n */\nexport function btoaUniversal(b: ArrayBuffer): string {\n return base64.encode(new Uint8Array(b));\n}\n\n/**\n * Convert array buffer to hex-string\n * @returns format: hex-string\n */\nexport function buf2hex(buffer: Uint8Array) {\n return buffer.reduce((r, x) => r + x.toString(16).padStart(2, '0'), '');\n}\n\n/**\n * Remove hex prefix '0x' from hex-string\n * @param hex hex-string\n * @returns format: base16-string\n */\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/i, '');\n}\n\n/**\n * Add hex prefix '0x' to base16-string\n * @param hex base16-string\n * @returns format: hex-string\n */\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\n/**\n * Prepend or append to string\n *\n * *[internal usage]*\n */\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\n/**\n * Prepend string (default with '0')\n */\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\n/**\n * Calculate byte length of string\n *\n * *[no internal usage]*\n */\nexport function calcByteLength(str: string, byteSize = 8): number {\n const { length } = str;\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\n/**\n * Prepend '0' to string bytes\n *\n * *[no internal usage]*\n */\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str, byteSize), padding);\n}\n\n/**\n * Prepend '0' to hex-string bytes\n *\n * *[no internal usage]*\n * @param hex hex-string\n * @returns format: hex-string\n */\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n/**\n * String transformation util\n *\n * Pascal case to screaming snake case\n */\nexport const pascalToSnake = (text: string) =>\n /[a-z]/.test(text)\n ? text\n .split(/(?=[A-Z])/)\n .join('_')\n .toUpperCase()\n : text;\n","export * from './account';\nexport * from './calldata';\nexport * from './contract';\nexport * from './lib';\nexport * from './provider';\nexport * from './signer';\nexport * from './typedData';\nexport * from './cairoEnum';\n\nexport * as RPC from './api/rpc';\nexport {\n CallL1Handler,\n DeployedContractItem,\n ExecutionResources,\n FunctionInvocation,\n GetContractAddressesResponse,\n GetTransactionStatusResponse,\n SequencerIdentifier,\n} from './api/sequencer';\nexport * as Sequencer from './api/sequencer';\n","import { BigNumberish, BlockIdentifier } from './lib';\nimport { DeclareTransactionReceiptResponse, EstimateFeeResponse } from './provider';\n\nexport interface EstimateFee extends EstimateFeeResponse {\n suggestedMaxFee: bigint;\n}\n\nexport type EstimateFeeBulk = Array<EstimateFee>;\n\nexport type AccountInvocationsFactoryDetails = {\n versions: bigint[];\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n};\n\nexport interface EstimateFeeDetails {\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n}\n\nexport interface DeployContractResponse {\n contract_address: string;\n transaction_hash: string;\n}\n\nexport type MultiDeployContractResponse = {\n contract_address: Array<string>;\n transaction_hash: string;\n};\n\nexport type DeployContractUDCResponse = {\n contract_address: string;\n transaction_hash: string;\n address: string;\n deployer: string;\n unique: string;\n classHash: string;\n calldata_len: string;\n calldata: Array<string>;\n salt: string;\n};\n\nexport type DeclareDeployUDCResponse = {\n declare: {\n class_hash: BigNumberish;\n } & Partial<DeclareTransactionReceiptResponse>;\n deploy: DeployContractUDCResponse;\n};\n\nexport type SimulateTransactionDetails = {\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n skipExecute?: boolean;\n};\n\nexport enum SIMULATION_FLAG {\n SKIP_VALIDATE = 'SKIP_VALIDATE',\n SKIP_EXECUTE = 'SKIP_EXECUTE',\n}\n","export enum ValidateType {\n DEPLOY = 'DEPLOY',\n CALL = 'CALL',\n INVOKE = 'INVOKE',\n}\n\nexport enum Uint {\n u8 = 'core::integer::u8',\n u16 = 'core::integer::u16',\n u32 = 'core::integer::u32',\n u64 = 'core::integer::u64',\n u128 = 'core::integer::u128',\n u256 = 'core::integer::u256', // This one is struct\n}\n\nexport enum Litteral {\n ClassHash = 'core::starknet::class_hash::ClassHash',\n ContractAddress = 'core::starknet::contract_address::ContractAddress',\n}\n","import { LegacyCompiledContract, LegacyContractClass } from './legacy';\nimport { CompiledSierra, SierraContractClass } from './sierra';\n\n// Final types\n/**\n * format produced after compressing compiled contract\n * CompressedCompiledContract\n */\nexport type ContractClass = LegacyContractClass | SierraContractClass;\n\n/**\n * format produced after compile .cairo to .json\n */\nexport type CompiledContract = LegacyCompiledContract | CompiledSierra;\n\n/**\n * Compressed or decompressed Cairo0 or Cairo1 Contract\n */\nexport type CairoContract = ContractClass | CompiledContract;\n\n// Basic elements\nexport enum EntryPointType {\n EXTERNAL = 'EXTERNAL',\n L1_HANDLER = 'L1_HANDLER',\n CONSTRUCTOR = 'CONSTRUCTOR',\n}\n\nexport * from './abi';\nexport * from './legacy';\nexport * from './sierra';\n","import { StarknetChainId } from '../../constants';\nimport { weierstrass } from '../../utils/ec';\nimport { CairoEnum } from '../cairoEnum';\nimport { CompiledContract, CompiledSierraCasm, ContractClass } from './contract';\n\nexport type WeierstrassSignatureType = weierstrass.SignatureType;\nexport type ArraySignatureType = string[];\nexport type Signature = ArraySignatureType | WeierstrassSignatureType;\n\nexport type BigNumberish = string | number | bigint;\n\n/**\n * Compiled calldata ready to be sent\n * decimal-string array\n */\nexport type Calldata = string[] & { readonly __compiled__?: boolean };\n\n/**\n * Represents an integer in the range [0, 2^256)\n */\nexport interface Uint256 {\n // The low 128 bits of the value\n low: BigNumberish;\n // The high 128 bits of the value\n high: BigNumberish;\n}\n\n/**\n * BigNumberish array\n * use CallData.compile() to convert to Calldata\n */\nexport type RawCalldata = BigNumberish[];\n\n/**\n * Hexadecimal-string array\n */\nexport type HexCalldata = string[];\n\nexport type AllowArray<T> = T | T[];\n\nexport type OptionalPayload<T> = { payload: T } | T;\n\nexport type RawArgs = RawArgsObject | RawArgsArray;\n\nexport type RawArgsObject = {\n [inputName: string]: MultiType | MultiType[] | RawArgs;\n};\n\nexport type RawArgsArray = Array<MultiType | MultiType[] | RawArgs>;\n\nexport type MultiType = BigNumberish | Uint256 | object | boolean | CairoEnum;\n\nexport type UniversalDeployerContractPayload = {\n classHash: BigNumberish;\n salt?: string;\n unique?: boolean;\n constructorCalldata?: RawArgs;\n};\n\nexport type DeployAccountContractPayload = {\n classHash: string;\n constructorCalldata?: RawArgs;\n addressSalt?: BigNumberish;\n contractAddress?: string;\n};\n\nexport type DeployAccountContractTransaction = Omit<\n DeployAccountContractPayload,\n 'contractAddress'\n> & {\n signature?: Signature;\n};\n\nexport type DeclareContractPayload = {\n contract: CompiledContract | string;\n classHash?: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type CompleteDeclareContractPayload = {\n contract: CompiledContract | string;\n classHash: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type DeclareAndDeployContractPayload = Omit<UniversalDeployerContractPayload, 'classHash'> &\n DeclareContractPayload;\n\nexport type DeclareContractTransaction = {\n contract: ContractClass;\n senderAddress: string;\n signature?: Signature;\n compiledClassHash?: string;\n};\n\nexport type CallDetails = {\n contractAddress: string;\n calldata?: RawArgs | Calldata;\n entrypoint?: string; // TODO: check if required\n};\n\nexport type Invocation = CallDetails & { signature?: Signature };\n\nexport type Call = CallDetails & { entrypoint: string };\n\nexport type CairoVersion = '0' | '1' | undefined;\nexport type CompilerVersion = '0' | '1' | '2' | undefined;\n\nexport type InvocationsDetails = {\n nonce?: BigNumberish;\n maxFee?: BigNumberish;\n version?: BigNumberish;\n};\n\n/**\n * Contain all additional details params\n */\nexport type Details = {\n nonce: BigNumberish;\n maxFee: BigNumberish;\n version: BigNumberish;\n chainId: StarknetChainId;\n};\n\nexport type InvocationsDetailsWithNonce = InvocationsDetails & {\n nonce: BigNumberish;\n};\n\nexport enum TransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE_FUNCTION',\n}\n\n/**\n * new statuses are defined by props: finality_status and execution_status\n * to be #deprecated\n */\nexport enum TransactionStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n REJECTED = 'REJECTED',\n REVERTED = 'REVERTED',\n}\n\nexport enum TransactionFinalityStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\n\nexport enum TransactionExecutionStatus {\n REJECTED = 'REJECTED',\n REVERTED = 'REVERTED',\n SUCCEEDED = 'SUCCEEDED',\n}\n\nexport enum BlockStatus {\n PENDING = 'PENDING',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n REJECTED = 'REJECTED',\n}\n\nexport enum BlockTag {\n pending = 'pending',\n latest = 'latest',\n}\n\nexport type BlockNumber = BlockTag | null | number;\n\n/**\n * hex string and BN are detected as block hashes\n * decimal string and number are detected as block numbers\n * null appends nothing to the request url\n */\nexport type BlockIdentifier = BlockNumber | BigNumberish;\n\n/**\n * items used by AccountInvocations\n */\nexport type AccountInvocationItem = (\n | ({ type: TransactionType.DECLARE } & DeclareContractTransaction)\n | ({ type: TransactionType.DEPLOY_ACCOUNT } & DeployAccountContractTransaction)\n | ({ type: TransactionType.INVOKE } & Invocation)\n) &\n InvocationsDetailsWithNonce;\n\n/**\n * Complete invocations array with account details (internal type from account -> provider)\n */\nexport type AccountInvocations = AccountInvocationItem[];\n\n/**\n * Invocations array user provide to bulk method (simulate)\n */\nexport type Invocations = Array<\n | ({ type: TransactionType.DECLARE } & OptionalPayload<DeclareContractPayload>)\n | ({ type: TransactionType.DEPLOY } & OptionalPayload<\n AllowArray<UniversalDeployerContractPayload>\n >)\n | ({ type: TransactionType.DEPLOY_ACCOUNT } & OptionalPayload<DeployAccountContractPayload>)\n | ({ type: TransactionType.INVOKE } & OptionalPayload<AllowArray<Call>>)\n>;\n\nexport type Tupled = { element: any; type: string };\n\nexport type Args = {\n [inputName: string]: BigNumberish | BigNumberish[] | ParsedStruct | ParsedStruct[];\n};\nexport type ParsedStruct = {\n [key: string]: BigNumberish | BigNumberish[] | ParsedStruct | Uint256;\n};\n\nexport type waitForTransactionOptions = {\n retryInterval?: number;\n successStates?: Array<TransactionFinalityStatus | TransactionExecutionStatus>;\n errorStates?: Array<TransactionFinalityStatus | TransactionExecutionStatus>;\n};\n\nexport type getSimulateTransactionOptions = {\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n skipExecute?: boolean;\n skipFeeCharge?: boolean;\n};\n\nexport type getContractVersionOptions = {\n blockIdentifier?: BlockIdentifier;\n compiler?: boolean;\n};\n\nexport type getEstimateFeeBulkOptions = {\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n};\n\nexport interface CallStruct {\n to: string;\n selector: string;\n calldata: string[];\n}\n\n/**\n * Represent Contract version\n */\nexport type ContractVersion = {\n /** version of the cairo language */\n cairo: CairoVersion;\n /** version of the cairo compiler used to compile the contract */\n compiler: CompilerVersion;\n};\n\nexport * from './contract';\n","export * as JRPC from './jsonrpc';\nexport * from './rpcspec';\n","export type RequestBody = {\n id: number | string;\n jsonrpc: '2.0';\n method: string;\n params?: {};\n};\n\nexport type ResponseBody = {\n id: number | string;\n jsonrpc: '2.0';\n} & (SuccessResponseBody | ErrorResponseBody);\n\nexport type SuccessResponseBody = {\n result: unknown;\n};\n\nexport type ErrorResponseBody = {\n error: Error;\n};\n\nexport type Error = {\n code: number;\n message: string;\n data?: unknown;\n};\n","export interface FAILED_TO_RECEIVE_TXN {\n code: 1;\n message: 'Failed to write transaction';\n}\n\nexport interface NO_TRACE_AVAILABLE {\n code: 10;\n message: 'No trace available for transaction';\n data: {\n status: 'RECEIVED' | 'REJECTED';\n };\n}\n\nexport interface CONTRACT_NOT_FOUND {\n code: 20;\n message: 'Contract not found';\n}\n\nexport interface INVALID_MESSAGE_SELECTOR {\n code: 21;\n message: 'Invalid message selector';\n}\n\nexport interface INVALID_CALL_DATA {\n code: 22;\n message: 'Invalid call data';\n}\n\nexport interface BLOCK_NOT_FOUND {\n code: 24;\n message: 'Block not found';\n}\n\nexport interface INVALID_TXN_HASH {\n code: 25;\n message: 'Invalid transaction hash';\n}\n\nexport interface INVALID_BLOCK_HASH {\n code: 26;\n message: 'Invalid block hash';\n}\n\nexport interface INVALID_TXN_INDEX {\n code: 27;\n message: 'Invalid transaction index in a block';\n}\n\nexport interface CLASS_HASH_NOT_FOUND {\n code: 28;\n message: 'Class hash not found';\n}\n\nexport interface TXN_HASH_NOT_FOUND {\n code: 29;\n message: 'Transaction hash not found';\n}\n\nexport interface PAGE_SIZE_TOO_BIG {\n code: 31;\n message: 'Requested page size is too big';\n}\n\nexport interface NO_BLOCKS {\n code: 32;\n message: 'There are no blocks';\n}\n\nexport interface INVALID_CONTINUATION_TOKEN {\n code: 33;\n message: 'The supplied continuation token is invalid or unknown';\n}\n\nexport interface TOO_MANY_KEYS_IN_FILTER {\n code: 34;\n message: 'Too many keys provided in a filter';\n}\n\nexport interface CONTRACT_ERROR {\n code: 40;\n message: 'Contract error';\n data: {\n revert_error: string;\n };\n}\n\nexport interface CLASS_ALREADY_DECLARED {\n code: 51;\n message: 'Class already declared';\n}\n\nexport interface INVALID_TRANSACTION_NONCE {\n code: 52;\n message: 'Invalid transaction nonce';\n}\n\nexport interface INSUFFICIENT_MAX_FEE {\n code: 53;\n message: 'Max fee is smaller than the minimal transaction cost (validation plus fee transfer)';\n}\n\nexport interface INSUFFICIENT_ACCOUNT_BALANCE {\n code: 54;\n message: \"Account balance is smaller than the transaction's max_fee\";\n}\n\nexport interface VALIDATION_FAILURE {\n code: 55;\n message: 'Account validation failed';\n}\n\nexport interface COMPILATION_FAILED {\n code: 56;\n message: 'Compilation failed';\n}\n\nexport interface CONTRACT_CLASS_SIZE_IS_TOO_LARGE {\n code: 57;\n message: 'Contract class size it too large';\n}\n\nexport interface NON_ACCOUNT {\n code: 58;\n message: 'Sender address in not an account contract';\n}\n\nexport interface DUPLICATE_TX {\n code: 59;\n message: 'A transaction with the same hash already exists in the mempool';\n}\n\nexport interface COMPILED_CLASS_HASH_MISMATCH {\n code: 60;\n message: 'the compiled class hash did not match the one supplied in the transaction';\n}\n\nexport interface UNSUPPORTED_TX_VERSION {\n code: 61;\n message: 'the transaction version is not supported';\n}\n\nexport interface UNSUPPORTED_CONTRACT_CLASS_VERSION {\n code: 62;\n message: 'the contract class version is not supported';\n}\n\nexport interface UNEXPECTED_ERROR {\n code: 63;\n message: 'An unexpected error occurred';\n data: string;\n}\n","/**\n * PRIMITIVES\n */\n\n/**\n * A field element. represented by at most 63 hex digits\n * @pattern ^0x(0|[a-fA-F1-9]{1}[a-fA-F0-9]{0,62})$\n */\nexport type FELT = string;\n/**\n * an ethereum address represented as 40 hex digits\n * @pattern ^0x[a-fA-F0-9]{40}$\n */\nexport type ETH_ADDRESS = string;\n/**\n * A storage key. Represented as up to 62 hex digits, 3 bits, and 5 leading zeroes.\n * @pattern ^0x0[0-7]{1}[a-fA-F0-9]{0,62}$\n */\nexport type STORAGE_KEY = string;\nexport type ADDRESS = FELT;\nexport type NUM_AS_HEX = string;\nexport type SIGNATURE = Array<FELT>;\nexport type BLOCK_NUMBER = number;\nexport type BLOCK_HASH = FELT;\nexport type TXN_HASH = FELT;\nexport type CHAIN_ID = NUM_AS_HEX;\nexport type STRUCT_ABI_TYPE = 'struct';\nexport type EVENT_ABI_TYPE = 'event';\nexport type FUNCTION_ABI_TYPE = 'function' | 'l1_handler' | 'constructor';\n// Represents the type of an entry point.\nexport type ENTRY_POINT_TYPE = 'EXTERNAL' | 'L1_HANDLER' | 'CONSTRUCTOR';\n// Represents the type of a function call.\nexport type CALL_TYPE = 'DELEGATE' | 'LIBRARY_CALL' | 'CALL';\n// Represents the status of the transaction\nexport type TXN_STATUS = 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1';\n// Flags that indicate how to simulate a given transaction. By default, the sequencer behavior is replicated locally (enough funds are expected to be in the account, and the fee will be deducted from the balance before the simulation of the next transaction). To skip the fee charge, use the SKIP_FEE_CHARGE flag.\nexport type SIMULATION_FLAG = 'SKIP_VALIDATE' | 'SKIP_FEE_CHARGE';\n// Data availability mode\nexport type DA_MODE = 'L1' | 'L2';\nexport type TXN_TYPE = 'DECLARE' | 'DEPLOY' | 'DEPLOY_ACCOUNT' | 'INVOKE' | 'L1_HANDLER';\nexport type TXN_FINALITY_STATUS = 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1';\nexport type TXN_EXECUTION_STATUS = 'SUCCEEDED' | 'REVERTED';\nexport type BLOCK_STATUS = 'PENDING' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' | 'REJECTED';\nexport type BLOCK_TAG = 'latest' | 'pending';\n\n/**\n * READ API\n */\n\nexport type EVENTS_CHUNK = {\n // Returns matching events\n events: EMITTED_EVENT[];\n // Use this token in a subsequent query to obtain the next page. Should not appear if there are no more pages.\n continuation_token?: string;\n};\n\nexport type RESULT_PAGE_REQUEST = {\n // The token returned from the previous query. If no token is provided the first page is returned.\n continuation_token?: string;\n // Chunk size\n chunk_size: number;\n};\n\nexport type EMITTED_EVENT = EVENT & {\n block_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n transaction_hash: TXN_HASH;\n};\n\nexport type EVENT = {\n from_address: ADDRESS;\n} & EVENT_CONTENT;\n\nexport type EVENT_CONTENT = {\n keys: FELT[];\n data: FELT[];\n};\n\nexport type EVENT_FILTER = {\n from_block?: BLOCK_ID;\n to_block?: BLOCK_ID;\n address?: ADDRESS;\n keys?: FELT[][];\n};\n\nexport type BLOCK_ID =\n | {\n block_hash?: BLOCK_HASH;\n block_number?: BLOCK_NUMBER;\n }\n | BLOCK_TAG;\n\nexport type SYNC_STATUS = {\n starting_block_hash: BLOCK_HASH;\n starting_block_num: BLOCK_NUMBER;\n current_block_hash: BLOCK_HASH;\n current_block_num: BLOCK_NUMBER;\n highest_block_hash: BLOCK_HASH;\n highest_block_num: BLOCK_NUMBER;\n};\n\nexport type NEW_CLASSES = {\n class_hash: FELT;\n compiled_class_hash: FELT;\n};\n\nexport type REPLACED_CLASS = {\n class_hash: FELT;\n contract_address: FELT;\n};\n\nexport type NONCE_UPDATE = {\n contract_address: ADDRESS;\n nonce: FELT;\n};\n\nexport type STATE_DIFF = {\n storage_diffs: CONTRACT_STORAGE_DIFF_ITEM[];\n deprecated_declared_classes: FELT[];\n declared_classes: NEW_CLASSES[];\n deployed_contracts: DEPLOYED_CONTRACT_ITEM[];\n replaced_classes: REPLACED_CLASS[];\n nonces: NONCE_UPDATE[];\n};\n\nexport type PENDING_STATE_UPDATE = {\n old_root: FELT;\n state_diff: STATE_DIFF;\n};\n\nexport type STATE_UPDATE = {\n block_hash: BLOCK_HASH;\n old_root: FELT;\n new_root: FELT;\n state_diff: STATE_DIFF;\n};\n\nexport type BLOCK_BODY_WITH_TX_HASHES = {\n transactions: TXN_HASH[];\n};\n\nexport type BLOCK_BODY_WITH_TXS = {\n transactions: {\n transaction: TXN;\n transaction_hash: TXN_HASH;\n }[];\n};\n\nexport type BLOCK_HEADER = {\n block_hash: BLOCK_HASH;\n parent_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n new_root: FELT;\n timestamp: number;\n sequencer_address: FELT;\n l1_gas_price: RESOURCE_PRICE;\n starknet_version: string;\n};\n\nexport type PENDING_BLOCK_HEADER = {\n parent_hash: BLOCK_HASH;\n timestamp: number;\n sequencer_address: FELT;\n l1_gas_price: RESOURCE_PRICE;\n starknet_version: string;\n};\n\nexport type BLOCK_WITH_TX_HASHES = { status: BLOCK_STATUS } & BLOCK_HEADER &\n BLOCK_BODY_WITH_TX_HASHES;\n\nexport type BLOCK_WITH_TXS = { status: BLOCK_STATUS } & BLOCK_HEADER & BLOCK_BODY_WITH_TXS;\n\nexport type PENDING_BLOCK_WITH_TX_HASHES = BLOCK_BODY_WITH_TX_HASHES & PENDING_BLOCK_HEADER;\n\nexport type PENDING_BLOCK_WITH_TXS = BLOCK_BODY_WITH_TXS & PENDING_BLOCK_HEADER;\n\nexport type DEPLOYED_CONTRACT_ITEM = {\n address: FELT;\n class_hash: FELT;\n};\n\nexport type CONTRACT_STORAGE_DIFF_ITEM = {\n // The contract address for which the storage changed (in FELT format)\n address: string;\n // The changes in the storage of the contract\n storage_entries: StorageDiffItem[];\n};\n\nexport type StorageDiffItem = {\n // The key of the changed value (in FELT format)\n key: string;\n // The new value applied to the given address (in FELT format)\n value: string;\n};\n\nexport type TXN = INVOKE_TXN | L1_HANDLER_TXN | DECLARE_TXN | DEPLOY_TXN | DEPLOY_ACCOUNT_TXN;\n\nexport type DECLARE_TXN = DECLARE_TXN_V0 | DECLARE_TXN_V1 | DECLARE_TXN_V2;\n\nexport type DECLARE_TXN_V0 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: '0x0';\n signature: SIGNATURE;\n class_hash: FELT;\n};\n\nexport type DECLARE_TXN_V1 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: '0x1';\n signature: SIGNATURE;\n nonce: FELT;\n class_hash: FELT;\n};\n\nexport type DECLARE_TXN_V2 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n compiled_class_hash: FELT;\n max_fee: FELT;\n version: '0x2';\n signature: SIGNATURE;\n nonce: FELT;\n class_hash: FELT;\n};\n\nexport type BROADCASTED_TXN =\n | BROADCASTED_INVOKE_TXN\n | BROADCASTED_DECLARE_TXN\n | BROADCASTED_DEPLOY_ACCOUNT_TXN;\n\nexport type BROADCASTED_INVOKE_TXN = INVOKE_TXN_V0 | INVOKE_TXN_V1;\n\nexport type BROADCASTED_DEPLOY_ACCOUNT_TXN = DEPLOY_ACCOUNT_TXN;\n\nexport type BROADCASTED_DECLARE_TXN = BROADCASTED_DECLARE_TXN_V1 | BROADCASTED_DECLARE_TXN_V2;\n\nexport type BROADCASTED_DECLARE_TXN_V1 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_class: DEPRECATED_CONTRACT_CLASS;\n};\n\nexport type BROADCASTED_DECLARE_TXN_V2 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n compiled_class_hash: FELT;\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_class: CONTRACT_CLASS;\n};\n\nexport type DEPLOY_ACCOUNT_TXN = DEPLOY_ACCOUNT_TXN_V1;\n\nexport type DEPLOY_ACCOUNT_TXN_V1 = {\n type: 'DEPLOY_ACCOUNT';\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_address_salt: FELT;\n constructor_calldata: FELT[];\n class_hash: FELT;\n};\n\nexport type DEPLOY_TXN = {\n type: 'DEPLOY';\n version: NUM_AS_HEX;\n contract_address_salt: FELT;\n constructor_calldata: FELT[];\n class_hash: FELT;\n};\n\nexport type INVOKE_TXN = INVOKE_TXN_V0 | INVOKE_TXN_V1;\n\nexport type INVOKE_TXN_V0 = {\n type: 'INVOKE';\n max_fee: FELT;\n version: '0x0';\n signature: SIGNATURE;\n contract_address: ADDRESS;\n entry_point_selector: FELT;\n calldata: FELT[];\n};\n\nexport type INVOKE_TXN_V1 = {\n type: 'INVOKE';\n sender_address: ADDRESS;\n calldata: FELT[];\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n};\n\nexport type L1_HANDLER_TXN = {\n version: NUM_AS_HEX;\n type: 'L1_HANDLER';\n nonce: NUM_AS_HEX;\n} & FUNCTION_CALL;\n\nexport type COMMON_RECEIPT_PROPERTIES = {\n transaction_hash: TXN_HASH;\n actual_fee: FELT;\n execution_status: TXN_EXECUTION_STATUS;\n finality_status: TXN_FINALITY_STATUS;\n block_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n messages_sent: MSG_TO_L1[];\n revert_reason: string;\n events: EVENT[];\n execution_resources: EXECUTION_RESOURCES;\n};\n\nexport type PENDING_COMMON_RECEIPT_PROPERTIES = {\n transaction_hash: TXN_HASH;\n actual_fee: FELT;\n type: TXN_TYPE;\n messages_sent: MSG_TO_L1[];\n events: EVENT[];\n revert_reason: string;\n finality_status: 'ACCEPTED_ON_L2';\n execution_status: TXN_EXECUTION_STATUS;\n execution_resources: EXECUTION_RESOURCES;\n};\n\nexport type INVOKE_TXN_RECEIPT = {\n type: 'INVOKE';\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_INVOKE_TXN_RECEIPT = {\n type: 'INVOKE';\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DECLARE_TXN_RECEIPT = {\n type: 'DECLARE';\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_DECLARE_TXN_RECEIPT = {\n type: 'DECLARE';\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DEPLOY_ACCOUNT_TXN_RECEIPT = {\n type: 'DEPLOY_ACCOUNT';\n contract_address: FELT;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_DEPLOY_ACCOUNT_TXN_RECEIPT = {\n type: 'DEPLOY_ACCOUNT';\n contract_address: FELT;\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DEPLOY_TXN_RECEIPT = {\n type: 'DEPLOY';\n contract_address: FELT;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type L1_HANDLER_TXN_RECEIPT = {\n type: 'L1_HANDLER';\n message_hash: NUM_AS_HEX;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_L1_HANDLER_TXN_RECEIPT = {\n type: 'L1_HANDLER';\n message_hash: NUM_AS_HEX;\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type TXN_RECEIPT =\n | INVOKE_TXN_RECEIPT\n | L1_HANDLER_TXN_RECEIPT\n | DECLARE_TXN_RECEIPT\n | DEPLOY_TXN_RECEIPT\n | DEPLOY_ACCOUNT_TXN_RECEIPT;\n\nexport type PENDING_TXN_RECEIPT =\n | PENDING_INVOKE_TXN_RECEIPT\n | PENDING_L1_HANDLER_TXN_RECEIPT\n | PENDING_DECLARE_TXN_RECEIPT\n | PENDING_DEPLOY_ACCOUNT_TXN_RECEIPT;\n\nexport type MSG_TO_L1 = {\n from_address: FELT;\n to_address: FELT;\n payload: FELT[];\n};\n\nexport type MSG_FROM_L1 = {\n from_address: ETH_ADDRESS;\n to_address: ADDRESS;\n entry_point_selector: FELT;\n payload: FELT[];\n};\n\nexport type FUNCTION_CALL = {\n contract_address: ADDRESS;\n entry_point_selector: FELT;\n calldata: FELT[];\n};\n\nexport type CONTRACT_CLASS = {\n sierra_program: FELT[];\n contract_class_version: string;\n entry_points_by_type: {\n CONSTRUCTOR: SIERRA_ENTRY_POINT[];\n EXTERNAL: SIERRA_ENTRY_POINT[];\n L1_HANDLER: SIERRA_ENTRY_POINT[];\n };\n abi: string;\n};\n\nexport type DEPRECATED_CONTRACT_CLASS = {\n program: string;\n entry_points_by_type: {\n CONSTRUCTOR: DEPRECATED_CAIRO_ENTRY_POINT[];\n EXTERNAL: DEPRECATED_CAIRO_ENTRY_POINT[];\n L1_HANDLER: DEPRECATED_CAIRO_ENTRY_POINT[];\n };\n abi: CONTRACT_ABI;\n};\n\nexport type DEPRECATED_CAIRO_ENTRY_POINT = {\n offset: NUM_AS_HEX | number;\n selector: FELT;\n};\n\nexport type SIERRA_ENTRY_POINT = {\n selector: FELT;\n function_idx: number;\n};\n\nexport type CONTRACT_ABI = CONTRACT_ABI_ENTRY[];\n\nexport type CONTRACT_ABI_ENTRY = {\n selector: FELT;\n input: string;\n output: string;\n};\n\nexport type STRUCT_ABI_ENTRY = {\n type: STRUCT_ABI_TYPE;\n name: string;\n size: number;\n members: STRUCT_MEMBER[];\n};\n\nexport type STRUCT_MEMBER = TYPED_PARAMETER & {\n offset: number;\n};\n\nexport type EVENT_ABI_ENTRY = {\n type: EVENT_ABI_TYPE;\n name: string;\n keys: TYPED_PARAMETER[];\n data: TYPED_PARAMETER[];\n};\n\nexport type FUNCTION_STATE_MUTABILITY = 'view';\n\nexport type FUNCTION_ABI_ENTRY = {\n type: FUNCTION_ABI_TYPE;\n name: string;\n inputs: TYPED_PARAMETER[];\n outputs: TYPED_PARAMETER[];\n stateMutability: FUNCTION_STATE_MUTABILITY;\n};\n\nexport type TYPED_PARAMETER = {\n name: string;\n type: string;\n};\n\nexport type FEE_ESTIMATE = {\n gas_consumed: NUM_AS_HEX;\n gas_price: NUM_AS_HEX;\n overall_fee: NUM_AS_HEX;\n};\n\nexport type RESOURCE_LIMITS = {\n max_amount: NUM_AS_HEX;\n max_price_per_unit: NUM_AS_HEX;\n};\n\nexport type RESOURCE_PRICE = {\n price_in_strk?: NUM_AS_HEX;\n price_in_wei: NUM_AS_HEX;\n};\n\nexport type EXECUTION_RESOURCES = {\n steps: NUM_AS_HEX;\n memory_holes: NUM_AS_HEX;\n range_check_builtin_applications: NUM_AS_HEX;\n pedersen_builtin_applications: NUM_AS_HEX;\n poseidon_builtin_applications: NUM_AS_HEX;\n ec_op_builtin_applications: NUM_AS_HEX;\n ecdsa_builtin_applications: NUM_AS_HEX;\n bitwise_builtin_applications: NUM_AS_HEX;\n keccak_builtin_applications: NUM_AS_HEX;\n};\n\n/**\n * TRACE API\n */\n\n// Represents a transaction trace including the execution details.\nexport type TRANSACTION_TRACE = {\n invoke_tx_trace?: INVOKE_TXN_TRACE;\n declare_tx_trace?: DECLARE_TXN_TRACE;\n deploy_account_tx_trace?: DEPLOY_ACCOUNT_TXN_TRACE;\n l1_handler_tx_trace?: L1_HANDLER_TXN_TRACE;\n};\n\n// Represents a transaction trace for an invoke transaction.\nexport type INVOKE_TXN_TRACE = {\n type: 'INVOKE';\n execute_invocation: FUNCTION_INVOCATION | { revert_reason: string };\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for a declare transaction.\nexport type DECLARE_TXN_TRACE = {\n type: 'DECLARE';\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for a deploy account transaction.\nexport type DEPLOY_ACCOUNT_TXN_TRACE = {\n type: 'DEPLOY_ACCOUNT';\n constructor_invocation: FUNCTION_INVOCATION;\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for an L1 handler transaction.\nexport type L1_HANDLER_TXN_TRACE = {\n type: 'L1_HANDLER';\n function_invocation: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a nested function call.\nexport type NESTED_CALL = FUNCTION_INVOCATION;\n\n// Represents a function invocation along with its execution details.\nexport type FUNCTION_INVOCATION = {\n function_call: FUNCTION_CALL;\n caller_address: string;\n class_hash: string;\n entry_point_type: ENTRY_POINT_TYPE;\n call_type: CALL_TYPE;\n result: string[];\n calls: NESTED_CALL[];\n events: ORDERED_EVENT[];\n messages: ORDERED_MESSAGE[];\n};\n\n// Represents an ordered event alongside its order within the transaction.\nexport type ORDERED_EVENT = {\n order: number;\n event: EVENT;\n};\n\n// Represents an ordered message alongside its order within the transaction.\nexport type ORDERED_MESSAGE = {\n order: number;\n message: MSG_TO_L1;\n};\n","/**\n * Types that are not in spec but required for UX\n */\nimport {\n ADDRESS,\n BLOCK_HASH,\n BLOCK_NUMBER,\n BLOCK_WITH_TXS,\n BLOCK_WITH_TX_HASHES,\n BROADCASTED_TXN,\n CHAIN_ID,\n CONTRACT_CLASS,\n CONTRACT_STORAGE_DIFF_ITEM,\n DEPRECATED_CONTRACT_CLASS,\n EVENTS_CHUNK,\n EVENT_FILTER,\n FEE_ESTIMATE,\n FELT,\n MSG_FROM_L1,\n NONCE_UPDATE,\n PENDING_BLOCK_WITH_TXS,\n PENDING_BLOCK_WITH_TX_HASHES,\n PENDING_STATE_UPDATE,\n PENDING_TXN_RECEIPT,\n REPLACED_CLASS,\n RESULT_PAGE_REQUEST,\n SIMULATION_FLAG,\n STATE_UPDATE,\n SYNC_STATUS,\n TRANSACTION_TRACE,\n TXN,\n TXN_EXECUTION_STATUS,\n TXN_HASH,\n TXN_RECEIPT,\n TXN_STATUS,\n} from './components';\n\n// METHOD RESPONSES\n// response starknet_getClass\nexport type ContractClass = CONTRACT_CLASS | DEPRECATED_CONTRACT_CLASS;\n// response starknet_simulateTransactions\nexport type SimulateTransactionResponse = {\n transaction_trace: TRANSACTION_TRACE;\n fee_estimation: FEE_ESTIMATE;\n}[];\n// response starknet_estimateFee\nexport type FeeEstimate = FEE_ESTIMATE;\n// response starknet_getTransactionByHash, starknet_getTransactionByBlockIdAndIndex\nexport type TransactionWithHash = TXN & { transaction_hash: TXN_HASH };\n// response starknet_blockHashAndNumber\nexport type BlockHashAndNumber = { block_hash: BLOCK_HASH; block_number: BLOCK_NUMBER };\n// response starknet_getBlockWithTxs\nexport type BlockWithTxs = BLOCK_WITH_TXS | PENDING_BLOCK_WITH_TXS;\n// response starknet_getBlockWithTxHashes\nexport type BlockWithTxHashes = BLOCK_WITH_TX_HASHES | PENDING_BLOCK_WITH_TX_HASHES;\n// response starknet_getStateUpdate\nexport type StateUpdate = STATE_UPDATE | PENDING_STATE_UPDATE;\n// response starknet_traceBlockTransactions\nexport type BlockTransactionsTraces = { transaction_hash: FELT; trace_root: TRANSACTION_TRACE }[];\n// response starknet_syncing\nexport type Syncing = boolean | SYNC_STATUS;\n// response starknet_getEvents\nexport type Events = EVENTS_CHUNK;\n// response starknet_addInvokeTransaction\nexport type InvokedTransaction = { transaction_hash: TXN_HASH };\n// response starknet_addDeclareTransaction\nexport type DeclaredTransaction = { transaction_hash: TXN_HASH; class_hash: FELT };\n// response starknet_addDeployAccountTransaction\nexport type DeployedAccountTransaction = { transaction_hash: TXN_HASH; contract_address: FELT };\n\n// Nice Components names\nexport type ContractAddress = ADDRESS;\nexport type Felt = FELT;\nexport type Nonce = FELT;\nexport type TransactionHash = TXN_HASH;\nexport type TransactionTrace = TRANSACTION_TRACE;\nexport type BlockHash = BLOCK_HASH;\nexport type TransactionReceipt = TXN_RECEIPT | PENDING_TXN_RECEIPT;\nexport type EventFilter = EVENT_FILTER & RESULT_PAGE_REQUEST;\nexport type SimulationFlags = Array<SIMULATION_FLAG>;\nexport type L1Message = MSG_FROM_L1;\nexport type BaseTransaction = BROADCASTED_TXN;\nexport type ChainId = CHAIN_ID;\nexport type Transaction = TXN;\nexport type TransactionStatus = {\n finality_status: TXN_STATUS;\n execution_status?: TXN_EXECUTION_STATUS;\n};\n\n// Diff Than Seq\nexport type StorageDiffs = Array<CONTRACT_STORAGE_DIFF_ITEM>;\nexport type DeprecatedDeclaredClasses = Array<FELT>;\nexport type NonceUpdates = NONCE_UPDATE[];\nexport type ReplacedClasses = REPLACED_CLASS[];\n\n// Enums Derived From Spec Types (require manual check for changes)\nexport enum ETransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE',\n L1_HANDLER = 'L1_HANDLER',\n}\n\nexport enum ESimulationFlag {\n SKIP_VALIDATE = 'SKIP_VALIDATE',\n SKIP_FEE_CHARGE = 'SKIP_FEE_CHARGE',\n}\n\nexport enum ETransactionStatus {\n RECEIVED = 'RECEIVED',\n REJECTED = 'REJECTED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\n\nexport enum ETransactionFinalityStatus {\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\nexport enum ETransactionExecutionStatus {\n SUCCEEDED = 'SUCCEEDED',\n REVERTED = 'REVERTED',\n}\n\nexport enum EBlockTag {\n LATEST = 'latest',\n PENDING = 'pending',\n}\n\nexport enum EDataAvailabilityMode {\n L1 = 'L1',\n L2 = 'L2',\n}\n","import {\n Abi,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n BlockNumber,\n BlockStatus,\n ByteCode,\n CairoAssembly,\n CompiledContract,\n ContractClass,\n EntryPointType,\n RawCalldata,\n TransactionExecutionStatus,\n TransactionFinalityStatus,\n TransactionStatus,\n TransactionType,\n} from '../lib';\n\n// #region | originally not included in the namespace\nexport type GetTransactionStatusResponse = {\n tx_status: TransactionStatus;\n execution_status: TransactionExecutionStatus;\n finality_status: TransactionFinalityStatus;\n block_hash?: string;\n tx_failure_reason?: {\n code: string;\n error_message: string;\n };\n tx_revert_reason?: string;\n};\n\nexport type GetContractAddressesResponse = {\n Starknet: string;\n GpsStatementVerifier: string;\n};\n\nexport type FunctionInvocation = {\n caller_address: string;\n contract_address: string;\n calldata: RawCalldata;\n call_type?: string;\n class_hash?: string;\n selector?: string;\n entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this\n result: Array<any>;\n execution_resources: ExecutionResources;\n internal_calls: Array<FunctionInvocation>;\n events: Array<any>;\n messages: Array<any>;\n};\n\nexport type ExecutionResources = {\n n_steps: number;\n builtin_instance_counter: {\n pedersen_builtin: number;\n range_check_builtin: number;\n bitwise_builtin: number;\n output_builtin: number;\n ecdsa_builtin: number;\n ec_op_builtin?: number;\n };\n n_memory_holes: number;\n};\n\nexport type CallL1Handler = {\n from_address: string;\n to_address: string;\n entry_point_selector: string;\n payload: Array<string>;\n};\n\nexport type DeployedContractItem = {\n address: string;\n class_hash: string;\n};\n\nexport type SequencerIdentifier = { blockHash: string } | { blockNumber: BlockNumber };\n// #endregion\n\nexport type TransactionTraceResponse = {\n validate_invocation?: FunctionInvocation;\n function_invocation?: FunctionInvocation;\n fee_transfer_invocation?: FunctionInvocation;\n constructor_invocation?: FunctionInvocation;\n signature: string[];\n};\n\nexport type DeclareTransaction = {\n type: TransactionType.DECLARE;\n sender_address: string;\n contract_class: ContractClass;\n signature?: string[];\n nonce: BigNumberish;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n compiled_class_hash?: string; // v2 declare\n};\n\nexport type DeployTransaction = {\n type: TransactionType.DEPLOY;\n contract_definition: ContractClass;\n contract_address_salt: BigNumberish;\n constructor_calldata: string[];\n nonce?: BigNumberish;\n};\n\nexport type DeployAccountTransaction = {\n type: TransactionType.DEPLOY_ACCOUNT;\n class_hash: string;\n contract_address_salt: BigNumberish;\n constructor_calldata: string[];\n signature?: string[];\n max_fee?: BigNumberish;\n version?: BigNumberish;\n nonce?: BigNumberish;\n};\n\nexport type InvokeFunctionTransaction = {\n type: TransactionType.INVOKE;\n sender_address: string;\n signature?: string[];\n entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this\n calldata?: RawCalldata;\n nonce: BigNumberish;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n};\n\nexport type Transaction =\n | DeclareTransaction\n | DeployTransaction\n | InvokeFunctionTransaction\n | DeployAccountTransaction;\n\nexport type AddTransactionResponse = {\n transaction_hash: string;\n code?: 'TRANSACTION_RECEIVED';\n address?: string;\n class_hash?: string;\n};\n\nexport type GetCodeResponse = {\n bytecode: ByteCode;\n abi: Abi;\n};\n\nexport interface InvokeFunctionTransactionResponse extends InvokeFunctionTransaction {\n transaction_hash: string;\n entry_point_selector: string;\n}\n\nexport type TransactionResponse =\n | DeclareTransaction\n | DeployTransaction\n | InvokeFunctionTransactionResponse;\n\nexport type SuccessfulTransactionResponse = {\n execution_status: TransactionExecutionStatus.SUCCEEDED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n block_hash: string;\n block_number: BlockNumber;\n transaction_index: number;\n transaction: TransactionResponse;\n};\n\nexport type RevertedTransactionResponse = {\n execution_status: TransactionExecutionStatus.REVERTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n block_hash: string;\n block_number: BlockNumber;\n transaction_index: number;\n transaction: TransactionResponse;\n revert_error: string;\n};\n\nexport type FailedTransactionResponse = {\n status: TransactionStatus.REJECTED;\n transaction_failure_reason: {\n code: string;\n error_message: string;\n };\n transaction: TransactionResponse;\n};\n\nexport type GetTransactionResponse =\n | SuccessfulTransactionResponse\n | RevertedTransactionResponse\n | FailedTransactionResponse;\n\nexport type TransactionReceiptResponse =\n | SuccessfulTransactionReceiptResponse\n | RevertedTransactionReceiptResponse\n | RejectedTransactionReceiptResponse;\n\nexport type SuccessfulTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.SUCCEEDED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n actual_fee: string;\n block_hash: string;\n block_number: BlockNumber;\n transaction_hash: string;\n transaction_index: number;\n l2_to_l1_messages: string[];\n events: string[];\n execution_resources?: ExecutionResources; // INVOKE ONLY\n};\n\nexport type RevertedTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.REVERTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus.REVERTED;\n actual_fee: string;\n block_hash: string;\n block_number: BlockNumber;\n transaction_hash: string;\n transaction_index: number;\n l2_to_l1_messages: string[];\n events: string[];\n revert_error: string;\n};\n\nexport type RejectedTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.REJECTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus.REJECTED;\n transaction_hash: string;\n l2_to_l1_messages: string[];\n events: string[];\n transaction_failure_reason: {\n code: string;\n error_message: string;\n };\n};\n\nexport type GetBlockResponse = {\n block_number: number;\n state_root: string;\n block_hash: string;\n transactions: {\n [txHash: string]: TransactionResponse;\n };\n timestamp: number;\n transaction_receipts: {\n [txHash: string]: {\n block_hash: string;\n transaction_hash: string;\n l2_to_l1_messages: {\n to_address: string;\n payload: string[];\n from_address: string;\n }[];\n block_number: BlockNumber;\n status: TransactionStatus;\n transaction_index: number;\n };\n };\n parent_block_hash: string;\n status: BlockStatus;\n gas_price: string;\n sequencer_address: string;\n starknet_version: string;\n};\n\nexport type CallContractTransaction = {\n calldata?: RawCalldata;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n entry_point_selector: string;\n} & (\n | {\n sender_address: string;\n signature: string[];\n }\n | {\n contract_address: string;\n signature?: never;\n }\n);\n\nexport type CallContractResponse = {\n result: string[];\n};\n\nexport type InvokeEstimateFee = Omit<InvokeFunctionTransaction, 'max_fee' | 'entry_point_type'>;\nexport type DeclareEstimateFee = Omit<DeclareTransaction, 'max_fee'>;\nexport type DeployAccountEstimateFee = Omit<DeployAccountTransaction, 'max_fee'>;\nexport type DeployEstimateFee = DeployTransaction;\n\nexport type SimulateTransactionResponse = {\n trace: TransactionTraceResponse; // diff with OPENRPC \"transaction_trace\"\n fee_estimation: EstimateFeeResponse;\n};\n\nexport type AccountTransactionItem =\n | InvokeEstimateFee\n | DeclareEstimateFee\n | DeployEstimateFee\n | DeployAccountEstimateFee;\n\n/**\n * Transaction filled with account data\n */\nexport type AccountTransaction = AllowArray<AccountTransactionItem>;\n\n// Support 0.9.1 changes in a backward-compatible way\nexport type EstimateFeeResponse =\n | {\n overall_fee: number;\n gas_price: number;\n gas_usage: number;\n uint: string;\n }\n | {\n amount: bigint;\n unit: string;\n };\n\nexport type EstimateFeeResponseBulk = AllowArray<EstimateFeeResponse>;\n\nexport type BlockTransactionTracesResponse = {\n traces: Array<TransactionTraceResponse & { transaction_hash: string }>;\n};\n\nexport type Storage = string;\n\nexport type StateUpdateResponse = {\n block_hash: string;\n new_root: string;\n old_root: string;\n state_diff: {\n storage_diffs: StorageDiffs;\n nonces: Nonces;\n deployed_contracts: Array<DeployedContractItem>;\n old_declared_contracts: OldDeclaredContracts;\n declared_classes: DeclaredClasses;\n replaced_classes: ReplacedClasses; // no definition is it array of string\n };\n};\n\nexport type StorageDiffs = { [address: string]: Array<StateDiffItem> };\n\nexport type StateDiffItem = { key: string; value: string };\n\nexport type Nonces = { [address: string]: Nonce };\n\nexport type Nonce = string;\n\nexport type DeployedContracts = DeployedContractItem[];\n\nexport type OldDeclaredContracts = string[];\n\nexport type DeclaredClasses = DeclaredClass[];\n\nexport type DeclaredClass = { class_hash: string; compiled_class_hash: string };\n\nexport type ReplacedClasses = string[]; // no definition is it array of string ?\n\nexport type Endpoints = {\n get_contract_addresses: {\n QUERY: never;\n REQUEST: never;\n RESPONSE: GetContractAddressesResponse;\n };\n add_transaction: {\n QUERY: never;\n REQUEST: Transaction;\n RESPONSE: AddTransactionResponse;\n };\n get_transaction: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: GetTransactionResponse;\n };\n get_transaction_status: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: GetTransactionStatusResponse;\n };\n get_transaction_trace: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: TransactionTraceResponse;\n };\n get_transaction_receipt: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: TransactionReceiptResponse;\n };\n get_nonce: {\n QUERY: {\n contractAddress: string;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: Nonce;\n };\n get_storage_at: {\n QUERY: {\n contractAddress: string;\n key: BigNumberish;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: Storage;\n };\n get_code: {\n QUERY: {\n contractAddress: string;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: GetCodeResponse;\n };\n get_block: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: GetBlockResponse;\n };\n call_contract: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: CallContractTransaction;\n RESPONSE: CallContractResponse;\n };\n estimate_fee: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransactionItem;\n RESPONSE: EstimateFeeResponse;\n };\n get_class_by_hash: {\n QUERY: {\n classHash: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: CompiledContract;\n };\n get_class_hash_at: {\n QUERY: {\n contractAddress: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: string;\n };\n get_state_update: {\n QUERY: {\n blockHash?: string;\n blockNumber?: BlockNumber;\n };\n REQUEST: never;\n RESPONSE: StateUpdateResponse;\n };\n get_full_contract: {\n QUERY: {\n contractAddress: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: CompiledContract;\n };\n estimate_message_fee: {\n QUERY: any;\n REQUEST: any;\n RESPONSE: EstimateFeeResponse;\n };\n simulate_transaction: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransaction;\n RESPONSE: SimulateTransactionResponse;\n };\n estimate_fee_bulk: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransaction;\n RESPONSE: EstimateFeeResponseBulk;\n };\n get_block_traces: {\n QUERY: {\n blockHash?: string;\n blockNumber?: BlockNumber;\n };\n REQUEST: never;\n RESPONSE: BlockTransactionTracesResponse;\n };\n get_compiled_class_by_class_hash: {\n QUERY: {\n classHash: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: any;\n RESPONSE: CairoAssembly;\n };\n};\n","export default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failure');\n }\n}\n","import { hexToBytes as hexToBytesNoble } from '@noble/curves/abstract/utils';\n\nimport { BigNumberish } from '../types';\nimport assert from './assert';\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\n/** @deprecated prefer importing from 'types' over 'num' */\nexport type { BigNumberish };\n\n/**\n * Test if string is hex-string\n * @param hex hex-string\n */\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\n/**\n * Convert BigNumberish to bigint\n */\nexport function toBigInt(value: BigNumberish): bigint {\n return BigInt(value);\n}\n\n/**\n * Test if value is bigint\n */\nexport function isBigInt(value: any): value is bigint {\n return typeof value === 'bigint';\n}\n\n/**\n * Convert BigNumberish to hex-string\n * @returns format: hex-string\n */\nexport function toHex(number: BigNumberish): string {\n return addHexPrefix(toBigInt(number).toString(16));\n}\n\n/**\n * Alias of ToHex\n */\nexport const toHexString = toHex;\n\n/**\n * Convert BigNumberish to storage-key-string\n *\n * Same as toHex but conforming to the STORAGE_KEY pattern `^0x0[0-7]{1}[a-fA-F0-9]{0,62}$`.\n *\n * A storage key is represented as up to 62 hex digits, 3 bits, and 5 leading zeroes:\n * `0x0 + [0-7] + 62 hex = 0x + 64 hex`\n * @returns format: storage-key-string\n */\nexport function toStorageKey(number: BigNumberish): string {\n const res = addHexPrefix(toBigInt(number).toString(16).padStart(64, '0'));\n return res;\n}\n\n/**\n * Convert hexadecimal string to decimal string\n * @param hex hex-string\n * @returns format: decimal string\n */\nexport function hexToDecimalString(hex: string): string {\n return BigInt(addHexPrefix(hex)).toString(10);\n}\n\n/**\n * Remove hex string leading zero and lowercase it\n * @example '0x01A...' -> '0x1a..'\n * @param hex hex-string\n * @returns format: hex-string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\n\n/**\n * Asserts input is equal to or greater then lowerBound and lower then upperBound.\n *\n * The `inputName` parameter is used in the assertion message.\n */\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBigInt = BigInt(input);\n const lowerBoundBigInt = BigInt(lowerBound);\n const upperBoundBigInt = BigInt(upperBound);\n\n assert(\n inputBigInt >= lowerBoundBigInt && inputBigInt <= upperBoundBigInt,\n `Message not signable, ${messageSuffix}.`\n );\n}\n\n/**\n * Convert BigNumberish array to decimal string array\n * @returns format: decimal string array\n */\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBigInt(x).toString(10));\n}\n\n/**\n * Convert BigNumberish array to hexadecimal string array\n * @returns format: hex-string array\n */\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(x));\n}\n\n/**\n * Test if string is whole number (0,1,2,3...)\n */\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\n\n/**\n * Convert string to decimal string\n * @returns format: decimal string\n */\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\n/**\n * Convert string to hexadecimal string\n * @returns format: hex-string\n */\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\n/**\n * Convert string array to hex-string array\n * @returns format: hex-string array\n */\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\n/**\n * Convert boolean to \"0\" or \"1\"\n */\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n\n/**\n * Convert hex-string to an array of Bytes (Uint8Array)\n * @param value hex-string\n */\nexport function hexToBytes(value: string): Uint8Array {\n if (!isHex(value)) throw new Error(`${value} need to be a hex-string`);\n\n let adaptedValue: string = removeHexPrefix(value);\n if (adaptedValue.length % 2 !== 0) {\n adaptedValue = `0${adaptedValue}`;\n }\n return hexToBytesNoble(adaptedValue);\n}\n","import { keccak } from '@scure/starknet';\n\nimport { MASK_250 } from '../constants';\nimport { BigNumberish } from '../types';\nimport { addHexPrefix, removeHexPrefix, utf8ToArray } from './encode';\nimport { hexToBytes, isHex, isStringWholeNumber, toHex, toHexString } from './num';\n\n/**\n * Calculate hex-string keccak hash for a given BigNumberish\n *\n * BigNumberish -> hex-string keccak hash\n * @returns format: hex-string\n */\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(BigInt(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(keccak(hexToBytes(addHexPrefix(evenHex))).toString(16));\n}\n\n/**\n * Calculate hex-string keccak hash for a given string\n *\n * String -> hex-string keccak hash\n * @returns format: hex-string\n */\nfunction keccakHex(str: string): string {\n return addHexPrefix(keccak(utf8ToArray(str)).toString(16));\n}\n\n/**\n * Calculate bigint keccak hash for a given string\n *\n * String -> bigint keccak hash\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param str the value you want to get the keccak hash from\n * @returns starknet keccak hash as BigInt\n */\nexport function starknetKeccak(str: string): bigint {\n const hash = BigInt(keccakHex(str));\n // eslint-disable-next-line no-bitwise\n return hash & MASK_250;\n}\n\n/**\n * Calculate hex-string selector for a given abi-function-name\n *\n * Abi-function-name -> hex-string selector\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName ascii-string of 'abi function name'\n * @returns format: hex-string; selector for 'abi function name'\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Calculate hex-string selector from abi-function-name, decimal string or hex string\n *\n * ('abi-function-name' or dec-string or hex-string) -> hex-string selector\n *\n * @param value hex-string | dec-string | ascii-string\n * @returns format: hex-string\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n","import { TEXT_TO_FELT_MAX_LEN } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { isHex, isStringWholeNumber } from './num';\n\n/**\n * Test if string contains only ASCII characters (string can be ascii text)\n */\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n/**\n * Test if string is a Cairo short string (string has less or equal 31 characters)\n */\nexport function isShortString(str: string) {\n return str.length <= TEXT_TO_FELT_MAX_LEN;\n}\n\n/**\n * Test if string contains only numbers (string can be converted to decimal number)\n */\nexport function isDecimalString(str: string): boolean {\n return /^[0-9]*$/i.test(str);\n}\n\n/**\n * Test if value is a free-from string text, and not a hex string or number string\n */\nexport function isText(val: any) {\n return typeof val === 'string' && !isHex(val) && !isStringWholeNumber(val);\n}\n\n/**\n * Test if value is short text\n */\nexport const isShortText = (val: any) => isText(val) && isShortString(val);\n\n/**\n * Test if value is long text\n */\nexport const isLongText = (val: any) => isText(val) && !isShortString(val);\n\n/**\n * Split long text into short strings\n */\nexport function splitLongString(longStr: string): string[] {\n const regex = RegExp(`[^]{1,${TEXT_TO_FELT_MAX_LEN}}`, 'g');\n return longStr.match(regex) || [];\n}\n\n/**\n * Convert an ASCII string to a hexadecimal string.\n * @param str short string (ASCII string, 31 characters max)\n * @returns format: hex-string; 248 bits max\n * @example\n * ```typescript\n * const myEncodedString: string = encodeShortString(\"uri/pict/t38.jpg\");\n * // return hex string (ex.\"0x7572692f706963742f7433382e6a7067\")\n * ```\n */\nexport function encodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\n/**\n * Convert a hexadecimal or decimal string to an ASCII string.\n * @param str representing a 248 bit max number (ex. \"0x1A4F64EA56\" or \"236942575435676423\")\n * @returns format: short string; 31 characters max\n * @example\n * ```typescript\n * const myDecodedString: string = decodeShortString(\"0x7572692f706963742f7433382e6a7067\");\n * // return string (ex.\"uri/pict/t38.jpg\")\n * ```\n */\nexport function decodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (isHex(str)) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n }\n if (isDecimalString(str)) {\n return decodeShortString('0X'.concat(BigInt(str).toString(16)));\n }\n throw new Error(`${str} is not Hex or decimal`);\n}\n","import {\n Abi,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n ContractVersion,\n Litteral,\n Uint,\n Uint256,\n} from '../../types';\nimport { isBigInt, isHex, isStringWholeNumber } from '../num';\nimport { encodeShortString, isShortString, isText } from '../shortString';\nimport { UINT_128_MAX, isUint256 } from '../uint256';\n\n// Intended for internal usage, maybe should be exported somewhere else and not exported to utils\nexport const isLen = (name: string) => /_len$/.test(name);\nexport const isTypeFelt = (type: string) => type === 'felt' || type === 'core::felt252';\nexport const isTypeArray = (type: string) =>\n /\\*/.test(type) ||\n type.startsWith('core::array::Array::') ||\n type.startsWith('core::array::Span::');\nexport const isTypeTuple = (type: string) => /^\\(.*\\)$/i.test(type);\nexport const isTypeNamedTuple = (type: string) => /\\(.*\\)/i.test(type) && type.includes(':');\nexport const isTypeStruct = (type: string, structs: AbiStructs) => type in structs;\nexport const isTypeEnum = (type: string, enums: AbiEnums) => type in enums;\nexport const isTypeOption = (type: string) => type.startsWith('core::option::Option::');\nexport const isTypeResult = (type: string) => type.startsWith('core::result::Result::');\nexport const isTypeUint = (type: string) => Object.values(Uint).includes(type as Uint);\nexport const isTypeLitteral = (type: string) => Object.values(Litteral).includes(type as Litteral);\nexport const isTypeUint256 = (type: string) => type === 'core::integer::u256';\nexport const isTypeBool = (type: string) => type === 'core::bool';\nexport const isTypeContractAddress = (type: string) =>\n type === 'core::starknet::contract_address::ContractAddress';\nexport const isTypeEthAddress = (type: string) =>\n type === 'core::starknet::eth_address::EthAddress';\nexport const isCairo1Type = (type: string) => type.includes('::');\nexport const getArrayType = (type: string) => {\n if (isCairo1Type(type)) {\n return type.substring(type.indexOf('<') + 1, type.lastIndexOf('>'));\n }\n return type.replace('*', '');\n};\n\n/**\n * Test if an ABI comes from a Cairo 1 contract\n * @param abi representing the interface of a Cairo contract\n * @returns TRUE if it is an ABI from a Cairo1 contract\n * @example\n * ```typescript\n * const isCairo1: boolean = isCairo1Abi(myAbi: Abi);\n * ```\n */\nexport function isCairo1Abi(abi: Abi): boolean {\n const { cairo } = getAbiContractVersion(abi);\n if (cairo === undefined) {\n throw Error('Unable to determine Cairo version');\n }\n return cairo === '1';\n}\n\n/**\n * Return ContractVersion (Abi version) based on Abi\n * or undefined for unknown version\n * @param abi\n * @returns string\n */\nexport function getAbiContractVersion(abi: Abi): ContractVersion {\n // determine by interface for \"Cairo 1.2\"\n if (abi.find((it) => it.type === 'interface')) {\n return { cairo: '1', compiler: '2' };\n }\n\n // determine by function io types \"Cairo 1.1\" or \"Cairo 0.0\"\n // find first function with inputs or outputs\n const testFunction = abi.find(\n (it) => it.type === 'function' && (it.inputs.length || it.outputs.length)\n );\n if (!testFunction) {\n return { cairo: undefined, compiler: undefined };\n }\n const io = testFunction.inputs.length ? testFunction.inputs : testFunction.outputs;\n if (isCairo1Type(io[0].type)) {\n return { cairo: '1', compiler: '1' };\n }\n return { cairo: '0', compiler: '0' };\n}\n\n/**\n * named tuple cairo type is described as js object {}\n * struct cairo type are described as js object {}\n * array cairo type are described as js array []\n */\n\n/**\n * Create Uint256 Cairo type (helper for common struct type)\n * @example\n * ```typescript\n * uint256('892349863487563453485768723498');\n * ```\n */\nexport const uint256 = (it: BigNumberish): Uint256 => {\n const bn = BigInt(it);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n // eslint-disable-next-line no-bitwise\n low: (bn & UINT_128_MAX).toString(10),\n // eslint-disable-next-line no-bitwise\n high: (bn >> 128n).toString(10),\n };\n};\n\n/**\n * Create unnamed tuple Cairo type (helper same as common struct type)\n * @example\n * ```typescript\n * tuple(1,'0x101',16);\n * ```\n */\nexport const tuple = (\n ...args: (BigNumberish | object | boolean)[]\n): Record<number, BigNumberish | object | boolean> => ({ ...args });\n\n/**\n * Create felt Cairo type (cairo type helper)\n * @returns format: felt-string\n */\nexport function felt(it: BigNumberish): string {\n // BN or number\n if (isBigInt(it) || (typeof it === 'number' && Number.isInteger(it))) {\n return it.toString();\n }\n // string text\n if (isText(it)) {\n if (!isShortString(it as string))\n throw new Error(\n `${it} is a long string > 31 chars, felt can store short strings, split it to array of short strings`\n );\n const encoded = encodeShortString(it as string);\n return BigInt(encoded).toString();\n }\n // hex string\n if (typeof it === 'string' && isHex(it)) {\n // toBN().toString\n return BigInt(it).toString();\n }\n // string number (already converted), or unhandled type\n if (typeof it === 'string' && isStringWholeNumber(it)) {\n return it;\n }\n // bool to felt\n if (typeof it === 'boolean') {\n return `${+it}`;\n }\n\n throw new Error(`${it} can't be computed by felt()`);\n}\n","/* eslint-disable no-bitwise */\nimport { BigNumberish, Uint256 } from '../types';\nimport { addHexPrefix } from './encode';\nimport { toBigInt } from './num';\n\n/** @deprecated prefer importing from 'types' over 'uint256' */\nexport type { Uint256 };\n\nexport const UINT_128_MAX = (1n << 128n) - 1n;\nexport const UINT_256_MAX = (1n << 256n) - 1n;\n\n/**\n * Convert Uint256 to bigint\n */\nexport function uint256ToBN(uint256: Uint256) {\n return (toBigInt(uint256.high) << 128n) + toBigInt(uint256.low);\n}\n\n/**\n * Test BigNumberish is smaller or equal 2**256-1\n */\nexport function isUint256(bn: BigNumberish): boolean {\n return toBigInt(bn) <= UINT_256_MAX;\n}\n\n/**\n * Convert BigNumberish (string | number | bigint) to Uint256 (hex)\n */\nexport function bnToUint256(bn: BigNumberish): Uint256 {\n const bi = toBigInt(bn);\n if (!isUint256(bi)) throw new Error('Number is too large');\n return {\n low: addHexPrefix((bi & UINT_128_MAX).toString(16)),\n high: addHexPrefix((bi >> 128n).toString(16)),\n };\n}\n","export type CairoEnumRaw = {\n [key: string]: any;\n};\n\n/**\n * Class to handle Cairo custom Enum\n * @param enumContent object containing the variants and its content. Example :\n * {Success: 234, Warning: undefined, Error: undefined}.\n * Only one variant with a value, object, array.\n * @returns an instance representing a Cairo custom Enum.\n * @example ```typescript\n * const myCairoEnum = new CairoCustomEnum( {Success: undefined, Warning: \"0x7f32ea\", Error: undefined})\n * ```\n */\nexport class CairoCustomEnum {\n /**\n * direct readonly access to variants of the Cairo Custom Enum.\n * @returns a value of type any\n * @example ```typescript\n * const successValue = myCairoEnum.variant.Success;\n */\n readonly variant: CairoEnumRaw;\n\n /**\n * @param enumContent an object with the variants as keys and the content as value. Only one content shall be defined.\n */\n constructor(enumContent: CairoEnumRaw) {\n const variantsList = Object.values(enumContent);\n if (variantsList.length === 0) {\n throw new Error('This Enum must have a least 1 variant');\n }\n const nbActiveVariants = variantsList.filter(\n (content) => typeof content !== 'undefined'\n ).length;\n if (nbActiveVariants !== 1) {\n throw new Error('This Enum must have exactly one active variant');\n }\n this.variant = enumContent;\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo custom Enum.\n */\n public unwrap(): any {\n const variants = Object.entries(this.variant);\n const activeVariant = variants.find((item) => typeof item[1] !== 'undefined');\n if (typeof activeVariant === 'undefined') {\n return undefined;\n }\n return activeVariant[1];\n }\n\n /**\n *\n * @returns the name of the valid variant of a Cairo custom Enum.\n */\n public activeVariant(): string {\n const variants = Object.entries(this.variant);\n const activeVariant = variants.find((item) => typeof item[1] !== 'undefined');\n if (typeof activeVariant === 'undefined') {\n return '';\n }\n return activeVariant[0];\n }\n}\n","export enum CairoOptionVariant {\n Some = 0,\n None = 1,\n}\n\n/**\n * Class to handle Cairo Option\n * @param variant CairoOptionVariant.Some or CairoOptionVariant.None\n * @param someContent value of type T.\n * @returns an instance representing a Cairo Option.\n * @example ```typescript\n * const myOption = new CairoOption<BigNumberish>(CairoOptionVariant.Some, \"0x54dda8\");\n * ```\n */\nexport class CairoOption<T> {\n readonly Some?: T;\n\n readonly None?: boolean;\n\n constructor(variant: CairoOptionVariant, someContent?: T) {\n if (!(variant in CairoOptionVariant)) {\n throw new Error('Wrong variant : should be CairoOptionVariant.Some or .None.');\n }\n if (variant === CairoOptionVariant.Some) {\n if (typeof someContent === 'undefined') {\n throw new Error(\n 'The creation of a Cairo Option with \"Some\" variant needs a content as input.'\n );\n }\n this.Some = someContent;\n this.None = undefined;\n } else {\n this.Some = undefined;\n this.None = true;\n }\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo custom Enum.\n * If None, returns 'undefined'.\n */\n public unwrap(): T | undefined {\n if (this.None) {\n return undefined;\n }\n return this.Some;\n }\n\n /**\n *\n * @returns true if the valid variant is 'isSome'.\n */\n public isSome(): boolean {\n return !(typeof this.Some === 'undefined');\n }\n\n /**\n *\n * @returns true if the valid variant is 'isNone'.\n */\n public isNone(): boolean {\n return this.None === true;\n }\n}\n","export enum CairoResultVariant {\n Ok = 0,\n Err = 1,\n}\n\n/**\n * Class to handle Cairo Result\n * @param variant CairoResultVariant.Ok or CairoResultVariant.Err\n * @param resultContent value of type T or U.\n * @returns an instance representing a Cairo Result.\n * @example ```typescript\n * const myOption = new CairoResult<BigNumberish,CustomError>(CairoResultVariant.Ok, \"0x54dda8\");\n * ```\n */\nexport class CairoResult<T, U> {\n readonly Ok?: T;\n\n readonly Err?: U;\n\n constructor(variant: CairoResultVariant, resultContent: T | U) {\n if (!(variant in CairoResultVariant)) {\n throw new Error('Wrong variant : should be CairoResultVariant.Ok or .Err.');\n }\n if (variant === CairoResultVariant.Ok) {\n this.Ok = resultContent as T;\n this.Err = undefined;\n } else {\n this.Ok = undefined;\n this.Err = resultContent as U;\n }\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo Result.\n */\n public unwrap(): T | U {\n if (typeof this.Ok !== 'undefined') {\n return this.Ok;\n }\n if (typeof this.Err !== 'undefined') {\n return this.Err;\n }\n throw new Error('Both Result.Ok and .Err are undefined. Not authorized.');\n }\n\n /**\n *\n * @returns true if the valid variant is 'Ok'.\n */\n public isOk(): boolean {\n return !(typeof this.Ok === 'undefined');\n }\n\n /**\n *\n * @returns true if the valid variant is 'isErr'.\n */\n public isErr(): boolean {\n return !(typeof this.Err === 'undefined');\n }\n}\n","import { isBigInt } from '../num';\nimport { decodeShortString } from '../shortString';\n\nconst guard = {\n isBN: (data: any, type: any, key: any) => {\n if (!isBigInt(data[key]))\n throw new Error(\n `Data and formatter mismatch on ${key}:${type[key]}, expected response data ${key}:${\n data[key]\n } to be BN instead it is ${typeof data[key]}`\n );\n },\n unknown: (data: any, type: any, key: any) => {\n throw new Error(`Unhandled formatter type on ${key}:${type[key]} for data ${key}:${data[key]}`);\n },\n};\n\nexport default function formatter(data: any, type: any, sameType?: any) {\n // match data element with type element\n return Object.entries(data).reduce((acc, [key, value]: [any, any]) => {\n const elType = sameType ?? type[key];\n\n if (!(key in type) && !sameType) {\n // no type definition for element return original element\n acc[key] = value;\n return acc;\n }\n\n if (elType === 'string') {\n if (Array.isArray(data[key])) {\n // long string (felt*)\n const arrayStr = formatter(\n data[key],\n data[key].map((_: any) => elType)\n );\n acc[key] = Object.values(arrayStr).join('');\n return acc;\n }\n guard.isBN(data, type, key);\n acc[key] = decodeShortString(value);\n return acc;\n }\n if (elType === 'number') {\n guard.isBN(data, type, key);\n acc[key] = Number(value);\n return acc;\n }\n if (typeof elType === 'function') {\n acc[key] = elType(value);\n return acc;\n }\n if (Array.isArray(elType)) {\n const arrayObj = formatter(data[key], elType, elType[0]);\n acc[key] = Object.values(arrayObj);\n return acc;\n }\n if (typeof elType === 'object') {\n acc[key] = formatter(data[key], elType);\n return acc;\n }\n\n guard.unknown(data, type, key);\n return acc;\n }, {} as any);\n}\n","import { Abi, FunctionAbi } from '../../../types';\nimport { isLen } from '../cairo';\nimport { AbiParserInterface } from './interface';\n\nexport class AbiParser1 implements AbiParserInterface {\n abi: Abi;\n\n constructor(abi: Abi) {\n this.abi = abi;\n }\n\n /**\n * abi method inputs length without '_len' inputs\n * cairo 0 reducer\n * @param abiMethod FunctionAbi\n * @returns number\n */\n public methodInputsLength(abiMethod: FunctionAbi) {\n return abiMethod.inputs.reduce((acc, input) => (!isLen(input.name) ? acc + 1 : acc), 0);\n }\n\n /**\n * get method definition from abi\n * @param name string\n * @returns FunctionAbi | undefined\n */\n public getMethod(name: string): FunctionAbi | undefined {\n return this.abi.find((it) => it.name === name);\n }\n\n /**\n * Get Abi in legacy format\n * @returns Abi\n */\n public getLegacyFormat() {\n return this.abi;\n }\n}\n","import { Abi, FunctionAbi } from '../../../types';\nimport { AbiParserInterface } from './interface';\n\nexport class AbiParser2 implements AbiParserInterface {\n abi: Abi;\n\n constructor(abi: Abi) {\n this.abi = abi;\n }\n\n /**\n * abi method inputs length\n * @param abiMethod FunctionAbi\n * @returns number\n */\n public methodInputsLength(abiMethod: FunctionAbi) {\n return abiMethod.inputs.length;\n }\n\n /**\n * get method definition from abi\n * @param name string\n * @returns FunctionAbi | undefined\n */\n public getMethod(name: string): FunctionAbi | undefined {\n const intf = this.abi.find((it) => it.type === 'interface');\n return intf.items.find((it: any) => it.name === name);\n }\n\n /**\n * Get Abi in legacy format\n * @returns Abi\n */\n public getLegacyFormat(): Abi {\n return this.abi.flatMap((e) => {\n if (e.type === 'interface') {\n return e.items;\n }\n return e;\n });\n }\n}\n","import { Abi, FunctionAbi, RawArgs } from '../../../types';\nimport { isCairo1Abi } from '../cairo';\nimport { AbiParserInterface } from './interface';\nimport { AbiParser1 } from './parser-0-1.1.0';\nimport { AbiParser2 } from './parser-2.0.0';\n\nexport function createAbiParser(abi: Abi): AbiParserInterface {\n const version = getAbiVersion(abi);\n if (version === 0 || version === 1) {\n return new AbiParser1(abi);\n }\n if (version === 2) {\n return new AbiParser2(abi);\n }\n throw Error(`Unsupported ABI version ${version}`);\n}\n\nexport function getAbiVersion(abi: Abi) {\n if (abi.find((it) => it.type === 'interface')) return 2;\n if (isCairo1Abi(abi)) return 1;\n return 0;\n}\n\nexport function isNoConstructorValid(\n method: string,\n argsCalldata: RawArgs,\n abiMethod?: FunctionAbi\n) {\n // No constructor in abi and validly empty args\n return method === 'constructor' && !abiMethod && !argsCalldata.length;\n}\n","/* eslint-disable no-plusplus */\nimport { isCairo1Type, isTypeNamedTuple } from './cairo';\n\nfunction parseNamedTuple(namedTuple: string): any {\n const name = namedTuple.substring(0, namedTuple.indexOf(':'));\n const type = namedTuple.substring(name.length + ':'.length);\n return { name, type };\n}\n\nfunction parseSubTuple(s: string) {\n if (!s.includes('(')) return { subTuple: [], result: s };\n const subTuple: string[] = [];\n let result = '';\n let i = 0;\n while (i < s.length) {\n if (s[i] === '(') {\n let counter = 1;\n const lBracket = i;\n i++;\n while (counter) {\n if (s[i] === ')') counter--;\n if (s[i] === '(') counter++;\n i++;\n }\n subTuple.push(s.substring(lBracket, i));\n result += ' ';\n i--;\n } else {\n result += s[i];\n }\n i++;\n }\n\n return {\n subTuple,\n result,\n };\n}\n\nfunction extractCairo0Tuple(type: string) {\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n\n // Decompose subTuple\n const { subTuple, result } = parseSubTuple(cleanType);\n\n // Recompose subTuple\n let recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n\n // Parse named tuple\n if (isTypeNamedTuple(type)) {\n recomposed = recomposed.reduce((acc, it) => {\n return acc.concat(parseNamedTuple(it));\n }, []);\n }\n\n return recomposed;\n}\n\nfunction extractCairo1Tuple(type: string) {\n // un-named tuples support\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n const { subTuple, result } = parseSubTuple(cleanType);\n const recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n return recomposed;\n}\n\n/**\n * Convert tuple string definition into object like definition\n * @param type tuple string definition\n * @returns object like tuple\n */\nexport default function extractTupleMemberTypes(type: string): (string | object)[] {\n if (isCairo1Type(type)) {\n return extractCairo1Tuple(type);\n }\n return extractCairo0Tuple(type);\n}\n","import { AbiEntry, AbiEnums, AbiStructs, CairoEnum, RawArgsObject } from '../../types';\nimport {\n getArrayType,\n isCairo1Type,\n isLen,\n isTypeArray,\n isTypeEnum,\n isTypeEthAddress,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\nfunction errorU256(key: string) {\n return Error(\n `Your object includes the property : ${key}, containing an Uint256 object without the 'low' and 'high' keys.`\n );\n}\nexport default function orderPropsByAbi(\n unorderedObject: RawArgsObject,\n abiOfObject: AbiEntry[],\n structs: AbiStructs,\n enums: AbiEnums\n): object {\n const orderInput = (unorderedItem: any, abiType: string): any => {\n if (isTypeArray(abiType)) {\n return orderArray(unorderedItem, abiType);\n }\n if (isTypeEnum(abiType, enums)) {\n const abiObj = enums[abiType];\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return orderEnum(unorderedItem, abiObj);\n }\n if (isTypeTuple(abiType)) {\n return orderTuple(unorderedItem, abiType);\n }\n if (isTypeEthAddress(abiType)) {\n return unorderedItem;\n }\n if (isTypeUint256(abiType)) {\n const u256 = unorderedItem;\n if (typeof u256 !== 'object') {\n // BigNumberish --> just copy\n return u256;\n }\n if (!('low' in u256 && 'high' in u256)) {\n throw errorU256(abiType);\n }\n return { low: u256.low, high: u256.high };\n }\n if (isTypeStruct(abiType, structs)) {\n const abiOfStruct = structs[abiType].members;\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return orderStruct(unorderedItem, abiOfStruct);\n }\n // litterals\n return unorderedItem;\n };\n\n const orderStruct = (unorderedObject2: RawArgsObject, abiObject: AbiEntry[]): object => {\n const orderedObject2 = abiObject.reduce((orderedObject, abiParam) => {\n const setProperty = (value?: any) =>\n Object.defineProperty(orderedObject, abiParam.name, {\n enumerable: true,\n value: value ?? unorderedObject2[abiParam.name],\n });\n\n if (unorderedObject2[abiParam.name] === 'undefined') {\n if (isCairo1Type(abiParam.type) || !isLen(abiParam.name)) {\n throw Error(`Your object needs a property with key : ${abiParam.name} .`);\n }\n }\n setProperty(orderInput(unorderedObject2[abiParam.name], abiParam.type));\n return orderedObject;\n }, {});\n return orderedObject2;\n };\n\n function orderArray(myArray: Array<any> | string, abiParam: string): Array<any> | string {\n const typeInArray = getArrayType(abiParam);\n if (typeof myArray === 'string') {\n return myArray; // longstring\n }\n return myArray.map((myElem) => orderInput(myElem, typeInArray));\n }\n\n function orderTuple(unorderedObject2: RawArgsObject, abiParam: string): object {\n const typeList = extractTupleMemberTypes(abiParam);\n const orderedObject2 = typeList.reduce((orderedObject: object, abiTypeCairoX: any, index) => {\n const myObjKeys: string[] = Object.keys(unorderedObject2);\n const setProperty = (value?: any) =>\n Object.defineProperty(orderedObject, index.toString(), {\n enumerable: true,\n value: value ?? unorderedObject2[myObjKeys[index]],\n });\n const abiType: string = abiTypeCairoX?.type ? abiTypeCairoX.type : abiTypeCairoX; // Named tuple, or tuple\n setProperty(orderInput(unorderedObject2[myObjKeys[index]], abiType));\n return orderedObject;\n }, {});\n return orderedObject2;\n }\n\n const orderEnum = (unorderedObject2: CairoEnum, abiObject: AbiEntry): CairoEnum => {\n if (isTypeResult(abiObject.name)) {\n const unorderedResult = unorderedObject2 as CairoResult<any, any>;\n const resultOkType: string = abiObject.name.substring(\n abiObject.name.indexOf('<') + 1,\n abiObject.name.lastIndexOf(',')\n );\n const resultErrType: string = abiObject.name.substring(\n abiObject.name.indexOf(',') + 1,\n abiObject.name.lastIndexOf('>')\n );\n if (unorderedResult.isOk()) {\n return new CairoResult<any, any>(\n CairoResultVariant.Ok,\n orderInput(unorderedObject2.unwrap(), resultOkType)\n );\n }\n return new CairoResult<any, any>(\n CairoResultVariant.Err,\n orderInput(unorderedObject2.unwrap(), resultErrType)\n );\n }\n if (isTypeOption(abiObject.name)) {\n const unorderedOption = unorderedObject2 as CairoOption<any>;\n const resultSomeType: string = abiObject.name.substring(\n abiObject.name.indexOf('<') + 1,\n abiObject.name.lastIndexOf('>')\n );\n if (unorderedOption.isSome()) {\n return new CairoOption<any>(\n CairoOptionVariant.Some,\n orderInput(unorderedOption.unwrap(), resultSomeType)\n );\n }\n // none(())\n return new CairoOption<any>(CairoOptionVariant.None, {});\n }\n // custom Enum\n const unorderedCustomEnum = unorderedObject2 as CairoCustomEnum;\n const variants = Object.entries(unorderedCustomEnum.variant);\n const newEntries = variants.map((variant) => {\n if (typeof variant[1] === 'undefined') {\n return variant;\n }\n const variantType: string = abiObject.type.substring(\n abiObject.type.lastIndexOf('<') + 1,\n abiObject.type.lastIndexOf('>')\n );\n if (variantType === '()') {\n return variant;\n }\n return [variant[0], orderInput(unorderedCustomEnum.unwrap(), variantType)];\n });\n return new CairoCustomEnum(Object.fromEntries(newEntries));\n };\n\n // Order Call Parameters\n const finalOrderedObject = abiOfObject.reduce((orderedObject, abiParam) => {\n const setProperty = (value: any) =>\n Object.defineProperty(orderedObject, abiParam.name, {\n enumerable: true,\n value,\n });\n if (isLen(abiParam.name) && !isCairo1Type(abiParam.type)) {\n return orderedObject;\n }\n setProperty(orderInput(unorderedObject[abiParam.name], abiParam.type));\n return orderedObject;\n }, {});\n return finalOrderedObject;\n}\n","import {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n CairoEnum,\n ParsedStruct,\n Tupled,\n Uint256,\n} from '../../types';\nimport { isText, splitLongString } from '../shortString';\nimport {\n felt,\n getArrayType,\n isTypeArray,\n isTypeEnum,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint256,\n uint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * parse base types\n * @param type type from abi\n * @param val value provided\n * @returns string | string[]\n */\nfunction parseBaseTypes(type: string, val: BigNumberish) {\n switch (true) {\n case isTypeUint256(type):\n // eslint-disable-next-line no-case-declarations\n const el_uint256 = uint256(val);\n return [felt(el_uint256.low), felt(el_uint256.high)];\n default:\n return felt(val);\n }\n}\n\n/**\n * Parse tuple type string to array of known objects\n * @param element request element\n * @param typeStr tuple type string\n * @returns Tupled[]\n */\nfunction parseTuple(element: object, typeStr: string): Tupled[] {\n const memberTypes = extractTupleMemberTypes(typeStr);\n const elements = Object.values(element);\n\n if (elements.length !== memberTypes.length) {\n throw Error(\n `ParseTuple: provided and expected abi tuple size do not match.\n provided: ${elements} \n expected: ${memberTypes}`\n );\n }\n\n return memberTypes.map((it: any, dx: number) => {\n return {\n element: elements[dx],\n type: it.type ?? it,\n };\n });\n}\n\nfunction parseUint256(element: object | BigNumberish) {\n if (typeof element === 'object') {\n const { low, high } = element as Uint256;\n return [felt(low as BigNumberish), felt(high as BigNumberish)];\n }\n const el_uint256 = uint256(element);\n return [felt(el_uint256.low), felt(el_uint256.high)];\n}\n\n/**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @param structs - structs from abi\n * @param enums - enums from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nfunction parseCalldataValue(\n element:\n | ParsedStruct\n | BigNumberish\n | BigNumberish[]\n | CairoOption<any>\n | CairoResult<any, any>\n | CairoEnum,\n type: string,\n structs: AbiStructs,\n enums: AbiEnums\n): string | string[] {\n if (element === undefined) {\n throw Error(`Missing parameter for type ${type}`);\n }\n\n // value is Array\n if (Array.isArray(element)) {\n const result: string[] = [];\n result.push(felt(element.length)); // Add length to array\n const arrayType = getArrayType(type);\n\n return element.reduce((acc, it) => {\n return acc.concat(parseCalldataValue(it, arrayType, structs, enums));\n }, result);\n }\n\n // checking if the passed element is struct\n if (structs[type] && structs[type].members.length) {\n if (isTypeUint256(type)) {\n return parseUint256(element);\n }\n\n if (type === 'core::starknet::eth_address::EthAddress')\n return parseBaseTypes(type, element as BigNumberish);\n\n const { members } = structs[type];\n const subElement = element as any;\n\n return members.reduce((acc, it: AbiEntry) => {\n return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs, enums));\n }, [] as string[]);\n }\n // check if abi element is tuple\n if (isTypeTuple(type)) {\n const tupled = parseTuple(element as object, type);\n\n return tupled.reduce((acc, it: Tupled) => {\n const parsedData = parseCalldataValue(it.element, it.type, structs, enums);\n return acc.concat(parsedData);\n }, [] as string[]);\n }\n // check if u256 C1v0\n if (isTypeUint256(type)) {\n return parseUint256(element);\n }\n // check if Enum\n if (isTypeEnum(type, enums)) {\n const { variants } = enums[type];\n // Option Enum\n if (isTypeOption(type)) {\n const myOption = element as CairoOption<any>;\n if (myOption.isSome()) {\n const listTypeVariant = variants.find((variant) => variant.name === 'Some');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Option has no 'Some' variant.`);\n }\n const typeVariantSome = listTypeVariant.type;\n if (typeVariantSome === '()') {\n return CairoOptionVariant.Some.toString();\n }\n const parsedParameter = parseCalldataValue(\n myOption.unwrap(),\n typeVariantSome,\n structs,\n enums\n );\n if (Array.isArray(parsedParameter)) {\n return [CairoOptionVariant.Some.toString(), ...parsedParameter];\n }\n return [CairoOptionVariant.Some.toString(), parsedParameter];\n }\n return CairoOptionVariant.None.toString();\n }\n // Result Enum\n if (isTypeResult(type)) {\n const myResult = element as CairoResult<any, any>;\n if (myResult.isOk()) {\n const listTypeVariant = variants.find((variant) => variant.name === 'Ok');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Result has no 'Ok' variant.`);\n }\n const typeVariantOk = listTypeVariant.type;\n if (typeVariantOk === '()') {\n return CairoResultVariant.Ok.toString();\n }\n const parsedParameter = parseCalldataValue(\n myResult.unwrap(),\n typeVariantOk,\n structs,\n enums\n );\n if (Array.isArray(parsedParameter)) {\n return [CairoResultVariant.Ok.toString(), ...parsedParameter];\n }\n return [CairoResultVariant.Ok.toString(), parsedParameter];\n }\n // is Result::Err\n const listTypeVariant = variants.find((variant) => variant.name === 'Err');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Result has no 'Err' variant.`);\n }\n const typeVariantErr = listTypeVariant.type;\n if (typeVariantErr === '()') {\n return CairoResultVariant.Err.toString();\n }\n const parsedParameter = parseCalldataValue(myResult.unwrap(), typeVariantErr, structs, enums);\n if (Array.isArray(parsedParameter)) {\n return [CairoResultVariant.Err.toString(), ...parsedParameter];\n }\n return [CairoResultVariant.Err.toString(), parsedParameter];\n }\n // Custom Enum\n const myEnum = element as CairoCustomEnum;\n const activeVariant: string = myEnum.activeVariant();\n const listTypeVariant = variants.find((variant) => variant.name === activeVariant);\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Not find in abi : Enum has no '${activeVariant}' variant.`);\n }\n const typeActiveVariant = listTypeVariant.type;\n const numActiveVariant = variants.findIndex((variant) => variant.name === activeVariant); // can not fail due to check of listTypeVariant\n if (typeActiveVariant === '()') {\n return numActiveVariant.toString();\n }\n const parsedParameter = parseCalldataValue(myEnum.unwrap(), typeActiveVariant, structs, enums);\n if (Array.isArray(parsedParameter)) {\n return [numActiveVariant.toString(), ...parsedParameter];\n }\n return [numActiveVariant.toString(), parsedParameter];\n }\n\n if (typeof element === 'object') {\n throw Error(`Parameter ${element} do not align with abi parameter ${type}`);\n }\n return parseBaseTypes(type, element);\n}\n\n/**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param argsIterator - Iterator<any> for value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @param enums - enums from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nexport function parseCalldataField(\n argsIterator: Iterator<any>,\n input: AbiEntry,\n structs: AbiStructs,\n enums: AbiEnums\n): string | string[] {\n const { name, type } = input;\n let { value } = argsIterator.next();\n\n switch (true) {\n // Array\n case isTypeArray(type):\n if (!Array.isArray(value) && !isText(value)) {\n throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`);\n }\n if (typeof value === 'string') {\n // long string match cairo felt*\n value = splitLongString(value);\n }\n return parseCalldataValue(value, input.type, structs, enums);\n\n case type === 'core::starknet::eth_address::EthAddress':\n return parseBaseTypes(type, value);\n // Struct or Tuple\n case isTypeStruct(type, structs) || isTypeTuple(type) || isTypeUint256(type):\n return parseCalldataValue(value as ParsedStruct | BigNumberish[], type, structs, enums);\n\n // Enums\n case isTypeEnum(type, enums):\n return parseCalldataValue(\n value as CairoOption<any> | CairoResult<any, any> | CairoEnum,\n type,\n structs,\n enums\n );\n\n // Felt or unhandled\n default:\n return parseBaseTypes(type, value);\n }\n}\n","/* eslint-disable no-case-declarations */\nimport {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n Args,\n BigNumberish,\n CairoEnum,\n EventEntry,\n ParsedStruct,\n} from '../../types';\nimport { uint256ToBN } from '../uint256';\nimport {\n getArrayType,\n isCairo1Type,\n isLen,\n isTypeArray,\n isTypeBool,\n isTypeEnum,\n isTypeTuple,\n isTypeUint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoEnumRaw,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * Parse base types\n * @param type type of element\n * @param it iterator\n * @returns bigint | boolean\n */\nfunction parseBaseTypes(type: string, it: Iterator<string>) {\n let temp;\n switch (true) {\n case isTypeBool(type):\n temp = it.next().value;\n return Boolean(BigInt(temp));\n case isTypeUint256(type):\n const low = it.next().value;\n const high = it.next().value;\n return uint256ToBN({ low, high });\n case type === 'core::starknet::eth_address::EthAddress':\n temp = it.next().value;\n return BigInt(temp);\n default:\n temp = it.next().value;\n return BigInt(temp);\n }\n}\n\n/**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param element - element of the field {name: string, type: string}\n * @param structs - structs from abi\n * @return {any} - parsed arguments in format that contract is expecting\n */\nfunction parseResponseValue(\n responseIterator: Iterator<string>,\n element: { name: string; type: string },\n structs?: AbiStructs,\n enums?: AbiEnums\n): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum {\n if (element.type === '()') {\n return {};\n }\n // type uint256 struct (c1v2)\n if (isTypeUint256(element.type)) {\n const low = responseIterator.next().value;\n const high = responseIterator.next().value;\n return uint256ToBN({ low, high });\n }\n\n // type c1 array\n if (isTypeArray(element.type)) {\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n const el: AbiEntry = { name: '', type: getArrayType(element.type) };\n const len = BigInt(responseIterator.next().value); // get length\n while (parsedDataArr.length < len) {\n parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));\n }\n return parsedDataArr;\n }\n\n // type struct\n if (structs && element.type in structs && structs[element.type]) {\n if (element.type === 'core::starknet::eth_address::EthAddress') {\n return parseBaseTypes(element.type, responseIterator);\n }\n return structs[element.type].members.reduce((acc, el) => {\n acc[el.name] = parseResponseValue(responseIterator, el, structs, enums);\n return acc;\n }, {} as any);\n }\n\n // type Enum (only CustomEnum)\n if (enums && element.type in enums && enums[element.type]) {\n const variantNum: number = Number(responseIterator.next().value); // get variant number\n const rawEnum = enums[element.type].variants.reduce((acc, variant, num) => {\n if (num === variantNum) {\n acc[variant.name] = parseResponseValue(\n responseIterator,\n { name: '', type: variant.type },\n structs,\n enums\n );\n return acc;\n }\n acc[variant.name] = undefined;\n return acc;\n }, {} as CairoEnumRaw);\n // Option\n if (element.type.startsWith('core::option::Option')) {\n const content = variantNum === CairoOptionVariant.Some ? rawEnum.Some : undefined;\n return new CairoOption<Object>(variantNum, content);\n }\n // Result\n if (element.type.startsWith('core::result::Result')) {\n let content: Object;\n if (variantNum === CairoResultVariant.Ok) {\n content = rawEnum.Ok;\n } else {\n content = rawEnum.Err;\n }\n return new CairoResult<Object, Object>(variantNum, content);\n }\n // Cairo custom Enum\n const customEnum = new CairoCustomEnum(rawEnum);\n return customEnum;\n }\n\n // type tuple\n if (isTypeTuple(element.type)) {\n const memberTypes = extractTupleMemberTypes(element.type);\n return memberTypes.reduce((acc, it: any, idx) => {\n const name = it?.name ? it.name : idx;\n const type = it?.type ? it.type : it;\n const el = { name, type };\n acc[name] = parseResponseValue(responseIterator, el, structs, enums);\n return acc;\n }, {} as any);\n }\n\n // type c1 array\n if (isTypeArray(element.type)) {\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n const el = { name: '', type: getArrayType(element.type) };\n const len = BigInt(responseIterator.next().value); // get length\n while (parsedDataArr.length < len) {\n parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));\n }\n return parsedDataArr;\n }\n\n // base type\n return parseBaseTypes(element.type, responseIterator);\n}\n\n/**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @param parsedResult\n * @return - parsed response corresponding to the abi structure of the field\n */\nexport default function responseParser(\n responseIterator: Iterator<string>,\n output: AbiEntry | EventEntry,\n structs?: AbiStructs,\n enums?: AbiEnums,\n parsedResult?: Args | ParsedStruct\n): any {\n const { name, type } = output;\n let temp;\n\n switch (true) {\n case isLen(name):\n temp = responseIterator.next().value;\n return BigInt(temp);\n\n case (structs && type in structs) || isTypeTuple(type):\n return parseResponseValue(responseIterator, output, structs, enums);\n\n case enums && isTypeEnum(type, enums):\n return parseResponseValue(responseIterator, output, structs, enums);\n\n case isTypeArray(type):\n // C1 Array\n if (isCairo1Type(type)) {\n return parseResponseValue(responseIterator, output, structs, enums);\n }\n // C0 Array\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n parseResponseValue(\n responseIterator,\n { name, type: output.type.replace('*', '') },\n structs,\n enums\n )\n );\n }\n }\n return parsedDataArr;\n\n default:\n return parseBaseTypes(type, responseIterator);\n }\n}\n","/**\n * Validate cairo contract method arguments\n * Flow: Determine type from abi and than validate against parameter\n */\nimport {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n FunctionAbi,\n Litteral,\n Uint,\n} from '../../types';\nimport assert from '../assert';\nimport { isHex, toBigInt } from '../num';\nimport { isLongText } from '../shortString';\nimport { uint256ToBN } from '../uint256';\nimport {\n getArrayType,\n isLen,\n isTypeArray,\n isTypeBool,\n isTypeEnum,\n isTypeFelt,\n isTypeLitteral,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint,\n} from './cairo';\n\nconst validateFelt = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'string' || typeof parameter === 'number' || typeof parameter === 'bigint',\n `Validate: arg ${input.name} should be a felt typed as (String, Number or BigInt)`\n );\n if (typeof parameter === 'string' && !isHex(parameter)) return; // shortstring\n const param = BigInt(parameter.toString(10));\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1266\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n};\n\nconst validateUint = (parameter: any, input: AbiEntry) => {\n if (typeof parameter === 'number') {\n assert(\n parameter <= Number.MAX_SAFE_INTEGER,\n `Validation: Parameter is to large to be typed as Number use (BigInt or String)`\n );\n }\n assert(\n typeof parameter === 'string' ||\n typeof parameter === 'number' ||\n typeof parameter === 'bigint' ||\n (typeof parameter === 'object' && 'low' in parameter && 'high' in parameter),\n `Validate: arg ${input.name} of cairo type ${\n input.type\n } should be type (String, Number or BigInt), but is ${typeof parameter} ${parameter}.`\n );\n const param = typeof parameter === 'object' ? uint256ToBN(parameter) : toBigInt(parameter);\n\n switch (input.type) {\n case Uint.u8:\n assert(\n param >= 0n && param <= 255n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0 - 255]`\n );\n break;\n\n case Uint.u16:\n assert(\n param >= 0n && param <= 65535n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 65535]`\n );\n break;\n\n case Uint.u32:\n assert(\n param >= 0n && param <= 4294967295n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 4294967295]`\n );\n break;\n\n case Uint.u64:\n assert(\n param >= 0n && param <= 2n ** 64n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^64-1]`\n );\n break;\n\n case Uint.u128:\n assert(\n param >= 0n && param <= 2n ** 128n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^128-1]`\n );\n break;\n\n case Uint.u256:\n assert(\n param >= 0n && param <= 2n ** 256n - 1n,\n `Validate: arg ${input.name} is ${input.type} 0 - 2^256-1`\n );\n break;\n\n case Litteral.ClassHash:\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1670\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n break;\n\n case Litteral.ContractAddress:\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1245\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n break;\n default:\n break;\n }\n};\n\nconst validateBool = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'boolean',\n `Validate: arg ${input.name} of cairo type ${input.type} should be type (Boolean)`\n );\n};\n\nconst validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n // c1v2 uint256 in struct\n if (input.type === Uint.u256) {\n validateUint(parameter, input);\n return;\n }\n\n if (input.type === 'core::starknet::eth_address::EthAddress') {\n assert(\n typeof parameter !== 'object',\n `EthAdress type is waiting a BigNumberish. Got ${parameter}`\n );\n const param = BigInt(parameter.toString(10));\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259\n param >= 0n && param <= 2n ** 160n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^160-1]`\n );\n return;\n }\n\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`\n );\n\n // shallow struct validation, only first depth level\n structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(parameter).includes(name),\n `Validate: arg ${input.name} should have a property ${name}`\n );\n });\n};\n\nconst validateEnum = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type Enum (${input.type}), and should be defined as js object (not array)`\n );\n const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(parameter));\n const keys = [...Object.getOwnPropertyNames(parameter), ...methodsKeys];\n if (isTypeOption(input.type) && keys.includes('isSome') && keys.includes('isNone')) {\n return; // Option Enum\n }\n if (isTypeResult(input.type) && keys.includes('isOk') && keys.includes('isErr')) {\n return; // Result Enum\n }\n if (keys.includes('variant') && keys.includes('activeVariant')) {\n return; // Custom Enum\n }\n throw new Error(\n `Validate Enum: argument ${input.name}, type ${input.type}, value received ${parameter}, is not an Enum.`\n );\n};\n\nconst validateTuple = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} should be a tuple (defined as object)`\n );\n // todo: skip tuple structural validation for now\n};\n\nconst validateArray = (parameter: any, input: AbiEntry, structs: AbiStructs, enums: AbiEnums) => {\n const baseType = getArrayType(input.type);\n\n // Long text (special case when parameter is not an array but long text)\n // console.log(\n // 'validate array = ',\n // isTypeFelt(baseType),\n // isLongText(parameter),\n // baseType,\n // parameter\n // );\n if (isTypeFelt(baseType) && isLongText(parameter)) {\n // console.log('long text.');\n return;\n }\n\n assert(Array.isArray(parameter), `Validate: arg ${input.name} should be an Array`);\n\n switch (true) {\n case isTypeFelt(baseType):\n parameter.forEach((param: BigNumberish) => validateFelt(param, input));\n break;\n case isTypeTuple(baseType):\n parameter.forEach((it: any) => validateTuple(it, { name: input.name, type: baseType }));\n break;\n\n case isTypeArray(baseType):\n parameter.forEach((param: BigNumberish) =>\n validateArray(param, { name: '', type: baseType }, structs, enums)\n );\n break;\n case isTypeStruct(baseType, structs):\n parameter.forEach((it: any) =>\n validateStruct(it, { name: input.name, type: baseType }, structs)\n );\n break;\n case isTypeEnum(baseType, enums):\n parameter.forEach((it: any) => validateEnum(it, { name: input.name, type: baseType }));\n break;\n case isTypeUint(baseType) || isTypeLitteral(baseType):\n parameter.forEach((param: BigNumberish) => validateUint(param, input));\n break;\n case isTypeBool(baseType):\n parameter.forEach((param: BigNumberish) => validateBool(param, input));\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n};\n\nexport default function validateFields(\n abiMethod: FunctionAbi,\n args: Array<any>,\n structs: AbiStructs,\n enums: AbiEnums\n) {\n abiMethod.inputs.reduce((acc, input) => {\n const parameter = args[acc];\n\n switch (true) {\n case isLen(input.name):\n return acc;\n case isTypeFelt(input.type):\n validateFelt(parameter, input);\n break;\n case isTypeUint(input.type) || isTypeLitteral(input.type):\n validateUint(parameter, input);\n break;\n case isTypeBool(input.type):\n validateBool(parameter, input);\n break;\n case isTypeArray(input.type):\n validateArray(parameter, input, structs, enums);\n break;\n case isTypeStruct(input.type, structs):\n validateStruct(parameter, input, structs);\n break;\n case isTypeEnum(input.type, enums):\n validateEnum(parameter, input);\n break;\n case isTypeTuple(input.type):\n validateTuple(parameter, input);\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n\n return acc + 1;\n }, 0);\n}\n","/* eslint-disable no-plusplus */\nimport {\n Abi,\n AbiEnums,\n AbiStructs,\n Args,\n ArgsOrCalldata,\n Calldata,\n FunctionAbi,\n HexCalldata,\n RawArgs,\n RawArgsArray,\n Result,\n ValidateType,\n} from '../../types';\nimport assert from '../assert';\nimport { isBigInt, toHex } from '../num';\nimport { getSelectorFromName } from '../selector';\nimport { isLongText, splitLongString } from '../shortString';\nimport { felt, isCairo1Type, isLen } from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport formatter from './formatter';\nimport { createAbiParser, isNoConstructorValid } from './parser';\nimport { AbiParserInterface } from './parser/interface';\nimport orderPropsByAbi from './propertyOrder';\nimport { parseCalldataField } from './requestParser';\nimport responseParser from './responseParser';\nimport validateFields from './validate';\n\nexport * as cairo from './cairo';\n\nexport class CallData {\n abi: Abi;\n\n parser: AbiParserInterface;\n\n protected readonly structs: AbiStructs;\n\n protected readonly enums: AbiEnums;\n\n constructor(abi: Abi) {\n this.structs = CallData.getAbiStruct(abi);\n this.enums = CallData.getAbiEnum(abi);\n this.parser = createAbiParser(abi);\n this.abi = this.parser.getLegacyFormat();\n }\n\n /**\n * Validate arguments passed to the method as corresponding to the ones in the abi\n * @param type ValidateType - type of the method\n * @param method string - name of the method\n * @param args ArgsOrCalldata - arguments that are passed to the method\n */\n public validate(type: ValidateType, method: string, args: ArgsOrCalldata = []) {\n // ensure provided method of type exists\n if (type !== ValidateType.DEPLOY) {\n const invocableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view' || abi.state_mutability === 'view';\n return type === ValidateType.INVOKE ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invocableFunctionNames.includes(method),\n `${type === ValidateType.INVOKE ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // get requested method from abi\n const abiMethod = this.abi.find((abi) =>\n type === ValidateType.DEPLOY\n ? abi.name === method && abi.type === 'constructor'\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n\n if (isNoConstructorValid(method, args, abiMethod)) {\n return;\n }\n\n // validate arguments length\n const inputsLength = this.parser.methodInputsLength(abiMethod);\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n\n // validate parameters\n validateFields(abiMethod, args, this.structs, this.enums);\n }\n\n /**\n * Compile contract callData with abi\n * Parse the calldata by using input fields from the abi for that method\n * @param method string - method name\n * @param args 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).\n * @return Calldata - parsed arguments in format that contract is expecting\n * @example\n * ```typescript\n * const calldata = myCallData.compile(\"constructor\",[\"0x34a\",[1,3n]]);\n * ```\n * ```typescript\n * const calldata2 = myCallData.compile(\"constructor\",{list:[1,3n],balance:\"0x34\"}); // wrong order is valid\n * ```\n */\n public compile(method: string, argsCalldata: RawArgs): Calldata {\n const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method) as FunctionAbi;\n\n if (isNoConstructorValid(method, argsCalldata, abiMethod)) {\n return [];\n }\n\n let args: RawArgsArray;\n if (Array.isArray(argsCalldata)) {\n args = argsCalldata;\n } else {\n // order the object\n const orderedObject = orderPropsByAbi(\n argsCalldata,\n abiMethod.inputs,\n this.structs,\n this.enums\n );\n // console.log('ordered =', orderedObject);\n args = Object.values(orderedObject);\n // // validate array elements to abi\n validateFields(abiMethod, args, this.structs, this.enums);\n }\n\n const argsIterator = args[Symbol.iterator]();\n\n const callArray = abiMethod.inputs.reduce(\n (acc, input) =>\n isLen(input.name) && !isCairo1Type(input.type)\n ? acc\n : acc.concat(parseCalldataField(argsIterator, input, this.structs, this.enums)),\n [] as Calldata\n );\n\n // add compiled property to array object\n Object.defineProperty(callArray, '__compiled__', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callArray;\n }\n\n /**\n * Compile contract callData without abi\n * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data\n * @returns Calldata\n */\n static compile(rawArgs: RawArgs): Calldata {\n const createTree = (obj: object) => {\n const getEntries = (o: object, prefix = '.'): any => {\n const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;\n return Object.entries(oe).flatMap(([k, v]) => {\n let value = v;\n if (isLongText(value)) value = splitLongString(value);\n if (k === 'entrypoint') value = getSelectorFromName(value);\n const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;\n if (isBigInt(value)) return [[`${prefix}${kk}`, felt(value)]];\n if (Object(value) === value) {\n const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));\n const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];\n if (keys.includes('isSome') && keys.includes('isNone')) {\n // Option\n const myOption = value as CairoOption<any>;\n const variantNb = myOption.isSome()\n ? CairoOptionVariant.Some\n : CairoOptionVariant.None;\n if (myOption.isSome())\n return getEntries({ 0: variantNb, 1: myOption.unwrap() }, `${prefix}${kk}.`);\n return [[`${prefix}${kk}`, felt(variantNb)]];\n }\n if (keys.includes('isOk') && keys.includes('isErr')) {\n // Result\n const myResult = value as CairoResult<any, any>;\n const variantNb = myResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err;\n return getEntries({ 0: variantNb, 1: myResult.unwrap() }, `${prefix}${kk}.`);\n }\n if (keys.includes('variant') && keys.includes('activeVariant')) {\n // CustomEnum\n const myEnum = value as CairoCustomEnum;\n const activeVariant: string = myEnum.activeVariant();\n const listVariants = Object.keys(myEnum.variant);\n const activeVariantNb = listVariants.findIndex(\n (variant: any) => variant === activeVariant\n );\n if (\n typeof myEnum.unwrap() === 'object' &&\n Object.keys(myEnum.unwrap()).length === 0 // empty object : {}\n ) {\n return [[`${prefix}${kk}`, felt(activeVariantNb)]];\n }\n return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`);\n }\n // normal object\n return getEntries(value, `${prefix}${kk}.`);\n }\n return [[`${prefix}${kk}`, felt(value)]];\n });\n };\n const result = Object.fromEntries(getEntries(obj));\n return result;\n };\n\n let callTreeArray;\n if (!Array.isArray(rawArgs)) {\n // flatten structs, tuples, add array length. Process leafs as Felt\n const callTree = createTree(rawArgs);\n // convert to array\n callTreeArray = Object.values(callTree);\n } else {\n // already compiled data but modified or raw args provided as array, recompile it\n // recreate tree\n const callObj = { ...rawArgs };\n const callTree = createTree(callObj);\n callTreeArray = Object.values(callTree);\n }\n\n // add compiled property to array object\n Object.defineProperty(callTreeArray, '__compiled__', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callTreeArray;\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n * @param method string - method name\n * @param response string[] - response from the method\n * @return Result - parsed response corresponding to the abi\n */\n public parse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n\n const parsed = outputs.flat().reduce((acc, output, idx) => {\n const propName = output.name ?? idx;\n acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);\n if (acc[propName] && acc[`${propName}_len`]) {\n delete acc[`${propName}_len`];\n }\n return acc;\n }, {} as Args);\n\n // Cairo1 avoid object.0 structure\n return Object.keys(parsed).length === 1 && 0 in parsed ? (parsed[0] as Result) : parsed;\n }\n\n /**\n * Format cairo method response data to native js values based on provided format schema\n * @param method string - cairo method name\n * @param response string[] - cairo method response\n * @param format object - formatter object schema\n * @returns Result - parsed and formatted response object\n */\n public format(method: string, response: string[], format: object): Result {\n const parsed = this.parse(method, response);\n return formatter(parsed, format);\n }\n\n /**\n * Helper to extract structs from abi\n * @param abi Abi\n * @returns AbiStructs - structs from abi\n */\n static getAbiStruct(abi: Abi): AbiStructs {\n return abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n\n /**\n * Helper to extract enums from abi\n * @param abi Abi\n * @returns AbiEnums - enums from abi\n */\n static getAbiEnum(abi: Abi): AbiEnums {\n const fullEnumList = abi\n .filter((abiEntry) => abiEntry.type === 'enum')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n delete fullEnumList['core::bool'];\n return fullEnumList;\n }\n\n /**\n * Helper: Compile HexCalldata | RawCalldata | RawArgs\n * @param rawCalldata HexCalldata | RawCalldata | RawArgs\n * @returns Calldata\n */\n static toCalldata(rawCalldata: RawArgs = []): Calldata {\n return CallData.compile(rawCalldata);\n }\n\n /**\n * Helper: Convert raw to HexCalldata\n * @param raw HexCalldata | RawCalldata | RawArgs\n * @returns HexCalldata\n */\n static toHex(raw: RawArgs = []): HexCalldata {\n const calldata = CallData.compile(raw);\n return calldata.map((it) => toHex(it));\n }\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable import/extensions */\nimport { poseidonHashMany } from '@scure/starknet';\n\nimport {\n API_VERSION,\n BN_FEE_TRANSACTION_VERSION_1,\n BN_FEE_TRANSACTION_VERSION_2,\n BN_TRANSACTION_VERSION_1,\n BN_TRANSACTION_VERSION_2,\n StarknetChainId,\n TransactionHashPrefix,\n} from '../constants';\nimport {\n BigNumberish,\n Builtins,\n CompiledContract,\n CompiledSierra,\n CompiledSierraCasm,\n ContractEntryPointFields,\n LegacyCompiledContract,\n RawArgs,\n RawCalldata,\n SierraContractEntryPointFields,\n} from '../types';\nimport { CallData } from './calldata';\nimport { felt } from './calldata/cairo';\nimport { starkCurve } from './ec';\nimport { addHexPrefix, utf8ToArray } from './encode';\nimport { parse, stringify } from './json';\nimport { toBigInt, toHex } from './num';\nimport { getSelectorFromName } from './selector';\nimport { encodeShortString } from './shortString';\n\nexport * as poseidon from '@noble/curves/abstract/poseidon';\nexport * from './selector'; // Preserve legacy export structure\n\nexport const transactionVersion = BN_TRANSACTION_VERSION_1;\nexport const transactionVersion_2 = BN_TRANSACTION_VERSION_2;\nexport const feeTransactionVersion = BN_FEE_TRANSACTION_VERSION_1;\nexport const feeTransactionVersion_2 = BN_FEE_TRANSACTION_VERSION_2;\n\n/**\n * Return transaction versions based on version type, default version type is 'transaction'\n */\nexport function getVersionsByType(versionType?: 'fee' | 'transaction') {\n return versionType === 'fee'\n ? { v1: feeTransactionVersion, v2: feeTransactionVersion_2 }\n : { v1: transactionVersion, v2: transactionVersion_2 };\n}\n\n/**\n * Compute pedersen hash from data\n * @returns format: hex-string - pedersen hash\n */\nexport function computeHashOnElements(data: BigNumberish[]): string {\n return [...data, data.length]\n .reduce((x: BigNumberish, y: BigNumberish) => starkCurve.pedersen(toBigInt(x), toBigInt(y)), 0)\n .toString();\n}\n\n/**\n * Calculate transaction pedersen hash for common properties\n *\n * Following implementation is based on this python [implementation #](https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py)\n * @returns format: hex-string\n */\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: RawCalldata,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\n/**\n * Calculate deploy transaction hash\n * @returns format: hex-string\n */\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: RawCalldata,\n version: BigNumberish,\n chainId: StarknetChainId,\n constructorName: string = 'constructor'\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName(constructorName),\n constructorCalldata,\n 0,\n chainId\n );\n}\n\n/**\n * Calculate declare transaction hash\n * @param classHash hex-string\n * @param compiledClassHash hex-string\n * @returns format: hex-string\n */\nexport function calculateDeclareTransactionHash(\n classHash: string,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish,\n compiledClassHash?: string\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce, ...(compiledClassHash ? [compiledClassHash] : [])]\n );\n}\n\n/**\n * Calculate deploy_account transaction hash\n * @returns format: hex-string\n */\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\n/**\n * Calculate invoke transaction hash\n * @returns format: hex-string\n */\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: RawCalldata,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\n/**\n * Calculate contract address from class hash\n * @returns format: hex-string\n */\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawArgs,\n deployerAddress: BigNumberish\n) {\n const compiledCalldata = CallData.compile(constructorCalldata);\n const constructorCalldataHash = computeHashOnElements(compiledCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = felt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n return computeHashOnElements([\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ]);\n}\n\nfunction nullSkipReplacer(key: string, value: any) {\n if (key === 'attributes' || key === 'accessible_scopes') {\n return Array.isArray(value) && value.length === 0 ? undefined : value;\n }\n\n if (key === 'debug_info') {\n return null;\n }\n\n return value === null ? undefined : value;\n}\n\n/**\n * Format json-string to conform starknet json-string\n * @param json json-string\n * @returns format: json-string\n */\nexport function formatSpaces(json: string) {\n let insideQuotes = false;\n const newString = [];\n // eslint-disable-next-line no-restricted-syntax\n for (const char of json) {\n if (char === '\"' && (newString.length > 0 && newString.slice(-1)[0] === '\\\\') === false) {\n insideQuotes = !insideQuotes;\n }\n if (insideQuotes) {\n newString.push(char);\n } else {\n // eslint-disable-next-line no-nested-ternary\n newString.push(char === ':' ? ': ' : char === ',' ? ', ' : char);\n }\n }\n return newString.join('');\n}\n\n/**\n * Compute hinted class hash for legacy compiled contract (Cairo 0)\n * @returns format: hex-string\n */\nexport default function computeHintedClassHash(compiledContract: LegacyCompiledContract) {\n const { abi, program } = compiledContract;\n const contractClass = { abi, program };\n const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));\n\n return addHexPrefix(starkCurve.keccak(utf8ToArray(serializedJson)).toString(16));\n}\n\n/**\n * Computes the class hash for legacy compiled contract (Cairo 0)\n * @returns format: hex-string\n */\nexport function computeLegacyContractClassHash(contract: LegacyCompiledContract | string) {\n const compiledContract =\n typeof contract === 'string' ? (parse(contract) as LegacyCompiledContract) : contract;\n\n const apiVersion = toHex(API_VERSION);\n\n const externalEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.EXTERNAL.flatMap((e) => [e.selector, e.offset])\n );\n\n const l1HandlerEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.L1_HANDLER.flatMap((e) => [e.selector, e.offset])\n );\n\n const constructorEntryPointHash = computeHashOnElements(\n compiledContract.entry_points_by_type.CONSTRUCTOR.flatMap((e) => [e.selector, e.offset])\n );\n\n const builtinsHash = computeHashOnElements(\n compiledContract.program.builtins.map((s) => encodeShortString(s))\n );\n\n const hintedClassHash = computeHintedClassHash(compiledContract);\n\n const dataHash = computeHashOnElements(compiledContract.program.data);\n\n return computeHashOnElements([\n apiVersion,\n externalEntryPointsHash,\n l1HandlerEntryPointsHash,\n constructorEntryPointHash,\n builtinsHash,\n hintedClassHash,\n dataHash,\n ]);\n}\n\n// Cairo 1 code\n\nfunction hashBuiltins(builtins: Builtins) {\n return poseidonHashMany(\n builtins.flatMap((it: any) => {\n return BigInt(encodeShortString(it));\n })\n );\n}\n\nfunction hashEntryPoint(data: ContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.offset), hashBuiltins(it.builtins)];\n });\n return poseidonHashMany(base);\n}\n\n/**\n * Compute compiled class hash for contract (Cairo 1)\n * @returns format: hex-string\n */\nexport function computeCompiledClassHash(casm: CompiledSierraCasm) {\n const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';\n\n // Hash compiled class version\n const compiledClassVersion = BigInt(encodeShortString(COMPILED_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPoint(casm.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPoint(casm.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);\n\n // Hash bytecode.\n const bytecode = poseidonHashMany(casm.bytecode.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n bytecode,\n ])\n );\n}\n\nfunction hashEntryPointSierra(data: SierraContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.function_idx)];\n });\n return poseidonHashMany(base);\n}\n\nfunction hashAbi(sierra: CompiledSierra) {\n const indentString = formatSpaces(stringify(sierra.abi, null));\n return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(indentString)).toString(16)));\n}\n\n/**\n * Compute sierra contract class hash (Cairo 1)\n * @returns format: hex-string\n */\nexport function computeSierraContractClassHash(sierra: CompiledSierra) {\n const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';\n\n // Hash class version\n const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);\n\n // Hash abi_hash.\n const abiHash = hashAbi(sierra);\n\n // Hash Sierra program.\n const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n abiHash,\n sierraProgram,\n ])\n );\n}\n\n/**\n * Compute ClassHash (sierra or legacy) based on provided contract\n * @returns format: hex-string\n */\nexport function computeContractClassHash(contract: CompiledContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n\n if ('sierra_program' in compiledContract) {\n return computeSierraContractClassHash(compiledContract as CompiledSierra);\n }\n\n return computeLegacyContractClassHash(compiledContract as LegacyCompiledContract);\n}\n","// TODO rename\nexport * as starkCurve from '@scure/starknet';\nexport * as weierstrass from '@noble/curves/abstract/weierstrass';\n","// the ts-ignore suppresses an esm to cjs import error that is resolved with bundling\n// @ts-ignore\nimport * as json from 'lossless-json';\n\n/**\n * Convert string to number or bigint based on size\n */\nconst parseIntAsNumberOrBigInt = (x: string) => {\n if (!json.isInteger(x)) return parseFloat(x);\n const v = parseInt(x, 10);\n return Number.isSafeInteger(v) ? v : BigInt(x);\n};\n\n/**\n * Convert JSON string to JSON object\n *\n * NOTE: the String() wrapping is used so the behavior conforms to JSON.parse()\n * which can accept simple data types but is not represented in the default typing\n * @param x JSON string\n */\nexport const parse = (x: string): any => json.parse(String(x), undefined, parseIntAsNumberOrBigInt);\n\n/**\n * Convert JSON string to JSON object with all numbers as bigint\n * @param x JSON string\n */\nexport const parseAlwaysAsBig = (x: string): any =>\n json.parse(String(x), undefined, json.parseNumberAndBigInt);\n\n/**\n * Convert JSON object to JSON string\n *\n * NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()\n * which can also return undefined but is not represented in the default typing\n * @returns JSON string\n */\nexport const stringify = (\n value: json.JavaScriptValue,\n replacer?: any,\n space?: string | number | undefined,\n numberStringifiers?: json.NumberStringifier[] | undefined\n): string => json.stringify(value, replacer, space, numberStringifiers)!;\n\n/** @deprecated equivalent to 'stringify', alias will be removed */\nexport const stringifyAlwaysAsBig = stringify;\n","import { getStarkKey, utils } from '@scure/starknet';\nimport { gzip, ungzip } from 'pako';\n\nimport { ArraySignatureType, BigNumberish, CompressedProgram, Program, Signature } from '../types';\nimport { addHexPrefix, arrayBufferToString, atobUniversal, btoaUniversal } from './encode';\nimport { parse, stringify } from './json';\nimport {\n bigNumberishArrayToDecimalStringArray,\n bigNumberishArrayToHexadecimalStringArray,\n toBigInt,\n toHex,\n} from './num';\n\n/**\n * Compress compiled Cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram Representing the compiled cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\n/**\n * Decompress compressed compiled Cairo program\n * @param base64 Compressed program\n * @returns Parsed decompressed compiled Cairo program\n */\nexport function decompressProgram(base64: CompressedProgram) {\n if (Array.isArray(base64)) return base64;\n const decompressed = arrayBufferToString(ungzip(atobUniversal(base64)));\n return parse(decompressed);\n}\n\n/**\n * Random Address based on random keyPair\n */\nexport function randomAddress(): string {\n const randomKeyPair = utils.randomPrivateKey();\n return getStarkKey(randomKeyPair);\n}\n\n/**\n * Lowercase and hex prefix string\n *\n * @deprecated Not used internally, naming is confusing based on functionality\n */\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\n/**\n * Format Signature to standard type (hex array)\n * @returns Custom hex array or weierstrass.SignatureType hex array\n */\nexport function formatSignature(sig?: Signature): ArraySignatureType {\n if (!sig) throw Error('formatSignature: provided signature is undefined');\n if (Array.isArray(sig)) {\n return sig.map((it) => toHex(it));\n }\n try {\n const { r, s } = sig;\n return [toHex(r), toHex(s)];\n } catch (e) {\n throw new Error('Signature need to be weierstrass.SignatureType or an array for custom');\n }\n}\n\n/**\n * Format Signature to decimal string array\n */\nexport function signatureToDecimalArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToDecimalStringArray(formatSignature(sig));\n}\n\n/**\n * Format Signature to hex string array\n */\nexport function signatureToHexArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToHexadecimalStringArray(formatSignature(sig));\n}\n\n/**\n * Convert estimated fee to max fee with overhead\n */\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): bigint {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return (toBigInt(estimatedFee) * toBigInt(overHeadPercent)) / 100n;\n}\n","import { ContractClassResponse } from '../types';\nimport {\n CairoContract,\n CompiledSierra,\n LegacyCompiledContract,\n LegacyContractClass,\n SierraContractClass,\n} from '../types/lib/contract/index';\nimport { CompleteDeclareContractPayload, DeclareContractPayload } from '../types/lib/index';\nimport { computeCompiledClassHash, computeContractClassHash } from './hash';\nimport { parse } from './json';\nimport { decompressProgram } from './stark';\n\nexport function isSierra(\n contract: CairoContract | string\n): contract is SierraContractClass | CompiledSierra {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n return 'sierra_program' in compiledContract;\n}\n\nexport function extractContractHashes(\n payload: DeclareContractPayload\n): CompleteDeclareContractPayload {\n const response = { ...payload } as CompleteDeclareContractPayload;\n\n if (isSierra(payload.contract)) {\n if (!payload.compiledClassHash && payload.casm) {\n response.compiledClassHash = computeCompiledClassHash(payload.casm);\n }\n if (!response.compiledClassHash)\n throw new Error(\n 'Extract compiledClassHash failed, provide (CairoAssembly).casm file or compiledClassHash'\n );\n }\n\n response.classHash = payload.classHash ?? computeContractClassHash(payload.contract);\n if (!response.classHash)\n throw new Error('Extract classHash failed, provide (CompiledContract).json file or classHash');\n\n return response;\n}\n\n/**\n * Helper to redeclare response Cairo0 contract\n */\nexport function contractClassResponseToLegacyCompiledContract(ccr: ContractClassResponse) {\n if (isSierra(ccr)) {\n throw Error('ContractClassResponse need to be LegacyContractClass (cairo0 response class)');\n }\n const contract = ccr as LegacyContractClass;\n return { ...contract, program: decompressProgram(contract.program) } as LegacyCompiledContract;\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","import {\n CompiledContract,\n CompiledSierra,\n ContractClass,\n LegacyContractClass,\n SierraContractClass,\n} from '../types';\nimport { isSierra } from './contract';\nimport { formatSpaces } from './hash';\nimport { parse, stringify } from './json';\nimport { compressProgram } from './stark';\n\n/**\n * Helper - Async Sleep for 'delay' time\n */\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\n/**\n * Create Sierra Contract Class from a given Compiled Sierra\n *\n * CompiledSierra -> SierraContractClass\n */\nexport function createSierraContractClass(contract: CompiledSierra): SierraContractClass {\n const result = { ...contract } as any;\n delete result.sierra_program_debug_info;\n result.abi = formatSpaces(stringify(contract.abi));\n result.sierra_program = formatSpaces(stringify(contract.sierra_program));\n result.sierra_program = compressProgram(result.sierra_program);\n return result;\n}\n\n/**\n * Create Contract Class from a given CompiledContract or string\n *\n * (CompiledContract or string) -> ContractClass\n */\nexport function parseContract(contract: CompiledContract | string): ContractClass {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n\n if (!isSierra(contract)) {\n return {\n ...parsedContract,\n ...('program' in parsedContract && { program: compressProgram(parsedContract.program) }),\n } as LegacyContractClass;\n }\n\n return createSierraContractClass(parsedContract as CompiledSierra);\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n BlockStatus,\n CallContractResponse,\n ContractClassResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionResponse,\n SimulateTransactionResponse,\n} from '../../types';\nimport {\n BlockWithTxHashes,\n ContractClass,\n FeeEstimate,\n SimulateTransactionResponse as RPCSimulateTransactionResponse,\n TransactionWithHash,\n} from '../../types/api/rpcspec';\nimport { toBigInt } from '../num';\nimport { estimatedFeeToMaxFee } from '../stark';\nimport { ResponseParser } from '.';\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: BlockWithTxHashes): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: 'block_hash' in res ? res.block_hash : '',\n block_number: 'block_number' in res ? res.block_number : -1,\n new_root: 'new_root' in res ? res.new_root : '',\n parent_hash: res.parent_hash,\n status: 'status' in res ? (res.status as BlockStatus) : BlockStatus.PENDING,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: TransactionWithHash): GetTransactionResponse {\n return {\n calldata: 'calldata' in res ? res.calldata : [],\n contract_address: 'contract_address' in res ? res.contract_address : '',\n sender_address: 'sender_address' in res ? res.sender_address : '',\n max_fee: 'max_fee' in res ? res.max_fee : '',\n nonce: 'nonce' in res ? res.nonce : '',\n signature: 'signature' in res ? res.signature : [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: FeeEstimate[]): EstimateFeeResponse {\n return {\n overall_fee: toBigInt(res[0].overall_fee),\n gas_consumed: toBigInt(res[0].gas_consumed),\n gas_price: toBigInt(res[0].gas_price),\n };\n }\n\n public parseFeeEstimateBulkResponse(res: FeeEstimate[]): EstimateFeeResponseBulk {\n return res.map((val) => ({\n overall_fee: toBigInt(val.overall_fee),\n gas_consumed: toBigInt(val.gas_consumed),\n gas_price: toBigInt(val.gas_price),\n }));\n }\n\n public parseCallContractResponse(res: string[]): CallContractResponse {\n return {\n result: res,\n };\n }\n\n public parseSimulateTransactionResponse(\n res: RPCSimulateTransactionResponse\n ): SimulateTransactionResponse {\n return res.map((it) => {\n return {\n ...it,\n suggestedMaxFee: estimatedFeeToMaxFee(BigInt(it.fee_estimation.overall_fee)),\n };\n });\n }\n\n public parseContractClassResponse(res: ContractClass): ContractClassResponse {\n return {\n ...res,\n abi: typeof res.abi === 'string' ? JSON.parse(res.abi) : res.abi,\n };\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nexport function fixStack(target: Error, fn: Function = target.constructor) {\n const { captureStackTrace } = Error as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n captureStackTrace && captureStackTrace(target, fn);\n}\n\nexport function fixProto(target: Error, prototype: {}) {\n const { setPrototypeOf } = Object as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions, no-proto, no-param-reassign\n setPrototypeOf ? setPrototypeOf(target, prototype) : ((target as any).__proto__ = prototype);\n}\n\n/* eslint-disable max-classes-per-file */\nexport class CustomError extends Error {\n name!: string;\n\n constructor(message?: string) {\n super(message);\n // set error name as constructor name, make it not enumerable to keep native Error behavior\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target#new.target_in_constructors\n // see https://github.com/adriengibrat/ts-custom-error/issues/30\n Object.defineProperty(this, 'name', {\n value: new.target.name,\n enumerable: false,\n configurable: true,\n });\n // fix the extended error prototype chain\n // because typescript __extends implementation can't\n // see https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n fixProto(this, new.target.prototype);\n // try to remove contructor from stack trace\n fixStack(this);\n }\n}\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { StarknetChainId, ZERO } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = BigInt(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = BigInt(basicAlphabet.length);\nconst bigAlphabetSize = BigInt(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = BigInt(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: bigint[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (subdomain !== ZERO) {\n const code = subdomain % basicSizePlusOne;\n subdomain /= basicSizePlusOne;\n if (code === BigInt(basicAlphabet.length)) {\n const nextSubdomain = subdomain / bigAlphabetSizePlusOne;\n if (nextSubdomain === ZERO) {\n const code2 = subdomain % bigAlphabetSizePlusOne;\n subdomain = nextSubdomain;\n if (code2 === ZERO) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[Number(code2) - 1];\n } else {\n const code2 = subdomain % bigAlphabetSize;\n decoded += bigAlphabet[Number(code2)];\n subdomain /= bigAlphabetSize;\n }\n } else decoded += basicAlphabet[Number(code)];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n\n if (!decoded) {\n return decoded;\n }\n\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): bigint {\n let encoded = BigInt(0);\n let multiplier = BigInt(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = BigInt(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add 0\n multiplier *= basicSizePlusOne;\n } else {\n encoded += multiplier * bnIndex;\n multiplier *= basicSizePlusOne;\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded += multiplier * BigInt(newid);\n multiplier *= bigAlphabetSize;\n }\n }\n\n return encoded;\n}\n\nexport const enum StarknetIdContract {\n MAINNET = '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678',\n TESTNET = '0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce',\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n switch (chainId) {\n case StarknetChainId.SN_MAIN:\n return StarknetIdContract.MAINNET;\n\n case StarknetChainId.SN_GOERLI:\n return StarknetIdContract.TESTNET;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { BigNumberish } from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { ProviderInterface } from './interface';\n\nexport async function getStarkName(\n provider: ProviderInterface,\n address: BigNumberish,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: CallData.compile({\n address,\n }),\n });\n const decimalDomain = hexDomain.result.map((element) => BigInt(element)).slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n if (!stringDomain) {\n throw Error('Starkname not found');\n }\n\n return stringDomain;\n } catch (e) {\n if (e instanceof Error && e.message === 'Starkname not found') {\n throw e;\n }\n throw Error('Could not get stark name');\n }\n}\n\nexport async function getAddressFromStarkName(\n provider: ProviderInterface,\n name: string,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: CallData.compile({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n throw Error('Could not get address from stark name');\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport {\n BigNumberish,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n SequencerIdentifier,\n} from '../types';\nimport { isHex, toHex } from '../utils/num';\n\n/** @deprecated prefer importing from 'types' over 'provider/utils' */\nexport type { BlockIdentifier };\n\n/**\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(hashValue);\n}\n\n/**\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\nexport const validBlockTags = Object.values(BlockTag);\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'bigint') {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (\n typeof __identifier === 'string' &&\n validBlockTags.includes(__identifier as BlockTag)\n ) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = BlockTag.pending;\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n // TODO: fix any\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n\n get sequencerIdentifier(): SequencerIdentifier {\n return this.hash !== null\n ? { blockHash: this.hash as string }\n : { blockNumber: (this.number ?? this.tag) as BlockNumber };\n }\n}\n","import {\n HEX_STR_TRANSACTION_VERSION_1,\n HEX_STR_TRANSACTION_VERSION_2,\n NetworkName,\n RPC_GOERLI_NODES,\n RPC_MAINNET_NODES,\n StarknetChainId,\n} from '../constants';\nimport {\n AccountInvocationItem,\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n BlockTag,\n Call,\n ContractVersion,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n GetCodeResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n RPC,\n RpcProviderOptions,\n TransactionType,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getAbiContractVersion } from '../utils/calldata/cairo';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName, getVersionsByType } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport { getHexStringArray, toHex, toStorageKey } from '../utils/num';\nimport { wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { decompressProgram, signatureToHexArray } from '../utils/stark';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block } from './utils';\n\nexport const getDefaultNodeUrl = (networkName?: NetworkName, mute: boolean = false): string => {\n if (!mute)\n // eslint-disable-next-line no-console\n console.warn('Using default public node url, please provide nodeUrl in provider options!');\n const nodes = networkName === NetworkName.SN_MAIN ? RPC_MAINNET_NODES : RPC_GOERLI_NODES;\n const randIdx = Math.floor(Math.random() * nodes.length);\n return nodes[randIdx];\n};\n\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: BlockTag.pending,\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId?: StarknetChainId;\n\n constructor(optionsOrProvider?: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier, chainId } = optionsOrProvider || {};\n if (Object.values(NetworkName).includes(nodeUrl as NetworkName)) {\n // Network name provided for nodeUrl\n this.nodeUrl = getDefaultNodeUrl(nodeUrl as NetworkName, optionsOrProvider?.default);\n } else if (nodeUrl) {\n // NodeUrl provided\n this.nodeUrl = nodeUrl;\n } else {\n // none provided fallback to default testnet\n this.nodeUrl = getDefaultNodeUrl(undefined, optionsOrProvider?.default);\n }\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n this.chainId = chainId; // setting to a non-null value skips making a request in getChainId()\n }\n\n public fetch(method: string, params?: object, id: string | number = 0) {\n const rpcRequestBody: RPC.JRPC.RequestBody = {\n id,\n jsonrpc: '2.0',\n method,\n ...(params && { params }),\n };\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify(rpcRequestBody),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(method: string, params: any, rpcError?: RPC.JRPC.Error, otherError?: any) {\n if (rpcError) {\n const { code, message, data } = rpcError;\n throw new LibraryError(\n `RPC: ${method} with params ${JSON.stringify(params)}\\n ${code}: ${message}: ${data}`\n );\n }\n if (otherError instanceof LibraryError) {\n throw otherError;\n }\n if (otherError) {\n throw Error(otherError.message);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(method, params, error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(method, params, error?.response?.data, error);\n throw error;\n }\n }\n\n public async getChainId() {\n this.chainId ??= (await this.fetchEndpoint('starknet_chainId')) as StarknetChainId;\n return this.chainId;\n }\n\n /**\n * NEW: Returns the version of the Starknet JSON-RPC specification being used\n */\n public async getSpecVersion() {\n return this.fetchEndpoint('starknet_specVersion');\n }\n\n public async getNonceForAddress(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address,\n block_id,\n });\n }\n\n /**\n * @deprecated use getBlockWithTxHashes or getBlockWithTxs (will be removed on sequencer deprecation)\n */\n public async getBlock(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n /**\n * @deprecated renamed to getBlockLatestAccepted(); (will be removed in next minor version)\n */\n public getBlockHashAndNumber = this.getBlockLatestAccepted;\n\n /**\n * Get the most recent accepted block hash and number\n */\n public async getBlockLatestAccepted() {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n /**\n * @deprecated redundant use getBlockLatestAccepted();\n * Get the most recent accepted block number\n * @returns Number of the latest block\n */\n public async getBlockNumber() {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n public async getBlockWithTxHashes(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getBlockStateUpdate(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n /**\n * @deprecated renamed to getBlockStateUpdate();\n */\n public getStateUpdate = this.getBlockStateUpdate;\n\n public async getBlockTransactionsTraces(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_id });\n }\n\n /**\n * Returns the execution traces of all transactions included in the given block\n * @deprecated renamed to getBlockTransactionsTraces()\n */\n public traceBlockTransactions = this.getBlockTransactionsTraces;\n\n public async getBlockTransactionCount(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Get the number of transactions in a block given a block id\n * @deprecated renamed to getBlockTransactionCount()\n * @returns Number of transactions\n */\n public getTransactionCount = this.getBlockTransactionCount;\n\n /**\n * Return transactions from pending block\n * @deprecated Instead use getBlock(BlockTag.pending); (will be removed in next minor version)\n */\n public async getPendingTransactions() {\n const { transactions } = await this.getBlock(BlockTag.pending);\n return Promise.all(transactions.map((it) => this.getTransactionByHash(it)));\n }\n\n /**\n * @deprecated use getTransactionByHash or getTransactionByBlockIdAndIndex (will be removed on sequencer deprecation)\n */\n public async getTransaction(txHash: BigNumberish) {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_getTransactionByHash', {\n transaction_hash,\n });\n }\n\n public async getTransactionByBlockIdAndIndex(blockIdentifier: BlockIdentifier, index: number) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash });\n }\n\n public async getTransactionTrace(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash });\n }\n\n /**\n * @deprecated renamed to getTransactionTrace();\n * For a given executed transaction, return the trace of its execution, including internal calls\n */\n public traceTransaction = this.getTransactionTrace;\n\n /**\n * NEW: Get the status of a transaction\n */\n public async getTransactionStatus(transactionHash: BigNumberish) {\n const transaction_hash = toHex(transactionHash);\n return this.fetchEndpoint('starknet_getTransactionStatus', { transaction_hash });\n }\n\n /**\n * @deprecated renamed to simulateTransaction();\n */\n public getSimulateTransaction = this.simulateTransaction;\n\n /**\n * @param invocations AccountInvocations\n * @param simulateTransactionOptions blockIdentifier and flags to skip validation and fee charge<br/>\n * - blockIdentifier<br/>\n * - skipValidate (default false)<br/>\n * - skipFeeCharge (default true)<br/>\n */\n public async simulateTransaction(\n invocations: AccountInvocations,\n {\n blockIdentifier = this.blockIdentifier,\n skipValidate = false,\n skipFeeCharge = true,\n }: getSimulateTransactionOptions\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const simulationFlags = [];\n if (skipValidate) simulationFlags.push(RPC.ESimulationFlag.SKIP_VALIDATE);\n if (skipFeeCharge) simulationFlags.push(RPC.ESimulationFlag.SKIP_FEE_CHARGE);\n\n return this.fetchEndpoint('starknet_simulateTransactions', {\n block_id,\n transactions: invocations.map((it) => this.buildTransaction(it)),\n simulation_flags: simulationFlags,\n }).then(this.responseParser.parseSimulateTransactionResponse);\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n const transactionHash = toHex(txHash);\n let { retries } = this;\n let onchain = false;\n let isErrorState = false;\n const retryInterval = options?.retryInterval ?? 5000;\n const errorStates: any = options?.errorStates ?? [\n RPC.ETransactionStatus.REJECTED,\n RPC.ETransactionExecutionStatus.REVERTED,\n ];\n const successStates: any = options?.successStates ?? [\n RPC.ETransactionExecutionStatus.SUCCEEDED,\n RPC.ETransactionStatus.ACCEPTED_ON_L2,\n RPC.ETransactionStatus.ACCEPTED_ON_L1,\n ];\n\n let txStatus: RPC.TransactionStatus;\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n txStatus = await this.getTransactionStatus(transactionHash);\n\n const executionStatus = txStatus.execution_status;\n const finalityStatus = txStatus.finality_status;\n\n if (!finalityStatus) {\n // Transaction is potentially NOT_RECEIVED or RPC not Synced yet\n // so we will retry '{ retries }' times\n const error = new Error('waiting for transaction status');\n throw error;\n }\n\n if (successStates.includes(executionStatus) || successStates.includes(finalityStatus)) {\n onchain = true;\n } else if (errorStates.includes(executionStatus) || errorStates.includes(finalityStatus)) {\n const message = `${executionStatus}: ${finalityStatus}`;\n const error = new Error(message) as Error & { response: RPC.TransactionStatus };\n error.response = txStatus;\n isErrorState = true;\n throw error;\n }\n } catch (error) {\n if (error instanceof Error && isErrorState) {\n throw error;\n }\n\n if (retries <= 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n /**\n * For some nodes even though the transaction has executionStatus SUCCEEDED finalityStatus ACCEPTED_ON_L2, getTransactionReceipt returns \"Transaction hash not found\"\n * Retry until rpc is actually ready to work with txHash\n */\n let txReceipt = null;\n while (txReceipt === null) {\n try {\n // eslint-disable-next-line no-await-in-loop\n txReceipt = await this.getTransactionReceipt(transactionHash);\n } catch (error) {\n if (retries <= 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n retries -= 1;\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n }\n return txReceipt as RPC.TransactionReceipt;\n }\n\n public async getStorageAt(\n contractAddress: BigNumberish,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const parsedKey = toStorageKey(key);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address,\n key: parsedKey,\n block_id,\n });\n }\n\n public async getClassHashAt(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address,\n });\n }\n\n public async getClassByHash(classHash: BigNumberish) {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const class_hash = toHex(classHash);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', {\n class_hash,\n block_id,\n }).then(this.responseParser.parseContractClassResponse);\n }\n\n public async getClassAt(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address,\n }).then(this.responseParser.parseContractClassResponse);\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getContractVersion(\n contractAddress: BigNumberish,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: BigNumberish,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: BigNumberish,\n classHash?: BigNumberish,\n { blockIdentifier = this.blockIdentifier, compiler = true }: getContractVersionOptions = {}\n ): Promise<ContractVersion> {\n let contractClass;\n if (contractAddress) {\n contractClass = await this.getClassAt(contractAddress, blockIdentifier);\n } else if (classHash) {\n contractClass = await this.getClass(classHash, blockIdentifier);\n } else {\n throw Error('getContractVersion require contractAddress or classHash');\n }\n\n if (isSierra(contractClass)) {\n if (compiler) {\n const abiTest = getAbiContractVersion(contractClass.abi);\n return { cairo: '1', compiler: abiTest.compiler };\n }\n return { cairo: '1', compiler: undefined };\n }\n return { cairo: '0', compiler: '0' };\n }\n\n /**\n * @deprecated use get*type*EstimateFee (will be refactored based on type after sequencer deprecation)\n */\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.INVOKE,\n ...invocation,\n ...invocationDetails,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n invocation: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DECLARE,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n invocation: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n { blockIdentifier = this.blockIdentifier, skipValidate = false }: getEstimateFeeBulkOptions\n ) {\n if (skipValidate) {\n // eslint-disable-next-line no-console\n console.warn('getEstimateFeeBulk RPC does not support skipValidate');\n }\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: invocations.map((it) => this.buildTransaction(it, 'fee')),\n block_id,\n }).then(this.responseParser.parseFeeEstimateBulkResponse);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ) {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: CallData.toHex(functionInvocation.calldata),\n type: RPC.ETransactionType.INVOKE,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n signature: signatureToHexArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async declareContract(\n { contract, signature, senderAddress, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ) {\n if (!isSierra(contract)) {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n type: RPC.ETransactionType.DECLARE,\n contract_class: {\n program: contract.program,\n entry_points_by_type: contract.entry_points_by_type,\n abi: contract.abi,\n },\n version: HEX_STR_TRANSACTION_VERSION_1,\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n type: RPC.ETransactionType.DECLARE,\n contract_class: {\n sierra_program: decompressProgram(contract.sierra_program),\n contract_class_version: contract.contract_class_version,\n entry_points_by_type: contract.entry_points_by_type,\n abi: contract.abi,\n },\n compiled_class_hash: compiledClassHash || '',\n version: HEX_STR_TRANSACTION_VERSION_2,\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ) {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n deploy_account_transaction: {\n constructor_calldata: CallData.toHex(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n type: RPC.ETransactionType.DEPLOY_ACCOUNT,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n signature: signatureToHexArray(signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async callContract(call: Call, blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: CallData.toHex(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n /**\n * NEW: Estimate the fee for a message from L1\n * @param message Message From L1\n */\n public async estimateMessageFee(\n message: RPC.L1Message,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const { from_address, to_address, entry_point_selector, payload } = message;\n const formattedMessage = {\n from_address: toHex(from_address),\n to_address: toHex(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateMessageFee', {\n message: formattedMessage,\n block_id,\n });\n }\n\n /**\n * Returns an object about the sync status, or false if the node is not synching\n * @returns Object with the stats data\n */\n public async getSyncingStats() {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Returns all events matching the given filter\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter) {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n\n /**\n * StarknetId Endpoint (get name from address)\n */\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string) {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n /**\n * StarknetId Endpoint (get address from name)\n */\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string) {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n public buildTransaction(\n invocation: AccountInvocationItem,\n versionType?: 'fee' | 'transaction'\n ): RPC.BaseTransaction {\n const defaultVersions = getVersionsByType(versionType);\n const details = {\n signature: signatureToHexArray(invocation.signature),\n nonce: toHex(invocation.nonce),\n max_fee: toHex(invocation.maxFee || 0),\n };\n\n if (invocation.type === TransactionType.INVOKE) {\n return {\n type: RPC.ETransactionType.INVOKE, // Diff between sequencer and rpc invoke type\n sender_address: invocation.contractAddress,\n calldata: CallData.toHex(invocation.calldata),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DECLARE) {\n if (!isSierra(invocation.contract)) {\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n return {\n // compiled_class_hash\n type: invocation.type,\n contract_class: {\n ...invocation.contract,\n sierra_program: decompressProgram(invocation.contract.sierra_program),\n },\n compiled_class_hash: invocation.compiledClassHash || '',\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v2),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DEPLOY_ACCOUNT) {\n return {\n type: invocation.type,\n constructor_calldata: CallData.toHex(invocation.constructorCalldata || []),\n class_hash: toHex(invocation.classHash),\n contract_address_salt: toHex(invocation.addressSalt || 0),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n throw Error('RPC buildTransaction received unknown TransactionType');\n }\n}\n","import urljoin from 'url-join';\n\nimport { BaseUrl, NetworkName, StarknetChainId } from '../constants';\nimport {\n AccountInvocationItem,\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n BlockTag,\n CairoAssembly,\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n SequencerHttpMethod,\n SequencerProviderOptions,\n SimulateTransactionResponse,\n StateUpdateResponse,\n TransactionExecutionStatus,\n TransactionFinalityStatus,\n TransactionType,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getAbiContractVersion } from '../utils/calldata/cairo';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport {\n getSelector,\n getSelectorFromName,\n getVersionsByType,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport { getDecimalString, getHexString, getHexStringArray, toBigInt, toHex } from '../utils/num';\nimport { wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress, signatureToDecimalArray } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block } from './utils';\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nconst defaultOptions = {\n network: NetworkName.SN_GOERLI,\n blockIdentifier: BlockTag.pending,\n};\n/**\n * @deprecated Feeder gateway will be removed during November 2023, as Network is switching to P2P Nodes.\n * Use RPC Provider or Default provider (Default provider will be RPC Provider with public nodes and legacy interface/response)\n */\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public headers?: Record<string, string>;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId: StarknetChainId;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n }\n this.chainId =\n optionsOrProvider?.chainId ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case NetworkName.SN_MAIN:\n case StarknetChainId.SN_MAIN:\n return BaseUrl.SN_MAIN;\n case NetworkName.SN_GOERLI:\n case StarknetChainId.SN_GOERLI:\n return BaseUrl.SN_GOERLI;\n default:\n throw new Error('Could not detect base url from NetworkName');\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.SN_MAIN;\n }\n return StarknetChainId.SN_GOERLI;\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n return StarknetChainId.SN_GOERLI;\n }\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n 'estimate_fee_bulk',\n 'simulate_transaction',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: SequencerHttpMethod): Record<string, string> | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n return this.fetch(url, {\n method,\n body: request,\n });\n }\n\n public async fetch(\n endpoint: string,\n options?: {\n method?: SequencerHttpMethod;\n body?: any;\n parseAlwaysAsBigInt?: boolean;\n }\n ): Promise<any> {\n const url = buildUrl(this.baseUrl, '', endpoint);\n const method = options?.method ?? 'GET';\n const headers = this.getHeaders(method);\n const body = stringify(options?.body);\n try {\n const response = await fetch(url, {\n method,\n body,\n headers,\n });\n const textResponse = await response.text();\n\n if (!response.ok) {\n // This will allow the user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n throw new HttpError(response.statusText, response.status);\n }\n throw new GatewayError(responseBody.message, responseBody.code);\n }\n\n const parseChoice = options?.parseAlwaysAsBigInt ? parseAlwaysAsBig : parse;\n return parseChoice(textResponse);\n } catch (error) {\n if (error instanceof Error && !(error instanceof LibraryError))\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${error.message}`);\n\n throw error;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n // TODO - determine best choice once both are fully supported in devnet\n // signature: [],\n // sender_address: contractAddress,\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata: CallData.compile(calldata),\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Nonce> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Storage> {\n const parsedKey = toBigInt(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClassResponse> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n this.responseParser.parseContractClassResponse\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClassResponse> {\n return this.fetchEndpoint('get_class_by_hash', { classHash, blockIdentifier }).then(\n this.responseParser.parseContractClassResponse\n );\n }\n\n public async getCompiledClassByClassHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CairoAssembly> {\n return this.fetchEndpoint('get_compiled_class_by_class_hash', { classHash, blockIdentifier });\n }\n\n public async getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: string,\n classHash?: string,\n { blockIdentifier = this.blockIdentifier, compiler = true }: getContractVersionOptions = {}\n ): Promise<ContractVersion> {\n let contractClass;\n if (contractAddress) {\n contractClass = await this.getClassAt(contractAddress, blockIdentifier);\n } else if (classHash) {\n contractClass = await this.getClassByHash(classHash, blockIdentifier);\n } else {\n throw Error('getContractVersion require contractAddress or classHash');\n }\n\n if (isSierra(contractClass)) {\n if (compiler) {\n const abiTest = getAbiContractVersion(contractClass.abi);\n return { cairo: '1', compiler: abiTest.compiler };\n }\n return { cairo: '1', compiler: undefined };\n }\n return { cairo: '0', compiler: '0' };\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.INVOKE,\n sender_address: functionInvocation.contractAddress,\n calldata: CallData.compile(functionInvocation.calldata ?? []),\n signature: signatureToDecimalArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DEPLOY_ACCOUNT,\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: CallData.compile(constructorCalldata ?? []),\n class_hash: toHex(classHash),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contract, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n if (!isSierra(contract)) {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n contract_class: contract,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n sender_address: senderAddress,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(transactionVersion),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n // Cairo 1\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contract,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(transactionVersion_2),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier, skipValidate);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.INVOKE,\n ...invocation,\n ...invocationDetails,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getDeclareEstimateFee(\n invocation: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DECLARE,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getDeployAccountEstimateFee(\n invocation: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n { blockIdentifier = this.blockIdentifier, skipValidate = false }: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk> {\n const transactions = invocations.map((it) => this.buildTransaction(it, 'fee'));\n return this.fetchEndpoint(\n 'estimate_fee_bulk',\n { blockIdentifier, skipValidate },\n transactions\n ).then(this.responseParser.parseFeeEstimateBulkResponse);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n let res;\n let completed = false;\n let retries = 0;\n const retryInterval = options?.retryInterval ?? 5000;\n const errorStates = options?.errorStates ?? [\n TransactionExecutionStatus.REJECTED,\n TransactionFinalityStatus.NOT_RECEIVED,\n TransactionExecutionStatus.REVERTED,\n ];\n const successStates = options?.successStates ?? [\n TransactionExecutionStatus.SUCCEEDED,\n TransactionFinalityStatus.ACCEPTED_ON_L1,\n TransactionFinalityStatus.ACCEPTED_ON_L2,\n ];\n\n while (!completed) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n res = await this.getTransactionStatus(txHash);\n\n if (TransactionFinalityStatus.NOT_RECEIVED === res.finality_status && retries < 3) {\n retries += 1;\n } else if (\n successStates.includes(res.finality_status) ||\n successStates.includes(res.execution_status)\n ) {\n completed = true;\n } else if (\n errorStates.includes(res.finality_status) ||\n errorStates.includes(res.execution_status)\n ) {\n let message;\n if (res.tx_failure_reason) {\n message = `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`;\n } else if (res.tx_revert_reason) {\n message = `${res.tx_status}: ${res.tx_revert_reason}`;\n } else {\n message = res.tx_status;\n }\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\n }\n\n /**\n * Gets the status of a transaction.\n * @param txHash BigNumberish\n * @returns GetTransactionStatusResponse - the transaction status object\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n * @returns GetContractAddressesResponse - starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n * @param txHash BigNumberish\n * @returns TransactionTraceResponse - the transaction trace\n */\n public async getTransactionTrace(\n txHash: BigNumberish\n ): Promise<Sequencer.TransactionTraceResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n\n /**\n * Simulate transaction using Sequencer provider\n * WARNING!: Sequencer will process only first element from invocations array\n *\n * @param invocations Array of invocations, but only first invocation will be processed\n * @param blockIdentifier block identifier, default 'latest'\n * @param skipValidate Skip Account __validate__ method\n * @returns\n */\n public async getSimulateTransaction(\n invocations: AccountInvocations,\n {\n blockIdentifier = this.blockIdentifier,\n skipValidate = false,\n skipExecute = false,\n }: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse> {\n if (invocations.length > 1) {\n // eslint-disable-next-line no-console\n console.warn('Sequencer simulate process only first element from invocations list');\n }\n if (skipExecute) {\n // eslint-disable-next-line no-console\n console.warn(\"Sequencer can't skip account __execute__\");\n }\n const transaction = this.buildTransaction(invocations[0]);\n return this.fetchEndpoint(\n 'simulate_transaction',\n {\n blockIdentifier,\n skipValidate: skipValidate ?? false,\n },\n transaction\n ).then(this.responseParser.parseSimulateTransactionResponse);\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<StateUpdateResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_state_update', { ...args }).then(\n this.responseParser.parseGetStateUpdateResponse\n );\n }\n\n // consider adding an optional trace retrieval parameter to the getBlock method\n public async getBlockTraces(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.BlockTransactionTracesResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_block_traces', { ...args });\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n /**\n * Build Single AccountTransaction from Single AccountInvocation\n * @param invocation AccountInvocationItem\n * @param versionType 'fee' | 'transaction' - used to determine default versions\n * @returns AccountTransactionItem\n */\n public buildTransaction(\n invocation: AccountInvocationItem,\n versionType?: 'fee' | 'transaction'\n ): Sequencer.AccountTransactionItem {\n const defaultVersions = getVersionsByType(versionType);\n const details = {\n signature: signatureToDecimalArray(invocation.signature),\n nonce: toHex(invocation.nonce),\n };\n\n if (invocation.type === TransactionType.INVOKE) {\n return {\n type: invocation.type,\n sender_address: invocation.contractAddress,\n calldata: CallData.compile(invocation.calldata ?? []),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DECLARE) {\n if (!isSierra(invocation.contract)) {\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v1), // fee from getDeclareEstimateFee use t.v. instead of feet.v.\n ...details,\n };\n }\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n compiled_class_hash: invocation.compiledClassHash,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v2), // fee on getDeclareEstimateFee use t.v. instead of feet.v.\n ...details,\n };\n }\n if (invocation.type === TransactionType.DEPLOY_ACCOUNT) {\n return {\n type: invocation.type,\n constructor_calldata: CallData.compile(invocation.constructorCalldata || []),\n class_hash: toHex(invocation.classHash),\n contract_address_salt: toHex(invocation.addressSalt || 0),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n throw Error('Sequencer buildTransaction received unknown TransactionType');\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n SimulateTransactionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n\n abstract parseSimulateTransactionResponse(res: any): SimulateTransactionResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\n\nimport { LibraryError } from '../../provider/errors';\nimport {\n CallContractResponse,\n CompiledContract,\n ContractClassResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n HexCalldata,\n InvokeFunctionResponse,\n Sequencer,\n SimulateTransactionResponse,\n StateUpdateResponse,\n TransactionFinalityStatus,\n TransactionStatus,\n} from '../../types';\nimport { isSierra } from '../contract';\nimport { toBigInt } from '../num';\nimport { parseContract } from '../provider';\nimport { estimatedFeeToMaxFee } from '../stark';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n if (\n res.status === TransactionStatus.NOT_RECEIVED &&\n res.finality_status === TransactionFinalityStatus.NOT_RECEIVED\n ) {\n throw new LibraryError();\n }\n\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as HexCalldata) : [],\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n ...res,\n messages_sent: res.l2_to_l1_messages as any,\n ...('revert_error' in res && { revert_reason: res.revert_error }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(res.gas_usage),\n gas_price: toBigInt(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(item.gas_usage),\n gas_price: toBigInt(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(item.amount),\n };\n });\n }\n\n public parseSimulateTransactionResponse(\n res: Sequencer.SimulateTransactionResponse\n ): SimulateTransactionResponse {\n const suggestedMaxFee =\n 'overall_fee' in res.fee_estimation\n ? res.fee_estimation.overall_fee\n : res.fee_estimation.amount;\n return [\n {\n transaction_trace: res.trace,\n fee_estimation: res.fee_estimation,\n suggestedMaxFee: estimatedFeeToMaxFee(BigInt(suggestedMaxFee)),\n },\n ];\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n\n public parseGetStateUpdateResponse(res: Sequencer.StateUpdateResponse): StateUpdateResponse {\n const nonces = Object.entries(res.state_diff.nonces).map(([contract_address, nonce]) => ({\n contract_address,\n nonce,\n }));\n const storage_diffs = Object.entries(res.state_diff.storage_diffs).map(\n ([address, storage_entries]) => ({ address, storage_entries })\n );\n\n return {\n ...res,\n state_diff: {\n ...res.state_diff,\n storage_diffs,\n nonces,\n },\n };\n }\n\n public parseContractClassResponse(res: CompiledContract): ContractClassResponse {\n const response = isSierra(res) ? res : parseContract(res);\n return {\n ...response,\n abi: typeof response.abi === 'string' ? JSON.parse(response.abi) : response.abi,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","import { StarknetChainId } from '../constants';\nimport {\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n Call,\n CallContractResponse,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n ProviderOptions,\n RpcProviderOptions,\n SequencerProviderOptions,\n SimulateTransactionResponse,\n StateUpdateResponse,\n Storage,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider } from './rpc';\nimport { SequencerProvider } from './sequencer';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\n\n/**\n * @deprecated Use RpcProvider instead. Common Provider will be removed with Sequencer provider.\n */\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new RpcProvider();\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClassResponse> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClassResponse> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n options: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, options);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier, skipValidate);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(\n transaction,\n details,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, options);\n }\n\n public async getSimulateTransaction(\n invocations: AccountInvocations,\n options?: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse> {\n return this.provider.getSimulateTransaction(invocations, options);\n }\n\n public async getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse> {\n return this.provider.getStateUpdate(blockIdentifier);\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n public async getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: string,\n classHash?: string,\n options?: getContractVersionOptions\n ) {\n return this.provider.getContractVersion(contractAddress as any, classHash as any, options);\n }\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n TypedData,\n} from '../types';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { BigNumberish, CairoVersion, Call, CallStruct, Calldata, ParsedStruct } from '../types';\nimport { CallData } from './calldata';\nimport { getSelectorFromName } from './hash';\nimport { toBigInt } from './num';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entry points, and one with the concatenated calldata\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = CallData.compile(call.calldata || []);\n callArray.push({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: CallData.compile({ calldata }),\n };\n};\n\n/**\n * Transforms a list of calls into the Cairo 0 `__execute__` calldata.\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]) => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n const compiledCalls = CallData.compile({ callArray });\n return [...compiledCalls, ...calldata] as Calldata;\n};\n\n/**\n * Transforms a list of calls into the Cairo 0 `__execute__` calldata including nonce.\n *\n * @deprecated\n */\nexport const fromCallsToExecuteCalldataWithNonce = (calls: Call[], nonce: BigNumberish) => {\n return [...fromCallsToExecuteCalldata(calls), toBigInt(nonce).toString()] as Calldata;\n};\n\n/**\n * Format Data inside Calls\n *\n * @deprecated Not required for getting execute Calldata\n */\nexport const transformCallsToMulticallArrays_cairo1 = (calls: Call[]) => {\n const callArray = calls.map<CallStruct>((call) => ({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n calldata: CallData.compile(call.calldata || []),\n }));\n return callArray;\n};\n\n/**\n * Transforms a list of calls into the Cairo 1 `__execute__` calldata.\n */\nexport const fromCallsToExecuteCalldata_cairo1 = (calls: Call[]) => {\n // ensure property order\n const orderCalls = calls.map((call) => ({\n contractAddress: call.contractAddress,\n entrypoint: call.entrypoint,\n calldata: call.calldata,\n }));\n\n return CallData.compile({ orderCalls });\n};\n\n/**\n * Create `__execute__` Calldata from Calls based on Cairo versions\n */\nexport const getExecuteCalldata = (calls: Call[], cairoVersion: CairoVersion = '0') => {\n if (cairoVersion === '1') {\n return fromCallsToExecuteCalldata_cairo1(calls);\n }\n return fromCallsToExecuteCalldata(calls);\n};\n","import { BigNumberish, StarkNetMerkleType, StarkNetType, TypedData } from '../types';\nimport { computeHashOnElements, getSelectorFromName } from './hash';\nimport { MerkleTree } from './merkle';\nimport { isHex, toHex } from './num';\nimport { encodeShortString } from './shortString';\n\n/** @deprecated prefer importing from 'types' over 'typedData' */\nexport * from '../types/typedData';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(value);\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(encodeShortString(value));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nconst validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependent types are alphabetically sorted.\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values.\n * All dependent types are automatically encoded.\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values.\n * All dependent types are automatically encoded.\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { starkCurve } from './ec';\nimport { toBigInt } from './num';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n /**\n * Create Merkle tree\n * @param leaves hex-string array\n * @returns format: hex-string; Merkle tree root\n */\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves: string[] = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n /**\n * Create pedersen hash from a and b\n * @returns format: hex-string\n */\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBigInt(a), toBigInt(b)].sort((x, y) => (x >= y ? 1 : -1));\n return starkCurve.pedersen(aSorted, bSorted);\n }\n\n /**\n * Return path to leaf\n * @param leaf hex-string\n * @param branch hex-string array\n * @param hashPath hex-string array\n * @returns format: hex-string array\n */\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\n/**\n * Test Merkle tree path\n * @param root hex-string\n * @param leaf hex-string\n * @param path hex-string array\n */\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n TypedData,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { starkCurve } from '../utils/ec';\nimport { buf2hex } from '../utils/encode';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { toHex } from '../utils/num';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected pk: Uint8Array | string;\n\n constructor(pk: Uint8Array | string = starkCurve.utils.randomPrivateKey()) {\n this.pk = pk instanceof Uint8Array ? buf2hex(pk) : toHex(pk);\n }\n\n public async getPubKey(): Promise<string> {\n return starkCurve.getStarkKey(this.pk);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = getExecuteCalldata(transactions, transactionsDetail.cairoVersion);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails): Promise<Signature> {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n CallData.compile(constructorCalldata),\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n {\n classHash,\n senderAddress,\n chainId,\n maxFee,\n version,\n nonce,\n compiledClassHash,\n }: DeclareSignerDetails\n ): Promise<Signature> {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce,\n compiledClassHash\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './num';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatible response with addition of the UDC Event data\n *\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emitted event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\n };\n}\n","import { UDC, ZERO } from '../constants';\nimport { ProviderInterface } from '../provider';\nimport { Provider } from '../provider/default';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n AccountInvocationItem,\n AccountInvocations,\n AccountInvocationsFactoryDetails,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n CairoVersion,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n DeployTransactionReceiptResponse,\n Details,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeBulk,\n EstimateFeeDetails,\n Invocation,\n Invocations,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n ProviderOptions,\n Signature,\n SimulateTransactionDetails,\n SimulateTransactionResponse,\n TransactionType,\n TypedData,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { extractContractHashes, isSierra } from '../utils/contract';\nimport { starkCurve } from '../utils/ec';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n feeTransactionVersion_2,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { toBigInt, toCairoBool } from '../utils/num';\nimport { parseContract } from '../utils/provider';\nimport { estimatedFeeToMaxFee, formatSignature, randomAddress } from '../utils/stark';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n public cairoVersion: CairoVersion;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n pkOrSigner: Uint8Array | string | SignerInterface,\n cairoVersion?: CairoVersion\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n typeof pkOrSigner === 'string' || pkOrSigner instanceof Uint8Array\n ? new Signer(pkOrSigner)\n : pkOrSigner;\n\n if (cairoVersion) {\n this.cairoVersion = cairoVersion.toString() as CairoVersion;\n }\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce> {\n return super.getNonceForAddress(this.address, blockIdentifier);\n }\n\n private async getNonceSafe(nonce?: BigNumberish) {\n // Patch DEPLOY_ACCOUNT: RPC getNonce for non-existing address will result in error, on Sequencer it is '0x0'\n try {\n return toBigInt(nonce ?? (await this.getNonce()));\n } catch (error) {\n return 0n;\n }\n }\n\n /**\n * Retrieves the Cairo version from the network and sets `cairoVersion` if not already set in the constructor\n * @param classHash if provided detects Cairo version from classHash, otherwise from the account address\n */\n public async getCairoVersion(classHash?: string) {\n if (!this.cairoVersion) {\n const { cairo } = classHash\n ? await super.getContractVersion(undefined, classHash)\n : await super.getContractVersion(this.address);\n this.cairoVersion = cairo;\n }\n return this.cairoVersion;\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion: await this.getCairoVersion(),\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { contract, classHash: providedClassHash, casm, compiledClassHash }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = !isSierra(contract) ? feeTransactionVersion : feeTransactionVersion_2;\n const chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(\n { classHash: providedClassHash, contract, casm, compiledClassHash },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: undefined, // unused parameter\n }\n );\n\n const response = await super.getDeclareEstimateFee(\n declareContractTransaction,\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const version = toBigInt(feeTransactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address, // unused parameter\n maxFee: ZERO,\n cairoVersion: undefined, // unused parameter\n }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n invocations: Invocations,\n { nonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const accountInvocations = await this.accountInvocationsFactory(invocations, {\n versions: [feeTransactionVersion, feeTransactionVersion_2],\n nonce,\n blockIdentifier,\n });\n\n const response = await super.getEstimateFeeBulk(accountInvocations, {\n blockIdentifier,\n skipValidate,\n });\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = getExecuteCalldata(call, await this.getCairoVersion());\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\n };\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: TransactionType.INVOKE, payload: calls },\n transactionsDetail\n ));\n const version = toBigInt(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n cairoVersion: await this.getCairoVersion(),\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = getExecuteCalldata(transactions, await this.getCairoVersion());\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n /**\n * First check if contract is already declared, if not declare it\n * If contract already declared returned transaction_hash is ''.\n * Method will pass even if contract is already declared\n * @param transactionsDetail (optional)\n */\n public async declareIfNot(\n payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n try {\n await this.getClassByHash(declareContractPayload.classHash);\n } catch (error) {\n return this.declare(payload, transactionsDetail);\n }\n return {\n transaction_hash: '',\n class_hash: declareContractPayload.classHash,\n };\n }\n\n public async declare(\n payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n const details = {} as Details;\n\n details.nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n details.maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DECLARE,\n payload: declareContractPayload,\n },\n transactionsDetail\n ));\n details.version = !isSierra(payload.contract) ? transactionVersion : transactionVersion_2;\n details.chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(declareContractPayload, {\n ...details,\n walletAddress: this.address,\n cairoVersion: undefined, // unused parameter\n });\n\n return this.declareContract(declareContractTransaction, details);\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = CallData.compile(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? starkCurve.pedersen(this.address, deploySalt) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash);\n return parseUDCEvent(txReceipt as DeployTransactionReceiptResponse);\n }\n\n public async declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { constructorCalldata, salt, unique } = payload;\n let declare = await this.declareIfNot(payload, details);\n if (declare.transaction_hash !== '') {\n const tx = await this.waitForTransaction(declare.transaction_hash);\n declare = { ...declare, ...tx };\n }\n const deploy = await this.deployContract(\n { classHash: declare.class_hash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare }, deploy };\n }\n\n public deploySelf = this.deployAccount;\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const version = toBigInt(transactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const compiledCalldata = CallData.compile(constructorCalldata);\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, compiledCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n payload: {\n classHash,\n constructorCalldata: compiledCalldata,\n addressSalt,\n contractAddress,\n },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata: compiledCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: CallData.compile({\n hash: toBigInt(hash).toString(),\n signature: formatSignature(signature),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case TransactionType.INVOKE:\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case TransactionType.DECLARE:\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case TransactionType.DEPLOY_ACCOUNT:\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case TransactionType.DEPLOY:\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee;\n }\n\n /**\n * will be renamed to buildDeclareContractTransaction\n */\n public async buildDeclarePayload(\n payload: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const { classHash, contract, compiledClassHash } = extractContractHashes(payload);\n const compressedCompiledContract = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n compiledClassHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contract: compressedCompiledContract,\n compiledClassHash,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\n const compiledCalldata = CallData.compile(constructorCalldata);\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, compiledCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee,\n version,\n nonce,\n addressSalt,\n constructorCalldata: compiledCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata: compiledCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = CallData.compile(constructorCalldata);\n\n return {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n };\n });\n return calls;\n }\n\n public async simulateTransaction(\n invocations: Invocations,\n { nonce, blockIdentifier, skipValidate, skipExecute }: SimulateTransactionDetails = {}\n ): Promise<SimulateTransactionResponse> {\n const accountInvocations = await this.accountInvocationsFactory(invocations, {\n versions: [transactionVersion, transactionVersion_2],\n nonce,\n blockIdentifier,\n });\n\n return super.getSimulateTransaction(accountInvocations, {\n blockIdentifier,\n skipValidate,\n skipExecute,\n });\n }\n\n public async accountInvocationsFactory(\n invocations: Invocations,\n { versions, nonce, blockIdentifier }: AccountInvocationsFactoryDetails\n ) {\n const version = versions[0];\n const safeNonce = await this.getNonceSafe(nonce);\n const chainId = await this.getChainId();\n\n // BULK ACTION FROM NEW ACCOUNT START WITH DEPLOY_ACCOUNT\n const tx0Payload: any = 'payload' in invocations[0] ? invocations[0].payload : invocations[0];\n const cairoVersion =\n invocations[0].type === TransactionType.DEPLOY_ACCOUNT\n ? await this.getCairoVersion(tx0Payload.classHash)\n : await this.getCairoVersion();\n\n return Promise.all(\n ([] as Invocations).concat(invocations).map(async (transaction, index: number) => {\n const txPayload: any = 'payload' in transaction ? transaction.payload : transaction;\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBigInt(Number(safeNonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion,\n };\n const common = {\n type: transaction.type,\n version,\n nonce: toBigInt(Number(safeNonce) + index),\n blockIdentifier,\n };\n\n if (transaction.type === TransactionType.INVOKE) {\n const payload = await this.buildInvocation(\n ([] as Call[]).concat(txPayload),\n signerDetails\n );\n return {\n ...common,\n ...payload,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DECLARE) {\n signerDetails.version = !isSierra(txPayload.contract)\n ? toBigInt(versions[0])\n : toBigInt(versions[1]);\n const payload = await this.buildDeclarePayload(txPayload, signerDetails);\n return {\n ...common,\n ...payload,\n version: signerDetails.version,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DEPLOY_ACCOUNT) {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n return {\n ...common,\n ...payload,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DEPLOY) {\n const calls = this.buildUDCContractPayload(txPayload);\n const payload = await this.buildInvocation(calls, signerDetails);\n return {\n ...common,\n ...payload,\n type: TransactionType.INVOKE,\n } as AccountInvocationItem;\n }\n throw Error(`accountInvocationsFactory: unsupported transaction type: ${transaction}`);\n })\n ) as Promise<AccountInvocations>;\n }\n\n public override async getStarkName(\n address: BigNumberish = this.address, // default to the wallet address\n StarknetIdContract?: string\n ): Promise<string> {\n return super.getStarkName(address, StarknetIdContract);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n Call,\n CallContractResponse,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n SimulateTransactionResponse,\n StateUpdateResponse,\n Storage,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\n\nexport abstract class ProviderInterface {\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the Starknet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClassResponse>;\n\n /**\n * Returns the contract class hash in the given block for the contract deployed at the given address\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClassResponse>;\n\n /**\n * Returns the nonce associated with the given address in the given block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce>;\n\n /**\n * Get the value of the storage (contract's variable) at the given address and key\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction object \\{ transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? \\}\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations AccountInvocations - Complete invocations array with account details\n * @param options getEstimateFeeBulkOptions\n * - (optional) blockIdentifier - BlockIdentifier\n * - (optional) skipValidate - boolean (default false)\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: AccountInvocations,\n options?: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param options waitForTransactionOptions\n * - (optional) retryInterval: number | undefined;\n * - (optional) successStates: TransactionStatus[] | undefined;\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\n *\n * @param invocations AccountInvocations - Complete invocations array with account details\n * @param options - getSimulateTransactionOptions\n * - (optional) blockIdentifier - block identifier\n * - (optional) skipValidate - skip cairo __validate__ method\n * - (optional) skipExecute - skip cairo __execute__ method\n * @returns an array of transaction trace and estimated fee\n */\n public abstract getSimulateTransaction(\n invocations: AccountInvocations,\n options?: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse>;\n\n /**\n * Gets the state changes in a specific block (result of executing the requested block)\n *\n * @param blockIdentifier - block identifier\n * @returns StateUpdateResponse\n */\n public abstract getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse>;\n\n /**\n * Gets the contract version from the provided address\n * @param contractAddress string\n * @param classHash undefined\n * @param options - getContractVersionOptions\n * - (optional) compiler - (default true) extract compiler version using type tactic from abi\n * - (optional) blockIdentifier - block identifier\n */\n public abstract getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n /**\n * Gets the contract version from the provided address\n * @param contractAddress undefined\n * @param classHash\n * @param options - getContractVersionOptions\n * - (optional) compiler - (default true) extract compiler version using type tactic from abi\n * - (optional) blockIdentifier - block identifier\n */\n public abstract getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider({ rpc: { default: true } });\n","import { ProviderInterface } from '../provider';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n CairoVersion,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n Invocations,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n SimulateTransactionDetails,\n SimulateTransactionResponse,\n TypedData,\n UniversalDeployerContractPayload,\n} from '../types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n public abstract cairoVersion: CairoVersion;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload -\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | (multi)'DEPLOY' | (multi)'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n invocations: Invocations,\n details?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - (optional) classHash: computed class hash of compiled contract. Pre-compute it for faster execution.\n - (required for Cairo1 without compiledClassHash) casm: CompiledContract | string;\n - (optional for Cairo1 with casm) compiledClassHash: compiled class hash from casm. Pre-compute it for faster execution.\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n * Method will pass even if contract is already declared (internal using DeclareIfNot)\n *\n * @param payload\n * - contract: compiled contract code\n * - [casm=cairo1]: CairoAssembly | undefined;\n * - [compiledClassHash]: string | undefined;\n * - [classHash]: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - constant nonce = 0\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<bigint>;\n\n /**\n * Simulates an array of transaction and returns an array of transaction trace and estimated fee.\n *\n * @param invocations Invocations containing:\n * - type - transaction type: DECLARE, (multi)DEPLOY, DEPLOY_ACCOUNT, (multi)INVOKE_FUNCTION\n * @param details SimulateTransactionDetails\n *\n * @returns response from simulate_transaction\n */\n public abstract simulateTransaction(\n invocations: Invocations,\n details?: SimulateTransactionDetails\n ): Promise<SimulateTransactionResponse>;\n}\n","import {\n Abi,\n AbiEnums,\n AbiEvents,\n AbiStructs,\n Cairo1Event,\n EventAbi,\n LegacyEvent,\n ParsedEvent,\n ParsedEvents,\n} from '../../types';\nimport { Event as ProviderEvent } from '../../types/provider/response';\nimport responseParser from '../calldata/responseParser';\nimport { starkCurve } from '../ec';\nimport { addHexPrefix, utf8ToArray } from '../encode';\n\nexport function getAbiEvents(abi: Abi): AbiEvents {\n return abi\n .filter((abiEntry) => abiEntry.type === 'event' && (abiEntry.size || abiEntry.kind !== 'enum'))\n .reduce((acc, abiEntry) => {\n const entryName = abiEntry.name.slice(abiEntry.name.lastIndexOf(':') + 1);\n const abiEntryMod = { ...abiEntry };\n abiEntryMod.name = entryName;\n return {\n ...acc,\n [addHexPrefix(starkCurve.keccak(utf8ToArray(entryName)).toString(16))]: abiEntryMod,\n };\n }, {});\n}\n\n/**\n * Parse raw events and structure them into response object based on a contract structs and defined events\n * @param providerReceivedEvents ProviderEvent[] - Array of raw events\n * @param abiEvents AbiEvents - Events defined in the abi\n * @param abiStructs AbiStructs - Structs defined in the abi\n * @return ParsedEvents - parsed events corresponding to the abi\n */\nexport function parseEvents(\n providerReceivedEvents: Array<ProviderEvent>,\n abiEvents: AbiEvents,\n abiStructs: AbiStructs,\n abiEnums: AbiEnums\n): ParsedEvents {\n const ret = providerReceivedEvents.flat().reduce((acc, recEvent) => {\n const abiEvent: EventAbi = abiEvents[recEvent.keys[0]];\n if (!abiEvent) {\n return acc;\n }\n\n // Create our final event object\n const parsedEvent: ParsedEvent = {};\n parsedEvent[abiEvent.name] = {};\n // Remove the event's name hashed from the keys array\n recEvent.keys.shift();\n\n const keysIter = recEvent.keys[Symbol.iterator]();\n const dataIter = recEvent.data[Symbol.iterator]();\n\n const abiEventKeys =\n (abiEvent as Cairo1Event).members?.filter((it) => it.kind === 'key') ||\n (abiEvent as LegacyEvent).keys;\n const abiEventData =\n (abiEvent as Cairo1Event).members?.filter((it) => it.kind === 'data') ||\n (abiEvent as LegacyEvent).data;\n\n abiEventKeys.forEach((key) => {\n parsedEvent[abiEvent.name][key.name] = responseParser(\n keysIter,\n key,\n abiStructs,\n abiEnums,\n parsedEvent[abiEvent.name]\n );\n });\n\n abiEventData.forEach((data) => {\n parsedEvent[abiEvent.name][data.name] = responseParser(\n dataIter,\n data,\n abiStructs,\n abiEnums,\n parsedEvent[abiEvent.name]\n );\n });\n acc.push(parsedEvent);\n return acc;\n }, [] as ParsedEvents);\n return ret;\n}\n","import type { Abi as AbiKanabi } from 'abi-wan-kanabi';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AbiEvents,\n ArgsOrCalldata,\n ArgsOrCalldataWithOptions,\n AsyncContractFunction,\n Call,\n CallOptions,\n Calldata,\n ContractFunction,\n ContractOptions,\n EstimateFeeResponse,\n FunctionAbi,\n GetTransactionReceiptResponse,\n InvokeFunctionResponse,\n InvokeOptions,\n InvokeTransactionReceiptResponse,\n ParsedEvents,\n RawArgs,\n Result,\n StructAbi,\n ValidateType,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData, cairo } from '../utils/calldata';\nimport { createAbiParser } from '../utils/calldata/parser';\nimport { getAbiEvents, parseEvents as parseRawEvents } from '../utils/events/index';\nimport { cleanHex } from '../utils/num';\nimport { ContractInterface, TypedContract } from './interface';\n\nexport const splitArgsAndOptions = (args: ArgsOrCalldataWithOptions) => {\n const options = [\n 'blockIdentifier',\n 'parseRequest',\n 'parseResponse',\n 'formatResponse',\n 'maxFee',\n 'nonce',\n 'signature',\n 'addressSalt',\n ];\n const lastArg = args[args.length - 1];\n if (typeof lastArg === 'object' && options.some((x) => x in lastArg)) {\n return { args: args as ArgsOrCalldata, options: args.pop() as ContractOptions };\n }\n return { args: args as ArgsOrCalldata };\n};\n\n/**\n * Adds call methods to the contract\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: ArgsOrCalldataWithOptions): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.call(functionAbi.name, params.args, {\n parseRequest: true,\n parseResponse: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.invoke(functionAbi.name, params.args, {\n parseRequest: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view' || functionAbi.state_mutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport function getCalldata(args: RawArgs, callback: Function): Calldata {\n // Check if Calldata in args or args[0] else compile\n if (Array.isArray(args) && '__compiled__' in args) return args as Calldata;\n if (Array.isArray(args) && Array.isArray(args[0]) && '__compiled__' in args[0])\n return args[0] as Calldata;\n return callback();\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n protected readonly events: AbiEvents;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n private callData: CallData;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.callData = new CallData(abi);\n this.structs = CallData.getAbiStruct(abi);\n this.events = getAbiEvents(abi);\n const parser = createAbiParser(abi);\n this.abi = parser.getLegacyFormat();\n\n const options = { enumerable: true, value: {}, writable: false };\n Object.defineProperties(this, {\n functions: { enumerable: true, value: {}, writable: false },\n callStatic: { enumerable: true, value: {}, writable: false },\n populateTransaction: { enumerable: true, value: {}, writable: false },\n estimateFee: { enumerable: true, value: {}, writable: false },\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') return;\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n ...options,\n value: buildCall(this, abiElement),\n });\n }\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n ...options,\n value: buildPopulate(this, abiElement),\n });\n }\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n ...options,\n value: buildEstimate(this, abiElement),\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: ArgsOrCalldata = [],\n {\n parseRequest = true,\n parseResponse = true,\n formatResponse = undefined,\n blockIdentifier = undefined,\n }: CallOptions = {}\n ): Promise<Result> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n const calldata = getCalldata(args, () => {\n if (parseRequest) {\n this.callData.validate(ValidateType.CALL, method, args);\n return this.callData.compile(method, args);\n }\n // eslint-disable-next-line no-console\n console.warn('Call skipped parsing but provided rawArgs, possible malfunction request');\n return args;\n });\n\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => {\n if (!parseResponse) {\n return x.result;\n }\n if (formatResponse) {\n return this.callData.format(method, x.result, formatResponse);\n }\n return this.callData.parse(method, x.result);\n });\n }\n\n public invoke(\n method: string,\n args: ArgsOrCalldata = [],\n { parseRequest = true, maxFee, nonce, signature }: InvokeOptions = {}\n ): Promise<InvokeFunctionResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n const calldata = getCalldata(args, () => {\n if (parseRequest) {\n this.callData.validate(ValidateType.INVOKE, method, args);\n return this.callData.compile(method, args);\n }\n // eslint-disable-next-line no-console\n console.warn('Invoke skipped parsing but provided rawArgs, possible malfunction request');\n return args;\n });\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee,\n nonce,\n });\n }\n\n if (!nonce) throw new Error(`Nonce is required when invoking a function without an account`);\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature,\n },\n {\n nonce,\n }\n );\n }\n\n public async estimate(method: string, args: ArgsOrCalldata = []): Promise<EstimateFeeResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n if (!getCalldata(args, () => false)) {\n this.callData.validate(ValidateType.INVOKE, method, args);\n }\n\n const invocation = this.populate(method, args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: RawArgs = []): Call {\n const calldata: Calldata = getCalldata(args, () => this.callData.compile(method, args));\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata,\n };\n }\n\n public parseEvents(receipt: GetTransactionReceiptResponse): ParsedEvents {\n return parseRawEvents(\n (receipt as InvokeTransactionReceiptResponse).events?.filter(\n (event) => cleanHex(event.from_address) === cleanHex(this.address),\n []\n ) || [],\n this.events,\n this.structs,\n CallData.getAbiEnum(this.abi)\n );\n }\n\n public isCairo1(): boolean {\n return cairo.isCairo1Abi(this.abi);\n }\n\n public async getVersion() {\n return this.providerOrAccount.getContractVersion(this.address);\n }\n\n public typed<TAbi extends AbiKanabi>(tAbi: TAbi): TypedContract<TAbi> {\n return this as TypedContract<typeof tAbi>;\n }\n}\n","import type { Abi as AbiKanabi, TypedContract as AbiWanTypedContract } from 'abi-wan-kanabi';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport {\n Abi,\n ArgsOrCalldata,\n AsyncContractFunction,\n BlockIdentifier,\n CallOptions,\n ContractFunction,\n ContractVersion,\n EstimateFeeResponse,\n GetTransactionReceiptResponse,\n Invocation,\n InvokeFunctionResponse,\n InvokeOptions,\n ParsedEvents,\n Result,\n} from '../types';\n\nexport type TypedContract<TAbi extends AbiKanabi> = AbiWanTypedContract<TAbi> & ContractInterface;\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(\n method: string,\n args?: ArgsOrCalldata,\n options?: CallOptions\n ): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke or Calldata\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: ArgsOrCalldata,\n options?: InvokeOptions\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call or Calldata\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: ArgsOrCalldata,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call or Calldata\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: ArgsOrCalldata): Invocation;\n\n /**\n * Parse contract events of a GetTransactionReceiptResponse received from waitForTransaction. Based on contract's abi\n *\n * @param receipt transaction receipt\n * @returns Events parsed\n */\n public abstract parseEvents(receipt: GetTransactionReceiptResponse): ParsedEvents;\n\n /**\n * tells if the contract comes from a Cairo 1 contract\n *\n * @returns TRUE if the contract comes from a Cairo1 contract\n * @example\n * ```typescript\n * const isCairo1: boolean = myContract.isCairo1();\n * ```\n */\n public abstract isCairo1(): boolean;\n\n /**\n * Retrieves the version of the contract (cairo version & compiler version)\n */\n public abstract getVersion(): Promise<ContractVersion>;\n\n public abstract typed<TAbi extends AbiKanabi>(tAbi: TAbi): TypedContract<TAbi>;\n}\n","import { AccountInterface } from '../account';\nimport {\n Abi,\n ArgsOrCalldataWithOptions,\n CairoAssembly,\n CompiledContract,\n ValidateType,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { Contract, getCalldata, splitArgsAndOptions } from './default';\n\nexport type ContractFactoryParams = {\n compiledContract: CompiledContract;\n account: any;\n casm?: CairoAssembly;\n classHash?: string;\n compiledClassHash?: string;\n abi?: Abi;\n};\n\nexport class ContractFactory {\n compiledContract: CompiledContract;\n\n account: AccountInterface;\n\n abi: Abi;\n\n classHash?: string;\n\n casm?: CairoAssembly;\n\n compiledClassHash?: string;\n\n private CallData: CallData;\n\n /**\n * @param params CFParams\n * - compiledContract: CompiledContract;\n * - account: AccountInterface;\n * - casm?: CairoAssembly;\n * - classHash?: string;\n * - compiledClassHash?: string;\n * - abi?: Abi;\n */\n constructor(params: ContractFactoryParams) {\n this.compiledContract = params.compiledContract;\n this.account = params.account;\n this.casm = params.casm;\n this.abi = params.abi ?? params.compiledContract.abi;\n this.classHash = params.classHash;\n this.compiledClassHash = params.compiledClassHash;\n this.CallData = new CallData(this.abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * If contract is not declared it will first declare it, and then deploy\n */\n public async deploy(...args: ArgsOrCalldataWithOptions): Promise<Contract> {\n const { args: param, options = { parseRequest: true } } = splitArgsAndOptions(args);\n\n const constructorCalldata = getCalldata(param, () => {\n if (options.parseRequest) {\n this.CallData.validate(ValidateType.DEPLOY, 'constructor', param);\n return this.CallData.compile('constructor', param);\n }\n // eslint-disable-next-line no-console\n console.warn('Call skipped parsing but provided rawArgs, possible malfunction request');\n return param;\n });\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareAndDeploy({\n contract: this.compiledContract,\n casm: this.casm,\n classHash: this.classHash,\n compiledClassHash: this.compiledClassHash,\n constructorCalldata,\n salt: options.addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Account\n *\n * @param account - new Account to attach to\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\n return this;\n }\n\n /**\n * Attaches current abi and account to the new address\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.account);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","/* eslint-disable no-bitwise */\nimport { hexToBytes } from '@noble/curves/abstract/utils';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { BigNumberish } from '../types';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { assertInRange, toHex } from './num';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(address)).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hex = removeHexPrefix(keccakBn(address));\n const hashed = hexToBytes(hex.padStart(64, '0'));\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n","/**\n * Main\n */\nexport * from './account';\nexport * from './contract';\nexport * from './provider';\nexport * from './signer';\n\n// TODO: decide on final export style\nexport * from './types';\nexport * as types from './types';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as num from './utils/num';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * as ec from './utils/ec';\nexport * as starknetId from './utils/starknetId';\nexport * as provider from './utils/provider';\nexport * as selector from './utils/selector';\nexport * as events from './utils/events/index';\nexport * from './utils/address';\nexport * from './utils/url';\nexport * from './utils/calldata';\nexport * from './utils/calldata/enum';\nexport * from './utils/contract';\nexport * from './utils/events';\n\n/**\n * Deprecated\n */\n/* eslint-disable import/first */\nimport * as num from './utils/num';\n\n/** @deprecated prefer the 'num' naming */\nexport const number = num;\n"],"mappings":"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","names":["BaseUrl","NetworkName","StarknetChainId","TransactionHashPrefix","SIMULATION_FLAG","ValidateType","Uint","Litteral","EntryPointType","TransactionType","TransactionStatus","TransactionFinalityStatus","TransactionExecutionStatus","BlockStatus","BlockTag","ETransactionType","ESimulationFlag","ETransactionStatus","ETransactionFinalityStatus","ETransactionExecutionStatus","EBlockTag","EDataAvailabilityMode","number","uint256","CairoOptionVariant","CairoResultVariant","listTypeVariant","parsedParameter","parseBaseTypes","parse","stringify","json","stringify","parse","stringify","base64","parse","parse","stringify","parse","StarknetIdContract","StarknetIdContract","stringify","StarknetIdContract","urljoin","defaultOptions","urljoin","stringify","parse","StarknetIdContract","StarknetIdContract","StarknetIdContract","hexToBytes","hexToBytes"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/utils/encode.ts","../src/types/index.ts","../src/types/account.ts","../src/types/calldata.ts","../src/types/lib/contract/index.ts","../src/types/lib/index.ts","../src/types/api/rpc.ts","../src/types/api/jsonrpc/index.ts","../src/types/api/rpcspec/errors.ts","../src/types/api/rpcspec/components.ts","../src/types/api/rpcspec/nonspec.ts","../src/types/api/sequencer.ts","../src/utils/assert.ts","../src/utils/num.ts","../src/utils/selector.ts","../src/utils/shortString.ts","../src/utils/calldata/cairo.ts","../src/utils/uint256.ts","../src/utils/calldata/enum/CairoCustomEnum.ts","../src/utils/calldata/enum/CairoOption.ts","../src/utils/calldata/enum/CairoResult.ts","../src/utils/calldata/formatter.ts","../src/utils/calldata/parser/parser-0-1.1.0.ts","../src/utils/calldata/parser/parser-2.0.0.ts","../src/utils/calldata/parser/index.ts","../src/utils/calldata/tuple.ts","../src/utils/calldata/propertyOrder.ts","../src/utils/calldata/requestParser.ts","../src/utils/calldata/responseParser.ts","../src/utils/calldata/validate.ts","../src/utils/calldata/index.ts","../src/utils/hash.ts","../src/utils/ec.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/contract.ts","../src/utils/fetchPonyfill.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/utils/starknetId.ts","../src/provider/starknetId.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/default.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData.ts","../src/utils/merkle.ts","../src/signer/default.ts","../src/utils/events.ts","../src/account/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/account/interface.ts","../src/utils/events/index.ts","../src/contract/default.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/utils/address.ts","../src/index.ts"],"sourcesContent":["export { IS_BROWSER } from './utils/encode';\n\n/**\n * Cairo Felt support storing max 31 character\n */\nexport const TEXT_TO_FELT_MAX_LEN = 31;\n\nexport const HEX_STR_TRANSACTION_VERSION_1 = '0x1';\nexport const HEX_STR_TRANSACTION_VERSION_2 = '0x2';\nexport const BN_TRANSACTION_VERSION_1 = 1n;\nexport const BN_TRANSACTION_VERSION_2 = 2n;\nexport const BN_FEE_TRANSACTION_VERSION_1 = 2n ** 128n + BN_TRANSACTION_VERSION_1;\nexport const BN_FEE_TRANSACTION_VERSION_2 = 2n ** 128n + BN_TRANSACTION_VERSION_2;\n\nexport const ZERO = 0n;\nexport const MASK_250 = 2n ** 250n - 1n; // 2 ** 250 - 1\nexport const MASK_251 = 2n ** 251n;\nexport const API_VERSION = ZERO;\n\nexport enum BaseUrl {\n SN_MAIN = 'https://alpha-mainnet.starknet.io',\n SN_GOERLI = 'https://alpha4.starknet.io',\n}\n\nexport enum NetworkName {\n SN_MAIN = 'SN_MAIN',\n SN_GOERLI = 'SN_GOERLI',\n}\n\nexport enum StarknetChainId {\n SN_MAIN = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n SN_GOERLI = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI')\n}\n\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\nexport const RPC_GOERLI_NODES = [\n 'https://starknet-testnet.public.blastapi.io/rpc/v0.5',\n 'https://limited-rpc.nethermind.io/goerli-juno/v0_5',\n];\n\nexport const RPC_MAINNET_NODES = [\n 'https://starknet-mainnet.public.blastapi.io/rpc/v0.5',\n 'https://limited-rpc.nethermind.io/mainnet-juno/v0_5',\n];\n","import { base64 } from '@scure/base';\n\n/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\n/**\n * Some functions recreated from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is not a dependency to avoid using `Buffer` which only works in node and not browsers\n */\n\n/**\n * Convert array buffer to string\n *\n * *[internal usage]*\n */\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\n/**\n * Convert utf8-string to Uint8Array\n *\n * *[internal usage]*\n */\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Convert utf8-string to Uint8Array\n *\n * @deprecated equivalent to 'utf8ToArray', alias will be removed\n */\nexport function stringToArrayBuffer(str: string): Uint8Array {\n return utf8ToArray(str);\n}\n\n/**\n * Convert string to array buffer (browser and node compatible)\n */\nexport function atobUniversal(a: string): Uint8Array {\n return base64.decode(a);\n}\n\n/**\n * Convert array buffer to string (browser and node compatible)\n */\nexport function btoaUniversal(b: ArrayBuffer): string {\n return base64.encode(new Uint8Array(b));\n}\n\n/**\n * Convert array buffer to hex-string\n * @returns format: hex-string\n */\nexport function buf2hex(buffer: Uint8Array) {\n return buffer.reduce((r, x) => r + x.toString(16).padStart(2, '0'), '');\n}\n\n/**\n * Remove hex prefix '0x' from hex-string\n * @param hex hex-string\n * @returns format: base16-string\n */\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/i, '');\n}\n\n/**\n * Add hex prefix '0x' to base16-string\n * @param hex base16-string\n * @returns format: hex-string\n */\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\n/**\n * Prepend or append to string\n *\n * *[internal usage]*\n */\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\n/**\n * Prepend string (default with '0')\n */\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\n/**\n * Calculate byte length of string\n *\n * *[no internal usage]*\n */\nexport function calcByteLength(str: string, byteSize = 8): number {\n const { length } = str;\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\n/**\n * Prepend '0' to string bytes\n *\n * *[no internal usage]*\n */\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str, byteSize), padding);\n}\n\n/**\n * Prepend '0' to hex-string bytes\n *\n * *[no internal usage]*\n * @param hex hex-string\n * @returns format: hex-string\n */\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n/**\n * String transformation util\n *\n * Pascal case to screaming snake case\n */\nexport const pascalToSnake = (text: string) =>\n /[a-z]/.test(text)\n ? text\n .split(/(?=[A-Z])/)\n .join('_')\n .toUpperCase()\n : text;\n","export * from './account';\nexport * from './calldata';\nexport * from './contract';\nexport * from './lib';\nexport * from './provider';\nexport * from './signer';\nexport * from './typedData';\nexport * from './cairoEnum';\n\nexport * as RPC from './api/rpc';\nexport {\n CallL1Handler,\n DeployedContractItem,\n ExecutionResources,\n FunctionInvocation,\n GetContractAddressesResponse,\n GetTransactionStatusResponse,\n SequencerIdentifier,\n} from './api/sequencer';\nexport * as Sequencer from './api/sequencer';\n","import { BigNumberish, BlockIdentifier } from './lib';\nimport { DeclareTransactionReceiptResponse, EstimateFeeResponse } from './provider';\n\nexport interface EstimateFee extends EstimateFeeResponse {\n suggestedMaxFee: bigint;\n}\n\nexport type EstimateFeeBulk = Array<EstimateFee>;\n\nexport type AccountInvocationsFactoryDetails = {\n versions: bigint[];\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n};\n\nexport interface EstimateFeeDetails {\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n}\n\nexport interface DeployContractResponse {\n contract_address: string;\n transaction_hash: string;\n}\n\nexport type MultiDeployContractResponse = {\n contract_address: Array<string>;\n transaction_hash: string;\n};\n\nexport type DeployContractUDCResponse = {\n contract_address: string;\n transaction_hash: string;\n address: string;\n deployer: string;\n unique: string;\n classHash: string;\n calldata_len: string;\n calldata: Array<string>;\n salt: string;\n};\n\nexport type DeclareDeployUDCResponse = {\n declare: {\n class_hash: BigNumberish;\n } & Partial<DeclareTransactionReceiptResponse>;\n deploy: DeployContractUDCResponse;\n};\n\nexport type SimulateTransactionDetails = {\n nonce?: BigNumberish;\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n skipExecute?: boolean;\n};\n\nexport enum SIMULATION_FLAG {\n SKIP_VALIDATE = 'SKIP_VALIDATE',\n SKIP_EXECUTE = 'SKIP_EXECUTE',\n}\n","export enum ValidateType {\n DEPLOY = 'DEPLOY',\n CALL = 'CALL',\n INVOKE = 'INVOKE',\n}\n\nexport enum Uint {\n u8 = 'core::integer::u8',\n u16 = 'core::integer::u16',\n u32 = 'core::integer::u32',\n u64 = 'core::integer::u64',\n u128 = 'core::integer::u128',\n u256 = 'core::integer::u256', // This one is struct\n}\n\nexport enum Litteral {\n ClassHash = 'core::starknet::class_hash::ClassHash',\n ContractAddress = 'core::starknet::contract_address::ContractAddress',\n}\n","import { LegacyCompiledContract, LegacyContractClass } from './legacy';\nimport { CompiledSierra, SierraContractClass } from './sierra';\n\n// Final types\n/**\n * format produced after compressing compiled contract\n * CompressedCompiledContract\n */\nexport type ContractClass = LegacyContractClass | SierraContractClass;\n\n/**\n * format produced after compile .cairo to .json\n */\nexport type CompiledContract = LegacyCompiledContract | CompiledSierra;\n\n/**\n * Compressed or decompressed Cairo0 or Cairo1 Contract\n */\nexport type CairoContract = ContractClass | CompiledContract;\n\n// Basic elements\nexport enum EntryPointType {\n EXTERNAL = 'EXTERNAL',\n L1_HANDLER = 'L1_HANDLER',\n CONSTRUCTOR = 'CONSTRUCTOR',\n}\n\nexport * from './abi';\nexport * from './legacy';\nexport * from './sierra';\n","import { StarknetChainId } from '../../constants';\nimport { weierstrass } from '../../utils/ec';\nimport { CairoEnum } from '../cairoEnum';\nimport { CompiledContract, CompiledSierraCasm, ContractClass } from './contract';\n\nexport type WeierstrassSignatureType = weierstrass.SignatureType;\nexport type ArraySignatureType = string[];\nexport type Signature = ArraySignatureType | WeierstrassSignatureType;\n\nexport type BigNumberish = string | number | bigint;\n\n/**\n * Compiled calldata ready to be sent\n * decimal-string array\n */\nexport type Calldata = string[] & { readonly __compiled__?: boolean };\n\n/**\n * Represents an integer in the range [0, 2^256)\n */\nexport interface Uint256 {\n // The low 128 bits of the value\n low: BigNumberish;\n // The high 128 bits of the value\n high: BigNumberish;\n}\n\n/**\n * BigNumberish array\n * use CallData.compile() to convert to Calldata\n */\nexport type RawCalldata = BigNumberish[];\n\n/**\n * Hexadecimal-string array\n */\nexport type HexCalldata = string[];\n\nexport type AllowArray<T> = T | T[];\n\nexport type OptionalPayload<T> = { payload: T } | T;\n\nexport type RawArgs = RawArgsObject | RawArgsArray;\n\nexport type RawArgsObject = {\n [inputName: string]: MultiType | MultiType[] | RawArgs;\n};\n\nexport type RawArgsArray = Array<MultiType | MultiType[] | RawArgs>;\n\nexport type MultiType = BigNumberish | Uint256 | object | boolean | CairoEnum;\n\nexport type UniversalDeployerContractPayload = {\n classHash: BigNumberish;\n salt?: string;\n unique?: boolean;\n constructorCalldata?: RawArgs;\n};\n\nexport type DeployAccountContractPayload = {\n classHash: string;\n constructorCalldata?: RawArgs;\n addressSalt?: BigNumberish;\n contractAddress?: string;\n};\n\nexport type DeployAccountContractTransaction = Omit<\n DeployAccountContractPayload,\n 'contractAddress'\n> & {\n signature?: Signature;\n};\n\nexport type DeclareContractPayload = {\n contract: CompiledContract | string;\n classHash?: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type CompleteDeclareContractPayload = {\n contract: CompiledContract | string;\n classHash: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type DeclareAndDeployContractPayload = Omit<UniversalDeployerContractPayload, 'classHash'> &\n DeclareContractPayload;\n\nexport type DeclareContractTransaction = {\n contract: ContractClass;\n senderAddress: string;\n signature?: Signature;\n compiledClassHash?: string;\n};\n\nexport type CallDetails = {\n contractAddress: string;\n calldata?: RawArgs | Calldata;\n entrypoint?: string; // TODO: check if required\n};\n\nexport type Invocation = CallDetails & { signature?: Signature };\n\nexport type Call = CallDetails & { entrypoint: string };\n\nexport type CairoVersion = '0' | '1' | undefined;\nexport type CompilerVersion = '0' | '1' | '2' | undefined;\n\nexport type InvocationsDetails = {\n nonce?: BigNumberish;\n maxFee?: BigNumberish;\n version?: BigNumberish;\n};\n\n/**\n * Contain all additional details params\n */\nexport type Details = {\n nonce: BigNumberish;\n maxFee: BigNumberish;\n version: BigNumberish;\n chainId: StarknetChainId;\n};\n\nexport type InvocationsDetailsWithNonce = InvocationsDetails & {\n nonce: BigNumberish;\n};\n\nexport enum TransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE_FUNCTION',\n}\n\n/**\n * new statuses are defined by props: finality_status and execution_status\n * to be #deprecated\n */\nexport enum TransactionStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n REJECTED = 'REJECTED',\n REVERTED = 'REVERTED',\n}\n\nexport enum TransactionFinalityStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\n\nexport enum TransactionExecutionStatus {\n REJECTED = 'REJECTED',\n REVERTED = 'REVERTED',\n SUCCEEDED = 'SUCCEEDED',\n}\n\nexport enum BlockStatus {\n PENDING = 'PENDING',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n REJECTED = 'REJECTED',\n}\n\nexport enum BlockTag {\n pending = 'pending',\n latest = 'latest',\n}\n\nexport type BlockNumber = BlockTag | null | number;\n\n/**\n * hex string and BN are detected as block hashes\n * decimal string and number are detected as block numbers\n * null appends nothing to the request url\n */\nexport type BlockIdentifier = BlockNumber | BigNumberish;\n\n/**\n * items used by AccountInvocations\n */\nexport type AccountInvocationItem = (\n | ({ type: TransactionType.DECLARE } & DeclareContractTransaction)\n | ({ type: TransactionType.DEPLOY_ACCOUNT } & DeployAccountContractTransaction)\n | ({ type: TransactionType.INVOKE } & Invocation)\n) &\n InvocationsDetailsWithNonce;\n\n/**\n * Complete invocations array with account details (internal type from account -> provider)\n */\nexport type AccountInvocations = AccountInvocationItem[];\n\n/**\n * Invocations array user provide to bulk method (simulate)\n */\nexport type Invocations = Array<\n | ({ type: TransactionType.DECLARE } & OptionalPayload<DeclareContractPayload>)\n | ({ type: TransactionType.DEPLOY } & OptionalPayload<\n AllowArray<UniversalDeployerContractPayload>\n >)\n | ({ type: TransactionType.DEPLOY_ACCOUNT } & OptionalPayload<DeployAccountContractPayload>)\n | ({ type: TransactionType.INVOKE } & OptionalPayload<AllowArray<Call>>)\n>;\n\nexport type Tupled = { element: any; type: string };\n\nexport type Args = {\n [inputName: string]: BigNumberish | BigNumberish[] | ParsedStruct | ParsedStruct[];\n};\nexport type ParsedStruct = {\n [key: string]: BigNumberish | BigNumberish[] | ParsedStruct | Uint256;\n};\n\nexport type waitForTransactionOptions = {\n retryInterval?: number;\n successStates?: Array<TransactionFinalityStatus | TransactionExecutionStatus>;\n errorStates?: Array<TransactionFinalityStatus | TransactionExecutionStatus>;\n};\n\nexport type getSimulateTransactionOptions = {\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n skipExecute?: boolean;\n skipFeeCharge?: boolean;\n};\n\nexport type getContractVersionOptions = {\n blockIdentifier?: BlockIdentifier;\n compiler?: boolean;\n};\n\nexport type getEstimateFeeBulkOptions = {\n blockIdentifier?: BlockIdentifier;\n skipValidate?: boolean;\n};\n\nexport interface CallStruct {\n to: string;\n selector: string;\n calldata: string[];\n}\n\n/**\n * Represent Contract version\n */\nexport type ContractVersion = {\n /** version of the cairo language */\n cairo: CairoVersion;\n /** version of the cairo compiler used to compile the contract */\n compiler: CompilerVersion;\n};\n\nexport * from './contract';\n","export * as JRPC from './jsonrpc';\nexport * from './rpcspec';\n","export type RequestBody = {\n id: number | string;\n jsonrpc: '2.0';\n method: string;\n params?: {};\n};\n\nexport type ResponseBody = {\n id: number | string;\n jsonrpc: '2.0';\n} & (SuccessResponseBody | ErrorResponseBody);\n\nexport type SuccessResponseBody = {\n result: unknown;\n};\n\nexport type ErrorResponseBody = {\n error: Error;\n};\n\nexport type Error = {\n code: number;\n message: string;\n data?: unknown;\n};\n","export interface FAILED_TO_RECEIVE_TXN {\n code: 1;\n message: 'Failed to write transaction';\n}\n\nexport interface NO_TRACE_AVAILABLE {\n code: 10;\n message: 'No trace available for transaction';\n data: {\n status: 'RECEIVED' | 'REJECTED';\n };\n}\n\nexport interface CONTRACT_NOT_FOUND {\n code: 20;\n message: 'Contract not found';\n}\n\nexport interface INVALID_MESSAGE_SELECTOR {\n code: 21;\n message: 'Invalid message selector';\n}\n\nexport interface INVALID_CALL_DATA {\n code: 22;\n message: 'Invalid call data';\n}\n\nexport interface BLOCK_NOT_FOUND {\n code: 24;\n message: 'Block not found';\n}\n\nexport interface INVALID_TXN_HASH {\n code: 25;\n message: 'Invalid transaction hash';\n}\n\nexport interface INVALID_BLOCK_HASH {\n code: 26;\n message: 'Invalid block hash';\n}\n\nexport interface INVALID_TXN_INDEX {\n code: 27;\n message: 'Invalid transaction index in a block';\n}\n\nexport interface CLASS_HASH_NOT_FOUND {\n code: 28;\n message: 'Class hash not found';\n}\n\nexport interface TXN_HASH_NOT_FOUND {\n code: 29;\n message: 'Transaction hash not found';\n}\n\nexport interface PAGE_SIZE_TOO_BIG {\n code: 31;\n message: 'Requested page size is too big';\n}\n\nexport interface NO_BLOCKS {\n code: 32;\n message: 'There are no blocks';\n}\n\nexport interface INVALID_CONTINUATION_TOKEN {\n code: 33;\n message: 'The supplied continuation token is invalid or unknown';\n}\n\nexport interface TOO_MANY_KEYS_IN_FILTER {\n code: 34;\n message: 'Too many keys provided in a filter';\n}\n\nexport interface CONTRACT_ERROR {\n code: 40;\n message: 'Contract error';\n data: {\n revert_error: string;\n };\n}\n\nexport interface CLASS_ALREADY_DECLARED {\n code: 51;\n message: 'Class already declared';\n}\n\nexport interface INVALID_TRANSACTION_NONCE {\n code: 52;\n message: 'Invalid transaction nonce';\n}\n\nexport interface INSUFFICIENT_MAX_FEE {\n code: 53;\n message: 'Max fee is smaller than the minimal transaction cost (validation plus fee transfer)';\n}\n\nexport interface INSUFFICIENT_ACCOUNT_BALANCE {\n code: 54;\n message: \"Account balance is smaller than the transaction's max_fee\";\n}\n\nexport interface VALIDATION_FAILURE {\n code: 55;\n message: 'Account validation failed';\n}\n\nexport interface COMPILATION_FAILED {\n code: 56;\n message: 'Compilation failed';\n}\n\nexport interface CONTRACT_CLASS_SIZE_IS_TOO_LARGE {\n code: 57;\n message: 'Contract class size it too large';\n}\n\nexport interface NON_ACCOUNT {\n code: 58;\n message: 'Sender address in not an account contract';\n}\n\nexport interface DUPLICATE_TX {\n code: 59;\n message: 'A transaction with the same hash already exists in the mempool';\n}\n\nexport interface COMPILED_CLASS_HASH_MISMATCH {\n code: 60;\n message: 'the compiled class hash did not match the one supplied in the transaction';\n}\n\nexport interface UNSUPPORTED_TX_VERSION {\n code: 61;\n message: 'the transaction version is not supported';\n}\n\nexport interface UNSUPPORTED_CONTRACT_CLASS_VERSION {\n code: 62;\n message: 'the contract class version is not supported';\n}\n\nexport interface UNEXPECTED_ERROR {\n code: 63;\n message: 'An unexpected error occurred';\n data: string;\n}\n","/**\n * PRIMITIVES\n */\n\n/**\n * A field element. represented by at most 63 hex digits\n * @pattern ^0x(0|[a-fA-F1-9]{1}[a-fA-F0-9]{0,62})$\n */\nexport type FELT = string;\n/**\n * an ethereum address represented as 40 hex digits\n * @pattern ^0x[a-fA-F0-9]{40}$\n */\nexport type ETH_ADDRESS = string;\n/**\n * A storage key. Represented as up to 62 hex digits, 3 bits, and 5 leading zeroes.\n * @pattern ^0x0[0-7]{1}[a-fA-F0-9]{0,62}$\n */\nexport type STORAGE_KEY = string;\nexport type ADDRESS = FELT;\nexport type NUM_AS_HEX = string;\nexport type SIGNATURE = Array<FELT>;\nexport type BLOCK_NUMBER = number;\nexport type BLOCK_HASH = FELT;\nexport type TXN_HASH = FELT;\nexport type CHAIN_ID = NUM_AS_HEX;\nexport type STRUCT_ABI_TYPE = 'struct';\nexport type EVENT_ABI_TYPE = 'event';\nexport type FUNCTION_ABI_TYPE = 'function' | 'l1_handler' | 'constructor';\n// Represents the type of an entry point.\nexport type ENTRY_POINT_TYPE = 'EXTERNAL' | 'L1_HANDLER' | 'CONSTRUCTOR';\n// Represents the type of a function call.\nexport type CALL_TYPE = 'DELEGATE' | 'LIBRARY_CALL' | 'CALL';\n// Represents the status of the transaction\nexport type TXN_STATUS = 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1';\n// Flags that indicate how to simulate a given transaction. By default, the sequencer behavior is replicated locally (enough funds are expected to be in the account, and the fee will be deducted from the balance before the simulation of the next transaction). To skip the fee charge, use the SKIP_FEE_CHARGE flag.\nexport type SIMULATION_FLAG = 'SKIP_VALIDATE' | 'SKIP_FEE_CHARGE';\n// Data availability mode\nexport type DA_MODE = 'L1' | 'L2';\nexport type TXN_TYPE = 'DECLARE' | 'DEPLOY' | 'DEPLOY_ACCOUNT' | 'INVOKE' | 'L1_HANDLER';\nexport type TXN_FINALITY_STATUS = 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1';\nexport type TXN_EXECUTION_STATUS = 'SUCCEEDED' | 'REVERTED';\nexport type BLOCK_STATUS = 'PENDING' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' | 'REJECTED';\nexport type BLOCK_TAG = 'latest' | 'pending';\n\n/**\n * READ API\n */\n\nexport type EVENTS_CHUNK = {\n // Returns matching events\n events: EMITTED_EVENT[];\n // Use this token in a subsequent query to obtain the next page. Should not appear if there are no more pages.\n continuation_token?: string;\n};\n\nexport type RESULT_PAGE_REQUEST = {\n // The token returned from the previous query. If no token is provided the first page is returned.\n continuation_token?: string;\n // Chunk size\n chunk_size: number;\n};\n\nexport type EMITTED_EVENT = EVENT & {\n block_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n transaction_hash: TXN_HASH;\n};\n\nexport type EVENT = {\n from_address: ADDRESS;\n} & EVENT_CONTENT;\n\nexport type EVENT_CONTENT = {\n keys: FELT[];\n data: FELT[];\n};\n\nexport type EVENT_FILTER = {\n from_block?: BLOCK_ID;\n to_block?: BLOCK_ID;\n address?: ADDRESS;\n keys?: FELT[][];\n};\n\nexport type BLOCK_ID =\n | {\n block_hash?: BLOCK_HASH;\n block_number?: BLOCK_NUMBER;\n }\n | BLOCK_TAG;\n\nexport type SYNC_STATUS = {\n starting_block_hash: BLOCK_HASH;\n starting_block_num: BLOCK_NUMBER;\n current_block_hash: BLOCK_HASH;\n current_block_num: BLOCK_NUMBER;\n highest_block_hash: BLOCK_HASH;\n highest_block_num: BLOCK_NUMBER;\n};\n\nexport type NEW_CLASSES = {\n class_hash: FELT;\n compiled_class_hash: FELT;\n};\n\nexport type REPLACED_CLASS = {\n class_hash: FELT;\n contract_address: FELT;\n};\n\nexport type NONCE_UPDATE = {\n contract_address: ADDRESS;\n nonce: FELT;\n};\n\nexport type STATE_DIFF = {\n storage_diffs: CONTRACT_STORAGE_DIFF_ITEM[];\n deprecated_declared_classes: FELT[];\n declared_classes: NEW_CLASSES[];\n deployed_contracts: DEPLOYED_CONTRACT_ITEM[];\n replaced_classes: REPLACED_CLASS[];\n nonces: NONCE_UPDATE[];\n};\n\nexport type PENDING_STATE_UPDATE = {\n old_root: FELT;\n state_diff: STATE_DIFF;\n};\n\nexport type STATE_UPDATE = {\n block_hash: BLOCK_HASH;\n old_root: FELT;\n new_root: FELT;\n state_diff: STATE_DIFF;\n};\n\nexport type BLOCK_BODY_WITH_TX_HASHES = {\n transactions: TXN_HASH[];\n};\n\nexport type BLOCK_BODY_WITH_TXS = {\n transactions: {\n transaction: TXN;\n transaction_hash: TXN_HASH;\n }[];\n};\n\nexport type BLOCK_HEADER = {\n block_hash: BLOCK_HASH;\n parent_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n new_root: FELT;\n timestamp: number;\n sequencer_address: FELT;\n l1_gas_price: RESOURCE_PRICE;\n starknet_version: string;\n};\n\nexport type PENDING_BLOCK_HEADER = {\n parent_hash: BLOCK_HASH;\n timestamp: number;\n sequencer_address: FELT;\n l1_gas_price: RESOURCE_PRICE;\n starknet_version: string;\n};\n\nexport type BLOCK_WITH_TX_HASHES = { status: BLOCK_STATUS } & BLOCK_HEADER &\n BLOCK_BODY_WITH_TX_HASHES;\n\nexport type BLOCK_WITH_TXS = { status: BLOCK_STATUS } & BLOCK_HEADER & BLOCK_BODY_WITH_TXS;\n\nexport type PENDING_BLOCK_WITH_TX_HASHES = BLOCK_BODY_WITH_TX_HASHES & PENDING_BLOCK_HEADER;\n\nexport type PENDING_BLOCK_WITH_TXS = BLOCK_BODY_WITH_TXS & PENDING_BLOCK_HEADER;\n\nexport type DEPLOYED_CONTRACT_ITEM = {\n address: FELT;\n class_hash: FELT;\n};\n\nexport type CONTRACT_STORAGE_DIFF_ITEM = {\n // The contract address for which the storage changed (in FELT format)\n address: string;\n // The changes in the storage of the contract\n storage_entries: StorageDiffItem[];\n};\n\nexport type StorageDiffItem = {\n // The key of the changed value (in FELT format)\n key: string;\n // The new value applied to the given address (in FELT format)\n value: string;\n};\n\nexport type TXN = INVOKE_TXN | L1_HANDLER_TXN | DECLARE_TXN | DEPLOY_TXN | DEPLOY_ACCOUNT_TXN;\n\nexport type DECLARE_TXN = DECLARE_TXN_V0 | DECLARE_TXN_V1 | DECLARE_TXN_V2;\n\nexport type DECLARE_TXN_V0 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: '0x0';\n signature: SIGNATURE;\n class_hash: FELT;\n};\n\nexport type DECLARE_TXN_V1 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: '0x1';\n signature: SIGNATURE;\n nonce: FELT;\n class_hash: FELT;\n};\n\nexport type DECLARE_TXN_V2 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n compiled_class_hash: FELT;\n max_fee: FELT;\n version: '0x2';\n signature: SIGNATURE;\n nonce: FELT;\n class_hash: FELT;\n};\n\nexport type BROADCASTED_TXN =\n | BROADCASTED_INVOKE_TXN\n | BROADCASTED_DECLARE_TXN\n | BROADCASTED_DEPLOY_ACCOUNT_TXN;\n\nexport type BROADCASTED_INVOKE_TXN = INVOKE_TXN_V0 | INVOKE_TXN_V1;\n\nexport type BROADCASTED_DEPLOY_ACCOUNT_TXN = DEPLOY_ACCOUNT_TXN;\n\nexport type BROADCASTED_DECLARE_TXN = BROADCASTED_DECLARE_TXN_V1 | BROADCASTED_DECLARE_TXN_V2;\n\nexport type BROADCASTED_DECLARE_TXN_V1 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_class: DEPRECATED_CONTRACT_CLASS;\n};\n\nexport type BROADCASTED_DECLARE_TXN_V2 = {\n type: 'DECLARE';\n sender_address: ADDRESS;\n compiled_class_hash: FELT;\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_class: CONTRACT_CLASS;\n};\n\nexport type DEPLOY_ACCOUNT_TXN = DEPLOY_ACCOUNT_TXN_V1;\n\nexport type DEPLOY_ACCOUNT_TXN_V1 = {\n type: 'DEPLOY_ACCOUNT';\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n contract_address_salt: FELT;\n constructor_calldata: FELT[];\n class_hash: FELT;\n};\n\nexport type DEPLOY_TXN = {\n type: 'DEPLOY';\n version: NUM_AS_HEX;\n contract_address_salt: FELT;\n constructor_calldata: FELT[];\n class_hash: FELT;\n};\n\nexport type INVOKE_TXN = INVOKE_TXN_V0 | INVOKE_TXN_V1;\n\nexport type INVOKE_TXN_V0 = {\n type: 'INVOKE';\n max_fee: FELT;\n version: '0x0';\n signature: SIGNATURE;\n contract_address: ADDRESS;\n entry_point_selector: FELT;\n calldata: FELT[];\n};\n\nexport type INVOKE_TXN_V1 = {\n type: 'INVOKE';\n sender_address: ADDRESS;\n calldata: FELT[];\n max_fee: FELT;\n version: NUM_AS_HEX;\n signature: SIGNATURE;\n nonce: FELT;\n};\n\nexport type L1_HANDLER_TXN = {\n version: NUM_AS_HEX;\n type: 'L1_HANDLER';\n nonce: NUM_AS_HEX;\n} & FUNCTION_CALL;\n\nexport type COMMON_RECEIPT_PROPERTIES = {\n transaction_hash: TXN_HASH;\n actual_fee: FELT;\n execution_status: TXN_EXECUTION_STATUS;\n finality_status: TXN_FINALITY_STATUS;\n block_hash: BLOCK_HASH;\n block_number: BLOCK_NUMBER;\n messages_sent: MSG_TO_L1[];\n revert_reason: string;\n events: EVENT[];\n execution_resources: EXECUTION_RESOURCES;\n};\n\nexport type PENDING_COMMON_RECEIPT_PROPERTIES = {\n transaction_hash: TXN_HASH;\n actual_fee: FELT;\n type: TXN_TYPE;\n messages_sent: MSG_TO_L1[];\n events: EVENT[];\n revert_reason: string;\n finality_status: 'ACCEPTED_ON_L2';\n execution_status: TXN_EXECUTION_STATUS;\n execution_resources: EXECUTION_RESOURCES;\n};\n\nexport type INVOKE_TXN_RECEIPT = {\n type: 'INVOKE';\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_INVOKE_TXN_RECEIPT = {\n type: 'INVOKE';\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DECLARE_TXN_RECEIPT = {\n type: 'DECLARE';\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_DECLARE_TXN_RECEIPT = {\n type: 'DECLARE';\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DEPLOY_ACCOUNT_TXN_RECEIPT = {\n type: 'DEPLOY_ACCOUNT';\n contract_address: FELT;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_DEPLOY_ACCOUNT_TXN_RECEIPT = {\n type: 'DEPLOY_ACCOUNT';\n contract_address: FELT;\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type DEPLOY_TXN_RECEIPT = {\n type: 'DEPLOY';\n contract_address: FELT;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type L1_HANDLER_TXN_RECEIPT = {\n type: 'L1_HANDLER';\n message_hash: NUM_AS_HEX;\n} & COMMON_RECEIPT_PROPERTIES;\n\nexport type PENDING_L1_HANDLER_TXN_RECEIPT = {\n type: 'L1_HANDLER';\n message_hash: NUM_AS_HEX;\n} & PENDING_COMMON_RECEIPT_PROPERTIES;\n\nexport type TXN_RECEIPT =\n | INVOKE_TXN_RECEIPT\n | L1_HANDLER_TXN_RECEIPT\n | DECLARE_TXN_RECEIPT\n | DEPLOY_TXN_RECEIPT\n | DEPLOY_ACCOUNT_TXN_RECEIPT;\n\nexport type PENDING_TXN_RECEIPT =\n | PENDING_INVOKE_TXN_RECEIPT\n | PENDING_L1_HANDLER_TXN_RECEIPT\n | PENDING_DECLARE_TXN_RECEIPT\n | PENDING_DEPLOY_ACCOUNT_TXN_RECEIPT;\n\nexport type MSG_TO_L1 = {\n from_address: FELT;\n to_address: FELT;\n payload: FELT[];\n};\n\nexport type MSG_FROM_L1 = {\n from_address: ETH_ADDRESS;\n to_address: ADDRESS;\n entry_point_selector: FELT;\n payload: FELT[];\n};\n\nexport type FUNCTION_CALL = {\n contract_address: ADDRESS;\n entry_point_selector: FELT;\n calldata: FELT[];\n};\n\nexport type CONTRACT_CLASS = {\n sierra_program: FELT[];\n contract_class_version: string;\n entry_points_by_type: {\n CONSTRUCTOR: SIERRA_ENTRY_POINT[];\n EXTERNAL: SIERRA_ENTRY_POINT[];\n L1_HANDLER: SIERRA_ENTRY_POINT[];\n };\n abi: string;\n};\n\nexport type DEPRECATED_CONTRACT_CLASS = {\n program: string;\n entry_points_by_type: {\n CONSTRUCTOR: DEPRECATED_CAIRO_ENTRY_POINT[];\n EXTERNAL: DEPRECATED_CAIRO_ENTRY_POINT[];\n L1_HANDLER: DEPRECATED_CAIRO_ENTRY_POINT[];\n };\n abi: CONTRACT_ABI;\n};\n\nexport type DEPRECATED_CAIRO_ENTRY_POINT = {\n offset: NUM_AS_HEX | number;\n selector: FELT;\n};\n\nexport type SIERRA_ENTRY_POINT = {\n selector: FELT;\n function_idx: number;\n};\n\nexport type CONTRACT_ABI = CONTRACT_ABI_ENTRY[];\n\nexport type CONTRACT_ABI_ENTRY = {\n selector: FELT;\n input: string;\n output: string;\n};\n\nexport type STRUCT_ABI_ENTRY = {\n type: STRUCT_ABI_TYPE;\n name: string;\n size: number;\n members: STRUCT_MEMBER[];\n};\n\nexport type STRUCT_MEMBER = TYPED_PARAMETER & {\n offset: number;\n};\n\nexport type EVENT_ABI_ENTRY = {\n type: EVENT_ABI_TYPE;\n name: string;\n keys: TYPED_PARAMETER[];\n data: TYPED_PARAMETER[];\n};\n\nexport type FUNCTION_STATE_MUTABILITY = 'view';\n\nexport type FUNCTION_ABI_ENTRY = {\n type: FUNCTION_ABI_TYPE;\n name: string;\n inputs: TYPED_PARAMETER[];\n outputs: TYPED_PARAMETER[];\n stateMutability: FUNCTION_STATE_MUTABILITY;\n};\n\nexport type TYPED_PARAMETER = {\n name: string;\n type: string;\n};\n\nexport type FEE_ESTIMATE = {\n gas_consumed: NUM_AS_HEX;\n gas_price: NUM_AS_HEX;\n overall_fee: NUM_AS_HEX;\n};\n\nexport type RESOURCE_LIMITS = {\n max_amount: NUM_AS_HEX;\n max_price_per_unit: NUM_AS_HEX;\n};\n\nexport type RESOURCE_PRICE = {\n price_in_strk?: NUM_AS_HEX;\n price_in_wei: NUM_AS_HEX;\n};\n\nexport type EXECUTION_RESOURCES = {\n steps: NUM_AS_HEX;\n memory_holes: NUM_AS_HEX;\n range_check_builtin_applications: NUM_AS_HEX;\n pedersen_builtin_applications: NUM_AS_HEX;\n poseidon_builtin_applications: NUM_AS_HEX;\n ec_op_builtin_applications: NUM_AS_HEX;\n ecdsa_builtin_applications: NUM_AS_HEX;\n bitwise_builtin_applications: NUM_AS_HEX;\n keccak_builtin_applications: NUM_AS_HEX;\n};\n\n/**\n * TRACE API\n */\n\n// Represents a transaction trace including the execution details.\nexport type TRANSACTION_TRACE = {\n invoke_tx_trace?: INVOKE_TXN_TRACE;\n declare_tx_trace?: DECLARE_TXN_TRACE;\n deploy_account_tx_trace?: DEPLOY_ACCOUNT_TXN_TRACE;\n l1_handler_tx_trace?: L1_HANDLER_TXN_TRACE;\n};\n\n// Represents a transaction trace for an invoke transaction.\nexport type INVOKE_TXN_TRACE = {\n type: 'INVOKE';\n execute_invocation: FUNCTION_INVOCATION | { revert_reason: string };\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for a declare transaction.\nexport type DECLARE_TXN_TRACE = {\n type: 'DECLARE';\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for a deploy account transaction.\nexport type DEPLOY_ACCOUNT_TXN_TRACE = {\n type: 'DEPLOY_ACCOUNT';\n constructor_invocation: FUNCTION_INVOCATION;\n validate_invocation?: FUNCTION_INVOCATION;\n fee_transfer_invocation?: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a transaction trace for an L1 handler transaction.\nexport type L1_HANDLER_TXN_TRACE = {\n type: 'L1_HANDLER';\n function_invocation: FUNCTION_INVOCATION;\n state_diff?: STATE_DIFF;\n};\n\n// Represents a nested function call.\nexport type NESTED_CALL = FUNCTION_INVOCATION;\n\n// Represents a function invocation along with its execution details.\nexport type FUNCTION_INVOCATION = {\n function_call: FUNCTION_CALL;\n caller_address: string;\n class_hash: string;\n entry_point_type: ENTRY_POINT_TYPE;\n call_type: CALL_TYPE;\n result: string[];\n calls: NESTED_CALL[];\n events: ORDERED_EVENT[];\n messages: ORDERED_MESSAGE[];\n};\n\n// Represents an ordered event alongside its order within the transaction.\nexport type ORDERED_EVENT = {\n order: number;\n event: EVENT;\n};\n\n// Represents an ordered message alongside its order within the transaction.\nexport type ORDERED_MESSAGE = {\n order: number;\n message: MSG_TO_L1;\n};\n","/**\n * Types that are not in spec but required for UX\n */\nimport {\n ADDRESS,\n BLOCK_HASH,\n BLOCK_NUMBER,\n BLOCK_WITH_TXS,\n BLOCK_WITH_TX_HASHES,\n BROADCASTED_TXN,\n CHAIN_ID,\n CONTRACT_CLASS,\n CONTRACT_STORAGE_DIFF_ITEM,\n DEPRECATED_CONTRACT_CLASS,\n EVENTS_CHUNK,\n EVENT_FILTER,\n FEE_ESTIMATE,\n FELT,\n MSG_FROM_L1,\n NONCE_UPDATE,\n PENDING_BLOCK_WITH_TXS,\n PENDING_BLOCK_WITH_TX_HASHES,\n PENDING_STATE_UPDATE,\n PENDING_TXN_RECEIPT,\n REPLACED_CLASS,\n RESULT_PAGE_REQUEST,\n SIMULATION_FLAG,\n STATE_UPDATE,\n SYNC_STATUS,\n TRANSACTION_TRACE,\n TXN,\n TXN_EXECUTION_STATUS,\n TXN_HASH,\n TXN_RECEIPT,\n TXN_STATUS,\n} from './components';\n\n// METHOD RESPONSES\n// response starknet_getClass\nexport type ContractClass = CONTRACT_CLASS | DEPRECATED_CONTRACT_CLASS;\n// response starknet_simulateTransactions\nexport type SimulateTransactionResponse = {\n transaction_trace: TRANSACTION_TRACE;\n fee_estimation: FEE_ESTIMATE;\n}[];\n// response starknet_estimateFee\nexport type FeeEstimate = FEE_ESTIMATE;\n// response starknet_getTransactionByHash, starknet_getTransactionByBlockIdAndIndex\nexport type TransactionWithHash = TXN & { transaction_hash: TXN_HASH };\n// response starknet_blockHashAndNumber\nexport type BlockHashAndNumber = { block_hash: BLOCK_HASH; block_number: BLOCK_NUMBER };\n// response starknet_getBlockWithTxs\nexport type BlockWithTxs = BLOCK_WITH_TXS | PENDING_BLOCK_WITH_TXS;\n// response starknet_getBlockWithTxHashes\nexport type BlockWithTxHashes = BLOCK_WITH_TX_HASHES | PENDING_BLOCK_WITH_TX_HASHES;\n// response starknet_getStateUpdate\nexport type StateUpdate = STATE_UPDATE | PENDING_STATE_UPDATE;\n// response starknet_traceBlockTransactions\nexport type BlockTransactionsTraces = { transaction_hash: FELT; trace_root: TRANSACTION_TRACE }[];\n// response starknet_syncing\nexport type Syncing = boolean | SYNC_STATUS;\n// response starknet_getEvents\nexport type Events = EVENTS_CHUNK;\n// response starknet_addInvokeTransaction\nexport type InvokedTransaction = { transaction_hash: TXN_HASH };\n// response starknet_addDeclareTransaction\nexport type DeclaredTransaction = { transaction_hash: TXN_HASH; class_hash: FELT };\n// response starknet_addDeployAccountTransaction\nexport type DeployedAccountTransaction = { transaction_hash: TXN_HASH; contract_address: FELT };\n\n// Nice Components names\nexport type ContractAddress = ADDRESS;\nexport type Felt = FELT;\nexport type Nonce = FELT;\nexport type TransactionHash = TXN_HASH;\nexport type TransactionTrace = TRANSACTION_TRACE;\nexport type BlockHash = BLOCK_HASH;\nexport type TransactionReceipt = TXN_RECEIPT | PENDING_TXN_RECEIPT;\nexport type EventFilter = EVENT_FILTER & RESULT_PAGE_REQUEST;\nexport type SimulationFlags = Array<SIMULATION_FLAG>;\nexport type L1Message = MSG_FROM_L1;\nexport type BaseTransaction = BROADCASTED_TXN;\nexport type ChainId = CHAIN_ID;\nexport type Transaction = TXN;\nexport type TransactionStatus = {\n finality_status: TXN_STATUS;\n execution_status?: TXN_EXECUTION_STATUS;\n};\n\n// Diff Than Seq\nexport type StorageDiffs = Array<CONTRACT_STORAGE_DIFF_ITEM>;\nexport type DeprecatedDeclaredClasses = Array<FELT>;\nexport type NonceUpdates = NONCE_UPDATE[];\nexport type ReplacedClasses = REPLACED_CLASS[];\n\n// Enums Derived From Spec Types (require manual check for changes)\nexport enum ETransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE',\n L1_HANDLER = 'L1_HANDLER',\n}\n\nexport enum ESimulationFlag {\n SKIP_VALIDATE = 'SKIP_VALIDATE',\n SKIP_FEE_CHARGE = 'SKIP_FEE_CHARGE',\n}\n\nexport enum ETransactionStatus {\n RECEIVED = 'RECEIVED',\n REJECTED = 'REJECTED',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\n\nexport enum ETransactionFinalityStatus {\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n}\nexport enum ETransactionExecutionStatus {\n SUCCEEDED = 'SUCCEEDED',\n REVERTED = 'REVERTED',\n}\n\nexport enum EBlockTag {\n LATEST = 'latest',\n PENDING = 'pending',\n}\n\nexport enum EDataAvailabilityMode {\n L1 = 'L1',\n L2 = 'L2',\n}\n","import {\n Abi,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n BlockNumber,\n BlockStatus,\n ByteCode,\n CairoAssembly,\n CompiledContract,\n ContractClass,\n EntryPointType,\n RawCalldata,\n TransactionExecutionStatus,\n TransactionFinalityStatus,\n TransactionStatus,\n TransactionType,\n} from '../lib';\n\n// #region | originally not included in the namespace\nexport type GetTransactionStatusResponse = {\n tx_status: TransactionStatus;\n execution_status: TransactionExecutionStatus;\n finality_status: TransactionFinalityStatus;\n block_hash?: string;\n tx_failure_reason?: {\n code: string;\n error_message: string;\n };\n tx_revert_reason?: string;\n};\n\nexport type GetContractAddressesResponse = {\n Starknet: string;\n GpsStatementVerifier: string;\n};\n\nexport type FunctionInvocation = {\n caller_address: string;\n contract_address: string;\n calldata: RawCalldata;\n call_type?: string;\n class_hash?: string;\n selector?: string;\n entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this\n result: Array<any>;\n execution_resources: ExecutionResources;\n internal_calls: Array<FunctionInvocation>;\n events: Array<any>;\n messages: Array<any>;\n};\n\nexport type ExecutionResources = {\n n_steps: number;\n builtin_instance_counter: {\n pedersen_builtin: number;\n range_check_builtin: number;\n bitwise_builtin: number;\n output_builtin: number;\n ecdsa_builtin: number;\n ec_op_builtin?: number;\n };\n n_memory_holes: number;\n};\n\nexport type CallL1Handler = {\n from_address: string;\n to_address: string;\n entry_point_selector: string;\n payload: Array<string>;\n};\n\nexport type DeployedContractItem = {\n address: string;\n class_hash: string;\n};\n\nexport type SequencerIdentifier = { blockHash: string } | { blockNumber: BlockNumber };\n// #endregion\n\nexport type TransactionTraceResponse = {\n validate_invocation?: FunctionInvocation;\n function_invocation?: FunctionInvocation;\n fee_transfer_invocation?: FunctionInvocation;\n constructor_invocation?: FunctionInvocation;\n signature: string[];\n};\n\nexport type DeclareTransaction = {\n type: TransactionType.DECLARE;\n sender_address: string;\n contract_class: ContractClass;\n signature?: string[];\n nonce: BigNumberish;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n compiled_class_hash?: string; // v2 declare\n};\n\nexport type DeployTransaction = {\n type: TransactionType.DEPLOY;\n contract_definition: ContractClass;\n contract_address_salt: BigNumberish;\n constructor_calldata: string[];\n nonce?: BigNumberish;\n};\n\nexport type DeployAccountTransaction = {\n type: TransactionType.DEPLOY_ACCOUNT;\n class_hash: string;\n contract_address_salt: BigNumberish;\n constructor_calldata: string[];\n signature?: string[];\n max_fee?: BigNumberish;\n version?: BigNumberish;\n nonce?: BigNumberish;\n};\n\nexport type InvokeFunctionTransaction = {\n type: TransactionType.INVOKE;\n sender_address: string;\n signature?: string[];\n entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this\n calldata?: RawCalldata;\n nonce: BigNumberish;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n};\n\nexport type Transaction =\n | DeclareTransaction\n | DeployTransaction\n | InvokeFunctionTransaction\n | DeployAccountTransaction;\n\nexport type AddTransactionResponse = {\n transaction_hash: string;\n code?: 'TRANSACTION_RECEIVED';\n address?: string;\n class_hash?: string;\n};\n\nexport type GetCodeResponse = {\n bytecode: ByteCode;\n abi: Abi;\n};\n\nexport interface InvokeFunctionTransactionResponse extends InvokeFunctionTransaction {\n transaction_hash: string;\n entry_point_selector: string;\n}\n\nexport type TransactionResponse =\n | DeclareTransaction\n | DeployTransaction\n | InvokeFunctionTransactionResponse;\n\nexport type SuccessfulTransactionResponse = {\n execution_status: TransactionExecutionStatus.SUCCEEDED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n block_hash: string;\n block_number: BlockNumber;\n transaction_index: number;\n transaction: TransactionResponse;\n};\n\nexport type RevertedTransactionResponse = {\n execution_status: TransactionExecutionStatus.REVERTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n block_hash: string;\n block_number: BlockNumber;\n transaction_index: number;\n transaction: TransactionResponse;\n revert_error: string;\n};\n\nexport type FailedTransactionResponse = {\n status: TransactionStatus.REJECTED;\n transaction_failure_reason: {\n code: string;\n error_message: string;\n };\n transaction: TransactionResponse;\n};\n\nexport type GetTransactionResponse =\n | SuccessfulTransactionResponse\n | RevertedTransactionResponse\n | FailedTransactionResponse;\n\nexport type TransactionReceiptResponse =\n | SuccessfulTransactionReceiptResponse\n | RevertedTransactionReceiptResponse\n | RejectedTransactionReceiptResponse;\n\nexport type SuccessfulTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.SUCCEEDED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus;\n actual_fee: string;\n block_hash: string;\n block_number: BlockNumber;\n transaction_hash: string;\n transaction_index: number;\n l2_to_l1_messages: string[];\n events: string[];\n execution_resources?: ExecutionResources; // INVOKE ONLY\n};\n\nexport type RevertedTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.REVERTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus.REVERTED;\n actual_fee: string;\n block_hash: string;\n block_number: BlockNumber;\n transaction_hash: string;\n transaction_index: number;\n l2_to_l1_messages: string[];\n events: string[];\n revert_error: string;\n};\n\nexport type RejectedTransactionReceiptResponse = {\n execution_status: TransactionExecutionStatus.REJECTED;\n finality_status: TransactionFinalityStatus;\n status: TransactionStatus.REJECTED;\n transaction_hash: string;\n l2_to_l1_messages: string[];\n events: string[];\n transaction_failure_reason: {\n code: string;\n error_message: string;\n };\n};\n\nexport type GetBlockResponse = {\n block_number: number;\n state_root: string;\n block_hash: string;\n transactions: {\n [txHash: string]: TransactionResponse;\n };\n timestamp: number;\n transaction_receipts: {\n [txHash: string]: {\n block_hash: string;\n transaction_hash: string;\n l2_to_l1_messages: {\n to_address: string;\n payload: string[];\n from_address: string;\n }[];\n block_number: BlockNumber;\n status: TransactionStatus;\n transaction_index: number;\n };\n };\n parent_block_hash: string;\n status: BlockStatus;\n gas_price: string;\n sequencer_address: string;\n starknet_version: string;\n};\n\nexport type CallContractTransaction = {\n calldata?: RawCalldata;\n max_fee?: BigNumberish;\n version?: BigNumberish;\n entry_point_selector: string;\n} & (\n | {\n sender_address: string;\n signature: string[];\n }\n | {\n contract_address: string;\n signature?: never;\n }\n);\n\nexport type CallContractResponse = {\n result: string[];\n};\n\nexport type InvokeEstimateFee = Omit<InvokeFunctionTransaction, 'max_fee' | 'entry_point_type'>;\nexport type DeclareEstimateFee = Omit<DeclareTransaction, 'max_fee'>;\nexport type DeployAccountEstimateFee = Omit<DeployAccountTransaction, 'max_fee'>;\nexport type DeployEstimateFee = DeployTransaction;\n\nexport type SimulateTransactionResponse = {\n trace: TransactionTraceResponse; // diff with OPENRPC \"transaction_trace\"\n fee_estimation: EstimateFeeResponse;\n};\n\nexport type AccountTransactionItem =\n | InvokeEstimateFee\n | DeclareEstimateFee\n | DeployEstimateFee\n | DeployAccountEstimateFee;\n\n/**\n * Transaction filled with account data\n */\nexport type AccountTransaction = AllowArray<AccountTransactionItem>;\n\n// Support 0.9.1 changes in a backward-compatible way\nexport type EstimateFeeResponse =\n | {\n overall_fee: number;\n gas_price: number;\n gas_usage: number;\n uint: string;\n }\n | {\n amount: bigint;\n unit: string;\n };\n\nexport type EstimateFeeResponseBulk = AllowArray<EstimateFeeResponse>;\n\nexport type BlockTransactionTracesResponse = {\n traces: Array<TransactionTraceResponse & { transaction_hash: string }>;\n};\n\nexport type Storage = string;\n\nexport type StateUpdateResponse = {\n block_hash: string;\n new_root: string;\n old_root: string;\n state_diff: {\n storage_diffs: StorageDiffs;\n nonces: Nonces;\n deployed_contracts: Array<DeployedContractItem>;\n old_declared_contracts: OldDeclaredContracts;\n declared_classes: DeclaredClasses;\n replaced_classes: ReplacedClasses; // no definition is it array of string\n };\n};\n\nexport type StorageDiffs = { [address: string]: Array<StateDiffItem> };\n\nexport type StateDiffItem = { key: string; value: string };\n\nexport type Nonces = { [address: string]: Nonce };\n\nexport type Nonce = string;\n\nexport type DeployedContracts = DeployedContractItem[];\n\nexport type OldDeclaredContracts = string[];\n\nexport type DeclaredClasses = DeclaredClass[];\n\nexport type DeclaredClass = { class_hash: string; compiled_class_hash: string };\n\nexport type ReplacedClasses = string[]; // no definition is it array of string ?\n\nexport type Endpoints = {\n get_contract_addresses: {\n QUERY: never;\n REQUEST: never;\n RESPONSE: GetContractAddressesResponse;\n };\n add_transaction: {\n QUERY: never;\n REQUEST: Transaction;\n RESPONSE: AddTransactionResponse;\n };\n get_transaction: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: GetTransactionResponse;\n };\n get_transaction_status: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: GetTransactionStatusResponse;\n };\n get_transaction_trace: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: TransactionTraceResponse;\n };\n get_transaction_receipt: {\n QUERY: {\n transactionHash: string;\n };\n REQUEST: never;\n RESPONSE: TransactionReceiptResponse;\n };\n get_nonce: {\n QUERY: {\n contractAddress: string;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: Nonce;\n };\n get_storage_at: {\n QUERY: {\n contractAddress: string;\n key: BigNumberish;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: Storage;\n };\n get_code: {\n QUERY: {\n contractAddress: string;\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: GetCodeResponse;\n };\n get_block: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: GetBlockResponse;\n };\n call_contract: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n };\n REQUEST: CallContractTransaction;\n RESPONSE: CallContractResponse;\n };\n estimate_fee: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransactionItem;\n RESPONSE: EstimateFeeResponse;\n };\n get_class_by_hash: {\n QUERY: {\n classHash: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: CompiledContract;\n };\n get_class_hash_at: {\n QUERY: {\n contractAddress: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: string;\n };\n get_state_update: {\n QUERY: {\n blockHash?: string;\n blockNumber?: BlockNumber;\n };\n REQUEST: never;\n RESPONSE: StateUpdateResponse;\n };\n get_full_contract: {\n QUERY: {\n contractAddress: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: never;\n RESPONSE: CompiledContract;\n };\n estimate_message_fee: {\n QUERY: any;\n REQUEST: any;\n RESPONSE: EstimateFeeResponse;\n };\n simulate_transaction: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransaction;\n RESPONSE: SimulateTransactionResponse;\n };\n estimate_fee_bulk: {\n QUERY: {\n blockIdentifier: BlockIdentifier;\n skipValidate: boolean;\n };\n REQUEST: AccountTransaction;\n RESPONSE: EstimateFeeResponseBulk;\n };\n get_block_traces: {\n QUERY: {\n blockHash?: string;\n blockNumber?: BlockNumber;\n };\n REQUEST: never;\n RESPONSE: BlockTransactionTracesResponse;\n };\n get_compiled_class_by_class_hash: {\n QUERY: {\n classHash: string;\n blockIdentifier?: BlockIdentifier;\n };\n REQUEST: any;\n RESPONSE: CairoAssembly;\n };\n};\n","export default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failure');\n }\n}\n","import { hexToBytes as hexToBytesNoble } from '@noble/curves/abstract/utils';\n\nimport { BigNumberish } from '../types';\nimport assert from './assert';\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\n/** @deprecated prefer importing from 'types' over 'num' */\nexport type { BigNumberish };\n\n/**\n * Test if string is hex-string\n * @param hex hex-string\n */\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\n/**\n * Convert BigNumberish to bigint\n */\nexport function toBigInt(value: BigNumberish): bigint {\n return BigInt(value);\n}\n\n/**\n * Test if value is bigint\n */\nexport function isBigInt(value: any): value is bigint {\n return typeof value === 'bigint';\n}\n\n/**\n * Convert BigNumberish to hex-string\n * @returns format: hex-string\n */\nexport function toHex(number: BigNumberish): string {\n return addHexPrefix(toBigInt(number).toString(16));\n}\n\n/**\n * Alias of ToHex\n */\nexport const toHexString = toHex;\n\n/**\n * Convert BigNumberish to storage-key-string\n *\n * Same as toHex but conforming to the STORAGE_KEY pattern `^0x0[0-7]{1}[a-fA-F0-9]{0,62}$`.\n *\n * A storage key is represented as up to 62 hex digits, 3 bits, and 5 leading zeroes:\n * `0x0 + [0-7] + 62 hex = 0x + 64 hex`\n * @returns format: storage-key-string\n */\nexport function toStorageKey(number: BigNumberish): string {\n const res = addHexPrefix(toBigInt(number).toString(16).padStart(64, '0'));\n return res;\n}\n\n/**\n * Convert hexadecimal string to decimal string\n * @param hex hex-string\n * @returns format: decimal string\n */\nexport function hexToDecimalString(hex: string): string {\n return BigInt(addHexPrefix(hex)).toString(10);\n}\n\n/**\n * Remove hex string leading zero and lowercase it\n * @example '0x01A...' -> '0x1a..'\n * @param hex hex-string\n * @returns format: hex-string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\n\n/**\n * Asserts input is equal to or greater then lowerBound and lower then upperBound.\n *\n * The `inputName` parameter is used in the assertion message.\n */\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBigInt = BigInt(input);\n const lowerBoundBigInt = BigInt(lowerBound);\n const upperBoundBigInt = BigInt(upperBound);\n\n assert(\n inputBigInt >= lowerBoundBigInt && inputBigInt <= upperBoundBigInt,\n `Message not signable, ${messageSuffix}.`\n );\n}\n\n/**\n * Convert BigNumberish array to decimal string array\n * @returns format: decimal string array\n */\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBigInt(x).toString(10));\n}\n\n/**\n * Convert BigNumberish array to hexadecimal string array\n * @returns format: hex-string array\n */\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(x));\n}\n\n/**\n * Test if string is whole number (0, 1, 2, 3...)\n */\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\n\n/**\n * Convert string to decimal string\n * @returns format: decimal string\n */\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\n/**\n * Convert string to hexadecimal string\n * @returns format: hex-string\n */\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\n/**\n * Convert string array to hex-string array\n * @returns format: hex-string array\n */\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\n/**\n * Convert boolean to \"0\" or \"1\"\n */\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n\n/**\n * Convert hex-string to an array of Bytes (Uint8Array)\n * @param value hex-string\n */\nexport function hexToBytes(value: string): Uint8Array {\n if (!isHex(value)) throw new Error(`${value} need to be a hex-string`);\n\n let adaptedValue: string = removeHexPrefix(value);\n if (adaptedValue.length % 2 !== 0) {\n adaptedValue = `0${adaptedValue}`;\n }\n return hexToBytesNoble(adaptedValue);\n}\n","import { keccak } from '@scure/starknet';\n\nimport { MASK_250 } from '../constants';\nimport { BigNumberish } from '../types';\nimport { addHexPrefix, removeHexPrefix, utf8ToArray } from './encode';\nimport { hexToBytes, isHex, isStringWholeNumber, toHex, toHexString } from './num';\n\n/**\n * Calculate hex-string keccak hash for a given BigNumberish\n *\n * BigNumberish -> hex-string keccak hash\n * @returns format: hex-string\n */\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(BigInt(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(keccak(hexToBytes(addHexPrefix(evenHex))).toString(16));\n}\n\n/**\n * Calculate hex-string keccak hash for a given string\n *\n * String -> hex-string keccak hash\n * @returns format: hex-string\n */\nfunction keccakHex(str: string): string {\n return addHexPrefix(keccak(utf8ToArray(str)).toString(16));\n}\n\n/**\n * Calculate bigint keccak hash for a given string\n *\n * String -> bigint keccak hash\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param str the value you want to get the keccak hash from\n * @returns starknet keccak hash as BigInt\n */\nexport function starknetKeccak(str: string): bigint {\n const hash = BigInt(keccakHex(str));\n // eslint-disable-next-line no-bitwise\n return hash & MASK_250;\n}\n\n/**\n * Calculate hex-string selector for a given abi-function-name\n *\n * Abi-function-name -> hex-string selector\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName ascii-string of 'abi function name'\n * @returns format: hex-string; selector for 'abi function name'\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Calculate hex-string selector from abi-function-name, decimal string or hex string\n *\n * ('abi-function-name' or dec-string or hex-string) -> hex-string selector\n *\n * @param value hex-string | dec-string | ascii-string\n * @returns format: hex-string\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n","import { TEXT_TO_FELT_MAX_LEN } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { isHex, isStringWholeNumber } from './num';\n\n/**\n * Test if string contains only ASCII characters (string can be ascii text)\n */\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n/**\n * Test if string is a Cairo short string (string has less or equal 31 characters)\n */\nexport function isShortString(str: string) {\n return str.length <= TEXT_TO_FELT_MAX_LEN;\n}\n\n/**\n * Test if string contains only numbers (string can be converted to decimal number)\n */\nexport function isDecimalString(str: string): boolean {\n return /^[0-9]*$/i.test(str);\n}\n\n/**\n * Test if value is a free-from string text, and not a hex string or number string\n */\nexport function isText(val: any) {\n return typeof val === 'string' && !isHex(val) && !isStringWholeNumber(val);\n}\n\n/**\n * Test if value is short text\n */\nexport const isShortText = (val: any) => isText(val) && isShortString(val);\n\n/**\n * Test if value is long text\n */\nexport const isLongText = (val: any) => isText(val) && !isShortString(val);\n\n/**\n * Split long text into short strings\n */\nexport function splitLongString(longStr: string): string[] {\n const regex = RegExp(`[^]{1,${TEXT_TO_FELT_MAX_LEN}}`, 'g');\n return longStr.match(regex) || [];\n}\n\n/**\n * Convert an ASCII string to a hexadecimal string.\n * @param str short string (ASCII string, 31 characters max)\n * @returns format: hex-string; 248 bits max\n * @example\n * ```typescript\n * const myEncodedString: string = encodeShortString(\"uri/pict/t38.jpg\");\n * // return hex string (ex.\"0x7572692f706963742f7433382e6a7067\")\n * ```\n */\nexport function encodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\n/**\n * Convert a hexadecimal or decimal string to an ASCII string.\n * @param str representing a 248 bit max number (ex. \"0x1A4F64EA56\" or \"236942575435676423\")\n * @returns format: short string; 31 characters max\n * @example\n * ```typescript\n * const myDecodedString: string = decodeShortString(\"0x7572692f706963742f7433382e6a7067\");\n * // return string (ex.\"uri/pict/t38.jpg\")\n * ```\n */\nexport function decodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (isHex(str)) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n }\n if (isDecimalString(str)) {\n return decodeShortString('0X'.concat(BigInt(str).toString(16)));\n }\n throw new Error(`${str} is not Hex or decimal`);\n}\n","import {\n Abi,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n ContractVersion,\n Litteral,\n Uint,\n Uint256,\n} from '../../types';\nimport { isBigInt, isHex, isStringWholeNumber } from '../num';\nimport { encodeShortString, isShortString, isText } from '../shortString';\nimport { UINT_128_MAX, isUint256 } from '../uint256';\n\n// Intended for internal usage, maybe should be exported somewhere else and not exported to utils\nexport const isLen = (name: string) => /_len$/.test(name);\nexport const isTypeFelt = (type: string) => type === 'felt' || type === 'core::felt252';\nexport const isTypeArray = (type: string) =>\n /\\*/.test(type) ||\n type.startsWith('core::array::Array::') ||\n type.startsWith('core::array::Span::');\nexport const isTypeTuple = (type: string) => /^\\(.*\\)$/i.test(type);\nexport const isTypeNamedTuple = (type: string) => /\\(.*\\)/i.test(type) && type.includes(':');\nexport const isTypeStruct = (type: string, structs: AbiStructs) => type in structs;\nexport const isTypeEnum = (type: string, enums: AbiEnums) => type in enums;\nexport const isTypeOption = (type: string) => type.startsWith('core::option::Option::');\nexport const isTypeResult = (type: string) => type.startsWith('core::result::Result::');\nexport const isTypeUint = (type: string) => Object.values(Uint).includes(type as Uint);\nexport const isTypeLitteral = (type: string) => Object.values(Litteral).includes(type as Litteral);\nexport const isTypeUint256 = (type: string) => type === 'core::integer::u256';\nexport const isTypeBool = (type: string) => type === 'core::bool';\nexport const isTypeContractAddress = (type: string) =>\n type === 'core::starknet::contract_address::ContractAddress';\nexport const isTypeEthAddress = (type: string) =>\n type === 'core::starknet::eth_address::EthAddress';\nexport const isCairo1Type = (type: string) => type.includes('::');\nexport const getArrayType = (type: string) => {\n if (isCairo1Type(type)) {\n return type.substring(type.indexOf('<') + 1, type.lastIndexOf('>'));\n }\n return type.replace('*', '');\n};\n\n/**\n * Test if an ABI comes from a Cairo 1 contract\n * @param abi representing the interface of a Cairo contract\n * @returns TRUE if it is an ABI from a Cairo1 contract\n * @example\n * ```typescript\n * const isCairo1: boolean = isCairo1Abi(myAbi: Abi);\n * ```\n */\nexport function isCairo1Abi(abi: Abi): boolean {\n const { cairo } = getAbiContractVersion(abi);\n if (cairo === undefined) {\n throw Error('Unable to determine Cairo version');\n }\n return cairo === '1';\n}\n\n/**\n * Return ContractVersion (Abi version) based on Abi\n * or undefined for unknown version\n * @param abi\n * @returns string\n */\nexport function getAbiContractVersion(abi: Abi): ContractVersion {\n // determine by interface for \"Cairo 1.2\"\n if (abi.find((it) => it.type === 'interface')) {\n return { cairo: '1', compiler: '2' };\n }\n\n // determine by function io types \"Cairo 1.1\" or \"Cairo 0.0\"\n // find first function with inputs or outputs\n const testFunction = abi.find(\n (it) => it.type === 'function' && (it.inputs.length || it.outputs.length)\n );\n if (!testFunction) {\n return { cairo: undefined, compiler: undefined };\n }\n const io = testFunction.inputs.length ? testFunction.inputs : testFunction.outputs;\n if (isCairo1Type(io[0].type)) {\n return { cairo: '1', compiler: '1' };\n }\n return { cairo: '0', compiler: '0' };\n}\n\n/**\n * named tuple cairo type is described as js object {}\n * struct cairo type are described as js object {}\n * array cairo type are described as js array []\n */\n\n/**\n * Create Uint256 Cairo type (helper for common struct type)\n * @example\n * ```typescript\n * uint256('892349863487563453485768723498');\n * ```\n */\nexport const uint256 = (it: BigNumberish): Uint256 => {\n const bn = BigInt(it);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n // eslint-disable-next-line no-bitwise\n low: (bn & UINT_128_MAX).toString(10),\n // eslint-disable-next-line no-bitwise\n high: (bn >> 128n).toString(10),\n };\n};\n\n/**\n * Create unnamed tuple Cairo type (helper same as common struct type)\n * @example\n * ```typescript\n * tuple(1, '0x101', 16);\n * ```\n */\nexport const tuple = (\n ...args: (BigNumberish | object | boolean)[]\n): Record<number, BigNumberish | object | boolean> => ({ ...args });\n\n/**\n * Create felt Cairo type (cairo type helper)\n * @returns format: felt-string\n */\nexport function felt(it: BigNumberish): string {\n // BN or number\n if (isBigInt(it) || (typeof it === 'number' && Number.isInteger(it))) {\n return it.toString();\n }\n // string text\n if (isText(it)) {\n if (!isShortString(it as string))\n throw new Error(\n `${it} is a long string > 31 chars, felt can store short strings, split it to array of short strings`\n );\n const encoded = encodeShortString(it as string);\n return BigInt(encoded).toString();\n }\n // hex string\n if (typeof it === 'string' && isHex(it)) {\n // toBN().toString\n return BigInt(it).toString();\n }\n // string number (already converted), or unhandled type\n if (typeof it === 'string' && isStringWholeNumber(it)) {\n return it;\n }\n // bool to felt\n if (typeof it === 'boolean') {\n return `${+it}`;\n }\n\n throw new Error(`${it} can't be computed by felt()`);\n}\n","/* eslint-disable no-bitwise */\nimport { BigNumberish, Uint256 } from '../types';\nimport { addHexPrefix } from './encode';\nimport { toBigInt } from './num';\n\n/** @deprecated prefer importing from 'types' over 'uint256' */\nexport type { Uint256 };\n\nexport const UINT_128_MAX = (1n << 128n) - 1n;\nexport const UINT_256_MAX = (1n << 256n) - 1n;\n\n/**\n * Convert Uint256 to bigint\n */\nexport function uint256ToBN(uint256: Uint256) {\n return (toBigInt(uint256.high) << 128n) + toBigInt(uint256.low);\n}\n\n/**\n * Test BigNumberish is smaller or equal 2**256-1\n */\nexport function isUint256(bn: BigNumberish): boolean {\n return toBigInt(bn) <= UINT_256_MAX;\n}\n\n/**\n * Convert BigNumberish (string | number | bigint) to Uint256 (hex)\n */\nexport function bnToUint256(bn: BigNumberish): Uint256 {\n const bi = toBigInt(bn);\n if (!isUint256(bi)) throw new Error('Number is too large');\n return {\n low: addHexPrefix((bi & UINT_128_MAX).toString(16)),\n high: addHexPrefix((bi >> 128n).toString(16)),\n };\n}\n","export type CairoEnumRaw = {\n [key: string]: any;\n};\n\n/**\n * Class to handle Cairo custom Enum\n * @param enumContent object containing the variants and its content. Example :\n * {Success: 234, Warning: undefined, Error: undefined}.\n * Only one variant with a value, object, array.\n * @returns an instance representing a Cairo custom Enum.\n * @example ```typescript\n * const myCairoEnum = new CairoCustomEnum( {Success: undefined, Warning: \"0x7f32ea\", Error: undefined})\n * ```\n */\nexport class CairoCustomEnum {\n /**\n * direct readonly access to variants of the Cairo Custom Enum.\n * @returns a value of type any\n * @example ```typescript\n * const successValue = myCairoEnum.variant.Success;\n */\n readonly variant: CairoEnumRaw;\n\n /**\n * @param enumContent an object with the variants as keys and the content as value. Only one content shall be defined.\n */\n constructor(enumContent: CairoEnumRaw) {\n const variantsList = Object.values(enumContent);\n if (variantsList.length === 0) {\n throw new Error('This Enum must have a least 1 variant');\n }\n const nbActiveVariants = variantsList.filter(\n (content) => typeof content !== 'undefined'\n ).length;\n if (nbActiveVariants !== 1) {\n throw new Error('This Enum must have exactly one active variant');\n }\n this.variant = enumContent;\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo custom Enum.\n */\n public unwrap(): any {\n const variants = Object.entries(this.variant);\n const activeVariant = variants.find((item) => typeof item[1] !== 'undefined');\n if (typeof activeVariant === 'undefined') {\n return undefined;\n }\n return activeVariant[1];\n }\n\n /**\n *\n * @returns the name of the valid variant of a Cairo custom Enum.\n */\n public activeVariant(): string {\n const variants = Object.entries(this.variant);\n const activeVariant = variants.find((item) => typeof item[1] !== 'undefined');\n if (typeof activeVariant === 'undefined') {\n return '';\n }\n return activeVariant[0];\n }\n}\n","export enum CairoOptionVariant {\n Some = 0,\n None = 1,\n}\n\n/**\n * Class to handle Cairo Option\n * @param variant CairoOptionVariant.Some or CairoOptionVariant.None\n * @param someContent value of type T.\n * @returns an instance representing a Cairo Option.\n * @example ```typescript\n * const myOption = new CairoOption<BigNumberish>(CairoOptionVariant.Some, \"0x54dda8\");\n * ```\n */\nexport class CairoOption<T> {\n readonly Some?: T;\n\n readonly None?: boolean;\n\n constructor(variant: CairoOptionVariant, someContent?: T) {\n if (!(variant in CairoOptionVariant)) {\n throw new Error('Wrong variant : should be CairoOptionVariant.Some or .None.');\n }\n if (variant === CairoOptionVariant.Some) {\n if (typeof someContent === 'undefined') {\n throw new Error(\n 'The creation of a Cairo Option with \"Some\" variant needs a content as input.'\n );\n }\n this.Some = someContent;\n this.None = undefined;\n } else {\n this.Some = undefined;\n this.None = true;\n }\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo custom Enum.\n * If None, returns 'undefined'.\n */\n public unwrap(): T | undefined {\n if (this.None) {\n return undefined;\n }\n return this.Some;\n }\n\n /**\n *\n * @returns true if the valid variant is 'isSome'.\n */\n public isSome(): boolean {\n return !(typeof this.Some === 'undefined');\n }\n\n /**\n *\n * @returns true if the valid variant is 'isNone'.\n */\n public isNone(): boolean {\n return this.None === true;\n }\n}\n","export enum CairoResultVariant {\n Ok = 0,\n Err = 1,\n}\n\n/**\n * Class to handle Cairo Result\n * @param variant CairoResultVariant.Ok or CairoResultVariant.Err\n * @param resultContent value of type T or U.\n * @returns an instance representing a Cairo Result.\n * @example ```typescript\n * const myOption = new CairoResult<BigNumberish, CustomError>(CairoResultVariant.Ok, \"0x54dda8\");\n * ```\n */\nexport class CairoResult<T, U> {\n readonly Ok?: T;\n\n readonly Err?: U;\n\n constructor(variant: CairoResultVariant, resultContent: T | U) {\n if (!(variant in CairoResultVariant)) {\n throw new Error('Wrong variant : should be CairoResultVariant.Ok or .Err.');\n }\n if (variant === CairoResultVariant.Ok) {\n this.Ok = resultContent as T;\n this.Err = undefined;\n } else {\n this.Ok = undefined;\n this.Err = resultContent as U;\n }\n }\n\n /**\n *\n * @returns the content of the valid variant of a Cairo Result.\n */\n public unwrap(): T | U {\n if (typeof this.Ok !== 'undefined') {\n return this.Ok;\n }\n if (typeof this.Err !== 'undefined') {\n return this.Err;\n }\n throw new Error('Both Result.Ok and .Err are undefined. Not authorized.');\n }\n\n /**\n *\n * @returns true if the valid variant is 'Ok'.\n */\n public isOk(): boolean {\n return !(typeof this.Ok === 'undefined');\n }\n\n /**\n *\n * @returns true if the valid variant is 'isErr'.\n */\n public isErr(): boolean {\n return !(typeof this.Err === 'undefined');\n }\n}\n","import { isBigInt } from '../num';\nimport { decodeShortString } from '../shortString';\n\nconst guard = {\n isBN: (data: any, type: any, key: any) => {\n if (!isBigInt(data[key]))\n throw new Error(\n `Data and formatter mismatch on ${key}:${type[key]}, expected response data ${key}:${\n data[key]\n } to be BN instead it is ${typeof data[key]}`\n );\n },\n unknown: (data: any, type: any, key: any) => {\n throw new Error(`Unhandled formatter type on ${key}:${type[key]} for data ${key}:${data[key]}`);\n },\n};\n\nexport default function formatter(data: any, type: any, sameType?: any) {\n // match data element with type element\n return Object.entries(data).reduce((acc, [key, value]: [any, any]) => {\n const elType = sameType ?? type[key];\n\n if (!(key in type) && !sameType) {\n // no type definition for element return original element\n acc[key] = value;\n return acc;\n }\n\n if (elType === 'string') {\n if (Array.isArray(data[key])) {\n // long string (felt*)\n const arrayStr = formatter(\n data[key],\n data[key].map((_: any) => elType)\n );\n acc[key] = Object.values(arrayStr).join('');\n return acc;\n }\n guard.isBN(data, type, key);\n acc[key] = decodeShortString(value);\n return acc;\n }\n if (elType === 'number') {\n guard.isBN(data, type, key);\n acc[key] = Number(value);\n return acc;\n }\n if (typeof elType === 'function') {\n acc[key] = elType(value);\n return acc;\n }\n if (Array.isArray(elType)) {\n const arrayObj = formatter(data[key], elType, elType[0]);\n acc[key] = Object.values(arrayObj);\n return acc;\n }\n if (typeof elType === 'object') {\n acc[key] = formatter(data[key], elType);\n return acc;\n }\n\n guard.unknown(data, type, key);\n return acc;\n }, {} as any);\n}\n","import { Abi, FunctionAbi } from '../../../types';\nimport { isLen } from '../cairo';\nimport { AbiParserInterface } from './interface';\n\nexport class AbiParser1 implements AbiParserInterface {\n abi: Abi;\n\n constructor(abi: Abi) {\n this.abi = abi;\n }\n\n /**\n * abi method inputs length without '_len' inputs\n * cairo 0 reducer\n * @param abiMethod FunctionAbi\n * @returns number\n */\n public methodInputsLength(abiMethod: FunctionAbi) {\n return abiMethod.inputs.reduce((acc, input) => (!isLen(input.name) ? acc + 1 : acc), 0);\n }\n\n /**\n * get method definition from abi\n * @param name string\n * @returns FunctionAbi | undefined\n */\n public getMethod(name: string): FunctionAbi | undefined {\n return this.abi.find((it) => it.name === name);\n }\n\n /**\n * Get Abi in legacy format\n * @returns Abi\n */\n public getLegacyFormat() {\n return this.abi;\n }\n}\n","import { Abi, FunctionAbi } from '../../../types';\nimport { AbiParserInterface } from './interface';\n\nexport class AbiParser2 implements AbiParserInterface {\n abi: Abi;\n\n constructor(abi: Abi) {\n this.abi = abi;\n }\n\n /**\n * abi method inputs length\n * @param abiMethod FunctionAbi\n * @returns number\n */\n public methodInputsLength(abiMethod: FunctionAbi) {\n return abiMethod.inputs.length;\n }\n\n /**\n * get method definition from abi\n * @param name string\n * @returns FunctionAbi | undefined\n */\n public getMethod(name: string): FunctionAbi | undefined {\n const intf = this.abi.find((it) => it.type === 'interface');\n return intf.items.find((it: any) => it.name === name);\n }\n\n /**\n * Get Abi in legacy format\n * @returns Abi\n */\n public getLegacyFormat(): Abi {\n return this.abi.flatMap((e) => {\n if (e.type === 'interface') {\n return e.items;\n }\n return e;\n });\n }\n}\n","import { Abi, FunctionAbi, RawArgs } from '../../../types';\nimport { isCairo1Abi } from '../cairo';\nimport { AbiParserInterface } from './interface';\nimport { AbiParser1 } from './parser-0-1.1.0';\nimport { AbiParser2 } from './parser-2.0.0';\n\nexport function createAbiParser(abi: Abi): AbiParserInterface {\n const version = getAbiVersion(abi);\n if (version === 0 || version === 1) {\n return new AbiParser1(abi);\n }\n if (version === 2) {\n return new AbiParser2(abi);\n }\n throw Error(`Unsupported ABI version ${version}`);\n}\n\nexport function getAbiVersion(abi: Abi) {\n if (abi.find((it) => it.type === 'interface')) return 2;\n if (isCairo1Abi(abi)) return 1;\n return 0;\n}\n\nexport function isNoConstructorValid(\n method: string,\n argsCalldata: RawArgs,\n abiMethod?: FunctionAbi\n) {\n // No constructor in abi and validly empty args\n return method === 'constructor' && !abiMethod && !argsCalldata.length;\n}\n","/* eslint-disable no-plusplus */\nimport { isCairo1Type, isTypeNamedTuple } from './cairo';\n\nfunction parseNamedTuple(namedTuple: string): any {\n const name = namedTuple.substring(0, namedTuple.indexOf(':'));\n const type = namedTuple.substring(name.length + ':'.length);\n return { name, type };\n}\n\nfunction parseSubTuple(s: string) {\n if (!s.includes('(')) return { subTuple: [], result: s };\n const subTuple: string[] = [];\n let result = '';\n let i = 0;\n while (i < s.length) {\n if (s[i] === '(') {\n let counter = 1;\n const lBracket = i;\n i++;\n while (counter) {\n if (s[i] === ')') counter--;\n if (s[i] === '(') counter++;\n i++;\n }\n subTuple.push(s.substring(lBracket, i));\n result += ' ';\n i--;\n } else {\n result += s[i];\n }\n i++;\n }\n\n return {\n subTuple,\n result,\n };\n}\n\nfunction extractCairo0Tuple(type: string) {\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n\n // Decompose subTuple\n const { subTuple, result } = parseSubTuple(cleanType);\n\n // Recompose subTuple\n let recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n\n // Parse named tuple\n if (isTypeNamedTuple(type)) {\n recomposed = recomposed.reduce((acc, it) => {\n return acc.concat(parseNamedTuple(it));\n }, []);\n }\n\n return recomposed;\n}\n\nfunction extractCairo1Tuple(type: string) {\n // un-named tuples support\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n const { subTuple, result } = parseSubTuple(cleanType);\n const recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n return recomposed;\n}\n\n/**\n * Convert tuple string definition into object like definition\n * @param type tuple string definition\n * @returns object like tuple\n */\nexport default function extractTupleMemberTypes(type: string): (string | object)[] {\n if (isCairo1Type(type)) {\n return extractCairo1Tuple(type);\n }\n return extractCairo0Tuple(type);\n}\n","import { AbiEntry, AbiEnums, AbiStructs, CairoEnum, RawArgsObject } from '../../types';\nimport {\n getArrayType,\n isCairo1Type,\n isLen,\n isTypeArray,\n isTypeEnum,\n isTypeEthAddress,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\nfunction errorU256(key: string) {\n return Error(\n `Your object includes the property : ${key}, containing an Uint256 object without the 'low' and 'high' keys.`\n );\n}\nexport default function orderPropsByAbi(\n unorderedObject: RawArgsObject,\n abiOfObject: AbiEntry[],\n structs: AbiStructs,\n enums: AbiEnums\n): object {\n const orderInput = (unorderedItem: any, abiType: string): any => {\n if (isTypeArray(abiType)) {\n return orderArray(unorderedItem, abiType);\n }\n if (isTypeEnum(abiType, enums)) {\n const abiObj = enums[abiType];\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return orderEnum(unorderedItem, abiObj);\n }\n if (isTypeTuple(abiType)) {\n return orderTuple(unorderedItem, abiType);\n }\n if (isTypeEthAddress(abiType)) {\n return unorderedItem;\n }\n if (isTypeUint256(abiType)) {\n const u256 = unorderedItem;\n if (typeof u256 !== 'object') {\n // BigNumberish --> just copy\n return u256;\n }\n if (!('low' in u256 && 'high' in u256)) {\n throw errorU256(abiType);\n }\n return { low: u256.low, high: u256.high };\n }\n if (isTypeStruct(abiType, structs)) {\n const abiOfStruct = structs[abiType].members;\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return orderStruct(unorderedItem, abiOfStruct);\n }\n // litterals\n return unorderedItem;\n };\n\n const orderStruct = (unorderedObject2: RawArgsObject, abiObject: AbiEntry[]): object => {\n const orderedObject2 = abiObject.reduce((orderedObject, abiParam) => {\n const setProperty = (value?: any) =>\n Object.defineProperty(orderedObject, abiParam.name, {\n enumerable: true,\n value: value ?? unorderedObject2[abiParam.name],\n });\n\n if (unorderedObject2[abiParam.name] === 'undefined') {\n if (isCairo1Type(abiParam.type) || !isLen(abiParam.name)) {\n throw Error(`Your object needs a property with key : ${abiParam.name} .`);\n }\n }\n setProperty(orderInput(unorderedObject2[abiParam.name], abiParam.type));\n return orderedObject;\n }, {});\n return orderedObject2;\n };\n\n function orderArray(myArray: Array<any> | string, abiParam: string): Array<any> | string {\n const typeInArray = getArrayType(abiParam);\n if (typeof myArray === 'string') {\n return myArray; // longstring\n }\n return myArray.map((myElem) => orderInput(myElem, typeInArray));\n }\n\n function orderTuple(unorderedObject2: RawArgsObject, abiParam: string): object {\n const typeList = extractTupleMemberTypes(abiParam);\n const orderedObject2 = typeList.reduce((orderedObject: object, abiTypeCairoX: any, index) => {\n const myObjKeys: string[] = Object.keys(unorderedObject2);\n const setProperty = (value?: any) =>\n Object.defineProperty(orderedObject, index.toString(), {\n enumerable: true,\n value: value ?? unorderedObject2[myObjKeys[index]],\n });\n const abiType: string = abiTypeCairoX?.type ? abiTypeCairoX.type : abiTypeCairoX; // Named tuple, or tuple\n setProperty(orderInput(unorderedObject2[myObjKeys[index]], abiType));\n return orderedObject;\n }, {});\n return orderedObject2;\n }\n\n const orderEnum = (unorderedObject2: CairoEnum, abiObject: AbiEntry): CairoEnum => {\n if (isTypeResult(abiObject.name)) {\n const unorderedResult = unorderedObject2 as CairoResult<any, any>;\n const resultOkType: string = abiObject.name.substring(\n abiObject.name.indexOf('<') + 1,\n abiObject.name.lastIndexOf(',')\n );\n const resultErrType: string = abiObject.name.substring(\n abiObject.name.indexOf(',') + 1,\n abiObject.name.lastIndexOf('>')\n );\n if (unorderedResult.isOk()) {\n return new CairoResult<any, any>(\n CairoResultVariant.Ok,\n orderInput(unorderedObject2.unwrap(), resultOkType)\n );\n }\n return new CairoResult<any, any>(\n CairoResultVariant.Err,\n orderInput(unorderedObject2.unwrap(), resultErrType)\n );\n }\n if (isTypeOption(abiObject.name)) {\n const unorderedOption = unorderedObject2 as CairoOption<any>;\n const resultSomeType: string = abiObject.name.substring(\n abiObject.name.indexOf('<') + 1,\n abiObject.name.lastIndexOf('>')\n );\n if (unorderedOption.isSome()) {\n return new CairoOption<any>(\n CairoOptionVariant.Some,\n orderInput(unorderedOption.unwrap(), resultSomeType)\n );\n }\n // none(())\n return new CairoOption<any>(CairoOptionVariant.None, {});\n }\n // custom Enum\n const unorderedCustomEnum = unorderedObject2 as CairoCustomEnum;\n const variants = Object.entries(unorderedCustomEnum.variant);\n const newEntries = variants.map((variant) => {\n if (typeof variant[1] === 'undefined') {\n return variant;\n }\n const variantType: string = abiObject.type.substring(\n abiObject.type.lastIndexOf('<') + 1,\n abiObject.type.lastIndexOf('>')\n );\n if (variantType === '()') {\n return variant;\n }\n return [variant[0], orderInput(unorderedCustomEnum.unwrap(), variantType)];\n });\n return new CairoCustomEnum(Object.fromEntries(newEntries));\n };\n\n // Order Call Parameters\n const finalOrderedObject = abiOfObject.reduce((orderedObject, abiParam) => {\n const setProperty = (value: any) =>\n Object.defineProperty(orderedObject, abiParam.name, {\n enumerable: true,\n value,\n });\n if (isLen(abiParam.name) && !isCairo1Type(abiParam.type)) {\n return orderedObject;\n }\n setProperty(orderInput(unorderedObject[abiParam.name], abiParam.type));\n return orderedObject;\n }, {});\n return finalOrderedObject;\n}\n","import {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n CairoEnum,\n ParsedStruct,\n Tupled,\n Uint256,\n} from '../../types';\nimport { isText, splitLongString } from '../shortString';\nimport {\n felt,\n getArrayType,\n isTypeArray,\n isTypeEnum,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint256,\n uint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * parse base types\n * @param type type from abi\n * @param val value provided\n * @returns string | string[]\n */\nfunction parseBaseTypes(type: string, val: BigNumberish) {\n switch (true) {\n case isTypeUint256(type):\n // eslint-disable-next-line no-case-declarations\n const el_uint256 = uint256(val);\n return [felt(el_uint256.low), felt(el_uint256.high)];\n default:\n return felt(val);\n }\n}\n\n/**\n * Parse tuple type string to array of known objects\n * @param element request element\n * @param typeStr tuple type string\n * @returns Tupled[]\n */\nfunction parseTuple(element: object, typeStr: string): Tupled[] {\n const memberTypes = extractTupleMemberTypes(typeStr);\n const elements = Object.values(element);\n\n if (elements.length !== memberTypes.length) {\n throw Error(\n `ParseTuple: provided and expected abi tuple size do not match.\n provided: ${elements} \n expected: ${memberTypes}`\n );\n }\n\n return memberTypes.map((it: any, dx: number) => {\n return {\n element: elements[dx],\n type: it.type ?? it,\n };\n });\n}\n\nfunction parseUint256(element: object | BigNumberish) {\n if (typeof element === 'object') {\n const { low, high } = element as Uint256;\n return [felt(low as BigNumberish), felt(high as BigNumberish)];\n }\n const el_uint256 = uint256(element);\n return [felt(el_uint256.low), felt(el_uint256.high)];\n}\n\n/**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @param structs - structs from abi\n * @param enums - enums from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nfunction parseCalldataValue(\n element:\n | ParsedStruct\n | BigNumberish\n | BigNumberish[]\n | CairoOption<any>\n | CairoResult<any, any>\n | CairoEnum,\n type: string,\n structs: AbiStructs,\n enums: AbiEnums\n): string | string[] {\n if (element === undefined) {\n throw Error(`Missing parameter for type ${type}`);\n }\n\n // value is Array\n if (Array.isArray(element)) {\n const result: string[] = [];\n result.push(felt(element.length)); // Add length to array\n const arrayType = getArrayType(type);\n\n return element.reduce((acc, it) => {\n return acc.concat(parseCalldataValue(it, arrayType, structs, enums));\n }, result);\n }\n\n // checking if the passed element is struct\n if (structs[type] && structs[type].members.length) {\n if (isTypeUint256(type)) {\n return parseUint256(element);\n }\n\n if (type === 'core::starknet::eth_address::EthAddress')\n return parseBaseTypes(type, element as BigNumberish);\n\n const { members } = structs[type];\n const subElement = element as any;\n\n return members.reduce((acc, it: AbiEntry) => {\n return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs, enums));\n }, [] as string[]);\n }\n // check if abi element is tuple\n if (isTypeTuple(type)) {\n const tupled = parseTuple(element as object, type);\n\n return tupled.reduce((acc, it: Tupled) => {\n const parsedData = parseCalldataValue(it.element, it.type, structs, enums);\n return acc.concat(parsedData);\n }, [] as string[]);\n }\n // check if u256 C1v0\n if (isTypeUint256(type)) {\n return parseUint256(element);\n }\n // check if Enum\n if (isTypeEnum(type, enums)) {\n const { variants } = enums[type];\n // Option Enum\n if (isTypeOption(type)) {\n const myOption = element as CairoOption<any>;\n if (myOption.isSome()) {\n const listTypeVariant = variants.find((variant) => variant.name === 'Some');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Option has no 'Some' variant.`);\n }\n const typeVariantSome = listTypeVariant.type;\n if (typeVariantSome === '()') {\n return CairoOptionVariant.Some.toString();\n }\n const parsedParameter = parseCalldataValue(\n myOption.unwrap(),\n typeVariantSome,\n structs,\n enums\n );\n if (Array.isArray(parsedParameter)) {\n return [CairoOptionVariant.Some.toString(), ...parsedParameter];\n }\n return [CairoOptionVariant.Some.toString(), parsedParameter];\n }\n return CairoOptionVariant.None.toString();\n }\n // Result Enum\n if (isTypeResult(type)) {\n const myResult = element as CairoResult<any, any>;\n if (myResult.isOk()) {\n const listTypeVariant = variants.find((variant) => variant.name === 'Ok');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Result has no 'Ok' variant.`);\n }\n const typeVariantOk = listTypeVariant.type;\n if (typeVariantOk === '()') {\n return CairoResultVariant.Ok.toString();\n }\n const parsedParameter = parseCalldataValue(\n myResult.unwrap(),\n typeVariantOk,\n structs,\n enums\n );\n if (Array.isArray(parsedParameter)) {\n return [CairoResultVariant.Ok.toString(), ...parsedParameter];\n }\n return [CairoResultVariant.Ok.toString(), parsedParameter];\n }\n // is Result::Err\n const listTypeVariant = variants.find((variant) => variant.name === 'Err');\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Error in abi : Result has no 'Err' variant.`);\n }\n const typeVariantErr = listTypeVariant.type;\n if (typeVariantErr === '()') {\n return CairoResultVariant.Err.toString();\n }\n const parsedParameter = parseCalldataValue(myResult.unwrap(), typeVariantErr, structs, enums);\n if (Array.isArray(parsedParameter)) {\n return [CairoResultVariant.Err.toString(), ...parsedParameter];\n }\n return [CairoResultVariant.Err.toString(), parsedParameter];\n }\n // Custom Enum\n const myEnum = element as CairoCustomEnum;\n const activeVariant: string = myEnum.activeVariant();\n const listTypeVariant = variants.find((variant) => variant.name === activeVariant);\n if (typeof listTypeVariant === 'undefined') {\n throw Error(`Not find in abi : Enum has no '${activeVariant}' variant.`);\n }\n const typeActiveVariant = listTypeVariant.type;\n const numActiveVariant = variants.findIndex((variant) => variant.name === activeVariant); // can not fail due to check of listTypeVariant\n if (typeActiveVariant === '()') {\n return numActiveVariant.toString();\n }\n const parsedParameter = parseCalldataValue(myEnum.unwrap(), typeActiveVariant, structs, enums);\n if (Array.isArray(parsedParameter)) {\n return [numActiveVariant.toString(), ...parsedParameter];\n }\n return [numActiveVariant.toString(), parsedParameter];\n }\n\n if (typeof element === 'object') {\n throw Error(`Parameter ${element} do not align with abi parameter ${type}`);\n }\n return parseBaseTypes(type, element);\n}\n\n/**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param argsIterator - Iterator<any> for value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @param enums - enums from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nexport function parseCalldataField(\n argsIterator: Iterator<any>,\n input: AbiEntry,\n structs: AbiStructs,\n enums: AbiEnums\n): string | string[] {\n const { name, type } = input;\n let { value } = argsIterator.next();\n\n switch (true) {\n // Array\n case isTypeArray(type):\n if (!Array.isArray(value) && !isText(value)) {\n throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`);\n }\n if (typeof value === 'string') {\n // long string match cairo felt*\n value = splitLongString(value);\n }\n return parseCalldataValue(value, input.type, structs, enums);\n\n case type === 'core::starknet::eth_address::EthAddress':\n return parseBaseTypes(type, value);\n // Struct or Tuple\n case isTypeStruct(type, structs) || isTypeTuple(type) || isTypeUint256(type):\n return parseCalldataValue(value as ParsedStruct | BigNumberish[], type, structs, enums);\n\n // Enums\n case isTypeEnum(type, enums):\n return parseCalldataValue(\n value as CairoOption<any> | CairoResult<any, any> | CairoEnum,\n type,\n structs,\n enums\n );\n\n // Felt or unhandled\n default:\n return parseBaseTypes(type, value);\n }\n}\n","/* eslint-disable no-case-declarations */\nimport {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n Args,\n BigNumberish,\n CairoEnum,\n EventEntry,\n ParsedStruct,\n} from '../../types';\nimport { uint256ToBN } from '../uint256';\nimport {\n getArrayType,\n isCairo1Type,\n isLen,\n isTypeArray,\n isTypeBool,\n isTypeEnum,\n isTypeTuple,\n isTypeUint256,\n} from './cairo';\nimport {\n CairoCustomEnum,\n CairoEnumRaw,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * Parse base types\n * @param type type of element\n * @param it iterator\n * @returns bigint | boolean\n */\nfunction parseBaseTypes(type: string, it: Iterator<string>) {\n let temp;\n switch (true) {\n case isTypeBool(type):\n temp = it.next().value;\n return Boolean(BigInt(temp));\n case isTypeUint256(type):\n const low = it.next().value;\n const high = it.next().value;\n return uint256ToBN({ low, high });\n case type === 'core::starknet::eth_address::EthAddress':\n temp = it.next().value;\n return BigInt(temp);\n default:\n temp = it.next().value;\n return BigInt(temp);\n }\n}\n\n/**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param element - element of the field {name: string, type: string}\n * @param structs - structs from abi\n * @return {any} - parsed arguments in format that contract is expecting\n */\nfunction parseResponseValue(\n responseIterator: Iterator<string>,\n element: { name: string; type: string },\n structs?: AbiStructs,\n enums?: AbiEnums\n): BigNumberish | ParsedStruct | boolean | any[] | CairoEnum {\n if (element.type === '()') {\n return {};\n }\n // type uint256 struct (c1v2)\n if (isTypeUint256(element.type)) {\n const low = responseIterator.next().value;\n const high = responseIterator.next().value;\n return uint256ToBN({ low, high });\n }\n\n // type c1 array\n if (isTypeArray(element.type)) {\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n const el: AbiEntry = { name: '', type: getArrayType(element.type) };\n const len = BigInt(responseIterator.next().value); // get length\n while (parsedDataArr.length < len) {\n parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));\n }\n return parsedDataArr;\n }\n\n // type struct\n if (structs && element.type in structs && structs[element.type]) {\n if (element.type === 'core::starknet::eth_address::EthAddress') {\n return parseBaseTypes(element.type, responseIterator);\n }\n return structs[element.type].members.reduce((acc, el) => {\n acc[el.name] = parseResponseValue(responseIterator, el, structs, enums);\n return acc;\n }, {} as any);\n }\n\n // type Enum (only CustomEnum)\n if (enums && element.type in enums && enums[element.type]) {\n const variantNum: number = Number(responseIterator.next().value); // get variant number\n const rawEnum = enums[element.type].variants.reduce((acc, variant, num) => {\n if (num === variantNum) {\n acc[variant.name] = parseResponseValue(\n responseIterator,\n { name: '', type: variant.type },\n structs,\n enums\n );\n return acc;\n }\n acc[variant.name] = undefined;\n return acc;\n }, {} as CairoEnumRaw);\n // Option\n if (element.type.startsWith('core::option::Option')) {\n const content = variantNum === CairoOptionVariant.Some ? rawEnum.Some : undefined;\n return new CairoOption<Object>(variantNum, content);\n }\n // Result\n if (element.type.startsWith('core::result::Result')) {\n let content: Object;\n if (variantNum === CairoResultVariant.Ok) {\n content = rawEnum.Ok;\n } else {\n content = rawEnum.Err;\n }\n return new CairoResult<Object, Object>(variantNum, content);\n }\n // Cairo custom Enum\n const customEnum = new CairoCustomEnum(rawEnum);\n return customEnum;\n }\n\n // type tuple\n if (isTypeTuple(element.type)) {\n const memberTypes = extractTupleMemberTypes(element.type);\n return memberTypes.reduce((acc, it: any, idx) => {\n const name = it?.name ? it.name : idx;\n const type = it?.type ? it.type : it;\n const el = { name, type };\n acc[name] = parseResponseValue(responseIterator, el, structs, enums);\n return acc;\n }, {} as any);\n }\n\n // type c1 array\n if (isTypeArray(element.type)) {\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n const el = { name: '', type: getArrayType(element.type) };\n const len = BigInt(responseIterator.next().value); // get length\n while (parsedDataArr.length < len) {\n parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));\n }\n return parsedDataArr;\n }\n\n // base type\n return parseBaseTypes(element.type, responseIterator);\n}\n\n/**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @param parsedResult\n * @return - parsed response corresponding to the abi structure of the field\n */\nexport default function responseParser(\n responseIterator: Iterator<string>,\n output: AbiEntry | EventEntry,\n structs?: AbiStructs,\n enums?: AbiEnums,\n parsedResult?: Args | ParsedStruct\n): any {\n const { name, type } = output;\n let temp;\n\n switch (true) {\n case isLen(name):\n temp = responseIterator.next().value;\n return BigInt(temp);\n\n case (structs && type in structs) || isTypeTuple(type):\n return parseResponseValue(responseIterator, output, structs, enums);\n\n case enums && isTypeEnum(type, enums):\n return parseResponseValue(responseIterator, output, structs, enums);\n\n case isTypeArray(type):\n // C1 Array\n if (isCairo1Type(type)) {\n return parseResponseValue(responseIterator, output, structs, enums);\n }\n // C0 Array\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct | boolean | any[] | CairoEnum)[] = [];\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n parseResponseValue(\n responseIterator,\n { name, type: output.type.replace('*', '') },\n structs,\n enums\n )\n );\n }\n }\n return parsedDataArr;\n\n default:\n return parseBaseTypes(type, responseIterator);\n }\n}\n","/**\n * Validate cairo contract method arguments\n * Flow: Determine type from abi and than validate against parameter\n */\nimport {\n AbiEntry,\n AbiEnums,\n AbiStructs,\n BigNumberish,\n FunctionAbi,\n Litteral,\n Uint,\n} from '../../types';\nimport assert from '../assert';\nimport { isHex, toBigInt } from '../num';\nimport { isLongText } from '../shortString';\nimport { uint256ToBN } from '../uint256';\nimport {\n getArrayType,\n isLen,\n isTypeArray,\n isTypeBool,\n isTypeEnum,\n isTypeFelt,\n isTypeLitteral,\n isTypeOption,\n isTypeResult,\n isTypeStruct,\n isTypeTuple,\n isTypeUint,\n} from './cairo';\n\nconst validateFelt = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'string' || typeof parameter === 'number' || typeof parameter === 'bigint',\n `Validate: arg ${input.name} should be a felt typed as (String, Number or BigInt)`\n );\n if (typeof parameter === 'string' && !isHex(parameter)) return; // shortstring\n const param = BigInt(parameter.toString(10));\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1266\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n};\n\nconst validateUint = (parameter: any, input: AbiEntry) => {\n if (typeof parameter === 'number') {\n assert(\n parameter <= Number.MAX_SAFE_INTEGER,\n `Validation: Parameter is to large to be typed as Number use (BigInt or String)`\n );\n }\n assert(\n typeof parameter === 'string' ||\n typeof parameter === 'number' ||\n typeof parameter === 'bigint' ||\n (typeof parameter === 'object' && 'low' in parameter && 'high' in parameter),\n `Validate: arg ${input.name} of cairo type ${\n input.type\n } should be type (String, Number or BigInt), but is ${typeof parameter} ${parameter}.`\n );\n const param = typeof parameter === 'object' ? uint256ToBN(parameter) : toBigInt(parameter);\n\n switch (input.type) {\n case Uint.u8:\n assert(\n param >= 0n && param <= 255n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0 - 255]`\n );\n break;\n\n case Uint.u16:\n assert(\n param >= 0n && param <= 65535n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 65535]`\n );\n break;\n\n case Uint.u32:\n assert(\n param >= 0n && param <= 4294967295n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 4294967295]`\n );\n break;\n\n case Uint.u64:\n assert(\n param >= 0n && param <= 2n ** 64n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^64-1]`\n );\n break;\n\n case Uint.u128:\n assert(\n param >= 0n && param <= 2n ** 128n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^128-1]`\n );\n break;\n\n case Uint.u256:\n assert(\n param >= 0n && param <= 2n ** 256n - 1n,\n `Validate: arg ${input.name} is ${input.type} 0 - 2^256-1`\n );\n break;\n\n case Litteral.ClassHash:\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1670\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n break;\n\n case Litteral.ContractAddress:\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1245\n param >= 0n && param <= 2n ** 252n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`\n );\n break;\n default:\n break;\n }\n};\n\nconst validateBool = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'boolean',\n `Validate: arg ${input.name} of cairo type ${input.type} should be type (Boolean)`\n );\n};\n\nconst validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n // c1v2 uint256 in struct\n if (input.type === Uint.u256) {\n validateUint(parameter, input);\n return;\n }\n\n if (input.type === 'core::starknet::eth_address::EthAddress') {\n assert(\n typeof parameter !== 'object',\n `EthAdress type is waiting a BigNumberish. Got ${parameter}`\n );\n const param = BigInt(parameter.toString(10));\n assert(\n // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259\n param >= 0n && param <= 2n ** 160n - 1n,\n `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^160-1]`\n );\n return;\n }\n\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`\n );\n\n // shallow struct validation, only first depth level\n structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(parameter).includes(name),\n `Validate: arg ${input.name} should have a property ${name}`\n );\n });\n};\n\nconst validateEnum = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type Enum (${input.type}), and should be defined as js object (not array)`\n );\n const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(parameter));\n const keys = [...Object.getOwnPropertyNames(parameter), ...methodsKeys];\n if (isTypeOption(input.type) && keys.includes('isSome') && keys.includes('isNone')) {\n return; // Option Enum\n }\n if (isTypeResult(input.type) && keys.includes('isOk') && keys.includes('isErr')) {\n return; // Result Enum\n }\n if (keys.includes('variant') && keys.includes('activeVariant')) {\n return; // Custom Enum\n }\n throw new Error(\n `Validate Enum: argument ${input.name}, type ${input.type}, value received ${parameter}, is not an Enum.`\n );\n};\n\nconst validateTuple = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} should be a tuple (defined as object)`\n );\n // todo: skip tuple structural validation for now\n};\n\nconst validateArray = (parameter: any, input: AbiEntry, structs: AbiStructs, enums: AbiEnums) => {\n const baseType = getArrayType(input.type);\n\n // Long text (special case when parameter is not an array but long text)\n // console.log(\n // 'validate array = ',\n // isTypeFelt(baseType),\n // isLongText(parameter),\n // baseType,\n // parameter\n // );\n if (isTypeFelt(baseType) && isLongText(parameter)) {\n // console.log('long text.');\n return;\n }\n\n assert(Array.isArray(parameter), `Validate: arg ${input.name} should be an Array`);\n\n switch (true) {\n case isTypeFelt(baseType):\n parameter.forEach((param: BigNumberish) => validateFelt(param, input));\n break;\n case isTypeTuple(baseType):\n parameter.forEach((it: any) => validateTuple(it, { name: input.name, type: baseType }));\n break;\n\n case isTypeArray(baseType):\n parameter.forEach((param: BigNumberish) =>\n validateArray(param, { name: '', type: baseType }, structs, enums)\n );\n break;\n case isTypeStruct(baseType, structs):\n parameter.forEach((it: any) =>\n validateStruct(it, { name: input.name, type: baseType }, structs)\n );\n break;\n case isTypeEnum(baseType, enums):\n parameter.forEach((it: any) => validateEnum(it, { name: input.name, type: baseType }));\n break;\n case isTypeUint(baseType) || isTypeLitteral(baseType):\n parameter.forEach((param: BigNumberish) => validateUint(param, input));\n break;\n case isTypeBool(baseType):\n parameter.forEach((param: BigNumberish) => validateBool(param, input));\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n};\n\nexport default function validateFields(\n abiMethod: FunctionAbi,\n args: Array<any>,\n structs: AbiStructs,\n enums: AbiEnums\n) {\n abiMethod.inputs.reduce((acc, input) => {\n const parameter = args[acc];\n\n switch (true) {\n case isLen(input.name):\n return acc;\n case isTypeFelt(input.type):\n validateFelt(parameter, input);\n break;\n case isTypeUint(input.type) || isTypeLitteral(input.type):\n validateUint(parameter, input);\n break;\n case isTypeBool(input.type):\n validateBool(parameter, input);\n break;\n case isTypeArray(input.type):\n validateArray(parameter, input, structs, enums);\n break;\n case isTypeStruct(input.type, structs):\n validateStruct(parameter, input, structs);\n break;\n case isTypeEnum(input.type, enums):\n validateEnum(parameter, input);\n break;\n case isTypeTuple(input.type):\n validateTuple(parameter, input);\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n\n return acc + 1;\n }, 0);\n}\n","/* eslint-disable no-plusplus */\nimport {\n Abi,\n AbiEnums,\n AbiStructs,\n Args,\n ArgsOrCalldata,\n Calldata,\n FunctionAbi,\n HexCalldata,\n RawArgs,\n RawArgsArray,\n Result,\n ValidateType,\n} from '../../types';\nimport assert from '../assert';\nimport { isBigInt, toHex } from '../num';\nimport { getSelectorFromName } from '../selector';\nimport { isLongText, splitLongString } from '../shortString';\nimport { felt, isCairo1Type, isLen } from './cairo';\nimport {\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CairoResult,\n CairoResultVariant,\n} from './enum';\nimport formatter from './formatter';\nimport { createAbiParser, isNoConstructorValid } from './parser';\nimport { AbiParserInterface } from './parser/interface';\nimport orderPropsByAbi from './propertyOrder';\nimport { parseCalldataField } from './requestParser';\nimport responseParser from './responseParser';\nimport validateFields from './validate';\n\nexport * as cairo from './cairo';\n\nexport class CallData {\n abi: Abi;\n\n parser: AbiParserInterface;\n\n protected readonly structs: AbiStructs;\n\n protected readonly enums: AbiEnums;\n\n constructor(abi: Abi) {\n this.structs = CallData.getAbiStruct(abi);\n this.enums = CallData.getAbiEnum(abi);\n this.parser = createAbiParser(abi);\n this.abi = this.parser.getLegacyFormat();\n }\n\n /**\n * Validate arguments passed to the method as corresponding to the ones in the abi\n * @param type ValidateType - type of the method\n * @param method string - name of the method\n * @param args ArgsOrCalldata - arguments that are passed to the method\n */\n public validate(type: ValidateType, method: string, args: ArgsOrCalldata = []) {\n // ensure provided method of type exists\n if (type !== ValidateType.DEPLOY) {\n const invocableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view' || abi.state_mutability === 'view';\n return type === ValidateType.INVOKE ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invocableFunctionNames.includes(method),\n `${type === ValidateType.INVOKE ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // get requested method from abi\n const abiMethod = this.abi.find((abi) =>\n type === ValidateType.DEPLOY\n ? abi.name === method && abi.type === 'constructor'\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n\n if (isNoConstructorValid(method, args, abiMethod)) {\n return;\n }\n\n // validate arguments length\n const inputsLength = this.parser.methodInputsLength(abiMethod);\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n\n // validate parameters\n validateFields(abiMethod, args, this.structs, this.enums);\n }\n\n /**\n * Compile contract callData with abi\n * Parse the calldata by using input fields from the abi for that method\n * @param method string - method name\n * @param args 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).\n * @return Calldata - parsed arguments in format that contract is expecting\n * @example\n * ```typescript\n * const calldata = myCallData.compile(\"constructor\", [\"0x34a\", [1, 3n]]);\n * ```\n * ```typescript\n * const calldata2 = myCallData.compile(\"constructor\", {list:[1, 3n], balance:\"0x34\"}); // wrong order is valid\n * ```\n */\n public compile(method: string, argsCalldata: RawArgs): Calldata {\n const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method) as FunctionAbi;\n\n if (isNoConstructorValid(method, argsCalldata, abiMethod)) {\n return [];\n }\n\n let args: RawArgsArray;\n if (Array.isArray(argsCalldata)) {\n args = argsCalldata;\n } else {\n // order the object\n const orderedObject = orderPropsByAbi(\n argsCalldata,\n abiMethod.inputs,\n this.structs,\n this.enums\n );\n // console.log('ordered =', orderedObject);\n args = Object.values(orderedObject);\n // // validate array elements to abi\n validateFields(abiMethod, args, this.structs, this.enums);\n }\n\n const argsIterator = args[Symbol.iterator]();\n\n const callArray = abiMethod.inputs.reduce(\n (acc, input) =>\n isLen(input.name) && !isCairo1Type(input.type)\n ? acc\n : acc.concat(parseCalldataField(argsIterator, input, this.structs, this.enums)),\n [] as Calldata\n );\n\n // add compiled property to array object\n Object.defineProperty(callArray, '__compiled__', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callArray;\n }\n\n /**\n * Compile contract callData without abi\n * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data\n * @returns Calldata\n */\n static compile(rawArgs: RawArgs): Calldata {\n const createTree = (obj: object) => {\n const getEntries = (o: object, prefix = '.'): any => {\n const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;\n return Object.entries(oe).flatMap(([k, v]) => {\n let value = v;\n if (isLongText(value)) value = splitLongString(value);\n if (k === 'entrypoint') value = getSelectorFromName(value);\n const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;\n if (isBigInt(value)) return [[`${prefix}${kk}`, felt(value)]];\n if (Object(value) === value) {\n const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));\n const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];\n if (keys.includes('isSome') && keys.includes('isNone')) {\n // Option\n const myOption = value as CairoOption<any>;\n const variantNb = myOption.isSome()\n ? CairoOptionVariant.Some\n : CairoOptionVariant.None;\n if (myOption.isSome())\n return getEntries({ 0: variantNb, 1: myOption.unwrap() }, `${prefix}${kk}.`);\n return [[`${prefix}${kk}`, felt(variantNb)]];\n }\n if (keys.includes('isOk') && keys.includes('isErr')) {\n // Result\n const myResult = value as CairoResult<any, any>;\n const variantNb = myResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err;\n return getEntries({ 0: variantNb, 1: myResult.unwrap() }, `${prefix}${kk}.`);\n }\n if (keys.includes('variant') && keys.includes('activeVariant')) {\n // CustomEnum\n const myEnum = value as CairoCustomEnum;\n const activeVariant: string = myEnum.activeVariant();\n const listVariants = Object.keys(myEnum.variant);\n const activeVariantNb = listVariants.findIndex(\n (variant: any) => variant === activeVariant\n );\n if (\n typeof myEnum.unwrap() === 'object' &&\n Object.keys(myEnum.unwrap()).length === 0 // empty object : {}\n ) {\n return [[`${prefix}${kk}`, felt(activeVariantNb)]];\n }\n return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`);\n }\n // normal object\n return getEntries(value, `${prefix}${kk}.`);\n }\n return [[`${prefix}${kk}`, felt(value)]];\n });\n };\n const result = Object.fromEntries(getEntries(obj));\n return result;\n };\n\n let callTreeArray;\n if (!Array.isArray(rawArgs)) {\n // flatten structs, tuples, add array length. Process leafs as Felt\n const callTree = createTree(rawArgs);\n // convert to array\n callTreeArray = Object.values(callTree);\n } else {\n // already compiled data but modified or raw args provided as array, recompile it\n // recreate tree\n const callObj = { ...rawArgs };\n const callTree = createTree(callObj);\n callTreeArray = Object.values(callTree);\n }\n\n // add compiled property to array object\n Object.defineProperty(callTreeArray, '__compiled__', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callTreeArray;\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n * @param method string - method name\n * @param response string[] - response from the method\n * @return Result - parsed response corresponding to the abi\n */\n public parse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n\n const parsed = outputs.flat().reduce((acc, output, idx) => {\n const propName = output.name ?? idx;\n acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);\n if (acc[propName] && acc[`${propName}_len`]) {\n delete acc[`${propName}_len`];\n }\n return acc;\n }, {} as Args);\n\n // Cairo1 avoid object.0 structure\n return Object.keys(parsed).length === 1 && 0 in parsed ? (parsed[0] as Result) : parsed;\n }\n\n /**\n * Format cairo method response data to native js values based on provided format schema\n * @param method string - cairo method name\n * @param response string[] - cairo method response\n * @param format object - formatter object schema\n * @returns Result - parsed and formatted response object\n */\n public format(method: string, response: string[], format: object): Result {\n const parsed = this.parse(method, response);\n return formatter(parsed, format);\n }\n\n /**\n * Helper to extract structs from abi\n * @param abi Abi\n * @returns AbiStructs - structs from abi\n */\n static getAbiStruct(abi: Abi): AbiStructs {\n return abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n\n /**\n * Helper to extract enums from abi\n * @param abi Abi\n * @returns AbiEnums - enums from abi\n */\n static getAbiEnum(abi: Abi): AbiEnums {\n const fullEnumList = abi\n .filter((abiEntry) => abiEntry.type === 'enum')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n delete fullEnumList['core::bool'];\n return fullEnumList;\n }\n\n /**\n * Helper: Compile HexCalldata | RawCalldata | RawArgs\n * @param rawCalldata HexCalldata | RawCalldata | RawArgs\n * @returns Calldata\n */\n static toCalldata(rawCalldata: RawArgs = []): Calldata {\n return CallData.compile(rawCalldata);\n }\n\n /**\n * Helper: Convert raw to HexCalldata\n * @param raw HexCalldata | RawCalldata | RawArgs\n * @returns HexCalldata\n */\n static toHex(raw: RawArgs = []): HexCalldata {\n const calldata = CallData.compile(raw);\n return calldata.map((it) => toHex(it));\n }\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable import/extensions */\nimport { poseidonHashMany } from '@scure/starknet';\n\nimport {\n API_VERSION,\n BN_FEE_TRANSACTION_VERSION_1,\n BN_FEE_TRANSACTION_VERSION_2,\n BN_TRANSACTION_VERSION_1,\n BN_TRANSACTION_VERSION_2,\n StarknetChainId,\n TransactionHashPrefix,\n} from '../constants';\nimport {\n BigNumberish,\n Builtins,\n CompiledContract,\n CompiledSierra,\n CompiledSierraCasm,\n ContractEntryPointFields,\n LegacyCompiledContract,\n RawArgs,\n RawCalldata,\n SierraContractEntryPointFields,\n} from '../types';\nimport { CallData } from './calldata';\nimport { felt } from './calldata/cairo';\nimport { starkCurve } from './ec';\nimport { addHexPrefix, utf8ToArray } from './encode';\nimport { parse, stringify } from './json';\nimport { toBigInt, toHex } from './num';\nimport { getSelectorFromName } from './selector';\nimport { encodeShortString } from './shortString';\n\nexport * as poseidon from '@noble/curves/abstract/poseidon';\nexport * from './selector'; // Preserve legacy export structure\n\nexport const transactionVersion = BN_TRANSACTION_VERSION_1;\nexport const transactionVersion_2 = BN_TRANSACTION_VERSION_2;\nexport const feeTransactionVersion = BN_FEE_TRANSACTION_VERSION_1;\nexport const feeTransactionVersion_2 = BN_FEE_TRANSACTION_VERSION_2;\n\n/**\n * Return transaction versions based on version type, default version type is 'transaction'\n */\nexport function getVersionsByType(versionType?: 'fee' | 'transaction') {\n return versionType === 'fee'\n ? { v1: feeTransactionVersion, v2: feeTransactionVersion_2 }\n : { v1: transactionVersion, v2: transactionVersion_2 };\n}\n\n/**\n * Compute pedersen hash from data\n * @returns format: hex-string - pedersen hash\n */\nexport function computeHashOnElements(data: BigNumberish[]): string {\n return [...data, data.length]\n .reduce((x: BigNumberish, y: BigNumberish) => starkCurve.pedersen(toBigInt(x), toBigInt(y)), 0)\n .toString();\n}\n\n/**\n * Calculate transaction pedersen hash for common properties\n *\n * Following implementation is based on this python [implementation #](https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py)\n * @returns format: hex-string\n */\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: RawCalldata,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\n/**\n * Calculate deploy transaction hash\n * @returns format: hex-string\n */\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: RawCalldata,\n version: BigNumberish,\n chainId: StarknetChainId,\n constructorName: string = 'constructor'\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName(constructorName),\n constructorCalldata,\n 0,\n chainId\n );\n}\n\n/**\n * Calculate declare transaction hash\n * @param classHash hex-string\n * @param compiledClassHash hex-string\n * @returns format: hex-string\n */\nexport function calculateDeclareTransactionHash(\n classHash: string,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish,\n compiledClassHash?: string\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce, ...(compiledClassHash ? [compiledClassHash] : [])]\n );\n}\n\n/**\n * Calculate deploy_account transaction hash\n * @returns format: hex-string\n */\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\n/**\n * Calculate invoke transaction hash\n * @returns format: hex-string\n */\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: RawCalldata,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\n/**\n * Calculate contract address from class hash\n * @returns format: hex-string\n */\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawArgs,\n deployerAddress: BigNumberish\n) {\n const compiledCalldata = CallData.compile(constructorCalldata);\n const constructorCalldataHash = computeHashOnElements(compiledCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = felt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n return computeHashOnElements([\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ]);\n}\n\nfunction nullSkipReplacer(key: string, value: any) {\n if (key === 'attributes' || key === 'accessible_scopes') {\n return Array.isArray(value) && value.length === 0 ? undefined : value;\n }\n\n if (key === 'debug_info') {\n return null;\n }\n\n return value === null ? undefined : value;\n}\n\n/**\n * Format json-string to conform starknet json-string\n * @param json json-string\n * @returns format: json-string\n */\nexport function formatSpaces(json: string) {\n let insideQuotes = false;\n const newString = [];\n // eslint-disable-next-line no-restricted-syntax\n for (const char of json) {\n if (char === '\"' && (newString.length > 0 && newString.slice(-1)[0] === '\\\\') === false) {\n insideQuotes = !insideQuotes;\n }\n if (insideQuotes) {\n newString.push(char);\n } else {\n // eslint-disable-next-line no-nested-ternary\n newString.push(char === ':' ? ': ' : char === ',' ? ', ' : char);\n }\n }\n return newString.join('');\n}\n\n/**\n * Compute hinted class hash for legacy compiled contract (Cairo 0)\n * @returns format: hex-string\n */\nexport default function computeHintedClassHash(compiledContract: LegacyCompiledContract) {\n const { abi, program } = compiledContract;\n const contractClass = { abi, program };\n const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));\n\n return addHexPrefix(starkCurve.keccak(utf8ToArray(serializedJson)).toString(16));\n}\n\n/**\n * Computes the class hash for legacy compiled contract (Cairo 0)\n * @returns format: hex-string\n */\nexport function computeLegacyContractClassHash(contract: LegacyCompiledContract | string) {\n const compiledContract =\n typeof contract === 'string' ? (parse(contract) as LegacyCompiledContract) : contract;\n\n const apiVersion = toHex(API_VERSION);\n\n const externalEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.EXTERNAL.flatMap((e) => [e.selector, e.offset])\n );\n\n const l1HandlerEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.L1_HANDLER.flatMap((e) => [e.selector, e.offset])\n );\n\n const constructorEntryPointHash = computeHashOnElements(\n compiledContract.entry_points_by_type.CONSTRUCTOR.flatMap((e) => [e.selector, e.offset])\n );\n\n const builtinsHash = computeHashOnElements(\n compiledContract.program.builtins.map((s) => encodeShortString(s))\n );\n\n const hintedClassHash = computeHintedClassHash(compiledContract);\n\n const dataHash = computeHashOnElements(compiledContract.program.data);\n\n return computeHashOnElements([\n apiVersion,\n externalEntryPointsHash,\n l1HandlerEntryPointsHash,\n constructorEntryPointHash,\n builtinsHash,\n hintedClassHash,\n dataHash,\n ]);\n}\n\n// Cairo 1 code\n\nfunction hashBuiltins(builtins: Builtins) {\n return poseidonHashMany(\n builtins.flatMap((it: any) => {\n return BigInt(encodeShortString(it));\n })\n );\n}\n\nfunction hashEntryPoint(data: ContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.offset), hashBuiltins(it.builtins)];\n });\n return poseidonHashMany(base);\n}\n\n/**\n * Compute compiled class hash for contract (Cairo 1)\n * @returns format: hex-string\n */\nexport function computeCompiledClassHash(casm: CompiledSierraCasm) {\n const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';\n\n // Hash compiled class version\n const compiledClassVersion = BigInt(encodeShortString(COMPILED_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPoint(casm.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPoint(casm.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);\n\n // Hash bytecode.\n const bytecode = poseidonHashMany(casm.bytecode.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n bytecode,\n ])\n );\n}\n\nfunction hashEntryPointSierra(data: SierraContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.function_idx)];\n });\n return poseidonHashMany(base);\n}\n\nfunction hashAbi(sierra: CompiledSierra) {\n const indentString = formatSpaces(stringify(sierra.abi, null));\n return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(indentString)).toString(16)));\n}\n\n/**\n * Compute sierra contract class hash (Cairo 1)\n * @returns format: hex-string\n */\nexport function computeSierraContractClassHash(sierra: CompiledSierra) {\n const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';\n\n // Hash class version\n const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);\n\n // Hash abi_hash.\n const abiHash = hashAbi(sierra);\n\n // Hash Sierra program.\n const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n abiHash,\n sierraProgram,\n ])\n );\n}\n\n/**\n * Compute ClassHash (sierra or legacy) based on provided contract\n * @returns format: hex-string\n */\nexport function computeContractClassHash(contract: CompiledContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n\n if ('sierra_program' in compiledContract) {\n return computeSierraContractClassHash(compiledContract as CompiledSierra);\n }\n\n return computeLegacyContractClassHash(compiledContract as LegacyCompiledContract);\n}\n","// TODO rename\nexport * as starkCurve from '@scure/starknet';\nexport * as weierstrass from '@noble/curves/abstract/weierstrass';\n","// the ts-ignore suppresses an esm to cjs import error that is resolved with bundling\n// @ts-ignore\nimport * as json from 'lossless-json';\n\n/**\n * Convert string to number or bigint based on size\n */\nconst parseIntAsNumberOrBigInt = (x: string) => {\n if (!json.isInteger(x)) return parseFloat(x);\n const v = parseInt(x, 10);\n return Number.isSafeInteger(v) ? v : BigInt(x);\n};\n\n/**\n * Convert JSON string to JSON object\n *\n * NOTE: the String() wrapping is used so the behavior conforms to JSON.parse()\n * which can accept simple data types but is not represented in the default typing\n * @param x JSON string\n */\nexport const parse = (x: string): any => json.parse(String(x), undefined, parseIntAsNumberOrBigInt);\n\n/**\n * Convert JSON string to JSON object with all numbers as bigint\n * @param x JSON string\n */\nexport const parseAlwaysAsBig = (x: string): any =>\n json.parse(String(x), undefined, json.parseNumberAndBigInt);\n\n/**\n * Convert JSON object to JSON string\n *\n * NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()\n * which can also return undefined but is not represented in the default typing\n * @returns JSON string\n */\nexport const stringify = (\n value: json.JavaScriptValue,\n replacer?: any,\n space?: string | number | undefined,\n numberStringifiers?: json.NumberStringifier[] | undefined\n): string => json.stringify(value, replacer, space, numberStringifiers)!;\n\n/** @deprecated equivalent to 'stringify', alias will be removed */\nexport const stringifyAlwaysAsBig = stringify;\n","import { getStarkKey, utils } from '@scure/starknet';\nimport { gzip, ungzip } from 'pako';\n\nimport { ArraySignatureType, BigNumberish, CompressedProgram, Program, Signature } from '../types';\nimport { addHexPrefix, arrayBufferToString, atobUniversal, btoaUniversal } from './encode';\nimport { parse, stringify } from './json';\nimport {\n bigNumberishArrayToDecimalStringArray,\n bigNumberishArrayToHexadecimalStringArray,\n toBigInt,\n toHex,\n} from './num';\n\n/**\n * Compress compiled Cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram Representing the compiled cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\n/**\n * Decompress compressed compiled Cairo program\n * @param base64 Compressed program\n * @returns Parsed decompressed compiled Cairo program\n */\nexport function decompressProgram(base64: CompressedProgram) {\n if (Array.isArray(base64)) return base64;\n const decompressed = arrayBufferToString(ungzip(atobUniversal(base64)));\n return parse(decompressed);\n}\n\n/**\n * Random Address based on random keyPair\n */\nexport function randomAddress(): string {\n const randomKeyPair = utils.randomPrivateKey();\n return getStarkKey(randomKeyPair);\n}\n\n/**\n * Lowercase and hex prefix string\n *\n * @deprecated Not used internally, naming is confusing based on functionality\n */\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\n/**\n * Format Signature to standard type (hex array)\n * @returns Custom hex array or weierstrass.SignatureType hex array\n */\nexport function formatSignature(sig?: Signature): ArraySignatureType {\n if (!sig) throw Error('formatSignature: provided signature is undefined');\n if (Array.isArray(sig)) {\n return sig.map((it) => toHex(it));\n }\n try {\n const { r, s } = sig;\n return [toHex(r), toHex(s)];\n } catch (e) {\n throw new Error('Signature need to be weierstrass.SignatureType or an array for custom');\n }\n}\n\n/**\n * Format Signature to decimal string array\n */\nexport function signatureToDecimalArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToDecimalStringArray(formatSignature(sig));\n}\n\n/**\n * Format Signature to hex string array\n */\nexport function signatureToHexArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToHexadecimalStringArray(formatSignature(sig));\n}\n\n/**\n * Convert estimated fee to max fee with overhead\n */\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): bigint {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return (toBigInt(estimatedFee) * toBigInt(overHeadPercent)) / 100n;\n}\n","import { ContractClassResponse } from '../types';\nimport {\n CairoContract,\n CompiledSierra,\n LegacyCompiledContract,\n LegacyContractClass,\n SierraContractClass,\n} from '../types/lib/contract/index';\nimport { CompleteDeclareContractPayload, DeclareContractPayload } from '../types/lib/index';\nimport { computeCompiledClassHash, computeContractClassHash } from './hash';\nimport { parse } from './json';\nimport { decompressProgram } from './stark';\n\nexport function isSierra(\n contract: CairoContract | string\n): contract is SierraContractClass | CompiledSierra {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n return 'sierra_program' in compiledContract;\n}\n\nexport function extractContractHashes(\n payload: DeclareContractPayload\n): CompleteDeclareContractPayload {\n const response = { ...payload } as CompleteDeclareContractPayload;\n\n if (isSierra(payload.contract)) {\n if (!payload.compiledClassHash && payload.casm) {\n response.compiledClassHash = computeCompiledClassHash(payload.casm);\n }\n if (!response.compiledClassHash)\n throw new Error(\n 'Extract compiledClassHash failed, provide (CairoAssembly).casm file or compiledClassHash'\n );\n }\n\n response.classHash = payload.classHash ?? computeContractClassHash(payload.contract);\n if (!response.classHash)\n throw new Error('Extract classHash failed, provide (CompiledContract).json file or classHash');\n\n return response;\n}\n\n/**\n * Helper to redeclare response Cairo0 contract\n */\nexport function contractClassResponseToLegacyCompiledContract(ccr: ContractClassResponse) {\n if (isSierra(ccr)) {\n throw Error('ContractClassResponse need to be LegacyContractClass (cairo0 response class)');\n }\n const contract = ccr as LegacyContractClass;\n return { ...contract, program: decompressProgram(contract.program) } as LegacyCompiledContract;\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","import {\n CompiledContract,\n CompiledSierra,\n ContractClass,\n LegacyContractClass,\n SierraContractClass,\n} from '../types';\nimport { isSierra } from './contract';\nimport { formatSpaces } from './hash';\nimport { parse, stringify } from './json';\nimport { compressProgram } from './stark';\n\n/**\n * Helper - Async Sleep for 'delay' time\n */\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\n/**\n * Create Sierra Contract Class from a given Compiled Sierra\n *\n * CompiledSierra -> SierraContractClass\n */\nexport function createSierraContractClass(contract: CompiledSierra): SierraContractClass {\n const result = { ...contract } as any;\n delete result.sierra_program_debug_info;\n result.abi = formatSpaces(stringify(contract.abi));\n result.sierra_program = formatSpaces(stringify(contract.sierra_program));\n result.sierra_program = compressProgram(result.sierra_program);\n return result;\n}\n\n/**\n * Create Contract Class from a given CompiledContract or string\n *\n * (CompiledContract or string) -> ContractClass\n */\nexport function parseContract(contract: CompiledContract | string): ContractClass {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n\n if (!isSierra(contract)) {\n return {\n ...parsedContract,\n ...('program' in parsedContract && { program: compressProgram(parsedContract.program) }),\n } as LegacyContractClass;\n }\n\n return createSierraContractClass(parsedContract as CompiledSierra);\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n BlockStatus,\n CallContractResponse,\n ContractClassResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionResponse,\n SimulateTransactionResponse,\n} from '../../types';\nimport {\n BlockWithTxHashes,\n ContractClass,\n FeeEstimate,\n SimulateTransactionResponse as RPCSimulateTransactionResponse,\n TransactionWithHash,\n} from '../../types/api/rpcspec';\nimport { toBigInt } from '../num';\nimport { estimatedFeeToMaxFee } from '../stark';\nimport { ResponseParser } from '.';\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: BlockWithTxHashes): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: 'block_hash' in res ? res.block_hash : '',\n block_number: 'block_number' in res ? res.block_number : -1,\n new_root: 'new_root' in res ? res.new_root : '',\n parent_hash: res.parent_hash,\n status: 'status' in res ? (res.status as BlockStatus) : BlockStatus.PENDING,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: TransactionWithHash): GetTransactionResponse {\n return {\n calldata: 'calldata' in res ? res.calldata : [],\n contract_address: 'contract_address' in res ? res.contract_address : '',\n sender_address: 'sender_address' in res ? res.sender_address : '',\n max_fee: 'max_fee' in res ? res.max_fee : '',\n nonce: 'nonce' in res ? res.nonce : '',\n signature: 'signature' in res ? res.signature : [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: FeeEstimate[]): EstimateFeeResponse {\n return {\n overall_fee: toBigInt(res[0].overall_fee),\n gas_consumed: toBigInt(res[0].gas_consumed),\n gas_price: toBigInt(res[0].gas_price),\n };\n }\n\n public parseFeeEstimateBulkResponse(res: FeeEstimate[]): EstimateFeeResponseBulk {\n return res.map((val) => ({\n overall_fee: toBigInt(val.overall_fee),\n gas_consumed: toBigInt(val.gas_consumed),\n gas_price: toBigInt(val.gas_price),\n }));\n }\n\n public parseCallContractResponse(res: string[]): CallContractResponse {\n return {\n result: res,\n };\n }\n\n public parseSimulateTransactionResponse(\n res: RPCSimulateTransactionResponse\n ): SimulateTransactionResponse {\n return res.map((it) => {\n return {\n ...it,\n suggestedMaxFee: estimatedFeeToMaxFee(BigInt(it.fee_estimation.overall_fee)),\n };\n });\n }\n\n public parseContractClassResponse(res: ContractClass): ContractClassResponse {\n return {\n ...res,\n abi: typeof res.abi === 'string' ? JSON.parse(res.abi) : res.abi,\n };\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nexport function fixStack(target: Error, fn: Function = target.constructor) {\n const { captureStackTrace } = Error as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n captureStackTrace && captureStackTrace(target, fn);\n}\n\nexport function fixProto(target: Error, prototype: {}) {\n const { setPrototypeOf } = Object as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions, no-proto, no-param-reassign\n setPrototypeOf ? setPrototypeOf(target, prototype) : ((target as any).__proto__ = prototype);\n}\n\n/* eslint-disable max-classes-per-file */\nexport class CustomError extends Error {\n name!: string;\n\n constructor(message?: string) {\n super(message);\n // set error name as constructor name, make it not enumerable to keep native Error behavior\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target#new.target_in_constructors\n // see https://github.com/adriengibrat/ts-custom-error/issues/30\n Object.defineProperty(this, 'name', {\n value: new.target.name,\n enumerable: false,\n configurable: true,\n });\n // fix the extended error prototype chain\n // because typescript __extends implementation can't\n // see https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n fixProto(this, new.target.prototype);\n // try to remove contructor from stack trace\n fixStack(this);\n }\n}\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { StarknetChainId, ZERO } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = BigInt(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = BigInt(basicAlphabet.length);\nconst bigAlphabetSize = BigInt(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = BigInt(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: bigint[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (subdomain !== ZERO) {\n const code = subdomain % basicSizePlusOne;\n subdomain /= basicSizePlusOne;\n if (code === BigInt(basicAlphabet.length)) {\n const nextSubdomain = subdomain / bigAlphabetSizePlusOne;\n if (nextSubdomain === ZERO) {\n const code2 = subdomain % bigAlphabetSizePlusOne;\n subdomain = nextSubdomain;\n if (code2 === ZERO) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[Number(code2) - 1];\n } else {\n const code2 = subdomain % bigAlphabetSize;\n decoded += bigAlphabet[Number(code2)];\n subdomain /= bigAlphabetSize;\n }\n } else decoded += basicAlphabet[Number(code)];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n\n if (!decoded) {\n return decoded;\n }\n\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): bigint {\n let encoded = BigInt(0);\n let multiplier = BigInt(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = BigInt(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add 0\n multiplier *= basicSizePlusOne;\n } else {\n encoded += multiplier * bnIndex;\n multiplier *= basicSizePlusOne;\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded += multiplier * BigInt(newid);\n multiplier *= bigAlphabetSize;\n }\n }\n\n return encoded;\n}\n\nexport const enum StarknetIdContract {\n MAINNET = '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678',\n TESTNET = '0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce',\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n switch (chainId) {\n case StarknetChainId.SN_MAIN:\n return StarknetIdContract.MAINNET;\n\n case StarknetChainId.SN_GOERLI:\n return StarknetIdContract.TESTNET;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { BigNumberish } from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { ProviderInterface } from './interface';\n\nexport async function getStarkName(\n provider: ProviderInterface,\n address: BigNumberish,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: CallData.compile({\n address,\n }),\n });\n const decimalDomain = hexDomain.result.map((element) => BigInt(element)).slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n if (!stringDomain) {\n throw Error('Starkname not found');\n }\n\n return stringDomain;\n } catch (e) {\n if (e instanceof Error && e.message === 'Starkname not found') {\n throw e;\n }\n throw Error('Could not get stark name');\n }\n}\n\nexport async function getAddressFromStarkName(\n provider: ProviderInterface,\n name: string,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: CallData.compile({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n throw Error('Could not get address from stark name');\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport {\n BigNumberish,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n SequencerIdentifier,\n} from '../types';\nimport { isHex, toHex } from '../utils/num';\n\n/** @deprecated prefer importing from 'types' over 'provider/utils' */\nexport type { BlockIdentifier };\n\n/**\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(hashValue);\n}\n\n/**\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\nexport const validBlockTags = Object.values(BlockTag);\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'bigint') {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (\n typeof __identifier === 'string' &&\n validBlockTags.includes(__identifier as BlockTag)\n ) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = BlockTag.pending;\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n // TODO: fix any\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n\n get sequencerIdentifier(): SequencerIdentifier {\n return this.hash !== null\n ? { blockHash: this.hash as string }\n : { blockNumber: (this.number ?? this.tag) as BlockNumber };\n }\n}\n","import {\n HEX_STR_TRANSACTION_VERSION_1,\n HEX_STR_TRANSACTION_VERSION_2,\n NetworkName,\n RPC_GOERLI_NODES,\n RPC_MAINNET_NODES,\n StarknetChainId,\n} from '../constants';\nimport {\n AccountInvocationItem,\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n BlockTag,\n Call,\n ContractVersion,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n GetCodeResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n RPC,\n RpcProviderOptions,\n TransactionType,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getAbiContractVersion } from '../utils/calldata/cairo';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName, getVersionsByType } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport { getHexStringArray, toHex, toStorageKey } from '../utils/num';\nimport { wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { decompressProgram, signatureToHexArray } from '../utils/stark';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block } from './utils';\n\nexport const getDefaultNodeUrl = (networkName?: NetworkName, mute: boolean = false): string => {\n if (!mute)\n // eslint-disable-next-line no-console\n console.warn('Using default public node url, please provide nodeUrl in provider options!');\n const nodes = networkName === NetworkName.SN_MAIN ? RPC_MAINNET_NODES : RPC_GOERLI_NODES;\n const randIdx = Math.floor(Math.random() * nodes.length);\n return nodes[randIdx];\n};\n\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: BlockTag.pending,\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId?: StarknetChainId;\n\n constructor(optionsOrProvider?: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier, chainId } = optionsOrProvider || {};\n if (Object.values(NetworkName).includes(nodeUrl as NetworkName)) {\n // Network name provided for nodeUrl\n this.nodeUrl = getDefaultNodeUrl(nodeUrl as NetworkName, optionsOrProvider?.default);\n } else if (nodeUrl) {\n // NodeUrl provided\n this.nodeUrl = nodeUrl;\n } else {\n // none provided fallback to default testnet\n this.nodeUrl = getDefaultNodeUrl(undefined, optionsOrProvider?.default);\n }\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n this.chainId = chainId; // setting to a non-null value skips making a request in getChainId()\n }\n\n public fetch(method: string, params?: object, id: string | number = 0) {\n const rpcRequestBody: RPC.JRPC.RequestBody = {\n id,\n jsonrpc: '2.0',\n method,\n ...(params && { params }),\n };\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify(rpcRequestBody),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(method: string, params: any, rpcError?: RPC.JRPC.Error, otherError?: any) {\n if (rpcError) {\n const { code, message, data } = rpcError;\n throw new LibraryError(\n `RPC: ${method} with params ${stringify(params)}\\n ${code}: ${message}: ${stringify(data)}`\n );\n }\n if (otherError instanceof LibraryError) {\n throw otherError;\n }\n if (otherError) {\n throw Error(otherError.message);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(method, params, error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(method, params, error?.response?.data, error);\n throw error;\n }\n }\n\n public async getChainId() {\n this.chainId ??= (await this.fetchEndpoint('starknet_chainId')) as StarknetChainId;\n return this.chainId;\n }\n\n /**\n * NEW: Returns the version of the Starknet JSON-RPC specification being used\n */\n public async getSpecVersion() {\n return this.fetchEndpoint('starknet_specVersion');\n }\n\n public async getNonceForAddress(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address,\n block_id,\n });\n }\n\n /**\n * @deprecated use getBlockWithTxHashes or getBlockWithTxs (will be removed on sequencer deprecation)\n */\n public async getBlock(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n /**\n * @deprecated renamed to getBlockLatestAccepted(); (will be removed in next minor version)\n */\n public getBlockHashAndNumber = this.getBlockLatestAccepted;\n\n /**\n * Get the most recent accepted block hash and number\n */\n public async getBlockLatestAccepted() {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n /**\n * @deprecated redundant use getBlockLatestAccepted();\n * Get the most recent accepted block number\n * @returns Number of the latest block\n */\n public async getBlockNumber() {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n public async getBlockWithTxHashes(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getBlockStateUpdate(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n /**\n * @deprecated renamed to getBlockStateUpdate();\n */\n public getStateUpdate = this.getBlockStateUpdate;\n\n public async getBlockTransactionsTraces(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_id });\n }\n\n /**\n * Returns the execution traces of all transactions included in the given block\n * @deprecated renamed to getBlockTransactionsTraces()\n */\n public traceBlockTransactions = this.getBlockTransactionsTraces;\n\n public async getBlockTransactionCount(blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Get the number of transactions in a block given a block id\n * @deprecated renamed to getBlockTransactionCount()\n * @returns Number of transactions\n */\n public getTransactionCount = this.getBlockTransactionCount;\n\n /**\n * Return transactions from pending block\n * @deprecated Instead use getBlock(BlockTag.pending); (will be removed in next minor version)\n */\n public async getPendingTransactions() {\n const { transactions } = await this.getBlock(BlockTag.pending);\n return Promise.all(transactions.map((it) => this.getTransactionByHash(it)));\n }\n\n /**\n * @deprecated use getTransactionByHash or getTransactionByBlockIdAndIndex (will be removed on sequencer deprecation)\n */\n public async getTransaction(txHash: BigNumberish) {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_getTransactionByHash', {\n transaction_hash,\n });\n }\n\n public async getTransactionByBlockIdAndIndex(blockIdentifier: BlockIdentifier, index: number) {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash });\n }\n\n public async getTransactionTrace(txHash: BigNumberish) {\n const transaction_hash = toHex(txHash);\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash });\n }\n\n /**\n * @deprecated renamed to getTransactionTrace();\n * For a given executed transaction, return the trace of its execution, including internal calls\n */\n public traceTransaction = this.getTransactionTrace;\n\n /**\n * NEW: Get the status of a transaction\n */\n public async getTransactionStatus(transactionHash: BigNumberish) {\n const transaction_hash = toHex(transactionHash);\n return this.fetchEndpoint('starknet_getTransactionStatus', { transaction_hash });\n }\n\n /**\n * @deprecated renamed to simulateTransaction();\n */\n public getSimulateTransaction = this.simulateTransaction;\n\n /**\n * @param invocations AccountInvocations\n * @param simulateTransactionOptions blockIdentifier and flags to skip validation and fee charge<br/>\n * - blockIdentifier<br/>\n * - skipValidate (default false)<br/>\n * - skipFeeCharge (default true)<br/>\n */\n public async simulateTransaction(\n invocations: AccountInvocations,\n {\n blockIdentifier = this.blockIdentifier,\n skipValidate = false,\n skipFeeCharge = true,\n }: getSimulateTransactionOptions\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const simulationFlags = [];\n if (skipValidate) simulationFlags.push(RPC.ESimulationFlag.SKIP_VALIDATE);\n if (skipFeeCharge) simulationFlags.push(RPC.ESimulationFlag.SKIP_FEE_CHARGE);\n\n return this.fetchEndpoint('starknet_simulateTransactions', {\n block_id,\n transactions: invocations.map((it) => this.buildTransaction(it)),\n simulation_flags: simulationFlags,\n }).then(this.responseParser.parseSimulateTransactionResponse);\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n const transactionHash = toHex(txHash);\n let { retries } = this;\n let onchain = false;\n let isErrorState = false;\n const retryInterval = options?.retryInterval ?? 5000;\n const errorStates: any = options?.errorStates ?? [\n RPC.ETransactionStatus.REJECTED,\n RPC.ETransactionExecutionStatus.REVERTED,\n ];\n const successStates: any = options?.successStates ?? [\n RPC.ETransactionExecutionStatus.SUCCEEDED,\n RPC.ETransactionStatus.ACCEPTED_ON_L2,\n RPC.ETransactionStatus.ACCEPTED_ON_L1,\n ];\n\n let txStatus: RPC.TransactionStatus;\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n txStatus = await this.getTransactionStatus(transactionHash);\n\n const executionStatus = txStatus.execution_status;\n const finalityStatus = txStatus.finality_status;\n\n if (!finalityStatus) {\n // Transaction is potentially NOT_RECEIVED or RPC not Synced yet\n // so we will retry '{ retries }' times\n const error = new Error('waiting for transaction status');\n throw error;\n }\n\n if (successStates.includes(executionStatus) || successStates.includes(finalityStatus)) {\n onchain = true;\n } else if (errorStates.includes(executionStatus) || errorStates.includes(finalityStatus)) {\n const message = `${executionStatus}: ${finalityStatus}`;\n const error = new Error(message) as Error & { response: RPC.TransactionStatus };\n error.response = txStatus;\n isErrorState = true;\n throw error;\n }\n } catch (error) {\n if (error instanceof Error && isErrorState) {\n throw error;\n }\n\n if (retries <= 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n /**\n * For some nodes even though the transaction has executionStatus SUCCEEDED finalityStatus ACCEPTED_ON_L2, getTransactionReceipt returns \"Transaction hash not found\"\n * Retry until rpc is actually ready to work with txHash\n */\n let txReceipt = null;\n while (txReceipt === null) {\n try {\n // eslint-disable-next-line no-await-in-loop\n txReceipt = await this.getTransactionReceipt(transactionHash);\n } catch (error) {\n if (retries <= 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n retries -= 1;\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n }\n return txReceipt as RPC.TransactionReceipt;\n }\n\n public async getStorageAt(\n contractAddress: BigNumberish,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const parsedKey = toStorageKey(key);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address,\n key: parsedKey,\n block_id,\n });\n }\n\n public async getClassHashAt(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address,\n });\n }\n\n public async getClassByHash(classHash: BigNumberish) {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const class_hash = toHex(classHash);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', {\n class_hash,\n block_id,\n }).then(this.responseParser.parseContractClassResponse);\n }\n\n public async getClassAt(\n contractAddress: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const contract_address = toHex(contractAddress);\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address,\n }).then(this.responseParser.parseContractClassResponse);\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getContractVersion(\n contractAddress: BigNumberish,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: BigNumberish,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: BigNumberish,\n classHash?: BigNumberish,\n { blockIdentifier = this.blockIdentifier, compiler = true }: getContractVersionOptions = {}\n ): Promise<ContractVersion> {\n let contractClass;\n if (contractAddress) {\n contractClass = await this.getClassAt(contractAddress, blockIdentifier);\n } else if (classHash) {\n contractClass = await this.getClass(classHash, blockIdentifier);\n } else {\n throw Error('getContractVersion require contractAddress or classHash');\n }\n\n if (isSierra(contractClass)) {\n if (compiler) {\n const abiTest = getAbiContractVersion(contractClass.abi);\n return { cairo: '1', compiler: abiTest.compiler };\n }\n return { cairo: '1', compiler: undefined };\n }\n return { cairo: '0', compiler: '0' };\n }\n\n /**\n * @deprecated use get*type*EstimateFee (will be refactored based on type after sequencer deprecation)\n */\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.INVOKE,\n ...invocation,\n ...invocationDetails,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n invocation: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DECLARE,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n invocation: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const block_id = new Block(blockIdentifier).identifier;\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('starknet_estimateFee', {\n request: [transaction],\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n { blockIdentifier = this.blockIdentifier, skipValidate = false }: getEstimateFeeBulkOptions\n ) {\n if (skipValidate) {\n // eslint-disable-next-line no-console\n console.warn('getEstimateFeeBulk RPC does not support skipValidate');\n }\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: invocations.map((it) => this.buildTransaction(it, 'fee')),\n block_id,\n }).then(this.responseParser.parseFeeEstimateBulkResponse);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ) {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: CallData.toHex(functionInvocation.calldata),\n type: RPC.ETransactionType.INVOKE,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n signature: signatureToHexArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async declareContract(\n { contract, signature, senderAddress, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ) {\n if (!isSierra(contract)) {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n type: RPC.ETransactionType.DECLARE,\n contract_class: {\n program: contract.program,\n entry_points_by_type: contract.entry_points_by_type,\n abi: contract.abi,\n },\n version: HEX_STR_TRANSACTION_VERSION_1,\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n type: RPC.ETransactionType.DECLARE,\n contract_class: {\n sierra_program: decompressProgram(contract.sierra_program),\n contract_class_version: contract.contract_class_version,\n entry_points_by_type: contract.entry_points_by_type,\n abi: contract.abi,\n },\n compiled_class_hash: compiledClassHash || '',\n version: HEX_STR_TRANSACTION_VERSION_2,\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ) {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n deploy_account_transaction: {\n constructor_calldata: CallData.toHex(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n type: RPC.ETransactionType.DEPLOY_ACCOUNT,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n signature: signatureToHexArray(signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n public async callContract(call: Call, blockIdentifier: BlockIdentifier = this.blockIdentifier) {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: CallData.toHex(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n /**\n * NEW: Estimate the fee for a message from L1\n * @param message Message From L1\n */\n public async estimateMessageFee(\n message: RPC.L1Message,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ) {\n const { from_address, to_address, entry_point_selector, payload } = message;\n const formattedMessage = {\n from_address: toHex(from_address),\n to_address: toHex(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateMessageFee', {\n message: formattedMessage,\n block_id,\n });\n }\n\n /**\n * Returns an object about the sync status, or false if the node is not synching\n * @returns Object with the stats data\n */\n public async getSyncingStats() {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Returns all events matching the given filter\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter) {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n\n /**\n * StarknetId Endpoint (get name from address)\n */\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string) {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n /**\n * StarknetId Endpoint (get address from name)\n */\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string) {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n public buildTransaction(\n invocation: AccountInvocationItem,\n versionType?: 'fee' | 'transaction'\n ): RPC.BaseTransaction {\n const defaultVersions = getVersionsByType(versionType);\n const details = {\n signature: signatureToHexArray(invocation.signature),\n nonce: toHex(invocation.nonce),\n max_fee: toHex(invocation.maxFee || 0),\n };\n\n if (invocation.type === TransactionType.INVOKE) {\n return {\n type: RPC.ETransactionType.INVOKE, // Diff between sequencer and rpc invoke type\n sender_address: invocation.contractAddress,\n calldata: CallData.toHex(invocation.calldata),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DECLARE) {\n if (!isSierra(invocation.contract)) {\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n return {\n // compiled_class_hash\n type: invocation.type,\n contract_class: {\n ...invocation.contract,\n sierra_program: decompressProgram(invocation.contract.sierra_program),\n },\n compiled_class_hash: invocation.compiledClassHash || '',\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v2),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DEPLOY_ACCOUNT) {\n return {\n type: invocation.type,\n constructor_calldata: CallData.toHex(invocation.constructorCalldata || []),\n class_hash: toHex(invocation.classHash),\n contract_address_salt: toHex(invocation.addressSalt || 0),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n throw Error('RPC buildTransaction received unknown TransactionType');\n }\n}\n","import urljoin from 'url-join';\n\nimport { BaseUrl, NetworkName, StarknetChainId } from '../constants';\nimport {\n AccountInvocationItem,\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n BlockTag,\n CairoAssembly,\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n SequencerHttpMethod,\n SequencerProviderOptions,\n SimulateTransactionResponse,\n StateUpdateResponse,\n TransactionExecutionStatus,\n TransactionFinalityStatus,\n TransactionType,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { getAbiContractVersion } from '../utils/calldata/cairo';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport {\n getSelector,\n getSelectorFromName,\n getVersionsByType,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport { getDecimalString, getHexString, getHexStringArray, toBigInt, toHex } from '../utils/num';\nimport { wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress, signatureToDecimalArray } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block } from './utils';\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nconst defaultOptions = {\n network: NetworkName.SN_GOERLI,\n blockIdentifier: BlockTag.pending,\n};\n/**\n * @deprecated Feeder gateway will be removed during November 2023, as Network is switching to P2P Nodes.\n * Use RPC Provider or Default provider (Default provider will be RPC Provider with public nodes and legacy interface/response)\n */\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public headers?: Record<string, string>;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId: StarknetChainId;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n }\n this.chainId =\n optionsOrProvider?.chainId ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case NetworkName.SN_MAIN:\n case StarknetChainId.SN_MAIN:\n return BaseUrl.SN_MAIN;\n case NetworkName.SN_GOERLI:\n case StarknetChainId.SN_GOERLI:\n return BaseUrl.SN_GOERLI;\n default:\n throw new Error('Could not detect base url from NetworkName');\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.SN_MAIN;\n }\n return StarknetChainId.SN_GOERLI;\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n return StarknetChainId.SN_GOERLI;\n }\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n 'estimate_fee_bulk',\n 'simulate_transaction',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: SequencerHttpMethod): Record<string, string> | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n return this.fetch(url, {\n method,\n body: request,\n });\n }\n\n public async fetch(\n endpoint: string,\n options?: {\n method?: SequencerHttpMethod;\n body?: any;\n parseAlwaysAsBigInt?: boolean;\n }\n ): Promise<any> {\n const url = buildUrl(this.baseUrl, '', endpoint);\n const method = options?.method ?? 'GET';\n const headers = this.getHeaders(method);\n const body = stringify(options?.body);\n try {\n const response = await fetch(url, {\n method,\n body,\n headers,\n });\n const textResponse = await response.text();\n\n if (!response.ok) {\n // This will allow the user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n throw new HttpError(response.statusText, response.status);\n }\n throw new GatewayError(responseBody.message, responseBody.code);\n }\n\n const parseChoice = options?.parseAlwaysAsBigInt ? parseAlwaysAsBig : parse;\n return parseChoice(textResponse);\n } catch (error) {\n if (error instanceof Error && !(error instanceof LibraryError))\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${error.message}`);\n\n throw error;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n // TODO - determine best choice once both are fully supported in devnet\n // signature: [],\n // sender_address: contractAddress,\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata: CallData.compile(calldata),\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Nonce> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Storage> {\n const parsedKey = toBigInt(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClassResponse> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n this.responseParser.parseContractClassResponse\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClassResponse> {\n return this.fetchEndpoint('get_class_by_hash', { classHash, blockIdentifier }).then(\n this.responseParser.parseContractClassResponse\n );\n }\n\n public async getCompiledClassByClassHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CairoAssembly> {\n return this.fetchEndpoint('get_compiled_class_by_class_hash', { classHash, blockIdentifier });\n }\n\n public async getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: string,\n classHash?: string,\n { blockIdentifier = this.blockIdentifier, compiler = true }: getContractVersionOptions = {}\n ): Promise<ContractVersion> {\n let contractClass;\n if (contractAddress) {\n contractClass = await this.getClassAt(contractAddress, blockIdentifier);\n } else if (classHash) {\n contractClass = await this.getClassByHash(classHash, blockIdentifier);\n } else {\n throw Error('getContractVersion require contractAddress or classHash');\n }\n\n if (isSierra(contractClass)) {\n if (compiler) {\n const abiTest = getAbiContractVersion(contractClass.abi);\n return { cairo: '1', compiler: abiTest.compiler };\n }\n return { cairo: '1', compiler: undefined };\n }\n return { cairo: '0', compiler: '0' };\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.INVOKE,\n sender_address: functionInvocation.contractAddress,\n calldata: CallData.compile(functionInvocation.calldata ?? []),\n signature: signatureToDecimalArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DEPLOY_ACCOUNT,\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: CallData.compile(constructorCalldata ?? []),\n class_hash: toHex(classHash),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contract, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n if (!isSierra(contract)) {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n contract_class: contract,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n sender_address: senderAddress,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(transactionVersion),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n // Cairo 1\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contract,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(transactionVersion_2),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier, skipValidate);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.INVOKE,\n ...invocation,\n ...invocationDetails,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getDeclareEstimateFee(\n invocation: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DECLARE,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getDeployAccountEstimateFee(\n invocation: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n const transaction = this.buildTransaction(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n ...invocation,\n ...details,\n },\n 'fee'\n );\n return this.fetchEndpoint('estimate_fee', { blockIdentifier, skipValidate }, transaction).then(\n this.responseParser.parseFeeEstimateResponse\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n { blockIdentifier = this.blockIdentifier, skipValidate = false }: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk> {\n const transactions = invocations.map((it) => this.buildTransaction(it, 'fee'));\n return this.fetchEndpoint(\n 'estimate_fee_bulk',\n { blockIdentifier, skipValidate },\n transactions\n ).then(this.responseParser.parseFeeEstimateBulkResponse);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n let res;\n let completed = false;\n let retries = 0;\n const retryInterval = options?.retryInterval ?? 5000;\n const errorStates = options?.errorStates ?? [\n TransactionExecutionStatus.REJECTED,\n TransactionFinalityStatus.NOT_RECEIVED,\n TransactionExecutionStatus.REVERTED,\n ];\n const successStates = options?.successStates ?? [\n TransactionExecutionStatus.SUCCEEDED,\n TransactionFinalityStatus.ACCEPTED_ON_L1,\n TransactionFinalityStatus.ACCEPTED_ON_L2,\n ];\n\n while (!completed) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n res = await this.getTransactionStatus(txHash);\n\n if (TransactionFinalityStatus.NOT_RECEIVED === res.finality_status && retries < 3) {\n retries += 1;\n } else if (\n successStates.includes(res.finality_status) ||\n successStates.includes(res.execution_status)\n ) {\n completed = true;\n } else if (\n errorStates.includes(res.finality_status) ||\n errorStates.includes(res.execution_status)\n ) {\n let message;\n if (res.tx_failure_reason) {\n message = `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`;\n } else if (res.tx_revert_reason) {\n message = `${res.tx_status}: ${res.tx_revert_reason}`;\n } else {\n message = res.tx_status;\n }\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\n }\n\n /**\n * Gets the status of a transaction.\n * @param txHash BigNumberish\n * @returns GetTransactionStatusResponse - the transaction status object\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n * @returns GetContractAddressesResponse - starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n * @param txHash BigNumberish\n * @returns TransactionTraceResponse - the transaction trace\n */\n public async getTransactionTrace(\n txHash: BigNumberish\n ): Promise<Sequencer.TransactionTraceResponse> {\n const txHashHex = toHex(txHash);\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n\n /**\n * Simulate transaction using Sequencer provider\n * WARNING!: Sequencer will process only first element from invocations array\n *\n * @param invocations Array of invocations, but only first invocation will be processed\n * @param blockIdentifier block identifier, default 'latest'\n * @param skipValidate Skip Account __validate__ method\n * @returns\n */\n public async getSimulateTransaction(\n invocations: AccountInvocations,\n {\n blockIdentifier = this.blockIdentifier,\n skipValidate = false,\n skipExecute = false,\n }: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse> {\n if (invocations.length > 1) {\n // eslint-disable-next-line no-console\n console.warn('Sequencer simulate process only first element from invocations list');\n }\n if (skipExecute) {\n // eslint-disable-next-line no-console\n console.warn(\"Sequencer can't skip account __execute__\");\n }\n const transaction = this.buildTransaction(invocations[0]);\n return this.fetchEndpoint(\n 'simulate_transaction',\n {\n blockIdentifier,\n skipValidate: skipValidate ?? false,\n },\n transaction\n ).then(this.responseParser.parseSimulateTransactionResponse);\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<StateUpdateResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_state_update', { ...args }).then(\n this.responseParser.parseGetStateUpdateResponse\n );\n }\n\n // consider adding an optional trace retrieval parameter to the getBlock method\n public async getBlockTraces(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.BlockTransactionTracesResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_block_traces', { ...args });\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n /**\n * Build Single AccountTransaction from Single AccountInvocation\n * @param invocation AccountInvocationItem\n * @param versionType 'fee' | 'transaction' - used to determine default versions\n * @returns AccountTransactionItem\n */\n public buildTransaction(\n invocation: AccountInvocationItem,\n versionType?: 'fee' | 'transaction'\n ): Sequencer.AccountTransactionItem {\n const defaultVersions = getVersionsByType(versionType);\n const details = {\n signature: signatureToDecimalArray(invocation.signature),\n nonce: toHex(invocation.nonce),\n };\n\n if (invocation.type === TransactionType.INVOKE) {\n return {\n type: invocation.type,\n sender_address: invocation.contractAddress,\n calldata: CallData.compile(invocation.calldata ?? []),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n if (invocation.type === TransactionType.DECLARE) {\n if (!isSierra(invocation.contract)) {\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v1), // fee from getDeclareEstimateFee use t.v. instead of feet.v.\n ...details,\n };\n }\n return {\n type: invocation.type,\n contract_class: invocation.contract,\n compiled_class_hash: invocation.compiledClassHash,\n sender_address: invocation.senderAddress,\n version: toHex(invocation.version || defaultVersions.v2), // fee on getDeclareEstimateFee use t.v. instead of feet.v.\n ...details,\n };\n }\n if (invocation.type === TransactionType.DEPLOY_ACCOUNT) {\n return {\n type: invocation.type,\n constructor_calldata: CallData.compile(invocation.constructorCalldata || []),\n class_hash: toHex(invocation.classHash),\n contract_address_salt: toHex(invocation.addressSalt || 0),\n version: toHex(invocation.version || defaultVersions.v1),\n ...details,\n };\n }\n throw Error('Sequencer buildTransaction received unknown TransactionType');\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n SimulateTransactionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n\n abstract parseSimulateTransactionResponse(res: any): SimulateTransactionResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\n\nimport { LibraryError } from '../../provider/errors';\nimport {\n CallContractResponse,\n CompiledContract,\n ContractClassResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n HexCalldata,\n InvokeFunctionResponse,\n Sequencer,\n SimulateTransactionResponse,\n StateUpdateResponse,\n TransactionFinalityStatus,\n TransactionStatus,\n} from '../../types';\nimport { isSierra } from '../contract';\nimport { toBigInt } from '../num';\nimport { parseContract } from '../provider';\nimport { estimatedFeeToMaxFee } from '../stark';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n if (\n res.status === TransactionStatus.NOT_RECEIVED &&\n res.finality_status === TransactionFinalityStatus.NOT_RECEIVED\n ) {\n throw new LibraryError();\n }\n\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as HexCalldata) : [],\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n ...res,\n messages_sent: res.l2_to_l1_messages as any,\n ...('revert_error' in res && { revert_reason: res.revert_error }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(res.gas_usage),\n gas_price: toBigInt(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(item.gas_usage),\n gas_price: toBigInt(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(item.amount),\n };\n });\n }\n\n public parseSimulateTransactionResponse(\n res: Sequencer.SimulateTransactionResponse\n ): SimulateTransactionResponse {\n const suggestedMaxFee =\n 'overall_fee' in res.fee_estimation\n ? res.fee_estimation.overall_fee\n : res.fee_estimation.amount;\n return [\n {\n transaction_trace: res.trace,\n fee_estimation: res.fee_estimation,\n suggestedMaxFee: estimatedFeeToMaxFee(BigInt(suggestedMaxFee)),\n },\n ];\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n\n public parseGetStateUpdateResponse(res: Sequencer.StateUpdateResponse): StateUpdateResponse {\n const nonces = Object.entries(res.state_diff.nonces).map(([contract_address, nonce]) => ({\n contract_address,\n nonce,\n }));\n const storage_diffs = Object.entries(res.state_diff.storage_diffs).map(\n ([address, storage_entries]) => ({ address, storage_entries })\n );\n\n return {\n ...res,\n state_diff: {\n ...res.state_diff,\n storage_diffs,\n nonces,\n },\n };\n }\n\n public parseContractClassResponse(res: CompiledContract): ContractClassResponse {\n const response = isSierra(res) ? res : parseContract(res);\n return {\n ...response,\n abi: typeof response.abi === 'string' ? JSON.parse(response.abi) : response.abi,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","import { StarknetChainId } from '../constants';\nimport {\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n Call,\n CallContractResponse,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n ProviderOptions,\n RpcProviderOptions,\n SequencerProviderOptions,\n SimulateTransactionResponse,\n StateUpdateResponse,\n Storage,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider } from './rpc';\nimport { SequencerProvider } from './sequencer';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\n\n/**\n * @deprecated Use RpcProvider instead. Common Provider will be removed with Sequencer provider.\n */\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new RpcProvider();\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClassResponse> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClassResponse> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: AccountInvocations,\n options: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, options);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier, skipValidate);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(\n transaction,\n details,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, options);\n }\n\n public async getSimulateTransaction(\n invocations: AccountInvocations,\n options?: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse> {\n return this.provider.getSimulateTransaction(invocations, options);\n }\n\n public async getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse> {\n return this.provider.getStateUpdate(blockIdentifier);\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n\n public async getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n public async getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n public async getContractVersion(\n contractAddress?: string,\n classHash?: string,\n options?: getContractVersionOptions\n ) {\n return this.provider.getContractVersion(contractAddress as any, classHash as any, options);\n }\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n TypedData,\n} from '../types';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import {\n BigNumberish,\n CairoVersion,\n Call,\n CallStruct,\n Calldata,\n ParsedStruct,\n RawArgs,\n} from '../types';\nimport { CallData } from './calldata';\nimport { getSelectorFromName } from './hash';\nimport { toBigInt } from './num';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entry points, and one with the concatenated calldata\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = CallData.compile(call.calldata || []);\n callArray.push({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: CallData.compile({ calldata }),\n };\n};\n\n/**\n * Transforms a list of calls into the Cairo 0 `__execute__` calldata.\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]) => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n const compiledCalls = CallData.compile({ callArray });\n return [...compiledCalls, ...calldata] as Calldata;\n};\n\n/**\n * Transforms a list of calls into the Cairo 0 `__execute__` calldata including nonce.\n *\n * @deprecated\n */\nexport const fromCallsToExecuteCalldataWithNonce = (calls: Call[], nonce: BigNumberish) => {\n return [...fromCallsToExecuteCalldata(calls), toBigInt(nonce).toString()] as Calldata;\n};\n\n/**\n * Format Data inside Calls\n *\n * @deprecated Not required for getting execute Calldata\n */\nexport const transformCallsToMulticallArrays_cairo1 = (calls: Call[]) => {\n const callArray = calls.map<CallStruct>((call) => ({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n calldata: CallData.compile(call.calldata || []),\n }));\n return callArray;\n};\n\n/**\n * Transforms a list of calls into the Cairo 1 `__execute__` calldata.\n */\nexport const fromCallsToExecuteCalldata_cairo1 = (calls: Call[]) => {\n // ensure property order\n const orderCalls = calls.map((call) => ({\n contractAddress: call.contractAddress,\n entrypoint: call.entrypoint,\n calldata:\n Array.isArray(call.calldata) && '__compiled__' in call.calldata\n ? call.calldata // Calldata type\n : CallData.compile(call.calldata as RawArgs), // RawArgsObject | RawArgsArray type\n }));\n\n return CallData.compile({ orderCalls });\n};\n\n/**\n * Create `__execute__` Calldata from Calls based on Cairo versions\n */\nexport const getExecuteCalldata = (calls: Call[], cairoVersion: CairoVersion = '0') => {\n if (cairoVersion === '1') {\n return fromCallsToExecuteCalldata_cairo1(calls);\n }\n return fromCallsToExecuteCalldata(calls);\n};\n","import { BigNumberish, StarkNetMerkleType, StarkNetType, TypedData } from '../types';\nimport { computeHashOnElements, getSelectorFromName } from './hash';\nimport { MerkleTree } from './merkle';\nimport { isHex, toHex } from './num';\nimport { encodeShortString } from './shortString';\n\n/** @deprecated prefer importing from 'types' over 'typedData' */\nexport * from '../types/typedData';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(value);\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(encodeShortString(value));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nconst validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependent types are alphabetically sorted.\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values.\n * All dependent types are automatically encoded.\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values.\n * All dependent types are automatically encoded.\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { starkCurve } from './ec';\nimport { toBigInt } from './num';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n /**\n * Create Merkle tree\n * @param leaves hex-string array\n * @returns format: hex-string; Merkle tree root\n */\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves: string[] = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n /**\n * Create pedersen hash from a and b\n * @returns format: hex-string\n */\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBigInt(a), toBigInt(b)].sort((x, y) => (x >= y ? 1 : -1));\n return starkCurve.pedersen(aSorted, bSorted);\n }\n\n /**\n * Return path to leaf\n * @param leaf hex-string\n * @param branch hex-string array\n * @param hashPath hex-string array\n * @returns format: hex-string array\n */\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\n/**\n * Test Merkle tree path\n * @param root hex-string\n * @param leaf hex-string\n * @param path hex-string array\n */\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n TypedData,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { starkCurve } from '../utils/ec';\nimport { buf2hex } from '../utils/encode';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { toHex } from '../utils/num';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected pk: Uint8Array | string;\n\n constructor(pk: Uint8Array | string = starkCurve.utils.randomPrivateKey()) {\n this.pk = pk instanceof Uint8Array ? buf2hex(pk) : toHex(pk);\n }\n\n public async getPubKey(): Promise<string> {\n return starkCurve.getStarkKey(this.pk);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = getExecuteCalldata(transactions, transactionsDetail.cairoVersion);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails): Promise<Signature> {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n CallData.compile(constructorCalldata),\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n {\n classHash,\n senderAddress,\n chainId,\n maxFee,\n version,\n nonce,\n compiledClassHash,\n }: DeclareSignerDetails\n ): Promise<Signature> {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce,\n compiledClassHash\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './num';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatible response with addition of the UDC Event data\n *\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emitted event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\n };\n}\n","import { UDC, ZERO } from '../constants';\nimport { ProviderInterface } from '../provider';\nimport { Provider } from '../provider/default';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n AccountInvocationItem,\n AccountInvocations,\n AccountInvocationsFactoryDetails,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n CairoVersion,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n DeployTransactionReceiptResponse,\n Details,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeBulk,\n EstimateFeeDetails,\n Invocation,\n Invocations,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n ProviderOptions,\n Signature,\n SimulateTransactionDetails,\n SimulateTransactionResponse,\n TransactionType,\n TypedData,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { CallData } from '../utils/calldata';\nimport { extractContractHashes, isSierra } from '../utils/contract';\nimport { starkCurve } from '../utils/ec';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n feeTransactionVersion_2,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { toBigInt, toCairoBool } from '../utils/num';\nimport { parseContract } from '../utils/provider';\nimport { estimatedFeeToMaxFee, formatSignature, randomAddress } from '../utils/stark';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n public cairoVersion: CairoVersion;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n pkOrSigner: Uint8Array | string | SignerInterface,\n cairoVersion?: CairoVersion\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n typeof pkOrSigner === 'string' || pkOrSigner instanceof Uint8Array\n ? new Signer(pkOrSigner)\n : pkOrSigner;\n\n if (cairoVersion) {\n this.cairoVersion = cairoVersion.toString() as CairoVersion;\n }\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce> {\n return super.getNonceForAddress(this.address, blockIdentifier);\n }\n\n private async getNonceSafe(nonce?: BigNumberish) {\n // Patch DEPLOY_ACCOUNT: RPC getNonce for non-existing address will result in error, on Sequencer it is '0x0'\n try {\n return toBigInt(nonce ?? (await this.getNonce()));\n } catch (error) {\n return 0n;\n }\n }\n\n /**\n * Retrieves the Cairo version from the network and sets `cairoVersion` if not already set in the constructor\n * @param classHash if provided detects Cairo version from classHash, otherwise from the account address\n */\n public async getCairoVersion(classHash?: string) {\n if (!this.cairoVersion) {\n const { cairo } = classHash\n ? await super.getContractVersion(undefined, classHash)\n : await super.getContractVersion(this.address);\n this.cairoVersion = cairo;\n }\n return this.cairoVersion;\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion: await this.getCairoVersion(),\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { contract, classHash: providedClassHash, casm, compiledClassHash }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = !isSierra(contract) ? feeTransactionVersion : feeTransactionVersion_2;\n const chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(\n { classHash: providedClassHash, contract, casm, compiledClassHash },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: undefined, // unused parameter\n }\n );\n\n const response = await super.getDeclareEstimateFee(\n declareContractTransaction,\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const version = toBigInt(feeTransactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address, // unused parameter\n maxFee: ZERO,\n cairoVersion: undefined, // unused parameter\n }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n invocations: Invocations,\n { nonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const accountInvocations = await this.accountInvocationsFactory(invocations, {\n versions: [feeTransactionVersion, feeTransactionVersion_2],\n nonce,\n blockIdentifier,\n });\n\n const response = await super.getEstimateFeeBulk(accountInvocations, {\n blockIdentifier,\n skipValidate,\n });\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = getExecuteCalldata(call, await this.getCairoVersion());\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\n };\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: TransactionType.INVOKE, payload: calls },\n transactionsDetail\n ));\n const version = toBigInt(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n cairoVersion: await this.getCairoVersion(),\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = getExecuteCalldata(transactions, await this.getCairoVersion());\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n /**\n * First check if contract is already declared, if not declare it\n * If contract already declared returned transaction_hash is ''.\n * Method will pass even if contract is already declared\n * @param transactionsDetail (optional)\n */\n public async declareIfNot(\n payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n try {\n await this.getClassByHash(declareContractPayload.classHash);\n } catch (error) {\n return this.declare(payload, transactionsDetail);\n }\n return {\n transaction_hash: '',\n class_hash: declareContractPayload.classHash,\n };\n }\n\n public async declare(\n payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n const details = {} as Details;\n\n details.nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n details.maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DECLARE,\n payload: declareContractPayload,\n },\n transactionsDetail\n ));\n details.version = !isSierra(payload.contract) ? transactionVersion : transactionVersion_2;\n details.chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(declareContractPayload, {\n ...details,\n walletAddress: this.address,\n cairoVersion: undefined, // unused parameter\n });\n\n return this.declareContract(declareContractTransaction, details);\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = CallData.compile(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? starkCurve.pedersen(this.address, deploySalt) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash);\n return parseUDCEvent(txReceipt as DeployTransactionReceiptResponse);\n }\n\n public async declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { constructorCalldata, salt, unique } = payload;\n let declare = await this.declareIfNot(payload, details);\n if (declare.transaction_hash !== '') {\n const tx = await this.waitForTransaction(declare.transaction_hash);\n declare = { ...declare, ...tx };\n }\n const deploy = await this.deployContract(\n { classHash: declare.class_hash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare }, deploy };\n }\n\n public deploySelf = this.deployAccount;\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const version = toBigInt(transactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const compiledCalldata = CallData.compile(constructorCalldata);\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, compiledCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n payload: {\n classHash,\n constructorCalldata: compiledCalldata,\n addressSalt,\n contractAddress,\n },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata: compiledCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: CallData.compile({\n hash: toBigInt(hash).toString(),\n signature: formatSignature(signature),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case TransactionType.INVOKE:\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case TransactionType.DECLARE:\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case TransactionType.DEPLOY_ACCOUNT:\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case TransactionType.DEPLOY:\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee;\n }\n\n /**\n * will be renamed to buildDeclareContractTransaction\n */\n public async buildDeclarePayload(\n payload: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const { classHash, contract, compiledClassHash } = extractContractHashes(payload);\n const compressedCompiledContract = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n compiledClassHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contract: compressedCompiledContract,\n compiledClassHash,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\n const compiledCalldata = CallData.compile(constructorCalldata);\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, compiledCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee,\n version,\n nonce,\n addressSalt,\n constructorCalldata: compiledCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata: compiledCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = CallData.compile(constructorCalldata);\n\n return {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n };\n });\n return calls;\n }\n\n public async simulateTransaction(\n invocations: Invocations,\n { nonce, blockIdentifier, skipValidate, skipExecute }: SimulateTransactionDetails = {}\n ): Promise<SimulateTransactionResponse> {\n const accountInvocations = await this.accountInvocationsFactory(invocations, {\n versions: [transactionVersion, transactionVersion_2],\n nonce,\n blockIdentifier,\n });\n\n return super.getSimulateTransaction(accountInvocations, {\n blockIdentifier,\n skipValidate,\n skipExecute,\n });\n }\n\n public async accountInvocationsFactory(\n invocations: Invocations,\n { versions, nonce, blockIdentifier }: AccountInvocationsFactoryDetails\n ) {\n const version = versions[0];\n const safeNonce = await this.getNonceSafe(nonce);\n const chainId = await this.getChainId();\n\n // BULK ACTION FROM NEW ACCOUNT START WITH DEPLOY_ACCOUNT\n const tx0Payload: any = 'payload' in invocations[0] ? invocations[0].payload : invocations[0];\n const cairoVersion =\n invocations[0].type === TransactionType.DEPLOY_ACCOUNT\n ? await this.getCairoVersion(tx0Payload.classHash)\n : await this.getCairoVersion();\n\n return Promise.all(\n ([] as Invocations).concat(invocations).map(async (transaction, index: number) => {\n const txPayload: any = 'payload' in transaction ? transaction.payload : transaction;\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBigInt(Number(safeNonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion,\n };\n const common = {\n type: transaction.type,\n version,\n nonce: toBigInt(Number(safeNonce) + index),\n blockIdentifier,\n };\n\n if (transaction.type === TransactionType.INVOKE) {\n const payload = await this.buildInvocation(\n ([] as Call[]).concat(txPayload),\n signerDetails\n );\n return {\n ...common,\n ...payload,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DECLARE) {\n signerDetails.version = !isSierra(txPayload.contract)\n ? toBigInt(versions[0])\n : toBigInt(versions[1]);\n const payload = await this.buildDeclarePayload(txPayload, signerDetails);\n return {\n ...common,\n ...payload,\n version: signerDetails.version,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DEPLOY_ACCOUNT) {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n return {\n ...common,\n ...payload,\n } as AccountInvocationItem;\n }\n if (transaction.type === TransactionType.DEPLOY) {\n const calls = this.buildUDCContractPayload(txPayload);\n const payload = await this.buildInvocation(calls, signerDetails);\n return {\n ...common,\n ...payload,\n type: TransactionType.INVOKE,\n } as AccountInvocationItem;\n }\n throw Error(`accountInvocationsFactory: unsupported transaction type: ${transaction}`);\n })\n ) as Promise<AccountInvocations>;\n }\n\n public override async getStarkName(\n address: BigNumberish = this.address, // default to the wallet address\n StarknetIdContract?: string\n ): Promise<string> {\n return super.getStarkName(address, StarknetIdContract);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n AccountInvocations,\n BigNumberish,\n BlockIdentifier,\n Call,\n CallContractResponse,\n ContractClassResponse,\n ContractVersion,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n SimulateTransactionResponse,\n StateUpdateResponse,\n Storage,\n getContractVersionOptions,\n getEstimateFeeBulkOptions,\n getSimulateTransactionOptions,\n waitForTransactionOptions,\n} from '../types';\n\nexport abstract class ProviderInterface {\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the Starknet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClassResponse>;\n\n /**\n * Returns the contract class hash in the given block for the contract deployed at the given address\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClassResponse>;\n\n /**\n * Returns the nonce associated with the given address in the given block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce>;\n\n /**\n * Get the value of the storage (contract's variable) at the given address and key\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction object \\{ transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? \\}\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead. Should not be used outside of Account class\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations AccountInvocations - Complete invocations array with account details\n * @param options getEstimateFeeBulkOptions\n * - (optional) blockIdentifier - BlockIdentifier\n * - (optional) skipValidate - boolean (default false)\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: AccountInvocations,\n options?: getEstimateFeeBulkOptions\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param options waitForTransactionOptions\n * - (optional) retryInterval: number | undefined;\n * - (optional) successStates: TransactionStatus[] | undefined;\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\n *\n * @param invocations AccountInvocations - Complete invocations array with account details\n * @param options - getSimulateTransactionOptions\n * - (optional) blockIdentifier - block identifier\n * - (optional) skipValidate - skip cairo __validate__ method\n * - (optional) skipExecute - skip cairo __execute__ method\n * @returns an array of transaction trace and estimated fee\n */\n public abstract getSimulateTransaction(\n invocations: AccountInvocations,\n options?: getSimulateTransactionOptions\n ): Promise<SimulateTransactionResponse>;\n\n /**\n * Gets the state changes in a specific block (result of executing the requested block)\n *\n * @param blockIdentifier - block identifier\n * @returns StateUpdateResponse\n */\n public abstract getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse>;\n\n /**\n * Gets the contract version from the provided address\n * @param contractAddress string\n * @param classHash undefined\n * @param options - getContractVersionOptions\n * - (optional) compiler - (default true) extract compiler version using type tactic from abi\n * - (optional) blockIdentifier - block identifier\n */\n public abstract getContractVersion(\n contractAddress: string,\n classHash?: undefined,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n\n /**\n * Gets the contract version from the provided address\n * @param contractAddress undefined\n * @param classHash\n * @param options - getContractVersionOptions\n * - (optional) compiler - (default true) extract compiler version using type tactic from abi\n * - (optional) blockIdentifier - block identifier\n */\n public abstract getContractVersion(\n contractAddress: undefined,\n classHash: string,\n options?: getContractVersionOptions\n ): Promise<ContractVersion>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider({ rpc: { default: true } });\n","import { ProviderInterface } from '../provider';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n BigNumberish,\n BlockIdentifier,\n CairoVersion,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n Invocations,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n SimulateTransactionDetails,\n SimulateTransactionResponse,\n TypedData,\n UniversalDeployerContractPayload,\n} from '../types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n public abstract cairoVersion: CairoVersion;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload -\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | (multi)'DEPLOY' | (multi)'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n invocations: Invocations,\n details?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - (optional) classHash: computed class hash of compiled contract. Pre-compute it for faster execution.\n - (required for Cairo1 without compiledClassHash) casm: CompiledContract | string;\n - (optional for Cairo1 with casm) compiledClassHash: compiled class hash from casm. Pre-compute it for faster execution.\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n * Method will pass even if contract is already declared (internal using DeclareIfNot)\n *\n * @param payload\n * - contract: compiled contract code\n * - [casm=cairo1]: CairoAssembly | undefined;\n * - [compiledClassHash]: string | undefined;\n * - [classHash]: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - constant nonce = 0\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<bigint>;\n\n /**\n * Simulates an array of transaction and returns an array of transaction trace and estimated fee.\n *\n * @param invocations Invocations containing:\n * - type - transaction type: DECLARE, (multi)DEPLOY, DEPLOY_ACCOUNT, (multi)INVOKE_FUNCTION\n * @param details SimulateTransactionDetails\n *\n * @returns response from simulate_transaction\n */\n public abstract simulateTransaction(\n invocations: Invocations,\n details?: SimulateTransactionDetails\n ): Promise<SimulateTransactionResponse>;\n}\n","import {\n Abi,\n AbiEnums,\n AbiEvents,\n AbiStructs,\n Cairo1Event,\n EventAbi,\n LegacyEvent,\n ParsedEvent,\n ParsedEvents,\n} from '../../types';\nimport { Event as ProviderEvent } from '../../types/provider/response';\nimport responseParser from '../calldata/responseParser';\nimport { starkCurve } from '../ec';\nimport { addHexPrefix, utf8ToArray } from '../encode';\n\nexport function getAbiEvents(abi: Abi): AbiEvents {\n return abi\n .filter((abiEntry) => abiEntry.type === 'event' && (abiEntry.size || abiEntry.kind !== 'enum'))\n .reduce((acc, abiEntry) => {\n const entryName = abiEntry.name.slice(abiEntry.name.lastIndexOf(':') + 1);\n const abiEntryMod = { ...abiEntry };\n abiEntryMod.name = entryName;\n return {\n ...acc,\n [addHexPrefix(starkCurve.keccak(utf8ToArray(entryName)).toString(16))]: abiEntryMod,\n };\n }, {});\n}\n\n/**\n * Parse raw events and structure them into response object based on a contract structs and defined events\n * @param providerReceivedEvents ProviderEvent[] - Array of raw events\n * @param abiEvents AbiEvents - Events defined in the abi\n * @param abiStructs AbiStructs - Structs defined in the abi\n * @return ParsedEvents - parsed events corresponding to the abi\n */\nexport function parseEvents(\n providerReceivedEvents: Array<ProviderEvent>,\n abiEvents: AbiEvents,\n abiStructs: AbiStructs,\n abiEnums: AbiEnums\n): ParsedEvents {\n const ret = providerReceivedEvents.flat().reduce((acc, recEvent) => {\n const abiEvent: EventAbi = abiEvents[recEvent.keys[0]];\n if (!abiEvent) {\n return acc;\n }\n\n // Create our final event object\n const parsedEvent: ParsedEvent = {};\n parsedEvent[abiEvent.name] = {};\n // Remove the event's name hashed from the keys array\n recEvent.keys.shift();\n\n const keysIter = recEvent.keys[Symbol.iterator]();\n const dataIter = recEvent.data[Symbol.iterator]();\n\n const abiEventKeys =\n (abiEvent as Cairo1Event).members?.filter((it) => it.kind === 'key') ||\n (abiEvent as LegacyEvent).keys;\n const abiEventData =\n (abiEvent as Cairo1Event).members?.filter((it) => it.kind === 'data') ||\n (abiEvent as LegacyEvent).data;\n\n abiEventKeys.forEach((key) => {\n parsedEvent[abiEvent.name][key.name] = responseParser(\n keysIter,\n key,\n abiStructs,\n abiEnums,\n parsedEvent[abiEvent.name]\n );\n });\n\n abiEventData.forEach((data) => {\n parsedEvent[abiEvent.name][data.name] = responseParser(\n dataIter,\n data,\n abiStructs,\n abiEnums,\n parsedEvent[abiEvent.name]\n );\n });\n acc.push(parsedEvent);\n return acc;\n }, [] as ParsedEvents);\n return ret;\n}\n","import type { Abi as AbiKanabi } from 'abi-wan-kanabi';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AbiEvents,\n ArgsOrCalldata,\n ArgsOrCalldataWithOptions,\n AsyncContractFunction,\n Call,\n CallOptions,\n Calldata,\n ContractFunction,\n ContractOptions,\n EstimateFeeResponse,\n FunctionAbi,\n GetTransactionReceiptResponse,\n InvokeFunctionResponse,\n InvokeOptions,\n InvokeTransactionReceiptResponse,\n ParsedEvents,\n RawArgs,\n Result,\n StructAbi,\n ValidateType,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData, cairo } from '../utils/calldata';\nimport { createAbiParser } from '../utils/calldata/parser';\nimport { getAbiEvents, parseEvents as parseRawEvents } from '../utils/events/index';\nimport { cleanHex } from '../utils/num';\nimport { ContractInterface, TypedContract } from './interface';\n\nexport const splitArgsAndOptions = (args: ArgsOrCalldataWithOptions) => {\n const options = [\n 'blockIdentifier',\n 'parseRequest',\n 'parseResponse',\n 'formatResponse',\n 'maxFee',\n 'nonce',\n 'signature',\n 'addressSalt',\n ];\n const lastArg = args[args.length - 1];\n if (typeof lastArg === 'object' && options.some((x) => x in lastArg)) {\n return { args: args as ArgsOrCalldata, options: args.pop() as ContractOptions };\n }\n return { args: args as ArgsOrCalldata };\n};\n\n/**\n * Adds call methods to the contract\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: ArgsOrCalldataWithOptions): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.call(functionAbi.name, params.args, {\n parseRequest: true,\n parseResponse: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.invoke(functionAbi.name, params.args, {\n parseRequest: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view' || functionAbi.state_mutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport function getCalldata(args: RawArgs, callback: Function): Calldata {\n // Check if Calldata in args or args[0] else compile\n if (Array.isArray(args) && '__compiled__' in args) return args as Calldata;\n if (Array.isArray(args) && Array.isArray(args[0]) && '__compiled__' in args[0])\n return args[0] as Calldata;\n return callback();\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n protected readonly events: AbiEvents;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n private callData: CallData;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.callData = new CallData(abi);\n this.structs = CallData.getAbiStruct(abi);\n this.events = getAbiEvents(abi);\n const parser = createAbiParser(abi);\n this.abi = parser.getLegacyFormat();\n\n const options = { enumerable: true, value: {}, writable: false };\n Object.defineProperties(this, {\n functions: { enumerable: true, value: {}, writable: false },\n callStatic: { enumerable: true, value: {}, writable: false },\n populateTransaction: { enumerable: true, value: {}, writable: false },\n estimateFee: { enumerable: true, value: {}, writable: false },\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') return;\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n ...options,\n value: buildCall(this, abiElement),\n });\n }\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n ...options,\n value: buildPopulate(this, abiElement),\n });\n }\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n ...options,\n value: buildEstimate(this, abiElement),\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: ArgsOrCalldata = [],\n {\n parseRequest = true,\n parseResponse = true,\n formatResponse = undefined,\n blockIdentifier = undefined,\n }: CallOptions = {}\n ): Promise<Result> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n const calldata = getCalldata(args, () => {\n if (parseRequest) {\n this.callData.validate(ValidateType.CALL, method, args);\n return this.callData.compile(method, args);\n }\n // eslint-disable-next-line no-console\n console.warn('Call skipped parsing but provided rawArgs, possible malfunction request');\n return args;\n });\n\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => {\n if (!parseResponse) {\n return x.result;\n }\n if (formatResponse) {\n return this.callData.format(method, x.result, formatResponse);\n }\n return this.callData.parse(method, x.result);\n });\n }\n\n public invoke(\n method: string,\n args: ArgsOrCalldata = [],\n { parseRequest = true, maxFee, nonce, signature }: InvokeOptions = {}\n ): Promise<InvokeFunctionResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n const calldata = getCalldata(args, () => {\n if (parseRequest) {\n this.callData.validate(ValidateType.INVOKE, method, args);\n return this.callData.compile(method, args);\n }\n // eslint-disable-next-line no-console\n console.warn('Invoke skipped parsing but provided rawArgs, possible malfunction request');\n return args;\n });\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee,\n nonce,\n });\n }\n\n if (!nonce) throw new Error(`Nonce is required when invoking a function without an account`);\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature,\n },\n {\n nonce,\n }\n );\n }\n\n public async estimate(method: string, args: ArgsOrCalldata = []): Promise<EstimateFeeResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n if (!getCalldata(args, () => false)) {\n this.callData.validate(ValidateType.INVOKE, method, args);\n }\n\n const invocation = this.populate(method, args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: RawArgs = []): Call {\n const calldata: Calldata = getCalldata(args, () => this.callData.compile(method, args));\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata,\n };\n }\n\n public parseEvents(receipt: GetTransactionReceiptResponse): ParsedEvents {\n return parseRawEvents(\n (receipt as InvokeTransactionReceiptResponse).events?.filter(\n (event) => cleanHex(event.from_address) === cleanHex(this.address),\n []\n ) || [],\n this.events,\n this.structs,\n CallData.getAbiEnum(this.abi)\n );\n }\n\n public isCairo1(): boolean {\n return cairo.isCairo1Abi(this.abi);\n }\n\n public async getVersion() {\n return this.providerOrAccount.getContractVersion(this.address);\n }\n\n public typed<TAbi extends AbiKanabi>(tAbi: TAbi): TypedContract<TAbi> {\n return this as TypedContract<typeof tAbi>;\n }\n}\n","import type { Abi as AbiKanabi, TypedContract as AbiWanTypedContract } from 'abi-wan-kanabi';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport {\n Abi,\n ArgsOrCalldata,\n AsyncContractFunction,\n BlockIdentifier,\n CallOptions,\n ContractFunction,\n ContractVersion,\n EstimateFeeResponse,\n GetTransactionReceiptResponse,\n Invocation,\n InvokeFunctionResponse,\n InvokeOptions,\n ParsedEvents,\n Result,\n} from '../types';\n\nexport type TypedContract<TAbi extends AbiKanabi> = AbiWanTypedContract<TAbi> & ContractInterface;\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(\n method: string,\n args?: ArgsOrCalldata,\n options?: CallOptions\n ): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke or Calldata\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: ArgsOrCalldata,\n options?: InvokeOptions\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call or Calldata\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: ArgsOrCalldata,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call or Calldata\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: ArgsOrCalldata): Invocation;\n\n /**\n * Parse contract events of a GetTransactionReceiptResponse received from waitForTransaction. Based on contract's abi\n *\n * @param receipt transaction receipt\n * @returns Events parsed\n */\n public abstract parseEvents(receipt: GetTransactionReceiptResponse): ParsedEvents;\n\n /**\n * tells if the contract comes from a Cairo 1 contract\n *\n * @returns TRUE if the contract comes from a Cairo1 contract\n * @example\n * ```typescript\n * const isCairo1: boolean = myContract.isCairo1();\n * ```\n */\n public abstract isCairo1(): boolean;\n\n /**\n * Retrieves the version of the contract (cairo version & compiler version)\n */\n public abstract getVersion(): Promise<ContractVersion>;\n\n public abstract typed<TAbi extends AbiKanabi>(tAbi: TAbi): TypedContract<TAbi>;\n}\n","import { AccountInterface } from '../account';\nimport {\n Abi,\n ArgsOrCalldataWithOptions,\n CairoAssembly,\n CompiledContract,\n ValidateType,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { Contract, getCalldata, splitArgsAndOptions } from './default';\n\nexport type ContractFactoryParams = {\n compiledContract: CompiledContract;\n account: any;\n casm?: CairoAssembly;\n classHash?: string;\n compiledClassHash?: string;\n abi?: Abi;\n};\n\nexport class ContractFactory {\n compiledContract: CompiledContract;\n\n account: AccountInterface;\n\n abi: Abi;\n\n classHash?: string;\n\n casm?: CairoAssembly;\n\n compiledClassHash?: string;\n\n private CallData: CallData;\n\n /**\n * @param params CFParams\n * - compiledContract: CompiledContract;\n * - account: AccountInterface;\n * - casm?: CairoAssembly;\n * - classHash?: string;\n * - compiledClassHash?: string;\n * - abi?: Abi;\n */\n constructor(params: ContractFactoryParams) {\n this.compiledContract = params.compiledContract;\n this.account = params.account;\n this.casm = params.casm;\n this.abi = params.abi ?? params.compiledContract.abi;\n this.classHash = params.classHash;\n this.compiledClassHash = params.compiledClassHash;\n this.CallData = new CallData(this.abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * If contract is not declared it will first declare it, and then deploy\n */\n public async deploy(...args: ArgsOrCalldataWithOptions): Promise<Contract> {\n const { args: param, options = { parseRequest: true } } = splitArgsAndOptions(args);\n\n const constructorCalldata = getCalldata(param, () => {\n if (options.parseRequest) {\n this.CallData.validate(ValidateType.DEPLOY, 'constructor', param);\n return this.CallData.compile('constructor', param);\n }\n // eslint-disable-next-line no-console\n console.warn('Call skipped parsing but provided rawArgs, possible malfunction request');\n return param;\n });\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareAndDeploy({\n contract: this.compiledContract,\n casm: this.casm,\n classHash: this.classHash,\n compiledClassHash: this.compiledClassHash,\n constructorCalldata,\n salt: options.addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Account\n *\n * @param account - new Account to attach to\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\n return this;\n }\n\n /**\n * Attaches current abi and account to the new address\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.account);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","/* eslint-disable no-bitwise */\nimport { hexToBytes } from '@noble/curves/abstract/utils';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { BigNumberish } from '../types';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { assertInRange, toHex } from './num';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(address)).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hex = removeHexPrefix(keccakBn(address));\n const hashed = hexToBytes(hex.padStart(64, '0'));\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n","/**\n * Main\n */\nexport * from './account';\nexport * from './contract';\nexport * from './provider';\nexport * from './signer';\n\n// TODO: decide on final export style\nexport * from './types';\nexport * as types from './types';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as num from './utils/num';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * as ec from './utils/ec';\nexport * as starknetId from './utils/starknetId';\nexport * as provider from './utils/provider';\nexport * as selector from './utils/selector';\nexport * as events from './utils/events/index';\nexport * from './utils/address';\nexport * from './utils/url';\nexport * from './utils/calldata';\nexport * from './utils/calldata/enum';\nexport * from './utils/contract';\nexport * from './utils/events';\n\n/**\n * Deprecated\n */\n/* eslint-disable import/first */\nimport * as num from './utils/num';\n\n/** @deprecated prefer the 'num' naming */\nexport const number = num;\n"],"mappings":"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","names":["BaseUrl","NetworkName","StarknetChainId","TransactionHashPrefix","SIMULATION_FLAG","ValidateType","Uint","Litteral","EntryPointType","TransactionType","TransactionStatus","TransactionFinalityStatus","TransactionExecutionStatus","BlockStatus","BlockTag","ETransactionType","ESimulationFlag","ETransactionStatus","ETransactionFinalityStatus","ETransactionExecutionStatus","EBlockTag","EDataAvailabilityMode","number","uint256","CairoOptionVariant","CairoResultVariant","listTypeVariant","parsedParameter","parseBaseTypes","parse","stringify","json","stringify","parse","stringify","base64","parse","parse","stringify","parse","StarknetIdContract","StarknetIdContract","stringify","StarknetIdContract","urljoin","defaultOptions","urljoin","stringify","parse","StarknetIdContract","StarknetIdContract","StarknetIdContract","hexToBytes","hexToBytes"]}