Skip to content

Commit b6083d3

Browse files
committed
feat: getNonce endpoint for sequencer
1 parent 5c56584 commit b6083d3

File tree

7 files changed

+39
-9
lines changed

7 files changed

+39
-9
lines changed

__tests__/defaultProvider.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ describe('defaultProvider', () => {
6262
return expect(block).toHaveProperty('block_number');
6363
});
6464

65+
test('getNonce()', async () => {
66+
const nonce = await testProvider.getNonce(exampleContractAddress);
67+
return expect(nonce).toEqual('0x0');
68+
});
69+
6570
describe('getStorageAt', () => {
6671
test('with "key" type of number', () => {
6772
return expect(testProvider.getStorageAt(exampleContractAddress, 0)).resolves.not.toThrow();

__tests__/sequencerProvider.test.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import {
99

1010
// Run only if Devnet Sequencer
1111
describeIfSequencer('SequencerProvider', () => {
12-
let provider: SequencerProvider;
12+
let sequencerProvider: SequencerProvider;
1313
let customSequencerProvider: Provider;
1414
let exampleContractAddress: string;
1515

1616
beforeAll(async () => {
17-
provider = getTestProvider() as SequencerProvider;
17+
sequencerProvider = getTestProvider() as SequencerProvider;
1818
customSequencerProvider = new Provider({
1919
sequencer: {
2020
baseUrl: 'https://alpha4.starknet.io',
@@ -28,32 +28,34 @@ describeIfSequencer('SequencerProvider', () => {
2828
let exampleTransactionHash: string;
2929

3030
beforeAll(async () => {
31-
const { transaction_hash, contract_address } = await provider.deployContract({
31+
const { transaction_hash, contract_address } = await sequencerProvider.deployContract({
3232
contract: compiledErc20,
3333
});
34-
await provider.waitForTransaction(transaction_hash);
34+
await sequencerProvider.waitForTransaction(transaction_hash);
3535
exampleTransactionHash = transaction_hash;
3636
exampleContractAddress = contract_address;
3737
});
3838

3939
test('getTransactionStatus()', async () => {
40-
return expect(provider.getTransactionStatus(exampleTransactionHash)).resolves.not.toThrow();
40+
return expect(
41+
sequencerProvider.getTransactionStatus(exampleTransactionHash)
42+
).resolves.not.toThrow();
4143
});
4244

4345
test('transaction trace', async () => {
44-
const transactionTrace = await provider.getTransactionTrace(exampleTransactionHash);
46+
const transactionTrace = await sequencerProvider.getTransactionTrace(exampleTransactionHash);
4547
expect(transactionTrace).toHaveProperty('function_invocation');
4648
expect(transactionTrace).toHaveProperty('signature');
4749
});
4850

4951
test('getCode() -> { bytecode }', async () => {
50-
const code = await provider.getCode(exampleContractAddress);
52+
const code = await sequencerProvider.getCode(exampleContractAddress);
5153
return expect(Array.isArray(code.bytecode)).toBe(true);
5254
});
5355

5456
describeIfNotDevnet('which are not available on devnet', () => {
5557
test('getContractAddresses()', async () => {
56-
const { GpsStatementVerifier, Starknet } = await provider.getContractAddresses();
58+
const { GpsStatementVerifier, Starknet } = await sequencerProvider.getContractAddresses();
5759
expect(typeof GpsStatementVerifier).toBe('string');
5860
expect(typeof Starknet).toBe('string');
5961
});

src/provider/default.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ export class Provider implements ProviderInterface {
6565
return this.provider.getEstimateFee(invocation, blockIdentifier, invocationDetails);
6666
}
6767

68+
public async getNonce(contractAddress: string): Promise<any> {
69+
return this.provider.getNonce(contractAddress);
70+
}
71+
6872
public async getStorageAt(
6973
contractAddress: string,
7074
key: BigNumberish,

src/provider/interface.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ export abstract class ProviderInterface {
6262
blockIdentifier?: BlockIdentifier
6363
): Promise<ContractClass>;
6464

65+
/**
66+
* Gets the nonce of a contract with respect to a specific block
67+
*
68+
* @param contractAddress - contract address
69+
* @returns the hex nonce
70+
*/
71+
public abstract getNonce(contractAddress: string): Promise<any>;
72+
6573
/**
6674
* Gets the contract's storage variable at a specific key.
6775
*

src/provider/sequencer.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ export class SequencerProvider implements ProviderInterface {
229229
);
230230
}
231231

232+
public async getNonce(contractAddress: string): Promise<any> {
233+
return this.fetchEndpoint('get_nonce', { contractAddress });
234+
}
235+
232236
public async getStorageAt(
233237
contractAddress: string,
234238
key: BigNumberish,

src/types/api/rpc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export namespace RPC {
143143
starknet_getNonce: {
144144
QUERY: never;
145145
REQUEST: any[];
146-
RESPONSE: string;
146+
RESPONSE: any;
147147
};
148148
starknet_getStorageAt: {
149149
QUERY: never;

src/types/api/sequencer.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,13 @@ export namespace Sequencer {
259259
REQUEST: never;
260260
RESPONSE: TransactionReceiptResponse;
261261
};
262+
get_nonce: {
263+
QUERY: {
264+
contractAddress: string;
265+
};
266+
REQUEST: never;
267+
RESPONSE: any;
268+
};
262269
get_storage_at: {
263270
QUERY: {
264271
contractAddress: string;

0 commit comments

Comments
 (0)