// Copyright 2017-2021 @polkadot/types authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { ExtrinsicStatus } from '../interfaces/author'; import type { EcdsaSignature, Ed25519Signature, Sr25519Signature } from '../interfaces/extrinsics'; import type { Address, Balance, Call, H256, Index } from '../interfaces/runtime'; import type { DispatchError, DispatchInfo, EventRecord } from '../interfaces/system'; import type { AnyJson, AnyNumber, AnyTuple, AnyU8a, Codec } from './codec'; import type { ICompact, IKeyringPair, IMethod, IRuntimeVersion } from './interfaces'; export interface ISubmittableResult { readonly dispatchError?: DispatchError; readonly dispatchInfo?: DispatchInfo; readonly events: EventRecord[]; readonly status: ExtrinsicStatus; readonly isCompleted: boolean; readonly isError: boolean; readonly isFinalized: boolean; readonly isInBlock: boolean; readonly isWarning: boolean; 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 checkpoint hash of the block, in hex */ blockHash: string; /** * @description The checkpoint block number, in hex */ blockNumber: string; /** * @description The era for this transaction, in hex */ era: string; /** * @description The genesis hash of the chain, in hex */ genesisHash: string; /** * @description The encoded method (with arguments) in hex */ method: string; /** * @description The nonce for this transaction, in hex */ nonce: string; /** * @description The current spec version for the runtime */ specVersion: string; /** * @description The tip for this transaction, in hex */ tip: string; /** * @description The current transaction version for the runtime */ transactionVersion: string; /** * @description The applicable signed extensions for this runtime */ signedExtensions: string[]; /** * @description The version of the extrinsic we are dealing with */ version: number; /** * @description Application id */ key: number; } 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: string; } export interface Signer { /** * @description signs an extrinsic payload from a serialized form */ signPayload?: (payload: SignerPayloadJSON) => Promise; /** * @description signs a raw payload, only the bytes data as supplied */ signRaw?: (raw: SignerPayloadRaw) => Promise; /** * @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 { blockHash: Uint8Array | string; era?: IExtrinsicEra; genesisHash: Uint8Array | string; nonce: AnyNumber; runtimeVersion: IRuntimeVersion; signedExtensions?: string[]; signer?: Signer; tip?: AnyNumber; key?: AnyNumber; } interface ExtrinsicSignatureBase { readonly isSigned: boolean; readonly era: IExtrinsicEra; readonly nonce: ICompact; readonly signature: EcdsaSignature | Ed25519Signature | Sr25519Signature; readonly signer: Address; readonly tip: ICompact; } export interface ExtrinsicPayloadValue { blockHash: AnyU8a; era: AnyU8a | IExtrinsicEra; genesisHash: AnyU8a; method: AnyU8a | IMethod; nonce: AnyNumber; specVersion: AnyNumber; tip: AnyNumber; transactionVersion: AnyNumber; key: AnyNumber; } export interface IExtrinsicSignature extends ExtrinsicSignatureBase, Codec { addSignature (signer: Address | Uint8Array | string, signature: Uint8Array | string, payload: Uint8Array | string): IExtrinsicSignature; sign (method: Call, account: IKeyringPair, options: SignatureOptions): IExtrinsicSignature; signFake (method: Call, address: Address | Uint8Array | string, options: SignatureOptions): IExtrinsicSignature; } interface IExtrinsicSignable { addSignature (signer: Address | Uint8Array | string, signature: Uint8Array | string, payload: ExtrinsicPayloadValue | Uint8Array | string): T; sign (account: IKeyringPair, options: SignatureOptions): T; signFake (address: Address | Uint8Array | string, options: SignatureOptions): T; } export interface IExtrinsicImpl extends IExtrinsicSignable, Codec { readonly method: Call; readonly signature: IExtrinsicSignature; readonly version: number; } export interface IExtrinsic extends IExtrinsicSignable>, ExtrinsicSignatureBase, IMethod { readonly length: number; readonly method: IMethod; readonly type: number; readonly version: number; }