UNPKG

@polkadot/types

Version:
221 lines (220 loc) • 7.89 kB
import type { AnyJson, AnyNumber, AnyTuple, AnyU8a, Codec } from '@polkadot/types-codec/types'; import type { HexString } from '@polkadot/util/types'; import type { ExtrinsicStatus } from '../interfaces/author/index.js'; import type { EcdsaSignature, Ed25519Signature, Sr25519Signature } from '../interfaces/extrinsics/index.js'; import type { Address, Call, H256, Hash } from '../interfaces/runtime/index.js'; import type { DispatchError, DispatchInfo, EventRecord } from '../interfaces/system/index.js'; import type { ICompact, IKeyringPair, IMethod, INumber, IRuntimeVersionBase } from './interfaces.js'; import type { Registry } from './registry.js'; export interface ISubmittableResult { readonly dispatchError?: DispatchError | undefined; readonly dispatchInfo?: DispatchInfo | undefined; readonly events: EventRecord[]; readonly internalError?: Error | undefined; readonly status: ExtrinsicStatus; readonly isCompleted: boolean; readonly isError: boolean; readonly isFinalized: boolean; readonly isInBlock: boolean; readonly isWarning: boolean; readonly txHash: Hash; readonly txIndex?: number | undefined; filterRecords(section: string, method: string): EventRecord[]; findRecord(section: string, method: string): EventRecord | undefined; toHuman(isExtended?: boolean): AnyJson; } export interface SignerPayloadJSON { /** * @description The ss-58 encoded address */ address: string; /** * @description The id of the asset used to pay fees, in hex */ assetId?: HexString; /** * @description The checkpoint hash of the block, in hex */ blockHash: HexString; /** * @description The checkpoint block number, in hex */ blockNumber: HexString; /** * @description The era for this transaction, in hex */ era: HexString; /** * @description The genesis hash of the chain, in hex */ genesisHash: HexString; /** * @description The metadataHash for the CheckMetadataHash SignedExtension, as hex */ metadataHash?: HexString; /** * @description The encoded method (with arguments) in hex */ method: string; /** * @description The mode for the CheckMetadataHash SignedExtension, in hex */ mode?: number; /** * @description The nonce for this transaction, in hex */ nonce: HexString; /** * @description The current spec version for the runtime */ specVersion: HexString; /** * @description The tip for this transaction, in hex */ tip: HexString; /** * @description The current transaction version for the runtime */ transactionVersion: HexString; /** * @description The applicable signed extensions for this runtime */ signedExtensions: string[]; /** * @description The version of the extrinsic we are dealing with */ version: number; /** * @description Optional flag that enables the use of the `signedTransaction` field in * `singAndSend`, `signAsync`, and `dryRun`. */ withSignedTransaction?: boolean; } export interface SignerPayloadRawBase { /** * @description The hex-encoded data for this request */ data: string; /** * @description The type of the contained data */ type?: 'bytes' | 'payload'; } export interface SignerPayloadRaw extends SignerPayloadRawBase { /** * @description The ss-58 encoded address */ address: string; /** * @description The type of the contained data */ type: 'bytes' | 'payload'; } export interface ISignerPayload { toPayload(): SignerPayloadJSON; toRaw(): SignerPayloadRaw; } export interface SignerResult { /** * @description The id for this request */ id: number; /** * @description The resulting signature in hex */ signature: HexString; /** * @description The payload constructed by the signer. This allows the * inputted signed transaction to bypass `signAndSend` from adding the signature to the payload, * and instead broadcasting the transaction directly. There is a small validation layer. Please refer * to the implementation for more information. If the inputted signed transaction is not actually signed, it will fail with an error. * * This will also work for `signAsync`. The new payload will be added to the Extrinsic, and will be sent once the consumer calls `.send()`. * * NOTE: This is only implemented for `signPayload`, and will only work when the `withSignedTransaction` option is enabled as an option. */ signedTransaction?: HexString | Uint8Array; } export interface Signer { /** * @description signs an extrinsic payload from a serialized form */ signPayload?: (payload: SignerPayloadJSON) => Promise<SignerResult>; /** * @description signs a raw payload, only the bytes data as supplied */ signRaw?: (raw: SignerPayloadRaw) => Promise<SignerResult>; /** * @description Receives an update for the extrinsic signed by a `signer.sign` */ update?: (id: number, status: H256 | ISubmittableResult) => void; } export interface IExtrinsicEra extends Codec { asImmortalEra: Codec; asMortalEra: Codec; } export interface SignatureOptions { allowCallDataAlteration?: boolean; blockHash: Uint8Array | string; era?: IExtrinsicEra; genesisHash: Uint8Array | string; nonce: AnyNumber; runtimeVersion: IRuntimeVersionBase; signedExtensions?: string[]; signer?: Signer; tip?: AnyNumber; assetId?: AnyNumber | object; mode?: AnyNumber; metadataHash?: Uint8Array | string; withSignedTransaction?: boolean; } interface ExtrinsicSignatureBase { readonly isSigned: boolean; readonly era: IExtrinsicEra; readonly nonce: ICompact<INumber>; readonly signature: EcdsaSignature | Ed25519Signature | Sr25519Signature; readonly signer: Address; readonly tip: ICompact<INumber>; } export interface ExtrinsicPayloadValue { blockHash: AnyU8a; era: AnyU8a | IExtrinsicEra; genesisHash: AnyU8a; method: AnyU8a | IMethod<AnyTuple>; nonce: AnyNumber; specVersion: AnyNumber; tip: AnyNumber; transactionVersion: AnyNumber; assetId?: HexString; mode?: AnyNumber; metadataHash?: AnyU8a; } export interface IExtrinsicSignature extends ExtrinsicSignatureBase, Codec { addSignature(signer: Address | Uint8Array | string, signature: Uint8Array | HexString, payload: Uint8Array | HexString): IExtrinsicSignature; sign(method: Call, account: IKeyringPair, options: SignatureOptions): IExtrinsicSignature; signFake(method: Call, address: Address | Uint8Array | string, options: SignatureOptions): IExtrinsicSignature; readonly registry: Registry; } interface IExtrinsicSignable<T> extends Codec { addSignature(signer: Address | Uint8Array | string, signature: Uint8Array | HexString, payload: ExtrinsicPayloadValue | Uint8Array | HexString): T; sign(account: IKeyringPair, options: SignatureOptions): T; signFake(address: Address | Uint8Array | string, options: SignatureOptions): T; readonly registry: Registry; } export interface IExtrinsicImpl extends IExtrinsicSignable<IExtrinsicImpl> { readonly method: Call; readonly signature: IExtrinsicSignature; readonly version: number; } export interface IExtrinsicV5Impl extends IExtrinsicSignable<IExtrinsicV5Impl> { readonly method: Call; readonly signature: IExtrinsicSignature; readonly version: number; } export interface IExtrinsic<A extends AnyTuple = AnyTuple> extends IExtrinsicSignable<IExtrinsic<A>>, ExtrinsicSignatureBase, IMethod<A> { readonly length: number; readonly method: IMethod<A>; readonly type: number; readonly version: number; } export {};