UNPKG

iso-filecoin

Version:

Isomorphic filecoin abstractions for RPC, signatures, address, token and wallet

358 lines 9.17 kB
import type _LedgerTransport from '@ledgerhq/hw-transport/lib-es/Transport'; import type BigNumber from 'bignumber.js'; import type { Driver } from 'iso-kv'; import type { JsonValue, SetOptional, SetRequired } from 'type-fest'; import type { z } from 'zod'; import type { AddressId, PROTOCOL_INDICATOR } from './address'; import type { MessageSchema } from './message.js'; import type { RPC } from './rpc'; import type { SignatureObj, SignatureType } from './signature'; export type Transport = _LedgerTransport; export type TransportImpl = typeof _LedgerTransport; export type { MaybeResult } from 'iso-web/types'; export type * from './message.js'; export type { LotusSignature, Signature, SignatureCode, SignatureObj, SignatureType, } from './signature.js'; export type MessageObj = z.infer<typeof MessageSchema>; export type PartialMessageObj = SetOptional<MessageObj, 'version' | 'nonce' | 'gasLimit' | 'gasFeeCap' | 'gasPremium' | 'method' | 'params'>; export type ProtocolIndicator = typeof PROTOCOL_INDICATOR; export type ProtocolIndicatorCode = ProtocolIndicator[keyof ProtocolIndicator]; export type HexAddress = `0x${string}`; export type CID = { '/': string; }; export type Cache = boolean | Driver | undefined; /** * Account types */ /** * Account interface */ export interface IAccount { type: SignatureType; address: IAddress; publicKey: Uint8Array; /** * Derivation path - only for HD wallets */ path?: string; /** * Private key - only for RAW and HD wallets */ privateKey?: Uint8Array; } export type IAccountWithPath = SetRequired<IAccount, 'path'>; /** * Address types */ /** * Options for RPC-based address methods */ export interface AddressRpcOptions { rpc: RPC; cache?: Cache; } export type Safety = 'safe' | 'finalized' | 'latest'; /** * Options for RPC-based address methods with safety */ export interface AddressRpcSafetyOptions extends AddressRpcOptions { safety?: Safety; } /** * Address interface */ export interface IAddress { protocol: ProtocolIndicatorCode; payload: Uint8Array; network: Network; networkPrefix: NetworkPrefix; namespace?: number; id?: bigint; checksum: () => Uint8Array; toContractDestination: () => HexAddress; toString: () => string; toBytes: () => Uint8Array; /** * Convert to ID address */ toIdAddress: (options: AddressRpcOptions) => Promise<AddressId>; /** * Converts any address to a 0x address, either id masked address or eth address depending on the address type. * Delegated addresses convert to eth address and f1, f2, f3 convert to id masked address * and f0 depends on the underline address type */ to0x: (options: AddressRpcOptions) => Promise<string>; } export interface DerivationPathComponents { purpose: number; coinType: number; account: number; change: number; addressIndex: number; } export type Network = 'mainnet' | 'testnet'; export type NetworkPrefix = 'f' | 't'; export type ChainRpcUrls = { http: string[]; webSocket?: string[] | undefined; }; export type ChainBlockExplorer = { name: string; url: string; apiUrl?: string | undefined; }; export type ChainContract = { address: HexAddress; blockCreated?: number | undefined; }; export interface Chain { id: number | string; name: string; testnet?: boolean; nativeCurrency: { name: string; symbol: string; decimals: number; }; rpcUrls: { [key: string]: ChainRpcUrls; default: ChainRpcUrls; }; blockExplorers?: { [key: string]: ChainBlockExplorer; default: ChainBlockExplorer; }; contracts?: { [key: string]: ChainContract; }; chainNamespace: string; /** * CAIP-2 ID */ caipNetworkId: `${string}:${string}`; /** * Chain ID 0x prefixed hex string */ chainId: string; iconUrls?: string[]; } /** * Ethereum chain type (Metamask) */ export type EthereumChain = { /** A 0x-prefixed hexadecimal string */ chainId: string; /** The chain name. */ chainName: string; /** Native currency for the chain. */ nativeCurrency?: { name: string; symbol: string; decimals: number; } | undefined; rpcUrls: string[]; blockExplorerUrls?: string[] | undefined; iconUrls?: string[] | undefined; }; /** * JSON-RPC 2.0 */ export interface JsonRpcError { code: number; message: string; data?: JsonValue; } export interface JsonRpcRequest { jsonrpc: '2.0'; id?: number | string | null; /** * A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else. */ method: string; params?: JsonValue; } export type JsonRpcResponse = { jsonrpc: '2.0'; id: number | string | null; result: JsonValue; error?: undefined; } | { jsonrpc: '2.0'; id: number | string | null; error: JsonRpcError; result?: undefined; }; export interface Options { token?: string; api: string | URL; network?: Network; fetch?: typeof globalThis.fetch; } export interface RpcOptions { method: `Filecoin.${string}`; params?: JsonValue; } export interface MsgReceipt { ExitCode: number; Return: string | null; GasUsed: number; EventsRoot: CID | null; } export type TipSetKey = CID[]; export interface MsgLookup { Height: number; Message: CID; Receipt: MsgReceipt; ReturnDec: unknown | null; TipSet: TipSetKey; } export interface Block { BLSAggregate: { Data: string; Type: 2; }; BeaconEntries: { Data: string; Round: number; }[]; BlockSig: { Data: string; Type: 2; }; ElectionProof: { VRFProof: string; WinCount: number; }; ForkSignaling: number; Height: number; Messages: CID; /** * The miner address of the block. */ Miner: string; ParentBaseFee: string; ParentMessageReceipts: CID; ParentStateRoot: CID; /** * BitInt as a string */ ParentWeight: string; Parents: CID[]; Ticket: { VRFProof: string; }; Timestamp: number; WinPoStProof: { PoStProof: number; ProofBytes: string; }[]; } export interface TipSet { Cids: CID[]; Height: number; Blocks: Block[]; } /** * Lotus API responses * * @see https://filecoin-shipyard.github.io/js-lotus-client/api/api.html */ /** * Lotus message */ export interface LotusMessage { Version: 0; To: string; From: string; Nonce: number; Value: string; GasLimit: number; GasFeeCap: string; GasPremium: string; Method: number; Params: string; CID?: CID; } export type VersionResponse = { Version: string; APIVersion: number; BlockDelay: number; }; export type StateNetworkNameResponse = Network; export type MpoolGetNonceResponse = number; export type GasEstimateMessageGasResponse = LotusMessage; /** * Wallet balance in attoFIL * * @example '99999927137190925849' */ export type WalletBalanceResponse = string; export type MpoolPushResponse = CID; export type WaitMsgResponse = MsgLookup; export interface GasEstimateParams { /** * Message to estimate gas for * * @see https://lotus.filecoin.io/reference/lotus/gas/#gasestimatemessagegas */ msg: PartialMessageObj; /** * Max fee to pay for gas (attoFIL/gas units) * * @default '0' */ maxFee?: string; } export interface PushMessageParams { msg: MessageObj; signature: SignatureObj; } export interface waitMsgParams { cid: CID; /** * Confidence depth to wait for * * @default 2 */ confidence?: number; /** * How chain epochs to look back to find the message * * @default 100 */ lookback?: number; } export interface StateAccountKeyParams { address: string; tipSetKey?: TipSetKey | null; } export type BlockNumber = '0x${string}'; export interface FilecoinAddressToEthAddressParams { /** * The Filecoin address to convert. */ address: string; /** * The block number or state for the conversion. * Defaults to "finalized" for maximum safety. * Possible values: "pending", "latest", "finalized", "safe", or a specific block number represented as hex. */ blockNumber?: 'pending' | 'latest' | 'finalized' | 'safe' | BlockNumber; } export interface ChainGetTipSetByHeightParams { height: number; tipSetKey?: TipSetKey | null; } export type FormatOptions = BigNumber.Format & { /** * @default 18 * @see https://mikemcl.github.io/bignumber.js/#decimal-places */ decimalPlaces?: number; /** * @default BigNumber.ROUND_HALF_DOWN * @see https://mikemcl.github.io/bignumber.js/#constructor-properties */ roundingMode?: BigNumber.RoundingMode; }; //# sourceMappingURL=types.d.ts.map