@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
88 lines (87 loc) • 3.58 kB
TypeScript
import { StarknetModule } from "../StarknetModule";
import { Call, DeployAccountContractPayload, DeployAccountContractTransaction, Invocation, InvocationsSignerDetails, BigNumberish } from "starknet";
import { StarknetSigner } from "../../wallet/StarknetSigner";
export type StarknetTx = ({
type: "DEPLOY_ACCOUNT";
tx: DeployAccountContractPayload;
signed?: DeployAccountContractTransaction;
} | {
type: "INVOKE";
tx: Array<Call>;
signed?: Invocation;
}) & {
details: InvocationsSignerDetails & {
maxFee?: BigNumberish;
};
txId?: string;
};
export declare class StarknetTransactions extends StarknetModule {
private cbkBeforeTxSigned;
/**
* Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
* the transaction at regular interval
*
* @param tx starknet transaction to wait for confirmation for & keep re-sending until it confirms
* @param abortSignal signal to abort waiting for tx confirmation
* @private
*/
private confirmTransaction;
/**
* Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed & calls beforeTxSigned callback
*
* @param signer
* @param txs
* @private
*/
private prepareTransactions;
/**
* Sends out a signed transaction to the RPC
*
* @param tx Starknet tx to send
* @param onBeforePublish a callback called before every transaction is published
* @param signer
* @param retryOnSubmissionFailure
* @private
*/
private sendSignedTransaction;
/**
* Prepares, signs , sends (in parallel or sequentially) & optionally waits for confirmation
* of a batch of starknet transactions
*
* @param signer
* @param txs transactions to send
* @param waitForConfirmation whether to wait for transaction confirmations (this also makes sure the transactions
* are re-sent at regular intervals)
* @param abortSignal abort signal to abort waiting for transaction confirmations
* @param parallel whether the send all the transaction at once in parallel or sequentially (such that transactions
* are executed in order)
* @param onBeforePublish a callback called before every transaction is published
*/
sendAndConfirm(signer: StarknetSigner, txs: StarknetTx[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
/**
* Serializes the solana transaction, saves the transaction, signers & last valid blockheight
*
* @param tx
*/
serializeTx(tx: StarknetTx): Promise<string>;
/**
* Deserializes saved solana transaction, extracting the transaction, signers & last valid blockheight
*
* @param txData
*/
deserializeTx(txData: string): Promise<StarknetTx>;
/**
* Gets the status of the raw starknet transaction
*
* @param tx
*/
getTxStatus(tx: string): Promise<"pending" | "success" | "not_found" | "reverted">;
/**
* Gets the status of the starknet transaction with a specific txId
*
* @param txId
*/
getTxIdStatus(txId: string): Promise<"pending" | "success" | "not_found" | "reverted">;
onBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): void;
offBeforeTxSigned(callback: (tx: StarknetTx) => Promise<void>): boolean;
}