diff --git a/src/provider/rpc.ts b/src/provider/rpc.ts index 6d2276e64..2fe3500a1 100644 --- a/src/provider/rpc.ts +++ b/src/provider/rpc.ts @@ -543,7 +543,7 @@ export class RpcProvider implements ProviderInterface { blockIdentifier = this.blockIdentifier, skipValidate = false, skipExecute = false, // @deprecated - skipFeeCharge = false, + skipFeeCharge = true, // Pathfinder currently does not support `starknet_simulateTransactions` without `SKIP_FEE_CHARGE` simulation flag being set. This will become supported in a future release }: getSimulateTransactionOptions ): Promise { const block_id = new Block(blockIdentifier).identifier; @@ -583,7 +583,7 @@ export class RpcProvider implements ProviderInterface { type: RPC.TransactionType.INVOKE, // Diff between sequencer and rpc invoke type sender_address: invocation.contractAddress, calldata: CallData.toHex(invocation.calldata), - version: toHex(invocation.version || defaultVersions.v1), // HEX_STR_TRANSACTION_VERSION_1, + version: toHex(invocation.version || defaultVersions.v1) as any, // HEX_STR_TRANSACTION_VERSION_1, // as any HOTFIX TODO: Resolve spec version ...details, }; } @@ -593,7 +593,7 @@ export class RpcProvider implements ProviderInterface { type: invocation.type, contract_class: invocation.contract, sender_address: invocation.senderAddress, - version: toHex(invocation.version || defaultVersions.v1), // HEX_STR_TRANSACTION_VERSION_1, + version: toHex(invocation.version || defaultVersions.v1) as any, // HEX_STR_TRANSACTION_VERSION_1, // as any HOTFIX TODO: Resolve spec version ...details, }; } @@ -606,7 +606,7 @@ export class RpcProvider implements ProviderInterface { }, compiled_class_hash: invocation.compiledClassHash || '', sender_address: invocation.senderAddress, - version: toHex(invocation.version || defaultVersions.v2), // HEX_STR_TRANSACTION_VERSION_2, + version: toHex(invocation.version || defaultVersions.v2) as any, // HEX_STR_TRANSACTION_VERSION_2, // as any HOTFIX TODO: Resolve spec version ...details, }; } diff --git a/src/types/api/sequencer.ts b/src/types/api/sequencer.ts index 10b35bbe0..be6a2b663 100644 --- a/src/types/api/sequencer.ts +++ b/src/types/api/sequencer.ts @@ -156,11 +156,24 @@ export type TransactionResponse = | InvokeFunctionTransactionResponse; export type SuccessfulTransactionResponse = { + execution_status: TransactionExecutionStatus.SUCCEEDED; + finality_status: TransactionFinalityStatus; status: TransactionStatus; + block_hash: string; + block_number: BlockNumber; + transaction_index: number; transaction: TransactionResponse; +}; + +export type RevertedTransactionResponse = { + execution_status: TransactionExecutionStatus.REVERTED; + finality_status: TransactionFinalityStatus; + status: TransactionStatus; block_hash: string; block_number: BlockNumber; transaction_index: number; + transaction: TransactionResponse; + revert_error: string; }; export type FailedTransactionResponse = { @@ -172,33 +185,55 @@ export type FailedTransactionResponse = { transaction: TransactionResponse; }; -export type GetTransactionResponse = SuccessfulTransactionResponse | FailedTransactionResponse; +export type GetTransactionResponse = + | SuccessfulTransactionResponse + | RevertedTransactionResponse + | FailedTransactionResponse; export type TransactionReceiptResponse = | SuccessfulTransactionReceiptResponse - | FailedTransactionReceiptResponse; + | RevertedTransactionReceiptResponse + | RejectedTransactionReceiptResponse; export type SuccessfulTransactionReceiptResponse = { - status: TransactionStatus; + execution_status: TransactionExecutionStatus.SUCCEEDED; + finality_status: TransactionFinalityStatus; + status: Omit; + actual_fee: string; + block_hash: string; + block_number: BlockNumber; transaction_hash: string; transaction_index: number; + l2_to_l1_messages: string[]; + events: string[]; + execution_resources?: ExecutionResources; // INVOKE ONLY +}; + +export type RevertedTransactionReceiptResponse = { + execution_status: TransactionExecutionStatus.REVERTED; + finality_status: TransactionFinalityStatus; + status: TransactionStatus.REVERTED; + actual_fee: string; block_hash: string; block_number: BlockNumber; + transaction_hash: string; + transaction_index: number; l2_to_l1_messages: string[]; events: string[]; - actual_fee: string; - execution_resources: ExecutionResources; + revert_error: string; }; -export type FailedTransactionReceiptResponse = { +export type RejectedTransactionReceiptResponse = { + execution_status: TransactionExecutionStatus.REJECTED; + finality_status: TransactionFinalityStatus; status: TransactionStatus.REJECTED; + transaction_hash: string; + l2_to_l1_messages: string[]; + events: string[]; transaction_failure_reason: { code: string; error_message: string; }; - transaction_hash: string; - l2_to_l1_messages: string[]; - events: string[]; }; export type GetBlockResponse = { diff --git a/src/types/provider/response.ts b/src/types/provider/response.ts index 079cf49ed..188d4b494 100644 --- a/src/types/provider/response.ts +++ b/src/types/provider/response.ts @@ -4,9 +4,11 @@ */ import * as RPC from '../api/rpc'; +import { BlockHash } from '../api/rpc'; import * as Sequencer from '../api/sequencer'; import { AllowArray, + BlockNumber, BlockStatus, ByteCode, Call, @@ -16,6 +18,8 @@ import { LegacyContractClass, RawCalldata, Signature, + TransactionExecutionStatus, + TransactionFinalityStatus, TransactionStatus, TransactionType, UniversalDeployerContractPayload, @@ -40,13 +44,10 @@ export interface GetCodeResponse { // abi: string; // is not consistent between rpc and sequencer (is it?), therefore not included in the provider interface } -export type RejectedTransactionResponse = { - status: `${TransactionStatus.REJECTED}`; - transaction_failure_reason: { - code: string; - error_message: string; - }; -}; +export interface ContractEntryPoint { + offset: string; + selector: string; +} export type GetTransactionResponse = | InvokeTransactionResponse @@ -68,31 +69,11 @@ export interface InvokeTransactionResponse extends CommonTransactionResponse { calldata: RawCalldata; } -export interface ContractEntryPoint { - offset: string; - selector: string; -} - export interface DeclareTransactionResponse extends CommonTransactionResponse { contract_class?: any; sender_address?: string; } -export type RejectedTransactionReceiptResponse = RejectedTransactionResponse & - (InvokeTransactionReceiptResponse | DeclareTransactionReceiptResponse); - -export type GetTransactionReceiptResponse = - | InvokeTransactionReceiptResponse - | DeclareTransactionReceiptResponse - | RejectedTransactionReceiptResponse; - -export interface CommonTransactionReceiptResponse { - transaction_hash: string; - status?: `${TransactionStatus}`; - actual_fee?: string; - status_data?: string; -} - export interface MessageToL1 { to_address: string; payload: Array; @@ -109,14 +90,82 @@ export interface MessageToL2 { payload: Array; } -export interface InvokeTransactionReceiptResponse extends CommonTransactionReceiptResponse { - /** @deprecated Use l2_to_l1_messages */ - messages_sent?: Array; - events?: Array; - l1_origin_message?: MessageToL2; +export type RejectedTransactionResponse = { + status: `${TransactionStatus.REJECTED}`; + transaction_failure_reason: { + code: string; + error_message: string; + }; +}; + +export type GetTransactionReceiptResponse = + | SuccessfulTransactionReceiptResponse + | RevertedTransactionReceiptResponse + | RejectedTransactionReceiptResponse; + +export type SuccessfulTransactionReceiptResponse = + | InvokeTransactionReceiptResponse + | DeclareTransactionReceiptResponse; + +export interface InvokeTransactionReceiptResponse { + type?: TransactionType; // RPC only + execution_status: TransactionExecutionStatus; + finality_status: TransactionFinalityStatus; + status?: `${TransactionStatus}`; // SEQ only + actual_fee: string; + block_hash: BlockHash; + block_number: BlockNumber; + transaction_hash: string; + transaction_index?: number; // SEQ only + messages_sent: Array; // Casted SEQ l2_to_l1_messages + events: any[]; + execution_resources?: any; // SEQ Only } -export type DeclareTransactionReceiptResponse = CommonTransactionReceiptResponse; +export type DeclareTransactionReceiptResponse = { + type?: TransactionType; // RPC only + execution_status: TransactionExecutionStatus; + finality_status: TransactionFinalityStatus; + status?: `${TransactionStatus}`; // SEQ only + actual_fee: string; + block_hash: BlockHash; + block_number: BlockNumber; + transaction_hash: string; + transaction_index?: number; // SEQ only + messages_sent: Array; // Casted SEQ l2_to_l1_messages + events: any[]; +}; + +// TODO: Missing DEPLOY_TXN_RECEIPT + +// TODO: Missing DEPLOY_ACCOUNT_TXN_RECEIPT + +// TODO: Missing PENDING_TXN_RECEIPT + +// TODO: Missing L1_HANDLER_TXN_RECEIPT + +export type RejectedTransactionReceiptResponse = { + status: `${TransactionStatus.REJECTED}`; + transaction_failure_reason: { + code: string; + error_message: string; + }; +} & SuccessfulTransactionReceiptResponse; + +export type RevertedTransactionReceiptResponse = { + type?: TransactionType; // RPC only + execution_status: TransactionExecutionStatus.REVERTED; + finality_status: TransactionFinalityStatus; + status?: TransactionStatus; // SEQ only + actual_fee: string; + block_hash: string; + block_number: BlockNumber; + transaction_hash: string; + transaction_index?: number; // SEQ only + messages_sent: Array; // SEQ Casted l2_to_l1_messages + events: any[]; + revert_reason: string; // SEQ Casted revert_error +}; export interface EstimateFeeResponse { overall_fee: bigint; diff --git a/src/utils/responseParser/sequencer.ts b/src/utils/responseParser/sequencer.ts index 1f7e9b3bc..38a005f70 100644 --- a/src/utils/responseParser/sequencer.ts +++ b/src/utils/responseParser/sequencer.ts @@ -67,22 +67,9 @@ export class SequencerAPIResponseParser extends ResponseParser { res: Sequencer.TransactionReceiptResponse ): GetTransactionReceiptResponse { return { - transaction_hash: res.transaction_hash, - status: res.status, - messages_sent: res.l2_to_l1_messages as any, // TODO: parse - events: res.events as any, - ...('block_hash' in res && { block_hash: res.block_hash }), - ...('block_number' in res && { block_number: res.block_number }), - ...('actual_fee' in res && { actual_fee: res.actual_fee }), - ...('transaction_index' in res && { transaction_index: res.transaction_index }), - ...('execution_resources' in res && { execution_resources: res.execution_resources }), - ...('l1_to_l2_consumed_message' in res && { - // eslint-disable-next-line @typescript-eslint/dot-notation - l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'], - }), - ...('transaction_failure_reason' in res && { - transaction_failure_reason: res.transaction_failure_reason, - }), + ...res, + messages_sent: res.l2_to_l1_messages as any, + ...('revert_error' in res && { revert_reason: res.revert_error }), }; }