/**
 * Types for Fuel JSON ABI Format as defined on:
 * https://github.com/FuelLabs/fuel-specs/blob/master/src/abi/json-abi-format.md
 */
export interface JsonAbi {
    readonly specVersion: string;
    readonly encodingVersion: string;
    readonly programType: string;
    readonly concreteTypes: readonly ConcreteType[];
    readonly metadataTypes: readonly MetadataType[];
    readonly functions: readonly AbiFunction[];
    readonly loggedTypes: readonly LoggedType[];
    readonly messagesTypes: readonly MessageType[];
    readonly configurables: readonly Configurable[];
    readonly errorCodes?: Record<string, ErrorCode>;
}
export interface ConcreteType {
    readonly type: string;
    readonly concreteTypeId: string;
    readonly metadataTypeId?: number;
    readonly typeArguments?: readonly string[];
}
export interface MetadataType {
    readonly type: string;
    readonly metadataTypeId: number;
    readonly components?: readonly Component[];
    readonly typeParameters?: readonly number[];
}
export interface Component extends TypeArgument {
    readonly name: string;
}
export interface TypeArgument {
    readonly typeId: number | string;
    readonly typeArguments?: readonly TypeArgument[];
}
export interface AbiFunction {
    readonly name: string;
    readonly inputs: readonly AbiFunctionInput[];
    readonly output: string;
    readonly attributes: readonly AbiFunctionAttribute[] | null;
}
export interface AbiFunctionInput {
    readonly name: string;
    readonly concreteTypeId: string;
}
export type AbiFunctionAttribute = {
    readonly name: string;
    readonly arguments?: string[];
};
export interface PayableAttr {
    readonly name: 'payable';
}
export interface StorageAttr {
    readonly name: 'storage';
    readonly arguments: readonly ('read' | 'write')[];
}
export interface TestAttr {
    readonly name: 'test';
}
export interface InlineAttr {
    readonly name: 'inline';
    readonly arguments: 'never' | 'always';
}
export interface DocCommentAttr {
    readonly name: 'doc-comment';
    readonly arguments: string[];
}
export interface DocAttr {
    readonly name: 'doc';
}
export interface LoggedType {
    readonly logId: string;
    readonly concreteTypeId: string;
}
export interface MessageType {
    readonly messageId: string;
    readonly concreteTypeId: string;
}
export interface Configurable {
    readonly name: string;
    readonly concreteTypeId: string;
    readonly offset: number;
}
export interface ErrorPosition {
    pkg: string;
    file: string;
    line: number;
    column: number;
}
export interface ErrorCode {
    readonly pos: ErrorPosition;
    readonly logId: string | null;
    readonly msg: string | null;
}
//# sourceMappingURL=JsonAbiNew.d.ts.map