Skip to content

Commit

Permalink
feat(blockHash): add blockHash and fix test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Han committed Jan 3, 2022
1 parent f4257be commit 4e107eb
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 21 deletions.
37 changes: 24 additions & 13 deletions __tests__/provider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,53 +13,64 @@ describe('defaultProvider', () => {
expect(typeof GpsStatementVerifier).toBe('string');
expect(typeof Starknet).toBe('string');
});
test('getBlock()', () => {
return expect(defaultProvider.getBlock(870)).resolves.not.toThrow();
test('getBlock(blockHash=0x3bca19c3d5983e21e9537669b15f951f0664f0747a083dc714e0b9648b8575d, blockNumber=undefined)', () => {
return expect(
defaultProvider.getBlock(
'0x3bca19c3d5983e21e9537669b15f951f0664f0747a083dc714e0b9648b8575d'
)
).resolves.not.toThrow();
});
test('getBlock(blockNumber=null)', () => {
test('getBlock(blockHash=undefined, blockNumber=36657)', () => {
return expect(defaultProvider.getBlock(undefined, 36657)).resolves.not.toThrow();
});
test('getBlock(blockHash=undefined, blockNumber=null)', () => {
return expect(defaultProvider.getBlock()).resolves.not.toThrow();
});
test('getCode()', () => {
return expect(
defaultProvider.getCode(
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
870
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
undefined,
36663
)
).resolves.not.toThrow();
});
test('getCode(blockNumber=null)', () => {
test('getCode(blockHash=undefined, blockNumber=null)', () => {
return expect(
defaultProvider.getCode('0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61')
defaultProvider.getCode(
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166'
)
).resolves.not.toThrow();
});
test('getStorageAt()', () => {
return expect(
defaultProvider.getStorageAt(
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
0,
870
undefined,
36663
)
).resolves.not.toThrow();
});
test('getStorageAt(blockNumber=null)', () => {
test('getStorageAt(blockHash=undefined, blockNumber=null)', () => {
return expect(
defaultProvider.getStorageAt(
'0x163a1542a64402ffc93e39a4962eec51ce126f2e634631d3f1f6770a76e3a61',
'0x01d1f307c073bb786a66e6e042ec2a9bdc385a3373bb3738d95b966d5ce56166',
0
)
).resolves.not.toThrow();
});
test('getTransactionStatus()', async () => {
return expect(
defaultProvider.getTransactionStatus(
'0x72add9621ecdcb07405a4f943fe410bf57003ca250400f01ce70f8a6fc72147'
'0x37013e1cb9c133e6fe51b4b371b76b317a480f56d80576730754c1662582348'
)
).resolves.not.toThrow();
});
test('getTransaction()', async () => {
return expect(
defaultProvider.getTransaction(
'0x72add9621ecdcb07405a4f943fe410bf57003ca250400f01ce70f8a6fc72147'
'0x37013e1cb9c133e6fe51b4b371b76b317a480f56d80576730754c1662582348'
)
).resolves.not.toThrow();
});
Expand Down
33 changes: 26 additions & 7 deletions src/provider/default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { parse, stringify } from '../utils/json';
import { BigNumberish, toBN, toHex } from '../utils/number';
import { compressProgram, formatSignature, randomAddress } from '../utils/stark';
import { ProviderInterface } from './interface';
import { getFormattedBlockIdentifier } from './utils';

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

Expand Down Expand Up @@ -86,15 +87,19 @@ 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 blockHash
* @param blockNumber
* @returns the result of the function on the smart contract.
*/
public async callContract(
invokeTransaction: CallContractTransaction,
blockHash?: BigNumberish,
blockNumber: BlockNumber = null
): Promise<CallContractResponse> {
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);

const { data } = await axios.post<CallContractResponse>(
urljoin(this.feederGatewayUrl, 'call_contract', `?blockNumber=${blockNumber}`),
urljoin(this.feederGatewayUrl, 'call_contract', formattedBlockIdentifier),
{
signature: [],
calldata: [],
Expand All @@ -105,16 +110,22 @@ export class Provider implements ProviderInterface {
}

/**
* Gets the block information from a block ID.
* Gets the block information from a block hash or block number.
*
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31)
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L27-L31)
*
* @param blockHash
* @param blockNumber
* @returns the block object { block_number, previous_block_number, state_root, status, timestamp, transaction_receipts, transactions }
*/
public async getBlock(blockNumber: BlockNumber = null): Promise<GetBlockResponse> {
public async getBlock(
blockHash?: BigNumberish,
blockNumber: BlockNumber = null
): Promise<GetBlockResponse> {
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);

const { data } = await axios.get<GetBlockResponse>(
urljoin(this.feederGatewayUrl, 'get_block', `?blockNumber=${blockNumber}`)
urljoin(this.feederGatewayUrl, 'get_block', formattedBlockIdentifier)
);
return data;
}
Expand All @@ -125,18 +136,22 @@ 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 blockHash
* @param blockNumber
* @returns Bytecode and ABI of compiled contract
*/
public async getCode(
contractAddress: string,
blockHash?: BigNumberish,
blockNumber: BlockNumber = null
): Promise<GetCodeResponse> {
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);

const { data } = await axios.get<GetCodeResponse>(
urljoin(
this.feederGatewayUrl,
'get_code',
`?contractAddress=${contractAddress}&blockNumber=${blockNumber}`
`?contractAddress=${contractAddress}&${formattedBlockIdentifier}`
)
);
return data;
Expand All @@ -150,19 +165,23 @@ export class Provider implements ProviderInterface {
*
* @param contractAddress
* @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)
* @param blockHash
* @param blockNumber
* @returns the value of the storage variable
*/
public async getStorageAt(
contractAddress: string,
key: number,
blockHash?: BigNumberish,
blockNumber: BlockNumber = null
): Promise<object> {
const formattedBlockIdentifier = getFormattedBlockIdentifier(blockHash, blockNumber);

const { data } = await axios.get<object>(
urljoin(
this.feederGatewayUrl,
'get_storage_at',
`?contractAddress=${contractAddress}&key=${key}&blockNumber=${blockNumber}`
`?contractAddress=${contractAddress}&key=${key}&${formattedBlockIdentifier}`
)
);
return data;
Expand Down
12 changes: 11 additions & 1 deletion src/provider/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,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#L17-L25)
*
* @param invokeTransaction - transaction to be invoked
* @param blockHash
* @param blockNumber
* @returns the result of the function on the smart contract.
*/
public abstract callContract(
invokeTransaction: CallContractTransaction,
blockHash?: BigNumberish,
blockNumber?: BlockNumber
): Promise<CallContractResponse>;

Expand All @@ -48,22 +50,28 @@ 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 blockHash
* @param blockNumber
* @returns the block object { block_number, previous_block_number, state_root, status, timestamp, transaction_receipts, transactions }
*/
public abstract getBlock(blockNumber?: BlockNumber): Promise<GetBlockResponse>;
public abstract getBlock(
blockHash?: BigNumberish,
blockNumber?: BlockNumber
): Promise<GetBlockResponse>;

/**
* Gets the code of the deployed contract.
*
* [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 blockHash
* @param blockNumber
* @returns Bytecode and ABI of compiled contract
*/
public abstract getCode(
contractAddress: string,
blockHash?: BigNumberish,
blockNumber?: BlockNumber
): Promise<GetCodeResponse>;

Expand All @@ -75,12 +83,14 @@ export abstract class ProviderInterface {
*
* @param contractAddress
* @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)
* @param blockHash
* @param blockNumber
* @returns the value of the storage variable
*/
public abstract getStorageAt(
contractAddress: string,
key: number,
blockHash?: BigNumberish,
blockNumber?: BlockNumber
): Promise<object>;

Expand Down
38 changes: 38 additions & 0 deletions src/provider/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import type { BlockNumber } from '../types';
import { BigNumberish } from '../utils/number';

/**
* TODO
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)
*
* @param hashValue
* @param hashField
*/
export function formatHash() {}

/**
* TODO
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)
* @param txHash
* @param txId
*/
export function txIdentifier() {}

/**
* Gets the block identifier for API request
*
* [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L164-L173)
*
* @param blockNumber
* @param blockHash
* @returns block identifier for API request
*/
export function getFormattedBlockIdentifier(
blockHash?: BigNumberish,
blockNumber: BlockNumber = null
): string {
if (blockHash) {
return `?blockHash=${blockHash}`;
}
return `?blockNumber=${blockNumber}`;
}

0 comments on commit 4e107eb

Please sign in to comment.