From 657dac1d77e840a7fc663d3a180515443a7e834f Mon Sep 17 00:00:00 2001 From: Janek Rahrt Date: Tue, 28 Dec 2021 16:29:57 +0100 Subject: [PATCH] feat: introduce blockNumber replaces blockId --- __tests__/provider.test.ts | 6 +++--- src/provider/default.ts | 28 ++++++++++++++++------------ src/provider/interface.ts | 20 ++++++++++++-------- src/types.ts | 5 +++-- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/__tests__/provider.test.ts b/__tests__/provider.test.ts index acd201490..d172ee1fb 100644 --- a/__tests__/provider.test.ts +++ b/__tests__/provider.test.ts @@ -16,7 +16,7 @@ describe('defaultProvider', () => { test('getBlock()', () => { return expect(defaultProvider.getBlock(870)).resolves.not.toThrow(); }); - test('getBlock(blockId=null)', () => { + test('getBlock(blockNumber=null)', () => { return expect(defaultProvider.getBlock()).resolves.not.toThrow(); }); test('getCode()', () => { @@ -27,7 +27,7 @@ describe('defaultProvider', () => { ) ).resolves.not.toThrow(); }); - test('getCode(blockId=null)', () => { + test('getCode(blockNumber=null)', () => { return expect( defaultProvider.getCode('0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61') ).resolves.not.toThrow(); @@ -41,7 +41,7 @@ describe('defaultProvider', () => { ) ).resolves.not.toThrow(); }); - test('getStorageAt(blockId=null)', () => { + test('getStorageAt(blockNumber=null)', () => { return expect( defaultProvider.getStorageAt( '0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61', diff --git a/src/provider/default.ts b/src/provider/default.ts index fe6eecd01..e0823ff0f 100644 --- a/src/provider/default.ts +++ b/src/provider/default.ts @@ -3,6 +3,7 @@ import urljoin from 'url-join'; import { AddTransactionResponse, + BlockNumber, CallContractResponse, CallContractTransaction, CompiledContract, @@ -85,15 +86,15 @@ export class Provider implements ProviderInterface { * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L17-L25) * * @param invokeTransaction - transaction to be invoked - * @param blockId + * @param blockNumber * @returns the result of the function on the smart contract. */ public async callContract( invokeTransaction: CallContractTransaction, - blockId?: number + blockNumber: BlockNumber = null ): Promise { const { data } = await axios.post( - urljoin(this.feederGatewayUrl, 'call_contract', `?blockId=${blockId ?? 'null'}`), + urljoin(this.feederGatewayUrl, 'call_contract', `?blockNumber=${blockNumber}`), { signature: [], calldata: [], @@ -108,12 +109,12 @@ export class Provider implements ProviderInterface { * * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31) * - * @param blockId + * @param blockNumber * @returns the block object { block_id, previous_block_id, state_root, status, timestamp, transaction_receipts, transactions } */ - public async getBlock(blockId?: number): Promise { + public async getBlock(blockNumber: BlockNumber = null): Promise { const { data } = await axios.get( - urljoin(this.feederGatewayUrl, 'get_block', `?blockId=${blockId ?? 'null'}`) + urljoin(this.feederGatewayUrl, 'get_block', `?blockNumber=${blockNumber}`) ); return data; } @@ -124,15 +125,18 @@ export class Provider implements ProviderInterface { * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L33-L36) * * @param contractAddress - * @param blockId + * @param blockNumber * @returns Bytecode and ABI of compiled contract */ - public async getCode(contractAddress: string, blockId?: number): Promise { + public async getCode( + contractAddress: string, + blockNumber: BlockNumber = null + ): Promise { const { data } = await axios.get( urljoin( this.feederGatewayUrl, 'get_code', - `?contractAddress=${contractAddress}&blockId=${blockId ?? 'null'}` + `?contractAddress=${contractAddress}&blockNumber=${blockNumber}` ) ); return data; @@ -146,19 +150,19 @@ export class Provider implements ProviderInterface { * * @param contractAddress * @param key - from getStorageVarAddress('') (WIP) - * @param blockId + * @param blockNumber * @returns the value of the storage variable */ public async getStorageAt( contractAddress: string, key: number, - blockId?: number + blockNumber: BlockNumber = null ): Promise { const { data } = await axios.get( urljoin( this.feederGatewayUrl, 'get_storage_at', - `?contractAddress=${contractAddress}&key=${key}&blockId=${blockId ?? 'null'}` + `?contractAddress=${contractAddress}&key=${key}&blockNumber=${blockNumber}` ) ); return data; diff --git a/src/provider/interface.ts b/src/provider/interface.ts index d7bdeef30..29206b993 100644 --- a/src/provider/interface.ts +++ b/src/provider/interface.ts @@ -1,5 +1,6 @@ import type { AddTransactionResponse, + BlockNumber, CallContractResponse, CallContractTransaction, CompiledContract, @@ -34,12 +35,12 @@ export abstract class ProviderInterface { * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L17-L25) * * @param invokeTransaction - transaction to be invoked - * @param blockId + * @param blockNumber * @returns the result of the function on the smart contract. */ public abstract callContract( invokeTransaction: CallContractTransaction, - blockId?: number + blockNumber?: BlockNumber ): Promise; /** @@ -47,10 +48,10 @@ export abstract class ProviderInterface { * * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31) * - * @param blockId + * @param blockNumber * @returns the block object { block_id, previous_block_id, state_root, status, timestamp, transaction_receipts, transactions } */ - public abstract getBlock(blockId?: number): Promise; + public abstract getBlock(blockNumber?: BlockNumber): Promise; /** * Gets the code of the deployed contract. @@ -58,10 +59,13 @@ export abstract class ProviderInterface { * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L33-L36) * * @param contractAddress - * @param blockId + * @param blockNumber * @returns Bytecode and ABI of compiled contract */ - public abstract getCode(contractAddress: string, blockId?: number): Promise; + public abstract getCode( + contractAddress: string, + blockNumber?: BlockNumber + ): Promise; // TODO: add proper type /** @@ -71,13 +75,13 @@ export abstract class ProviderInterface { * * @param contractAddress * @param key - from getStorageVarAddress('') (WIP) - * @param blockId + * @param blockNumber * @returns the value of the storage variable */ public abstract getStorageAt( contractAddress: string, key: number, - blockId?: number + blockNumber?: BlockNumber ): Promise; /** diff --git a/src/types.ts b/src/types.ts index 03611bd3c..0d1cbc244 100644 --- a/src/types.ts +++ b/src/types.ts @@ -43,6 +43,7 @@ export type Abi = FunctionAbi | StructAbi; export type EntryPointsByType = object; export type Program = object; +export type BlockNumber = 'pending' | null | number; export type CompiledContract = { abi: Abi[]; @@ -95,7 +96,7 @@ export type GetBlockResponse = { payload: string[]; from_address: string; }[]; - block_number: number; + block_number: BlockNumber; status: Status; transaction_index: number; }; @@ -118,7 +119,7 @@ export type GetTransactionResponse = { status: Status; transaction: Transaction; block_hash: string; - block_number: number; + block_number: BlockNumber; transaction_index: number; transaction_hash: string; };