Skip to content

Commit

Permalink
fix: unfinished get_transaction_receipt default provider types
Browse files Browse the repository at this point in the history
  • Loading branch information
tabaktoni committed Aug 4, 2023
1 parent 2049b4f commit 6589b2c
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 62 deletions.
8 changes: 4 additions & 4 deletions src/provider/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimulateTransactionResponse> {
const block_id = new Block(blockIdentifier).identifier;
Expand Down Expand Up @@ -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,
};
}
Expand All @@ -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,
};
}
Expand All @@ -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,
};
}
Expand Down
53 changes: 44 additions & 9 deletions src/types/api/sequencer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand All @@ -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<TransactionStatus, TransactionStatus.REJECTED | TransactionStatus.REVERTED>;
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 = {
Expand Down
115 changes: 82 additions & 33 deletions src/types/provider/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -16,6 +18,8 @@ import {
LegacyContractClass,
RawCalldata,
Signature,
TransactionExecutionStatus,
TransactionFinalityStatus,
TransactionStatus,
TransactionType,
UniversalDeployerContractPayload,
Expand All @@ -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
Expand All @@ -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<string>;
Expand All @@ -109,14 +90,82 @@ export interface MessageToL2 {
payload: Array<string>;
}

export interface InvokeTransactionReceiptResponse extends CommonTransactionReceiptResponse {
/** @deprecated Use l2_to_l1_messages */
messages_sent?: Array<MessageToL1>;
events?: Array<Event>;
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<MessageToL1>; // 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<MessageToL1>; // 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<MessageToL1>; // SEQ Casted l2_to_l1_messages
events: any[];
revert_reason: string; // SEQ Casted revert_error
};

export interface EstimateFeeResponse {
overall_fee: bigint;
Expand Down
19 changes: 3 additions & 16 deletions src/utils/responseParser/sequencer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,22 +67,9 @@ export class SequencerAPIResponseParser extends ResponseParser {
res: Sequencer.TransactionReceiptResponse
): GetTransactionReceiptResponse {
return {

Check failure on line 69 in src/utils/responseParser/sequencer.ts

View workflow job for this annotation

GitHub Actions / Run test on sequencer-devnet / Run tests

Type '{ revert_reason?: string | undefined; messages_sent: any; execution_status: TransactionExecutionStatus.SUCCEEDED; finality_status: TransactionFinalityStatus; ... 8 more ...; execution_resources?: ExecutionResources | undefined; } | { ...; } | { ...; }' is not assignable to type 'GetTransactionReceiptResponse'.

Check failure on line 69 in src/utils/responseParser/sequencer.ts

View workflow job for this annotation

GitHub Actions / Run test on rpc-devnet / Run tests

Type '{ revert_reason?: string | undefined; messages_sent: any; execution_status: TransactionExecutionStatus.SUCCEEDED; finality_status: TransactionFinalityStatus; ... 8 more ...; execution_resources?: ExecutionResources | undefined; } | { ...; } | { ...; }' is not assignable to type 'GetTransactionReceiptResponse'.
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 }),
};
}

Expand Down

0 comments on commit 6589b2c

Please sign in to comment.