From 4267a5f5cec77bb4b09b2e8b4979ec0ee611d416 Mon Sep 17 00:00:00 2001 From: dhruvkelawala Date: Mon, 24 Jan 2022 17:06:26 +0530 Subject: [PATCH] feat(provider): add getTransactionReceipt() --- __tests__/provider.test.ts | 9 +++++++++ src/provider/default.ts | 24 +++++++++++++++++++++++- src/provider/interface.ts | 6 ++++++ src/provider/utils.ts | 20 +++++++++++++++----- src/types.ts | 10 ++++++++++ 5 files changed, 63 insertions(+), 6 deletions(-) diff --git a/__tests__/provider.test.ts b/__tests__/provider.test.ts index b086b0cb9..f86a86410 100644 --- a/__tests__/provider.test.ts +++ b/__tests__/provider.test.ts @@ -78,6 +78,15 @@ describe('defaultProvider', () => { ) ).resolves.not.toThrow(); }); + + test.only('getTransactionReceipt', async () => { + return expect( + defaultProvider.getTransactionReceipt( + '0x7906b9cfe400e11dd1f977a128f73995029e67c2135cdef1552622e636ff499' + ) + ).resolves.not.toThrow(); + }); + test('callContract()', () => { return expect( defaultProvider.callContract({ diff --git a/src/provider/default.ts b/src/provider/default.ts index 890bdf158..116c7417b 100644 --- a/src/provider/default.ts +++ b/src/provider/default.ts @@ -14,12 +14,13 @@ import { GetTransactionStatusResponse, Signature, Transaction, + TransactionReceipt, } from '../types'; 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'; +import { getFormattedBlockIdentifier, txIdentifier } from './utils'; type NetworkName = 'mainnet-alpha' | 'goerli-alpha'; @@ -223,6 +224,27 @@ export class Provider implements ProviderInterface { return data; } + /** + * Gets the transaction receipt from a tx hash or tx id. + * + * [Reference] (https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L104-L111) + * + * @param txHash + * @param txId + * @returns the transaction receipt object + */ + + public async getTransactionReceipt( + txHash?: BigNumberish, + txId?: BigNumberish + ): Promise { + const { data } = await axios.get( + urljoin(this.feederGatewayUrl, 'get_transaction_receipt', `?${txIdentifier(txHash, txId)}`) + ); + + return data; + } + /** * Invoke a function on the starknet contract * diff --git a/src/provider/interface.ts b/src/provider/interface.ts index e7761866d..dfdbea2de 100644 --- a/src/provider/interface.ts +++ b/src/provider/interface.ts @@ -11,6 +11,7 @@ import type { GetTransactionStatusResponse, Signature, Transaction, + TransactionReceipt, } from '../types'; import type { BigNumberish } from '../utils/number'; @@ -114,6 +115,11 @@ export abstract class ProviderInterface { */ public abstract getTransaction(txHash: BigNumberish): Promise; + public abstract getTransactionReceipt( + txHash?: BigNumberish, + txId?: BigNumberish + ): Promise; + /** * Invoke a function on the starknet contract * diff --git a/src/provider/utils.ts b/src/provider/utils.ts index bc86e29f5..3e8ef9430 100644 --- a/src/provider/utils.ts +++ b/src/provider/utils.ts @@ -1,22 +1,32 @@ import type { BlockNumber } from '../types'; -import { BigNumberish } from '../utils/number'; +import { BigNumberish, toBN, toHex } 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() {} +export function formatHash(hashValue: BigNumberish): string { + if (typeof hashValue === 'string') return hashValue; + return toHex(toBN(hashValue)); +} /** - * 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() {} +export function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string { + if (!txHash) { + return `transactionId=${JSON.stringify(txId)}`; + } + const hashString = formatHash(txHash); + + return `transactionHash=${hashString}`; +} /** * Gets the block identifier for API request diff --git a/src/types.ts b/src/types.ts index e96b33e64..2ebed311c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -129,3 +129,13 @@ export type AddTransactionResponse = { transaction_hash: string; address?: string; }; + +export type TransactionReceipt = { + status: Status; + transaction_hash: string; + transaction_index: number; + block_hash: string; + block_number: string; + l2_to_l1_messages: string[]; + events: string[]; +};