@subql/node-starknet 0.0.2-4 → 0.0.2-6

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.
@@ -167,7 +167,7 @@ class StarknetApi {
167
167
  block.transactions = block.transactions.map((tx, index) => ({
168
168
  // Format done
169
169
  ...(0, utils_starknet_1.formatTransaction)(tx, block, index),
170
- receipt: () => this.getTransactionReceipt(tx.hash).then((r) => (0, utils_starknet_1.formatReceipt)(r)),
170
+ receipt: () => this.getTransactionReceipt(tx.transaction_hash).then((r) => (0, utils_starknet_1.formatReceipt)(r)),
171
171
  logs: block.logs.filter((l) => l.transactionHash === tx.transaction_hash),
172
172
  }));
173
173
  this.eventEmitter.emit('fetchBlock');
@@ -1 +1 @@
1
- {"version":3,"file":"api.starknet.js","sourceRoot":"","sources":["../../src/starknet/api.starknet.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport assert from 'assert';\nimport fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { BlockWithTxs, SPEC } from '@starknet-io/types-js';\nimport { getLogger, IBlock, timeout } from '@subql/node-core';\nimport {\n ApiWrapper,\n StarknetBlock,\n StarknetRuntimeDatasource,\n IStarknetEndpointConfig,\n LightStarknetBlock,\n StarknetLogRaw,\n StarknetResult,\n StarknetTransaction,\n StarknetLog,\n StarknetContractCall,\n} from '@subql/types-starknet';\nimport {\n AbiInterfaces,\n ProviderInterface,\n RpcProvider,\n RpcProviderOptions,\n TransactionReceipt,\n events,\n CallData,\n Abi,\n AbiEntry,\n FunctionAbi,\n} from 'starknet';\nimport SafeStarknetProvider from './safe-api';\nimport {\n hexEq,\n encodeSelectorToHex,\n fetchAbiFromContractAddress,\n formatBlock,\n formatBlockUtil,\n formatLog,\n formatReceipt,\n formatTransaction,\n reverseToRawLog,\n} from './utils.starknet';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\nconst logger = getLogger('api.starknet');\n\nconst DEFAULT_EVENT_CHUNK_SIZE = 1000;\n\nasync function loadAssets(\n ds: StarknetRuntimeDatasource,\n): Promise<Record<string, string>> {\n if (!ds.assets) {\n return {};\n }\n const res: Record<string, string> = {};\n\n for (const [name, { file }] of ds.assets.entries()) {\n try {\n res[name] = await fs.promises.readFile(file, { encoding: 'utf8' });\n } catch (e) {\n throw new Error(`Failed to load datasource asset ${file}`);\n }\n }\n\n return res;\n}\n\nexport class StarknetApi implements ApiWrapper {\n private client: RpcProvider;\n\n // This is used within the sandbox when HTTP is used\n private nonBatchClient?: SafeStarknetProvider;\n private _genesisBlock?: Record<string, any>;\n private contractInterfaces: Record<string, Abi> = {};\n private chainId?: string;\n private specVersion?: string;\n\n // Starknet POS\n private _supportsFinalization = true;\n\n get supportsFinalization(): boolean {\n return this._supportsFinalization;\n }\n\n /**\n * @param {string} endpoint - The endpoint of the RPC provider\n * @param {object} eventEmitter - Used to monitor the number of RPC requests\n */\n constructor(\n private endpoint: string,\n private eventEmitter: EventEmitter2,\n private config?: IStarknetEndpointConfig,\n ) {\n const { hostname, protocol, searchParams } = new URL(endpoint);\n\n const protocolStr = protocol.replace(':', '');\n\n logger.info(`Api host: ${hostname}, method: ${protocolStr}`);\n if (protocolStr === 'https' || protocolStr === 'http') {\n const connection: RpcProviderOptions | ProviderInterface = {\n nodeUrl: this.endpoint,\n headers: {\n 'User-Agent': `Subquery-Node ${packageVersion}`,\n ...config?.headers,\n },\n batch: this.config?.batchSize ?? false,\n };\n searchParams.forEach((value, name, searchParams) => {\n (connection.headers as any)[name] = value;\n });\n this.client = new RpcProvider(connection);\n } else {\n throw new Error(`Unsupported protocol: ${protocol}`);\n }\n }\n\n private get genesisBlock(): Record<string, any> {\n if (!this._genesisBlock) {\n throw new Error('Genesis block is not available');\n }\n return this._genesisBlock;\n }\n\n async init(): Promise<void> {\n try {\n this._genesisBlock = await this.getGenesisBlock();\n this.chainId = await this.client.getChainId();\n this.specVersion = await this.client.getSpecVersion();\n } catch (e) {\n if ((e as Error).message.startsWith('Invalid response')) {\n if (!this.nonBatchClient) {\n throw new Error('No suitable client found');\n }\n\n logger.warn(\n `The RPC Node at ${this.endpoint} cannot process batch requests. ` +\n `Switching to non-batch mode for subsequent requests. Please consider checking if batch processing is supported on the RPC node.`,\n );\n\n return this.init();\n }\n\n throw e;\n }\n }\n\n private async getGenesisBlock(): Promise<BlockWithTxs> {\n const block = await this.client.getBlockWithTxs(1);\n if (block === null) {\n throw new Error(`Getting genesis block returned null from block 1`);\n }\n // @ts-ignore\n // TODO, @starknet-io/types-js is not align with starknet rpc types, follow this ticket https://github.com/starknet-io/types-js/issues/31\n return block;\n }\n\n /***\n * Get the latest block (with its header)\n * we will try to get the latest block, if it is rejected, we will get the latest accepted block\n * @returns {Promise<BLOCK_HEADER>}\n */\n async getFinalizedBlock(): Promise<SPEC.BLOCK_HEADER> {\n const [latestBlock, latestAccepted] = await Promise.all([\n this.client.getBlock('latest'),\n await this.getFinalizedBlockHeight(),\n ]);\n // @ts-ignore\n let b: SPEC.BLOCK_HEADER = latestBlock;\n if (latestBlock.status === 'REJECTED') {\n b = (await this.getBlockByHeightOrHash(\n latestAccepted,\n )) as SPEC.BLOCK_WITH_TXS;\n }\n return b;\n }\n\n async getFinalizedBlockHeight(): Promise<number> {\n return (await this.client.getBlockLatestAccepted()).block_number;\n }\n\n getChainId(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getGenesisHash(): string {\n return this.genesisBlock.block_hash;\n }\n\n getSpecVersion(): string {\n assert(this.specVersion, 'Api has not been initialised');\n return this.specVersion;\n }\n\n async getBlockByHeightOrHash(\n heightOrHash: number | string,\n ): Promise<BlockWithTxs> {\n // @ts-ignore\n return this.client.getBlockWithTxs(heightOrHash);\n }\n\n private async getBlockPromise(num: number, includeTx = true): Promise<any> {\n const rawBlock = includeTx\n ? await this.client.getBlockWithTxs(num)\n : await this.client.getBlockWithTxHashes(num);\n\n if (!rawBlock) {\n throw new Error(`Failed to fetch block ${num}`);\n }\n\n const block = formatBlock(rawBlock);\n\n return block;\n }\n\n async getTransactionReceipt(\n transactionHash: string,\n ): Promise<TransactionReceipt> {\n const receipt = await this.client.getTransactionReceipt(transactionHash);\n return formatReceipt(receipt);\n }\n\n async fetchBlock(blockNumber: number): Promise<IBlock<StarknetBlock>> {\n try {\n const block: StarknetBlock = await this.getBlockPromise(\n blockNumber,\n true,\n );\n const logsRaw = await this.fetchBlockLogs(blockNumber);\n\n block.logs = logsRaw.map((l) => formatLog(l, block));\n // Cast as Tx still raw here\n block.transactions = (block.transactions as Record<string, any>).map(\n (tx, index) => ({\n // Format done\n ...formatTransaction(tx, block, index),\n receipt: () =>\n this.getTransactionReceipt(tx.hash).then((r) => formatReceipt(r)),\n logs: block.logs.filter(\n (l) => l.transactionHash === tx.transaction_hash,\n ),\n }),\n );\n\n this.eventEmitter.emit('fetchBlock');\n return formatBlockUtil(block);\n } catch (e: any) {\n throw this.handleError(e);\n }\n }\n\n // This follow method from official document https://starknetjs.com/docs/guides/events\n async fetchBlockLogs(blockNumber: number): Promise<StarknetLogRaw[]> {\n let continuationToken: string | undefined = '0';\n let chunkNum = 1;\n const allEvents: StarknetLogRaw[] = [];\n\n while (continuationToken) {\n let eventsRes;\n try {\n eventsRes = await this.client.getEvents({\n from_block: {\n block_number: blockNumber,\n },\n to_block: {\n block_number: blockNumber,\n },\n chunk_size: DEFAULT_EVENT_CHUNK_SIZE,\n continuation_token:\n continuationToken === '0' ? undefined : continuationToken,\n });\n } catch (e: any) {\n if (!eventsRes) {\n throw new Error(\n `Fetch block ${blockNumber} events failed, ${e.message}`,\n );\n } else {\n throw e;\n }\n }\n const nbEvents = eventsRes.events.length;\n continuationToken = eventsRes.continuation_token;\n for (let i = 0; i < nbEvents; i++) {\n const event = eventsRes.events[i];\n allEvents.push(event);\n }\n chunkNum++;\n }\n return allEvents;\n }\n\n private async fetchLightBlock(\n blockNumber: number,\n ): Promise<IBlock<LightStarknetBlock>> {\n const block = await this.getBlockPromise(blockNumber, false);\n const lightBlock: LightStarknetBlock = {\n ...block,\n };\n return formatBlockUtil<LightStarknetBlock>(lightBlock);\n }\n\n async fetchBlocks(bufferBlocks: number[]): Promise<IBlock<StarknetBlock>[]> {\n return Promise.all(bufferBlocks.map(async (num) => this.fetchBlock(num)));\n }\n\n async fetchBlocksLight(\n bufferBlocks: number[],\n ): Promise<IBlock<LightStarknetBlock>[]> {\n return Promise.all(bufferBlocks.map(async (num) => this.fetchBlock(num)));\n }\n\n get api(): RpcProvider {\n return this.client;\n }\n\n private buildInterface(abiName: string, assets: Record<string, string>): Abi {\n if (!assets[abiName]) {\n throw new Error(`ABI named \"${abiName}\" not referenced in assets`);\n }\n\n // This assumes that all datasources have a different abi name or they are the same abi\n if (!this.contractInterfaces[abiName]) {\n // Constructing the interface validates the ABI\n try {\n const abiObj = JSON.parse(assets[abiName]);\n\n this.contractInterfaces[abiName] = abiObj;\n } catch (e: any) {\n logger.error(`Unable to parse ABI: ${e.message}`);\n throw new Error('ABI is invalid');\n }\n }\n\n return this.contractInterfaces[abiName];\n }\n\n async parseLog<T extends StarknetResult = StarknetResult>(\n log: StarknetLog,\n ds: StarknetRuntimeDatasource,\n ): Promise<StarknetLog | StarknetLog<T>> {\n try {\n if (!ds?.options?.abi) {\n logger.warn('No ABI provided for datasource');\n return log;\n }\n const emittedEvent = reverseToRawLog(log);\n const assets = await loadAssets(ds);\n const iAbi = this.buildInterface(ds.options.abi, assets);\n const abiEvents = events.getAbiEvents(iAbi);\n const abiStructs = CallData.getAbiStruct(iAbi);\n const abiEnums = CallData.getAbiEnum(iAbi);\n const [parsed] = events.parseEvents(\n [emittedEvent],\n abiEvents,\n abiStructs,\n abiEnums,\n );\n log.args = parsed as T;\n return log;\n } catch (e: any) {\n logger.warn(`Failed to parse log data: ${e.message}`);\n return log;\n }\n }\n\n async parseTransaction<T extends StarknetResult = StarknetResult>(\n transaction: StarknetTransaction,\n ds: StarknetRuntimeDatasource,\n ): Promise<StarknetTransaction> {\n try {\n const assets = await loadAssets(ds);\n // If decoded calls not exist, try to parse first\n if (!transaction.decodedCalls) {\n transaction.decodedCalls = transaction.parseCallData();\n }\n if (transaction.decodedCalls && transaction.decodedCalls.length > 0) {\n await this.handleDecodedCallsArgs(transaction.decodedCalls, ds, assets);\n } else {\n logger.warn(\n `No decoded calls found in transaction, will skip decode call data for this transaction ${transaction.hash}`,\n );\n }\n transaction.logs =\n transaction.logs &&\n ((await Promise.all(\n transaction.logs.map(async (log) => this.parseLog(log, ds)),\n )) as Array<StarknetLog | StarknetLog<T>>);\n\n return transaction;\n } catch (e: any) {\n logger.warn(`Failed to parse transaction data: ${e.message}`);\n return transaction;\n }\n }\n\n private async handleDecodedCallsArgs(\n decodedCalls: StarknetContractCall[],\n ds: StarknetRuntimeDatasource,\n assets: Record<string, string>,\n ): Promise<void> {\n await Promise.all(\n decodedCalls.map(async (call) => {\n let iAbi: Abi;\n try {\n if (\n ds.options?.address &&\n hexEq(ds.options.address, call.to) &&\n ds.options.abi\n ) {\n iAbi = this.buildInterface(ds.options.abi, assets);\n } else {\n //We could register this abi in memory improve performance, maybe just record with address instead of abi name here\n if (!this.contractInterfaces[call.to]) {\n iAbi = await fetchAbiFromContractAddress(this.client, call.to);\n } else {\n iAbi = this.contractInterfaces[call.to];\n }\n }\n call.decodedArgs = StarknetApi.DecodeCallDataWithAbi(iAbi, call);\n } catch (e: any) {\n logger.warn(\n `Could not decode call data with contract address ${call.to}: ${e.message}`,\n );\n }\n }),\n );\n }\n\n static DecodeCallDataWithAbi(iAbi: Abi, call: StarknetContractCall): any {\n const callData = new CallData(iAbi);\n const { inputs } = callData.parser\n .getLegacyFormat()\n .find(\n (abiItem: AbiEntry) =>\n encodeSelectorToHex(abiItem.name) === call.selector,\n ) as FunctionAbi;\n const inputsTypes = inputs.map((inp: any) => {\n return inp.type as string;\n });\n const res = callData.decodeParameters(inputsTypes, call.calldata);\n const result = inputs.reduce((acc, item, index) => {\n acc[item.name] = res[index];\n return acc;\n }, {});\n return result;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async connect(): Promise<void> {\n logger.error('Starknet API connect is not implemented');\n throw new Error('Not implemented');\n }\n\n //TODO\n async disconnect(): Promise<void> {\n return Promise.resolve();\n }\n\n handleError(e: Error): Error {\n if ((e as any)?.status === 429) {\n const { hostname } = new URL(this.endpoint);\n return new Error(`Rate Limited at endpoint: ${hostname}`);\n }\n\n return e;\n }\n\n getSafeApi(height: number) {\n return new SafeStarknetProvider(this.client, height);\n }\n}\n"]}
1
+ {"version":3,"file":"api.starknet.js","sourceRoot":"","sources":["../../src/starknet/api.starknet.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport assert from 'assert';\nimport fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { BlockWithTxs, SPEC } from '@starknet-io/types-js';\nimport { getLogger, IBlock, timeout } from '@subql/node-core';\nimport {\n ApiWrapper,\n StarknetBlock,\n StarknetRuntimeDatasource,\n IStarknetEndpointConfig,\n LightStarknetBlock,\n StarknetLogRaw,\n StarknetResult,\n StarknetTransaction,\n StarknetLog,\n StarknetContractCall,\n} from '@subql/types-starknet';\nimport {\n AbiInterfaces,\n ProviderInterface,\n RpcProvider,\n RpcProviderOptions,\n TransactionReceipt,\n events,\n CallData,\n Abi,\n AbiEntry,\n FunctionAbi,\n} from 'starknet';\nimport SafeStarknetProvider from './safe-api';\nimport {\n hexEq,\n encodeSelectorToHex,\n fetchAbiFromContractAddress,\n formatBlock,\n formatBlockUtil,\n formatLog,\n formatReceipt,\n formatTransaction,\n reverseToRawLog,\n} from './utils.starknet';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\nconst logger = getLogger('api.starknet');\n\nconst DEFAULT_EVENT_CHUNK_SIZE = 1000;\n\nasync function loadAssets(\n ds: StarknetRuntimeDatasource,\n): Promise<Record<string, string>> {\n if (!ds.assets) {\n return {};\n }\n const res: Record<string, string> = {};\n\n for (const [name, { file }] of ds.assets.entries()) {\n try {\n res[name] = await fs.promises.readFile(file, { encoding: 'utf8' });\n } catch (e) {\n throw new Error(`Failed to load datasource asset ${file}`);\n }\n }\n\n return res;\n}\n\nexport class StarknetApi implements ApiWrapper {\n private client: RpcProvider;\n\n // This is used within the sandbox when HTTP is used\n private nonBatchClient?: SafeStarknetProvider;\n private _genesisBlock?: Record<string, any>;\n private contractInterfaces: Record<string, Abi> = {};\n private chainId?: string;\n private specVersion?: string;\n\n // Starknet POS\n private _supportsFinalization = true;\n\n get supportsFinalization(): boolean {\n return this._supportsFinalization;\n }\n\n /**\n * @param {string} endpoint - The endpoint of the RPC provider\n * @param {object} eventEmitter - Used to monitor the number of RPC requests\n */\n constructor(\n private endpoint: string,\n private eventEmitter: EventEmitter2,\n private config?: IStarknetEndpointConfig,\n ) {\n const { hostname, protocol, searchParams } = new URL(endpoint);\n\n const protocolStr = protocol.replace(':', '');\n\n logger.info(`Api host: ${hostname}, method: ${protocolStr}`);\n if (protocolStr === 'https' || protocolStr === 'http') {\n const connection: RpcProviderOptions | ProviderInterface = {\n nodeUrl: this.endpoint,\n headers: {\n 'User-Agent': `Subquery-Node ${packageVersion}`,\n ...config?.headers,\n },\n batch: this.config?.batchSize ?? false,\n };\n searchParams.forEach((value, name, searchParams) => {\n (connection.headers as any)[name] = value;\n });\n this.client = new RpcProvider(connection);\n } else {\n throw new Error(`Unsupported protocol: ${protocol}`);\n }\n }\n\n private get genesisBlock(): Record<string, any> {\n if (!this._genesisBlock) {\n throw new Error('Genesis block is not available');\n }\n return this._genesisBlock;\n }\n\n async init(): Promise<void> {\n try {\n this._genesisBlock = await this.getGenesisBlock();\n this.chainId = await this.client.getChainId();\n this.specVersion = await this.client.getSpecVersion();\n } catch (e) {\n if ((e as Error).message.startsWith('Invalid response')) {\n if (!this.nonBatchClient) {\n throw new Error('No suitable client found');\n }\n\n logger.warn(\n `The RPC Node at ${this.endpoint} cannot process batch requests. ` +\n `Switching to non-batch mode for subsequent requests. Please consider checking if batch processing is supported on the RPC node.`,\n );\n\n return this.init();\n }\n\n throw e;\n }\n }\n\n private async getGenesisBlock(): Promise<BlockWithTxs> {\n const block = await this.client.getBlockWithTxs(1);\n if (block === null) {\n throw new Error(`Getting genesis block returned null from block 1`);\n }\n // @ts-ignore\n // TODO, @starknet-io/types-js is not align with starknet rpc types, follow this ticket https://github.com/starknet-io/types-js/issues/31\n return block;\n }\n\n /***\n * Get the latest block (with its header)\n * we will try to get the latest block, if it is rejected, we will get the latest accepted block\n * @returns {Promise<BLOCK_HEADER>}\n */\n async getFinalizedBlock(): Promise<SPEC.BLOCK_HEADER> {\n const [latestBlock, latestAccepted] = await Promise.all([\n this.client.getBlock('latest'),\n await this.getFinalizedBlockHeight(),\n ]);\n // @ts-ignore\n let b: SPEC.BLOCK_HEADER = latestBlock;\n if (latestBlock.status === 'REJECTED') {\n b = (await this.getBlockByHeightOrHash(\n latestAccepted,\n )) as SPEC.BLOCK_WITH_TXS;\n }\n return b;\n }\n\n async getFinalizedBlockHeight(): Promise<number> {\n return (await this.client.getBlockLatestAccepted()).block_number;\n }\n\n getChainId(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getGenesisHash(): string {\n return this.genesisBlock.block_hash;\n }\n\n getSpecVersion(): string {\n assert(this.specVersion, 'Api has not been initialised');\n return this.specVersion;\n }\n\n async getBlockByHeightOrHash(\n heightOrHash: number | string,\n ): Promise<BlockWithTxs> {\n // @ts-ignore\n return this.client.getBlockWithTxs(heightOrHash);\n }\n\n private async getBlockPromise(num: number, includeTx = true): Promise<any> {\n const rawBlock = includeTx\n ? await this.client.getBlockWithTxs(num)\n : await this.client.getBlockWithTxHashes(num);\n\n if (!rawBlock) {\n throw new Error(`Failed to fetch block ${num}`);\n }\n\n const block = formatBlock(rawBlock);\n\n return block;\n }\n\n async getTransactionReceipt(\n transactionHash: string,\n ): Promise<TransactionReceipt> {\n const receipt = await this.client.getTransactionReceipt(transactionHash);\n return formatReceipt(receipt);\n }\n\n async fetchBlock(blockNumber: number): Promise<IBlock<StarknetBlock>> {\n try {\n const block: StarknetBlock = await this.getBlockPromise(\n blockNumber,\n true,\n );\n const logsRaw = await this.fetchBlockLogs(blockNumber);\n\n block.logs = logsRaw.map((l) => formatLog(l, block));\n // Cast as Tx still raw here\n block.transactions = (block.transactions as Record<string, any>).map(\n (tx, index) => ({\n // Format done\n ...formatTransaction(tx, block, index),\n receipt: () =>\n this.getTransactionReceipt(tx.transaction_hash).then((r) =>\n formatReceipt(r),\n ),\n logs: block.logs.filter(\n (l) => l.transactionHash === tx.transaction_hash,\n ),\n }),\n );\n\n this.eventEmitter.emit('fetchBlock');\n return formatBlockUtil(block);\n } catch (e: any) {\n throw this.handleError(e);\n }\n }\n\n // This follow method from official document https://starknetjs.com/docs/guides/events\n async fetchBlockLogs(blockNumber: number): Promise<StarknetLogRaw[]> {\n let continuationToken: string | undefined = '0';\n let chunkNum = 1;\n const allEvents: StarknetLogRaw[] = [];\n\n while (continuationToken) {\n let eventsRes;\n try {\n eventsRes = await this.client.getEvents({\n from_block: {\n block_number: blockNumber,\n },\n to_block: {\n block_number: blockNumber,\n },\n chunk_size: DEFAULT_EVENT_CHUNK_SIZE,\n continuation_token:\n continuationToken === '0' ? undefined : continuationToken,\n });\n } catch (e: any) {\n if (!eventsRes) {\n throw new Error(\n `Fetch block ${blockNumber} events failed, ${e.message}`,\n );\n } else {\n throw e;\n }\n }\n const nbEvents = eventsRes.events.length;\n continuationToken = eventsRes.continuation_token;\n for (let i = 0; i < nbEvents; i++) {\n const event = eventsRes.events[i];\n allEvents.push(event);\n }\n chunkNum++;\n }\n return allEvents;\n }\n\n private async fetchLightBlock(\n blockNumber: number,\n ): Promise<IBlock<LightStarknetBlock>> {\n const block = await this.getBlockPromise(blockNumber, false);\n const lightBlock: LightStarknetBlock = {\n ...block,\n };\n return formatBlockUtil<LightStarknetBlock>(lightBlock);\n }\n\n async fetchBlocks(bufferBlocks: number[]): Promise<IBlock<StarknetBlock>[]> {\n return Promise.all(bufferBlocks.map(async (num) => this.fetchBlock(num)));\n }\n\n async fetchBlocksLight(\n bufferBlocks: number[],\n ): Promise<IBlock<LightStarknetBlock>[]> {\n return Promise.all(bufferBlocks.map(async (num) => this.fetchBlock(num)));\n }\n\n get api(): RpcProvider {\n return this.client;\n }\n\n private buildInterface(abiName: string, assets: Record<string, string>): Abi {\n if (!assets[abiName]) {\n throw new Error(`ABI named \"${abiName}\" not referenced in assets`);\n }\n\n // This assumes that all datasources have a different abi name or they are the same abi\n if (!this.contractInterfaces[abiName]) {\n // Constructing the interface validates the ABI\n try {\n const abiObj = JSON.parse(assets[abiName]);\n\n this.contractInterfaces[abiName] = abiObj;\n } catch (e: any) {\n logger.error(`Unable to parse ABI: ${e.message}`);\n throw new Error('ABI is invalid');\n }\n }\n\n return this.contractInterfaces[abiName];\n }\n\n async parseLog<T extends StarknetResult = StarknetResult>(\n log: StarknetLog,\n ds: StarknetRuntimeDatasource,\n ): Promise<StarknetLog | StarknetLog<T>> {\n try {\n if (!ds?.options?.abi) {\n logger.warn('No ABI provided for datasource');\n return log;\n }\n const emittedEvent = reverseToRawLog(log);\n const assets = await loadAssets(ds);\n const iAbi = this.buildInterface(ds.options.abi, assets);\n const abiEvents = events.getAbiEvents(iAbi);\n const abiStructs = CallData.getAbiStruct(iAbi);\n const abiEnums = CallData.getAbiEnum(iAbi);\n const [parsed] = events.parseEvents(\n [emittedEvent],\n abiEvents,\n abiStructs,\n abiEnums,\n );\n log.args = parsed as T;\n return log;\n } catch (e: any) {\n logger.warn(`Failed to parse log data: ${e.message}`);\n return log;\n }\n }\n\n async parseTransaction<T extends StarknetResult = StarknetResult>(\n transaction: StarknetTransaction,\n ds: StarknetRuntimeDatasource,\n ): Promise<StarknetTransaction> {\n try {\n const assets = await loadAssets(ds);\n // If decoded calls not exist, try to parse first\n if (!transaction.decodedCalls) {\n transaction.decodedCalls = transaction.parseCallData();\n }\n if (transaction.decodedCalls && transaction.decodedCalls.length > 0) {\n await this.handleDecodedCallsArgs(transaction.decodedCalls, ds, assets);\n } else {\n logger.warn(\n `No decoded calls found in transaction, will skip decode call data for this transaction ${transaction.hash}`,\n );\n }\n transaction.logs =\n transaction.logs &&\n ((await Promise.all(\n transaction.logs.map(async (log) => this.parseLog(log, ds)),\n )) as Array<StarknetLog | StarknetLog<T>>);\n\n return transaction;\n } catch (e: any) {\n logger.warn(`Failed to parse transaction data: ${e.message}`);\n return transaction;\n }\n }\n\n private async handleDecodedCallsArgs(\n decodedCalls: StarknetContractCall[],\n ds: StarknetRuntimeDatasource,\n assets: Record<string, string>,\n ): Promise<void> {\n await Promise.all(\n decodedCalls.map(async (call) => {\n let iAbi: Abi;\n try {\n if (\n ds.options?.address &&\n hexEq(ds.options.address, call.to) &&\n ds.options.abi\n ) {\n iAbi = this.buildInterface(ds.options.abi, assets);\n } else {\n //We could register this abi in memory improve performance, maybe just record with address instead of abi name here\n if (!this.contractInterfaces[call.to]) {\n iAbi = await fetchAbiFromContractAddress(this.client, call.to);\n } else {\n iAbi = this.contractInterfaces[call.to];\n }\n }\n call.decodedArgs = StarknetApi.DecodeCallDataWithAbi(iAbi, call);\n } catch (e: any) {\n logger.warn(\n `Could not decode call data with contract address ${call.to}: ${e.message}`,\n );\n }\n }),\n );\n }\n\n static DecodeCallDataWithAbi(iAbi: Abi, call: StarknetContractCall): any {\n const callData = new CallData(iAbi);\n const { inputs } = callData.parser\n .getLegacyFormat()\n .find(\n (abiItem: AbiEntry) =>\n encodeSelectorToHex(abiItem.name) === call.selector,\n ) as FunctionAbi;\n const inputsTypes = inputs.map((inp: any) => {\n return inp.type as string;\n });\n const res = callData.decodeParameters(inputsTypes, call.calldata);\n const result = inputs.reduce((acc, item, index) => {\n acc[item.name] = res[index];\n return acc;\n }, {});\n return result;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async connect(): Promise<void> {\n logger.error('Starknet API connect is not implemented');\n throw new Error('Not implemented');\n }\n\n //TODO\n async disconnect(): Promise<void> {\n return Promise.resolve();\n }\n\n handleError(e: Error): Error {\n if ((e as any)?.status === 429) {\n const { hostname } = new URL(this.endpoint);\n return new Error(`Rate Limited at endpoint: ${hostname}`);\n }\n\n return e;\n }\n\n getSafeApi(height: number) {\n return new SafeStarknetProvider(this.client, height);\n }\n}\n"]}
@@ -57,7 +57,8 @@ describe('Api.starknet', () => {
57
57
  expect(typeof blockData.logs[0].transaction.transactionIndex).toBe('number');
58
58
  expect(blockData.logs[0].transaction.callData.length).toBeGreaterThan(1);
59
59
  });
60
- it('should have the ability to get receipts via transactions from all types', () => {
60
+ it('should have the ability to get receipts via transactions from all types', async () => {
61
+ expect(await blockData.transactions[0].receipt?.()).toBeDefined();
61
62
  expect(typeof blockData.transactions[0].receipt).toEqual('function');
62
63
  expect(typeof blockData.logs[0].transaction.receipt).toEqual('function');
63
64
  expect(typeof blockData.logs[0].transaction.from).toEqual('string');
@@ -1 +1 @@
1
- {"version":3,"file":"api.starknet.test.js","sourceRoot":"","sources":["../../src/starknet/api.starknet.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport path from 'path';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n StarknetBlock,\n StarknetContractCall,\n StarknetDatasourceKind,\n StarknetHandlerKind,\n StarknetRuntimeDatasource,\n} from '@subql/types-starknet';\nimport { StarknetApi } from './api.starknet';\nimport { isFullBlock } from './block.starknet';\n\n// Add api key to work\nconst HTTP_ENDPOINT = 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7';\n\nconst ds: StarknetRuntimeDatasource = {\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'test',\n kind: StarknetHandlerKind.Call,\n filter: { function: 'deposit' },\n },\n ],\n },\n kind: StarknetDatasourceKind.Runtime,\n startBlock: 979358,\n options: {\n abi: 'zkLend',\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n assets: new Map([\n ['zkLend', { file: path.join(__dirname, '../../test/zkLend.abi.json') }],\n ]),\n};\n\njest.setTimeout(90000);\ndescribe('Api.starknet', () => {\n let strkApi: StarknetApi;\n const eventEmitter = new EventEmitter2();\n let blockData: StarknetBlock;\n\n const fetchBlock = async (height: number) => {\n const block = await strkApi.fetchBlock(height);\n\n return block.block as StarknetBlock;\n };\n\n beforeEach(async () => {\n strkApi = new StarknetApi(HTTP_ENDPOINT, eventEmitter);\n await strkApi.init();\n blockData = await fetchBlock(979358);\n });\n\n it('should get finalized block', async () => {\n const finalized = await strkApi.getFinalizedBlock();\n expect(finalized).toBeDefined();\n expect(finalized.block_number).toBeGreaterThan(979358);\n });\n\n it('Should format transaction in logs', () => {\n expect(typeof blockData.logs[0].transaction.blockNumber).toBe('number');\n expect(typeof blockData.logs[0].transaction.transactionIndex).toBe(\n 'number',\n );\n expect(blockData.logs[0].transaction.callData.length).toBeGreaterThan(1);\n });\n\n it('should have the ability to get receipts via transactions from all types', () => {\n expect(typeof blockData.transactions[0].receipt).toEqual('function');\n expect(typeof blockData.logs[0].transaction.receipt).toEqual('function');\n expect(typeof blockData.logs[0].transaction.from).toEqual('string');\n expect(typeof blockData.transactions[1].logs![0].transaction.from).toEqual(\n 'string',\n );\n expect(\n typeof blockData.transactions[1].logs![0].transaction.receipt,\n ).toEqual('function');\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode logs', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // const parsedTx = await strkApi.parseTransaction(tx!, ds);\n const parsedLog = await strkApi.parseLog(tx!.logs![5], ds);\n expect(parsedLog.args).toStrictEqual({\n 'zklend::market::Market::Deposit': {\n user: 888570324763985402246768015919558310269514530881625296825528005560714345717n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n face_amount: 2100000000000000000000n,\n },\n block_hash:\n '0x20dda386e8cb1da79a94716bca62e704b8664a13674d9bf4805d05125755a4a',\n block_number: 979358,\n transaction_hash:\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n });\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode invoke v3 function type transaction calldata with contract abi (local and remote)', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // Expect before parse (or been passed a filter), decodedCalls is undefined\n expect(tx!.decodedCalls).toBeUndefined();\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(\n parsedTransaction.decodedCalls as StarknetContractCall<{\n amount: bigint;\n spender: bigint;\n }>[],\n ).toStrictEqual([\n {\n calldata: [\n '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n '0x71d75ab9b920500000',\n '0x0',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n spender:\n 2149625499377050772775701191274921578103398273298955620360611655307104287237n,\n },\n selector:\n '0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c',\n to: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n },\n {\n calldata: [\n '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n '0x71d75ab9b920500000',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n },\n selector:\n '0xc73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01',\n to: '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n ]);\n });\n\n //https://starkscan.co/tx/0x043ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade\n it('Decode L1 transaction calldata, and decode with remote abi', async () => {\n const blockData = await fetchBlock(981920);\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x43ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade',\n );\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(parsedTransaction.decodedCalls).toStrictEqual([\n {\n calldata: [\n '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419',\n '0x455448',\n '0x1c7edb66155e3c72b27e6165d7a1912ec97a1286',\n '0x296a93b1c3672a6093de21df2f7b665e0907abc97868e9bf52d6fea07921591',\n '0x13883834c2e180b5',\n '0x0',\n ],\n decodedArgs: {\n amount: 1407436682812293301n,\n depositor: 162680747805905936472113782182998614066721329798n,\n from_address: 993696174272377493693496825928908586134624850969n,\n l1_token: 4543560n,\n l2_recipient:\n 1170820745623894104757945010321258484362311313101582454359316155358757655953n,\n },\n selector:\n '0x1b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19',\n to: '0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82',\n },\n ]);\n });\n\n it('Should not include decodedArgs if decode failed', async () => {\n // TODO, not sure how to test this yet when remote abi always available\n });\n\n it('Should able to check is fullBlock', async () => {\n // block with transactions\n const lightBlock = (await (strkApi as any).fetchLightBlock(500000)).block;\n expect(isFullBlock(blockData)).toBeTruthy();\n expect(isFullBlock(lightBlock)).toBeFalsy();\n });\n});\n"]}
1
+ {"version":3,"file":"api.starknet.test.js","sourceRoot":"","sources":["../../src/starknet/api.starknet.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport path from 'path';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n StarknetBlock,\n StarknetContractCall,\n StarknetDatasourceKind,\n StarknetHandlerKind,\n StarknetRuntimeDatasource,\n} from '@subql/types-starknet';\nimport { StarknetApi } from './api.starknet';\nimport { isFullBlock } from './block.starknet';\n\n// Add api key to work\nconst HTTP_ENDPOINT = 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7';\n\nconst ds: StarknetRuntimeDatasource = {\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'test',\n kind: StarknetHandlerKind.Call,\n filter: { function: 'deposit' },\n },\n ],\n },\n kind: StarknetDatasourceKind.Runtime,\n startBlock: 979358,\n options: {\n abi: 'zkLend',\n address:\n '0x04c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n assets: new Map([\n ['zkLend', { file: path.join(__dirname, '../../test/zkLend.abi.json') }],\n ]),\n};\n\njest.setTimeout(90000);\ndescribe('Api.starknet', () => {\n let strkApi: StarknetApi;\n const eventEmitter = new EventEmitter2();\n let blockData: StarknetBlock;\n\n const fetchBlock = async (height: number) => {\n const block = await strkApi.fetchBlock(height);\n\n return block.block as StarknetBlock;\n };\n\n beforeEach(async () => {\n strkApi = new StarknetApi(HTTP_ENDPOINT, eventEmitter);\n await strkApi.init();\n blockData = await fetchBlock(979358);\n });\n\n it('should get finalized block', async () => {\n const finalized = await strkApi.getFinalizedBlock();\n expect(finalized).toBeDefined();\n expect(finalized.block_number).toBeGreaterThan(979358);\n });\n\n it('Should format transaction in logs', () => {\n expect(typeof blockData.logs[0].transaction.blockNumber).toBe('number');\n expect(typeof blockData.logs[0].transaction.transactionIndex).toBe(\n 'number',\n );\n expect(blockData.logs[0].transaction.callData.length).toBeGreaterThan(1);\n });\n\n it('should have the ability to get receipts via transactions from all types', async () => {\n expect(await blockData.transactions[0].receipt?.()).toBeDefined();\n\n expect(typeof blockData.transactions[0].receipt).toEqual('function');\n expect(typeof blockData.logs[0].transaction.receipt).toEqual('function');\n expect(typeof blockData.logs[0].transaction.from).toEqual('string');\n expect(typeof blockData.transactions[1].logs![0].transaction.from).toEqual(\n 'string',\n );\n expect(\n typeof blockData.transactions[1].logs![0].transaction.receipt,\n ).toEqual('function');\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode logs', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // const parsedTx = await strkApi.parseTransaction(tx!, ds);\n const parsedLog = await strkApi.parseLog(tx!.logs![5], ds);\n expect(parsedLog.args).toStrictEqual({\n 'zklend::market::Market::Deposit': {\n user: 888570324763985402246768015919558310269514530881625296825528005560714345717n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n face_amount: 2100000000000000000000n,\n },\n block_hash:\n '0x20dda386e8cb1da79a94716bca62e704b8664a13674d9bf4805d05125755a4a',\n block_number: 979358,\n transaction_hash:\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n });\n });\n\n //https://starkscan.co/tx/0x0153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24\n it('Decode invoke v3 function type transaction calldata with contract abi (local and remote)', async () => {\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x153a20567e66728f3c4ba60913a6011b9c73db9ea4d960e959923ed5afd8a24',\n );\n // Expect before parse (or been passed a filter), decodedCalls is undefined\n expect(tx!.decodedCalls).toBeUndefined();\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(\n parsedTransaction.decodedCalls as StarknetContractCall<{\n amount: bigint;\n spender: bigint;\n }>[],\n ).toStrictEqual([\n {\n calldata: [\n '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n '0x71d75ab9b920500000',\n '0x0',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n spender:\n 2149625499377050772775701191274921578103398273298955620360611655307104287237n,\n },\n selector:\n '0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c',\n to: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n },\n {\n calldata: [\n '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n '0x71d75ab9b920500000',\n ],\n decodedArgs: {\n amount: 2100000000000000000000n,\n token:\n 2009894490435840142178314390393166646092438090257831307886760648929397478285n,\n },\n selector:\n '0xc73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01',\n to: '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05',\n },\n ]);\n });\n\n //https://starkscan.co/tx/0x043ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade\n it('Decode L1 transaction calldata, and decode with remote abi', async () => {\n const blockData = await fetchBlock(981920);\n const tx = blockData.transactions.find(\n (t) =>\n t.hash ===\n '0x43ce8e6e2ad703a81701f85ce26a8fb32ad54cc2fac7685ed0b1367a4813ade',\n );\n const parsedTransaction = await strkApi.parseTransaction(tx!, ds);\n expect(parsedTransaction.decodedCalls).toStrictEqual([\n {\n calldata: [\n '0xae0ee0a63a2ce6baeeffe56e7714fb4efe48d419',\n '0x455448',\n '0x1c7edb66155e3c72b27e6165d7a1912ec97a1286',\n '0x296a93b1c3672a6093de21df2f7b665e0907abc97868e9bf52d6fea07921591',\n '0x13883834c2e180b5',\n '0x0',\n ],\n decodedArgs: {\n amount: 1407436682812293301n,\n depositor: 162680747805905936472113782182998614066721329798n,\n from_address: 993696174272377493693496825928908586134624850969n,\n l1_token: 4543560n,\n l2_recipient:\n 1170820745623894104757945010321258484362311313101582454359316155358757655953n,\n },\n selector:\n '0x1b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19',\n to: '0x73314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82',\n },\n ]);\n });\n\n it('Should not include decodedArgs if decode failed', async () => {\n // TODO, not sure how to test this yet when remote abi always available\n });\n\n it('Should able to check is fullBlock', async () => {\n // block with transactions\n const lightBlock = (await (strkApi as any).fetchLightBlock(500000)).block;\n expect(isFullBlock(blockData)).toBeTruthy();\n expect(isFullBlock(lightBlock)).toBeFalsy();\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subql/node-starknet",
3
- "version": "0.0.2-4",
3
+ "version": "0.0.2-6",
4
4
  "description": "",
5
5
  "author": "Jay Ji",
6
6
  "license": "GPL-3.0",
@@ -26,7 +26,7 @@
26
26
  "@nestjs/schedule": "^3.0.1",
27
27
  "@subql/common": "^5.2.2",
28
28
  "@subql/common-starknet": "0.0.2-2",
29
- "@subql/node-core": "^16.1.0",
29
+ "@subql/node-core": "16.1.1-1",
30
30
  "@subql/testing": "^2.2.2",
31
31
  "@subql/types-starknet": "0.0.2-2",
32
32
  "cacheable-lookup": "6",
@@ -60,5 +60,5 @@
60
60
  "/dist",
61
61
  "/bin"
62
62
  ],
63
- "stableVersion": "0.0.2-3"
63
+ "stableVersion": "0.0.2-5"
64
64
  }