@polkadot/types
Version:
Implementation of the Parity codec
221 lines (220 loc) • 7.89 kB
TypeScript
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 {};