Skip to content

Commit 4e107eb

Browse files
author
Sean Han
committed
feat(blockHash): add blockHash and fix test cases
1 parent f4257be commit 4e107eb

File tree

4 files changed

+99
-21
lines changed

4 files changed

+99
-21
lines changed

__tests__/provider.test.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,53 +13,64 @@ describe('defaultProvider', () => {
1313
expect(typeof GpsStatementVerifier).toBe('string');
1414
expect(typeof Starknet).toBe('string');
1515
});
16-
test('getBlock()', () => {
17-
return expect(defaultProvider.getBlock(870)).resolves.not.toThrow();
16+
test('getBlock(blockHash=0x3bca19c3d5983e21e9537669b15f951f0664f0747a083dc714e0b9648b8575d, blockNumber=undefined)', () => {
17+
return expect(
18+
defaultProvider.getBlock(
19+
'0x3bca19c3d5983e21e9537669b15f951f0664f0747a083dc714e0b9648b8575d'
20+
)
21+
).resolves.not.toThrow();
1822
});
19-
test('getBlock(blockNumber=null)', () => {
23+
test('getBlock(blockHash=undefined, blockNumber=36657)', () => {
24+
return expect(defaultProvider.getBlock(undefined, 36657)).resolves.not.toThrow();
25+
});
26+
test('getBlock(blockHash=undefined, blockNumber=null)', () => {
2027
return expect(defaultProvider.getBlock()).resolves.not.toThrow();
2128
});
2229
test('getCode()', () => {
2330
return expect(
2431
defaultProvider.getCode(
25-
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
26-
870
32+
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
33+
undefined,
34+
36663
2735
)
2836
).resolves.not.toThrow();
2937
});
30-
test('getCode(blockNumber=null)', () => {
38+
test('getCode(blockHash=undefined, blockNumber=null)', () => {
3139
return expect(
32-
defaultProvider.getCode('0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61')
40+
defaultProvider.getCode(
41+
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166'
42+
)
3343
).resolves.not.toThrow();
3444
});
3545
test('getStorageAt()', () => {
3646
return expect(
3747
defaultProvider.getStorageAt(
38-
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
48+
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
3949
0,
40-
870
50+
undefined,
51+
36663
4152
)
4253
).resolves.not.toThrow();
4354
});
44-
test('getStorageAt(blockNumber=null)', () => {
55+
test('getStorageAt(blockHash=undefined, blockNumber=null)', () => {
4556
return expect(
4657
defaultProvider.getStorageAt(
47-
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
58+
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
4859
0
4960
)
5061
).resolves.not.toThrow();
5162
});
5263
test('getTransactionStatus()', async () => {
5364
return expect(
5465
defaultProvider.getTransactionStatus(
55-
'0x72add9621ecdcb07405a4f943fe410bf57003ca250400f01ce70f8a6fc72147'
66+
'0x37013e1cb9c133e6fe51b4b371b76b317a480f56d80576730754c1662582348'
5667
)
5768
).resolves.not.toThrow();
5869
});
5970
test('getTransaction()', async () => {
6071
return expect(
6172
defaultProvider.getTransaction(
62-
'0x72add9621ecdcb07405a4f943fe410bf57003ca250400f01ce70f8a6fc72147'
73+
'0x37013e1cb9c133e6fe51b4b371b76b317a480f56d80576730754c1662582348'
6374
)
6475
).resolves.not.toThrow();
6576
});

src/provider/default.ts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { parse, stringify } from '../utils/json';
1919
import { BigNumberish, toBN, toHex } from '../utils/number';
2020
import { compressProgram, formatSignature, randomAddress } from '../utils/stark';
2121
import { ProviderInterface } from './interface';
22+
import { getFormattedBlockIdentifier } from './utils';
2223

2324
type NetworkName = 'mainnet-alpha' | 'goerli-alpha';
2425

@@ -86,15 +87,19 @@ export class Provider implements ProviderInterface {
8687
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L17-L25)
8788
*
8889
* @param invokeTransaction - transaction to be invoked
90+
* @param blockHash
8991
* @param blockNumber
9092
* @returns the result of the function on the smart contract.
9193
*/
9294
public async callContract(
9395
invokeTransaction: CallContractTransaction,
96+
blockHash?: BigNumberish,
9497
blockNumber: BlockNumber = null
9598
): Promise<CallContractResponse> {
99+
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);
100+
96101
const { data } = await axios.post<CallContractResponse>(
97-
urljoin(this.feederGatewayUrl, 'call_contract', `?blockNumber=${blockNumber}`),
102+
urljoin(this.feederGatewayUrl, 'call_contract', formattedBlockIdentifier),
98103
{
99104
signature: [],
100105
calldata: [],
@@ -105,16 +110,22 @@ export class Provider implements ProviderInterface {
105110
}
106111

107112
/**
108-
* Gets the block information from a block ID.
113+
* Gets the block information from a block hash or block number.
109114
*
110-
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31)
115+
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31)
111116
*
117+
* @param blockHash
112118
* @param blockNumber
113119
* @returns the block object { block_number, previous_block_number, state_root, status, timestamp, transaction_receipts, transactions }
114120
*/
115-
public async getBlock(blockNumber: BlockNumber = null): Promise<GetBlockResponse> {
121+
public async getBlock(
122+
blockHash?: BigNumberish,
123+
blockNumber: BlockNumber = null
124+
): Promise<GetBlockResponse> {
125+
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);
126+
116127
const { data } = await axios.get<GetBlockResponse>(
117-
urljoin(this.feederGatewayUrl, 'get_block', `?blockNumber=${blockNumber}`)
128+
urljoin(this.feederGatewayUrl, 'get_block', formattedBlockIdentifier)
118129
);
119130
return data;
120131
}
@@ -125,18 +136,22 @@ export class Provider implements ProviderInterface {
125136
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L33-L36)
126137
*
127138
* @param contractAddress
139+
* @param blockHash
128140
* @param blockNumber
129141
* @returns Bytecode and ABI of compiled contract
130142
*/
131143
public async getCode(
132144
contractAddress: string,
145+
blockHash?: BigNumberish,
133146
blockNumber: BlockNumber = null
134147
): Promise<GetCodeResponse> {
148+
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);
149+
135150
const { data } = await axios.get<GetCodeResponse>(
136151
urljoin(
137152
this.feederGatewayUrl,
138153
'get_code',
139-
`?contractAddress=${contractAddress}&blockNumber=${blockNumber}`
154+
`?contractAddress=${contractAddress}&${formattedBlockIdentifier}`
140155
)
141156
);
142157
return data;
@@ -150,19 +165,23 @@ export class Provider implements ProviderInterface {
150165
*
151166
* @param contractAddress
152167
* @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)
168+
* @param blockHash
153169
* @param blockNumber
154170
* @returns the value of the storage variable
155171
*/
156172
public async getStorageAt(
157173
contractAddress: string,
158174
key: number,
175+
blockHash?: BigNumberish,
159176
blockNumber: BlockNumber = null
160177
): Promise<object> {
178+
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);
179+
161180
const { data } = await axios.get<object>(
162181
urljoin(
163182
this.feederGatewayUrl,
164183
'get_storage_at',
165-
`?contractAddress=${contractAddress}&key=${key}&blockNumber=${blockNumber}`
184+
`?contractAddress=${contractAddress}&key=${key}&${formattedBlockIdentifier}`
166185
)
167186
);
168187
return data;

src/provider/interface.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ export abstract class ProviderInterface {
3535
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L17-L25)
3636
*
3737
* @param invokeTransaction - transaction to be invoked
38+
* @param blockHash
3839
* @param blockNumber
3940
* @returns the result of the function on the smart contract.
4041
*/
4142
public abstract callContract(
4243
invokeTransaction: CallContractTransaction,
44+
blockHash?: BigNumberish,
4345
blockNumber?: BlockNumber
4446
): Promise<CallContractResponse>;
4547

@@ -48,22 +50,28 @@ export abstract class ProviderInterface {
4850
*
4951
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31)
5052
*
53+
* @param blockHash
5154
* @param blockNumber
5255
* @returns the block object { block_number, previous_block_number, state_root, status, timestamp, transaction_receipts, transactions }
5356
*/
54-
public abstract getBlock(blockNumber?: BlockNumber): Promise<GetBlockResponse>;
57+
public abstract getBlock(
58+
blockHash?: BigNumberish,
59+
blockNumber?: BlockNumber
60+
): Promise<GetBlockResponse>;
5561

5662
/**
5763
* Gets the code of the deployed contract.
5864
*
5965
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L33-L36)
6066
*
6167
* @param contractAddress
68+
* @param blockHash
6269
* @param blockNumber
6370
* @returns Bytecode and ABI of compiled contract
6471
*/
6572
public abstract getCode(
6673
contractAddress: string,
74+
blockHash?: BigNumberish,
6775
blockNumber?: BlockNumber
6876
): Promise<GetCodeResponse>;
6977

@@ -75,12 +83,14 @@ export abstract class ProviderInterface {
7583
*
7684
* @param contractAddress
7785
* @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)
86+
* @param blockHash
7887
* @param blockNumber
7988
* @returns the value of the storage variable
8089
*/
8190
public abstract getStorageAt(
8291
contractAddress: string,
8392
key: number,
93+
blockHash?: BigNumberish,
8494
blockNumber?: BlockNumber
8595
): Promise<object>;
8696

src/provider/utils.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { BlockNumber } from '../types';
2+
import { BigNumberish } from '../utils/number';
3+
4+
/**
5+
* TODO
6+
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)
7+
*
8+
* @param hashValue
9+
* @param hashField
10+
*/
11+
export function formatHash() {}
12+
13+
/**
14+
* TODO
15+
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)
16+
* @param txHash
17+
* @param txId
18+
*/
19+
export function txIdentifier() {}
20+
21+
/**
22+
* Gets the block identifier for API request
23+
*
24+
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L164-L173)
25+
*
26+
* @param blockNumber
27+
* @param blockHash
28+
* @returns block identifier for API request
29+
*/
30+
export function getFormattedBlockIdentifier(
31+
blockHash?: BigNumberish,
32+
blockNumber: BlockNumber = null
33+
): string {
34+
if (blockHash) {
35+
return `?blockHash=${blockHash}`;
36+
}
37+
return `?blockNumber=${blockNumber}`;
38+
}

0 commit comments

Comments
 (0)