From bf95bbc002f9ef953dfe3e1ed20558ef5c58f8b4 Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 10 Jun 2024 12:57:38 +0200 Subject: [PATCH 1/4] fix: enable instance parser change --- __tests__/rpcProvider.test.ts | 19 +++++++++++++++---- src/provider/rpc.ts | 20 ++++++++++++-------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/__tests__/rpcProvider.test.ts b/__tests__/rpcProvider.test.ts index a998e271d..7c4e35ec9 100644 --- a/__tests__/rpcProvider.test.ts +++ b/__tests__/rpcProvider.test.ts @@ -25,14 +25,14 @@ import { compiledL1L2, compiledOpenZeppelinAccount, createBlockForDevnet, - describeIfRpc, - describeIfNotDevnet, describeIfDevnet, + describeIfNotDevnet, + describeIfRpc, + describeIfTestnet, + devnetETHtokenAddress, getTestAccount, getTestProvider, - describeIfTestnet, waitNextBlock, - devnetETHtokenAddress, } from './config/fixtures'; import { initializeMatcher } from './config/schema'; @@ -50,6 +50,17 @@ describeIfRpc('RPCProvider', () => { await createBlockForDevnet(); }); + test('instantiate from rpcProvider', () => { + // instantiate rpc provider template + const newInsRPCProvider = new RpcProvider(); + // like* change channel and parser + newInsRPCProvider.channel = rpcProvider.channel; + newInsRPCProvider.responseParser = rpcProvider.responseParser; + // instantiate from modified instance + const FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); + expect(FinalInsRPCProvider).toBeInstanceOf(RpcProvider); + }); + test('getChainId', async () => { const fetchSpy = jest.spyOn(rpcProvider.channel as any, 'fetchEndpoint'); (rpcProvider as any).chainId = undefined as unknown as StarknetChainId; diff --git a/src/provider/rpc.ts b/src/provider/rpc.ts index 97bf1dd4a..65d8c0ac4 100644 --- a/src/provider/rpc.ts +++ b/src/provider/rpc.ts @@ -1,6 +1,7 @@ -import type { SPEC } from 'starknet-types-07'; import { bytesToHex } from '@noble/curves/abstract/utils'; import { keccak_256 } from '@noble/hashes/sha3'; +import type { SPEC } from 'starknet-types-07'; + import { RPC06, RPC07, RpcChannel } from '../channel'; import { AccountInvocations, @@ -29,27 +30,30 @@ import { getSimulateTransactionOptions, waitForTransactionOptions, } from '../types'; -import { getAbiContractVersion } from '../utils/calldata/cairo'; -import { isSierra } from '../utils/contract'; -import { RPCResponseParser } from '../utils/responseParser/rpc'; -import { GetTransactionReceiptResponse, ReceiptTx } from '../utils/transactionReceipt'; import type { TransactionWithHash } from '../types/provider/spec'; import assert from '../utils/assert'; -import { hexToBytes, toHex } from '../utils/num'; +import { getAbiContractVersion } from '../utils/calldata/cairo'; +import { isSierra } from '../utils/contract'; import { addHexPrefix, removeHexPrefix } from '../utils/encode'; +import { hexToBytes, toHex } from '../utils/num'; import { wait } from '../utils/provider'; +import { RPCResponseParser } from '../utils/responseParser/rpc'; +import { GetTransactionReceiptResponse, ReceiptTx } from '../utils/transactionReceipt'; import { LibraryError } from './errors'; import { ProviderInterface } from './interface'; export class RpcProvider implements ProviderInterface { - private responseParser: RPCResponseParser; + public responseParser: RPCResponseParser; public channel: RPC07.RpcChannel | RPC06.RpcChannel; constructor(optionsOrProvider?: RpcProviderOptions | ProviderInterface | RpcProvider) { if (optionsOrProvider && 'channel' in optionsOrProvider) { this.channel = optionsOrProvider.channel; - this.responseParser = (optionsOrProvider as any).responseParser; + this.responseParser = + 'responseParser' in optionsOrProvider + ? optionsOrProvider.responseParser + : new RPCResponseParser(); } else { this.channel = new RpcChannel({ ...optionsOrProvider, waitMode: false }); this.responseParser = new RPCResponseParser(optionsOrProvider?.feeMarginPercentage); From 7d5065ea1dbf5ecb7e7a49259959f82180ca6b53 Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Tue, 11 Jun 2024 11:25:36 +0200 Subject: [PATCH 2/4] Update __tests__/rpcProvider.test.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Petar Penović --- __tests__/rpcProvider.test.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/__tests__/rpcProvider.test.ts b/__tests__/rpcProvider.test.ts index 7c4e35ec9..5a45fcc0f 100644 --- a/__tests__/rpcProvider.test.ts +++ b/__tests__/rpcProvider.test.ts @@ -51,14 +51,16 @@ describeIfRpc('RPCProvider', () => { }); test('instantiate from rpcProvider', () => { - // instantiate rpc provider template const newInsRPCProvider = new RpcProvider(); - // like* change channel and parser - newInsRPCProvider.channel = rpcProvider.channel; - newInsRPCProvider.responseParser = rpcProvider.responseParser; - // instantiate from modified instance - const FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); - expect(FinalInsRPCProvider).toBeInstanceOf(RpcProvider); + + let FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); + expect(FinalInsRPCProvider.channel).toBe(newInsRPCProvider.channel); + expect(FinalInsRPCProvider.responseParser).toBe(newInsRPCProvider.responseParser); + + delete (newInsRPCProvider as any).responseParser; + FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); + expect(FinalInsRPCProvider.channel).toBe(newInsRPCProvider.channel); + expect(FinalInsRPCProvider.responseParser).toBeInstanceOf(RPCResponseParser); }); test('getChainId', async () => { From c2887ed250c0f7331986738f6d3ef563eb0ea0ce Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Tue, 11 Jun 2024 11:37:17 +0200 Subject: [PATCH 3/4] fix: export ResponseParser and RPCResponseParser --- __tests__/rpcProvider.test.ts | 5 +++-- src/index.ts | 1 + src/utils/responseParser/index.ts | 35 ++----------------------------- src/utils/responseParser/rpc.ts | 4 ++-- 4 files changed, 8 insertions(+), 37 deletions(-) diff --git a/__tests__/rpcProvider.test.ts b/__tests__/rpcProvider.test.ts index 5a45fcc0f..4ebdbb004 100644 --- a/__tests__/rpcProvider.test.ts +++ b/__tests__/rpcProvider.test.ts @@ -8,6 +8,7 @@ import { FeeEstimate, RPC, RPC06, + RPCResponseParser, ReceiptTx, RpcProvider, TransactionExecutionStatus, @@ -52,11 +53,11 @@ describeIfRpc('RPCProvider', () => { test('instantiate from rpcProvider', () => { const newInsRPCProvider = new RpcProvider(); - + let FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); expect(FinalInsRPCProvider.channel).toBe(newInsRPCProvider.channel); expect(FinalInsRPCProvider.responseParser).toBe(newInsRPCProvider.responseParser); - + delete (newInsRPCProvider as any).responseParser; FinalInsRPCProvider = new RpcProvider(newInsRPCProvider); expect(FinalInsRPCProvider.channel).toBe(newInsRPCProvider.channel); diff --git a/src/index.ts b/src/index.ts index c4cd4d3bf..0315d3fae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -34,6 +34,7 @@ export * as starknetId from './utils/starknetId'; export * as provider from './utils/provider'; export * as selector from './utils/selector'; export * as events from './utils/events/index'; +export * from './utils/responseParser'; export * from './utils/cairoDataTypes/uint256'; export * from './utils/cairoDataTypes/uint512'; export * from './utils/address'; diff --git a/src/utils/responseParser/index.ts b/src/utils/responseParser/index.ts index 9605da691..3704826da 100644 --- a/src/utils/responseParser/index.ts +++ b/src/utils/responseParser/index.ts @@ -1,33 +1,2 @@ -import { - BlockWithTxHashes, - FeeEstimate, - CallContractResponse, - DeclareContractResponse, - DeployContractResponse, - EstimateFeeResponse, - GetBlockResponse, - GetTransactionResponse, - InvokeFunctionResponse, - SimulateTransactionResponse, -} from '../../types'; -import type { GetTransactionReceiptResponse } from '../transactionReceipt'; - -export abstract class ResponseParser { - abstract parseGetBlockResponse(res: BlockWithTxHashes): GetBlockResponse; - - abstract parseGetTransactionResponse(res: any): GetTransactionResponse; - - abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse; - - abstract parseFeeEstimateResponse(res: FeeEstimate[]): EstimateFeeResponse; - - abstract parseCallContractResponse(res: any): CallContractResponse; - - abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse; - - abstract parseDeployContractResponse(res: any): DeployContractResponse; - - abstract parseDeclareContractResponse(res: any): DeclareContractResponse; - - abstract parseSimulateTransactionResponse(res: any): SimulateTransactionResponse; -} +export * from './interface'; +export * from './rpc'; diff --git a/src/utils/responseParser/rpc.ts b/src/utils/responseParser/rpc.ts index 4a006ed94..d2f944d81 100644 --- a/src/utils/responseParser/rpc.ts +++ b/src/utils/responseParser/rpc.ts @@ -2,7 +2,7 @@ * Map RPC Response to common interface response * Intersection (sequencer response ∩ (∪ rpc responses)) */ -import { +import type { BlockWithTxHashes, ContractClassPayload, ContractClassResponse, @@ -19,7 +19,7 @@ import { import { toBigInt } from '../num'; import { isString } from '../shortString'; import { estimateFeeToBounds, estimatedFeeToMaxFee } from '../stark'; -import { ResponseParser } from '.'; +import { ResponseParser } from './interface'; export class RPCResponseParser implements From c51d4df835754221181a72e484173661b66f1bba Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Tue, 11 Jun 2024 11:41:14 +0200 Subject: [PATCH 4/4] chore: noob --- src/utils/responseParser/interface.ts | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/utils/responseParser/interface.ts diff --git a/src/utils/responseParser/interface.ts b/src/utils/responseParser/interface.ts new file mode 100644 index 000000000..9605da691 --- /dev/null +++ b/src/utils/responseParser/interface.ts @@ -0,0 +1,33 @@ +import { + BlockWithTxHashes, + FeeEstimate, + CallContractResponse, + DeclareContractResponse, + DeployContractResponse, + EstimateFeeResponse, + GetBlockResponse, + GetTransactionResponse, + InvokeFunctionResponse, + SimulateTransactionResponse, +} from '../../types'; +import type { GetTransactionReceiptResponse } from '../transactionReceipt'; + +export abstract class ResponseParser { + abstract parseGetBlockResponse(res: BlockWithTxHashes): GetBlockResponse; + + abstract parseGetTransactionResponse(res: any): GetTransactionResponse; + + abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse; + + abstract parseFeeEstimateResponse(res: FeeEstimate[]): EstimateFeeResponse; + + abstract parseCallContractResponse(res: any): CallContractResponse; + + abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse; + + abstract parseDeployContractResponse(res: any): DeployContractResponse; + + abstract parseDeclareContractResponse(res: any): DeclareContractResponse; + + abstract parseSimulateTransactionResponse(res: any): SimulateTransactionResponse; +}