Provider Abstraction Layer

AbstractRpcProvider Class

Providers share a common base class, AbstractRpcProvider, which defines the methods and properties that all provider implementations must adhere to. This base class provides a unified implementation of shared functionality while requiring derived classes to implement specific abstract methods according to their individual requirements.

AbstractRpcProvidertypescript
interface ChallengeCache {
    readonly challenge: ChallengeSolution;
    readonly expireAt: number;
}

export abstract class AbstractRpcProvider {
    protected constructor(public readonly network: Network);

    public get utxoManager(): UTXOsManager;

    public getCSV1ForAddress(address: Address): IP2WSHAddress;
    public async getPublicKeyInfo(addressRaw: string | Address, isContract: boolean, ): Promise<Address>;
    public validateAddress(addr: string | Address, network: Network): AddressTypes | null;
    
    public async getBlockNumber(): Promise<bigint>;
    public async getBlockByChecksum(checksum: string, prefetchTxs: boolean = false,): Promise<Block>;
    public async getChallenge(): Promise<ChallengeSolution>;
    public async getBlock(blockNumberOrHash: BlockTag, prefetchTxs: boolean = false,): Promise<Block>;
    public async getBlocks(blockNumbers: BlockTag[], prefetchTxs: boolean = false,): Promise<Block[]>;
    public async getBlockByHash(blockHash: string): Promise<Block>;

    public async getBalance(address: string | Address, filterOrdinals: boolean = true,): Promise<bigint>;
    public async getBalances(addressesLike: string[], filterOrdinals: boolean = true,): Promise<Record<string, bigint>>;
    public async getTransaction(txHash: string): Promise<TransactionBase<OPNetTransactionTypes>>;
    public async getTransactionReceipt(txHash: string): Promise<TransactionReceipt>;

    public getNetwork(): Network;
    public async getChainId(): Promise<bigint>;

    public async getCode(address: string | Address, onlyBytecode: boolean = false,): Promise<ContractData | Buffer>;
    public async getStorageAt(address: string | Address, rawPointer: bigint | string, proofs: boolean = true, height?: BigNumberish,): Promise<StoredValue>;
    public async call(to: string | Address, data: Buffer | string, from?: Address,height?: BigNumberish, simulatedTransaction?: ParsedSimulatedTransaction, accessList?: IAccessList,): Promise<CallResult | ICallRequestError>;
    public async gasParameters(): Promise<BlockGasParameters>;

    public async sendRawTransaction(tx: string, psbt: boolean): Promise<BroadcastedTransaction>;
    public async sendRawTransactions(txs: string[]): Promise<BroadcastedTransaction[]>;

    public async getBlockWitness(height: BigNumberish = -1, trusted?: boolean, limit?: number, page?: number,): Promise<BlockWitnesses>;

    public async getReorg(fromBlock?: BigNumberish, toBlock?: BigNumberish,): Promise<ReorgInformation[]>;

    public abstract _send(payload: JsonRpcPayload | JsonRpcPayload[]): Promise<JsonRpcCallResult>;

    public async callPayloadSingle(payload: JsonRpcPayload): Promise<JsonRpcResult>;
    public async callMultiplePayloads(payloads: JsonRpcPayload[]): Promise<JsonRpcCallResult>;
    public buildJsonRpcPayload<T extends JSONRpcMethods>(method: T, params: unknown[],): JsonRpcPayload;
    public async getPublicKeysInfoRaw(addresses: string | string[] | Address | Address[],): Promise<IPublicKeyInfoResult>;
    public async getPublicKeysInfo(addresses: string | string[] | Address | Address[], isContract: boolean = false, logErrors: boolean = false,): Promise<AddressesInfo>;
    public async getLatestEpoch(includeSubmissions: boolean): Promise<Epoch>;
    public async getEpochByNumber(epochNumber: BigNumberish, includeSubmissions: boolean = false,): Promise<Epoch | EpochWithSubmissions>;
    public async getEpochByHash(epochHash: string, includeSubmissions: boolean = false,): Promise<Epoch | EpochWithSubmissions>;
    public async getEpochTemplate(): Promise<EpochTemplate>;
    public async submitEpoch(params: EpochSubmissionParams): Promise<SubmittedEpoch>;

    protected abstract providerUrl(url: string): string;
}

Methods & Properties Reference

Properties

get utxoManager(): UTXOsManager

Address Methods

getCSV1ForAddress(address: Address): IP2WSHAddress
getPublicKeyInfo(addressRaw: string | Address, isContract: boolean): Promise<Address>
getPublicKeysInfo(addresses: string | string[] | Address | Address[], isContract?: boolean, logErrors?: boolean): Promise<AddressesInfo>
getPublicKeysInfoRaw(addresses: string | string[] | Address | Address[]): Promise<IPublicKeyInfoResult>
validateAddress(addr: string | Address, network: Network): AddressTypes | null

Block Methods

getBlockNumber(): Promise<bigint>
getBlock(blockNumberOrHash: BlockTag, prefetchTxs?: boolean): Promise<Block>
getBlocks(blockNumbers: BlockTag[], prefetchTxs?: boolean): Promise<Block[]>
getBlockByHash(blockHash: string): Promise<Block>
getBlockByChecksum(checksum: string, prefetchTxs?: boolean): Promise<Block>
getBlockWitness(height?: BigNumberish, trusted?: boolean, limit?: number, page?: number): Promise<BlockWitnesses>

Balance Methods

getBalance(address: string | Address, filterOrdinals?: boolean): Promise<bigint>
getBalances(addressesLike: string[], filterOrdinals?: boolean): Promise<Record<string, bigint>>

Transaction Methods

getTransaction(txHash: string): Promise<TransactionBase<OPNetTransactionTypes>>
getTransactionReceipt(txHash: string): Promise<TransactionReceipt>
sendRawTransaction(tx: string, psbt: boolean): Promise<BroadcastedTransaction>
sendRawTransactions(txs: string[]): Promise<BroadcastedTransaction[]>

Contract Methods

getCode(address: string | Address, onlyBytecode?: boolean): Promise<ContractData | Buffer>
getStorageAt(address: string | Address, rawPointer: bigint | string, proofs?: boolean, height?: BigNumberish): Promise<StoredValue>
call(to: string | Address, data: Buffer | string, from?: Address, height?: BigNumberish, simulatedTransaction?: ParsedSimulatedTransaction, accessList?: IAccessList): Promise<CallResult | ICallRequestError>

Network Methods

getNetwork(): Network
getChainId(): Promise<bigint>
gasParameters(): Promise<BlockGasParameters>
getReorg(fromBlock?: BigNumberish, toBlock?: BigNumberish): Promise<ReorgInformation[]>
getChallenge(): Promise<ChallengeSolution>

Epoch Methods

getLatestEpoch(includeSubmissions: boolean): Promise<Epoch>
getEpochByNumber(epochNumber: BigNumberish, includeSubmissions?: boolean): Promise<Epoch | EpochWithSubmissions>
getEpochByHash(epochHash: string, includeSubmissions?: boolean): Promise<Epoch | EpochWithSubmissions>
getEpochTemplate(): Promise<EpochTemplate>
submitEpoch(params: EpochSubmissionParams): Promise<SubmittedEpoch>

Payload Methods

buildJsonRpcPayload<T extends JSONRpcMethods>(method: T, params: unknown[]): JsonRpcPayload
callPayloadSingle(payload: JsonRpcPayload): Promise<JsonRpcResult>
callMultiplePayloads(payloads: JsonRpcPayload[]): Promise<JsonRpcCallResult>

Abstract Methods

abstract _send(payload: JsonRpcPayload | JsonRpcPayload[]): Promise<JsonRpcCallResult>
protected abstract providerUrl(url: string): string