@moonbeam-network/xcm-builder
Version:
Moonbeam XCM builder
1,643 lines (1,608 loc) • 60 kB
text/typescript
import { Chain, AnyParachain, AssetAmount, ChainAssetId, ChainAsset, AnyChain } from '@moonbeam-network/xcm-types';
import { ApiPromise } from '@polkadot/api';
import { FrameSystemAccountInfo, StagingXcmV3MultiLocation } from '@polkadot/types/lookup';
import { Struct, u128, Enum } from '@polkadot/types';
import { Abi, PublicClient, HttpTransport } from 'viem';
import { SubmittableExtrinsicFunction } from '@polkadot/api/types';
import { EventRecord } from '@polkadot/types/interfaces';
import { HexString } from '@polkadot/util/types';
import { TokenId, ChainAddress, TokenTransfer, Wormhole } from '@wormhole-foundation/sdk-connect';
interface ConfigBuilder<Config, Params = BuilderParams> {
build: (params: Params) => Config;
}
interface BuilderParams<IChain extends Chain = AnyParachain> {
asset: AssetAmount;
destination: IChain;
destinationAddress: string;
destinationApi?: ApiPromise;
fee: AssetAmount;
source: IChain;
sourceAddress: string;
sourceApi?: ApiPromise;
}
interface BaseConfigConstructorParams {
module: string;
func: string;
}
declare class BaseConfig {
readonly module: string;
readonly func: string;
constructor({ module, func }: BaseConfigConstructorParams);
}
type QueryType = 'query' | 'call';
interface QueryConfigConstructorParams extends BaseConfigConstructorParams {
queryType?: QueryType;
args?: unknown[];
transform: (data: any) => Promise<bigint>;
}
declare class SubstrateQueryConfig extends BaseConfig {
readonly args: unknown[];
readonly queryType: QueryType;
readonly transform: (data: unknown) => Promise<bigint>;
static is(obj: unknown): obj is SubstrateQueryConfig;
constructor({ args, transform, queryType, ...other }: QueryConfigConstructorParams);
}
type AssetMinConfigBuilder = ConfigBuilder<SubstrateQueryConfig, AssetMinConfigBuilderParams>;
interface AssetMinConfigBuilderParams {
address?: string;
asset: ChainAssetId;
}
declare function AssetMinBuilder(): {
assetRegistry: typeof assetRegistry;
assets: typeof assets$1;
foreignAssets: typeof foreignAssets$1;
};
declare function assetRegistry(): {
assetMetadatas: () => AssetMinConfigBuilder;
currencyMetadatas: () => AssetMinConfigBuilder;
metadata: () => AssetMinConfigBuilder;
};
declare function assets$1(): {
asset: () => AssetMinConfigBuilder;
};
declare function foreignAssets$1(): {
asset: () => AssetMinConfigBuilder;
};
interface ContractConfigConstructorParams extends BaseConfigConstructorParams {
address: string;
abi: Abi;
args: unknown[];
value?: bigint;
}
declare class ContractConfig extends BaseConfig {
readonly address: string;
readonly abi: Abi;
readonly args: unknown[];
readonly value?: bigint;
static is(obj: unknown): obj is ContractConfig;
constructor({ address, abi, args, value, ...other }: ContractConfigConstructorParams);
encodeFunctionData(): `0x${string}`;
}
type ContractConfigBuilder = ConfigBuilder<ContractConfig>;
type DestinationMultilocation = [
/**
* 0 - if destination is referring to a location in the same chain
* 1 - if transaction is going through or to a relay chain
* 2 - if transaction is going to a parachain in another ecosystem
*/
0 | 1 | 2,
([
/**
* example '0x00000007DC'
* 7DC - parachain id in hex
* can be found here:
* - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fkusama-rpc.polkadot.io#/parachains
* - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/parachains
*/
string,
/**
* example '0x01%account%00',
* enum = 01 (AccountId32)
* networkId = 00 (any)
*/
string
] | [
/**
* example '0x01%account%00',
* enum = 01 (AccountId32)
* networkId = 00 (any)
*/
string
]
/**
* example 'Here',
*/
| [])
];
type AssetAddressFormat = (string | bigint | undefined)[];
declare enum TransferType {
Teleport = 0,
LocalReserve = 1,
DestinationReserve = 2
}
type AssetMultilocation = [[number, string[]], bigint];
declare function XcmPrecompile(): {
transferAssetsToPara20: (shouldTransferAssetPrecedeFeeAsset?: boolean) => ContractConfigBuilder;
transferAssetsToPara32: (shouldTransferAssetPrecedeFeeAsset?: boolean) => ContractConfigBuilder;
transferAssetsToRelay: () => ContractConfigBuilder;
transferAssetsLocation: () => {
nativeAsset: () => ContractConfigBuilder;
localErc20: () => ContractConfigBuilder;
foreignAsset: () => ContractConfigBuilder;
foreignErc20: () => ContractConfigBuilder;
};
transferAssetsUsingTypeAndThenAddress: (shouldTransferAssetPrecedeFeeAsset?: boolean) => ContractConfigBuilder;
};
declare function Xtokens(): {
transfer: (weight?: bigint) => ContractConfigBuilder;
transferMultiCurrencies: (shouldTransferAssetPrecedeFeeAsset?: boolean, weight?: bigint) => ContractConfigBuilder;
transferWithEvmTo32: (weight?: bigint) => ContractConfigBuilder;
};
declare function ContractBuilder(): {
Xtokens: typeof Xtokens;
XcmPrecompile: typeof XcmPrecompile;
};
type EvmQueryFunctions = 'getBalance';
type EvmFunctionArgs = Parameters<PublicClient<HttpTransport>[EvmQueryFunctions]>;
interface EvmQueryConfigParams {
readonly args: EvmFunctionArgs;
readonly func: EvmQueryFunctions;
}
declare class EvmQueryConfig {
readonly args: EvmFunctionArgs;
readonly func: EvmQueryFunctions;
static is(obj: unknown): obj is EvmQueryConfig;
constructor({ args, func }: EvmQueryConfigParams);
}
type BalanceConfigBuilder = ConfigBuilder<ContractConfig | SubstrateQueryConfig | EvmQueryConfig, BalanceBuilderParams>;
interface BalanceBuilderParams {
address: string;
asset: ChainAsset;
}
interface PalletBalancesAccountDataOld extends Struct {
readonly free: u128;
readonly reserved: u128;
readonly miscFrozen: u128;
readonly feeFrozen: u128;
}
interface TokensPalletAccountData {
free: u128;
reserved: u128;
frozen: u128;
}
type EquilibriumSystemBalanceData = Array<[
number,
{
positive: number;
}
]>;
declare function BalanceBuilder(): {
evm: typeof evm;
substrate: typeof substrate;
};
declare function evm(): {
erc20: typeof erc20;
native: typeof native;
};
declare function erc20(): BalanceConfigBuilder;
declare function native(): BalanceConfigBuilder;
declare function substrate(): {
assets: typeof assets;
foreignAssets: typeof foreignAssets;
system: typeof system;
tokens: typeof tokens;
};
declare function assets(): {
account: () => BalanceConfigBuilder;
};
declare function foreignAssets(): {
account: () => {
globalConsensus: () => BalanceConfigBuilder;
id: () => BalanceConfigBuilder;
};
};
declare function system(): {
account: () => BalanceConfigBuilder;
accountEquilibrium: () => BalanceConfigBuilder;
accountEvmTo32: () => BalanceConfigBuilder;
};
declare function tokens(): {
accounts: () => BalanceConfigBuilder;
};
declare function calculateSystemAccountBalance(response: FrameSystemAccountInfo): Promise<bigint>;
declare const ERC20_ABI: readonly [{
readonly constant: true;
readonly inputs: readonly [];
readonly name: "name";
readonly outputs: readonly [{
readonly name: "";
readonly type: "string";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly constant: false;
readonly inputs: readonly [{
readonly name: "_spender";
readonly type: "address";
}, {
readonly name: "_value";
readonly type: "uint256";
}];
readonly name: "approve";
readonly outputs: readonly [{
readonly name: "";
readonly type: "bool";
}];
readonly payable: false;
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly constant: true;
readonly inputs: readonly [];
readonly name: "totalSupply";
readonly outputs: readonly [{
readonly name: "";
readonly type: "uint256";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly constant: false;
readonly inputs: readonly [{
readonly name: "_from";
readonly type: "address";
}, {
readonly name: "_to";
readonly type: "address";
}, {
readonly name: "_value";
readonly type: "uint256";
}];
readonly name: "transferFrom";
readonly outputs: readonly [{
readonly name: "";
readonly type: "bool";
}];
readonly payable: false;
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly constant: true;
readonly inputs: readonly [];
readonly name: "decimals";
readonly outputs: readonly [{
readonly name: "";
readonly type: "uint8";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly constant: true;
readonly inputs: readonly [{
readonly name: "_owner";
readonly type: "address";
}];
readonly name: "balanceOf";
readonly outputs: readonly [{
readonly name: "balance";
readonly type: "uint256";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly constant: true;
readonly inputs: readonly [];
readonly name: "symbol";
readonly outputs: readonly [{
readonly name: "";
readonly type: "string";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly constant: false;
readonly inputs: readonly [{
readonly name: "_to";
readonly type: "address";
}, {
readonly name: "_value";
readonly type: "uint256";
}];
readonly name: "transfer";
readonly outputs: readonly [{
readonly name: "";
readonly type: "bool";
}];
readonly payable: false;
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly constant: true;
readonly inputs: readonly [{
readonly name: "_owner";
readonly type: "address";
}, {
readonly name: "_spender";
readonly type: "address";
}];
readonly name: "allowance";
readonly outputs: readonly [{
readonly name: "";
readonly type: "uint256";
}];
readonly payable: false;
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly payable: true;
readonly stateMutability: "payable";
readonly type: "fallback";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly name: "owner";
readonly type: "address";
}, {
readonly indexed: true;
readonly name: "spender";
readonly type: "address";
}, {
readonly indexed: false;
readonly name: "value";
readonly type: "uint256";
}];
readonly name: "Approval";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly name: "from";
readonly type: "address";
}, {
readonly indexed: true;
readonly name: "to";
readonly type: "address";
}, {
readonly indexed: false;
readonly name: "value";
readonly type: "uint256";
}];
readonly name: "Transfer";
readonly type: "event";
}];
interface ExtrinsicConfigConstructorParams extends Omit<BaseConfigConstructorParams, 'type'> {
getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];
}
declare class ExtrinsicConfig extends BaseConfig {
getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];
static is(obj: unknown): obj is ExtrinsicConfig;
constructor({ getArgs, ...other }: ExtrinsicConfigConstructorParams);
}
type ExtrinsicConfigBuilder = ConfigBuilder<ExtrinsicConfig>;
declare enum XcmVersion {
v1 = "V1",
v2 = "V2",
v3 = "V3",
v4 = "V4",
v5 = "V5"
}
type Parents = 0 | 1;
declare function eqBalances(): {
xcmTransfer: () => ExtrinsicConfigBuilder;
transferXcm: () => ExtrinsicConfigBuilder;
};
declare function polkadotXcm$2(): {
limitedReserveTransferAssets: () => {
here: () => ExtrinsicConfigBuilder;
X1: () => ExtrinsicConfigBuilder;
X2: () => ExtrinsicConfigBuilder;
X2PalletInstance: () => ExtrinsicConfigBuilder;
};
limitedReserveWithdrawAssets: () => {
X2: () => ExtrinsicConfigBuilder;
};
transferAssets: () => {
here: (parents?: number) => ExtrinsicConfigBuilder;
X1: () => ExtrinsicConfigBuilder;
X1GeneralKey: () => ExtrinsicConfigBuilder;
X2: () => ExtrinsicConfigBuilder;
X3: () => ExtrinsicConfigBuilder;
X2AndFeeHere: () => ExtrinsicConfigBuilder;
};
transferAssetsUsingTypeAndThen: () => {
here: (parents?: number) => ExtrinsicConfigBuilder;
X2: (parents?: number) => ExtrinsicConfigBuilder;
globalConsensusEthereum: () => ExtrinsicConfigBuilder;
};
transferAssetsToEcosystem: () => {
X1: () => ExtrinsicConfigBuilder;
X2: () => ExtrinsicConfigBuilder;
X3: () => ExtrinsicConfigBuilder;
X4: () => ExtrinsicConfigBuilder;
};
};
declare function xcmPallet$1(): {
limitedReserveTransferAssets: (parents?: Parents) => {
here: () => ExtrinsicConfigBuilder;
};
transferAssetsUsingTypeAndThen: () => {
here: () => ExtrinsicConfigBuilder;
};
};
declare function xTokens(): {
transfer: () => ExtrinsicConfigBuilder;
transferMultiAsset: (originParachainId: number) => {
here: () => ExtrinsicConfigBuilder;
X1: () => ExtrinsicConfigBuilder;
X2: () => ExtrinsicConfigBuilder;
};
transferMultiCurrencies: () => ExtrinsicConfigBuilder;
};
declare function xTransfer(): {
transfer: () => {
here: () => ExtrinsicConfigBuilder;
X2: () => ExtrinsicConfigBuilder;
};
};
declare function ExtrinsicBuilder(): {
eqBalances: typeof eqBalances;
xTokens: typeof xTokens;
xTransfer: typeof xTransfer;
polkadotXcm: typeof polkadotXcm$2;
xcmPallet: typeof xcmPallet$1;
};
interface SubstrateCallConfigConstructorParams {
api: ApiPromise;
call: () => Promise<bigint>;
}
declare class SubstrateCallConfig {
readonly api: ApiPromise;
readonly call: () => Promise<any>;
static is(obj: unknown): obj is SubstrateCallConfig;
constructor({ api, call }: SubstrateCallConfigConstructorParams);
}
type FeeConfigBuilder = ConfigBuilder<SubstrateCallConfig | ContractConfig, FeeConfigBuilderParams>;
type ProtocolFeeConfigBuilder = ConfigBuilder<SubstrateQueryConfig | ContractConfig, ProtocolFeeConfigBuilderParams>;
interface FeeConfigBuilderParams {
address: string;
api: ApiPromise;
asset: ChainAsset;
balance?: AssetAmount;
destination: AnyChain;
feeAsset: ChainAsset;
source: AnyChain;
}
interface ProtocolFeeConfigBuilderParams extends Omit<FeeConfigBuilderParams, 'api'> {
bridgeChainFee: AssetAmount;
}
interface XcmPaymentFeeProps {
isAssetReserveChain: boolean;
shouldTransferAssetPrecedeFeeAsset?: boolean;
isEcosystemBridge?: boolean;
parents?: number;
}
interface MoonbeamRuntimeXcmConfigAssetType extends Enum {
readonly isXcm: boolean;
readonly asXcm: StagingXcmV3MultiLocation;
readonly type: 'Xcm';
}
type GetVersionedAssetId = (params: FeeConfigBuilderParams) => Promise<object> | object;
declare function gateway(): {
quoteSendTokenFee(): ProtocolFeeConfigBuilder;
};
declare function outboundQueueApi(): {
calculateFee: () => {
mintForeignToken: () => ProtocolFeeConfigBuilder;
agentExecute: () => ProtocolFeeConfigBuilder;
};
};
declare function xcmPaymentApi(): {
fromCurrencyIdToLocations: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromAssetIdQuery: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromSourceAccountKey20: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromSourcePalletInstance: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromHere: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromHereAndGeneralIndex: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromPalletInstanceAndGeneralIndex: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromHereAndSourceGeneralIndex: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromGeneralIndex: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromPalletInstance: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromPalletInstanceAndAccountKey20: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
fromGlobalConsensus: (options: XcmPaymentFeeProps) => FeeConfigBuilder;
};
declare function FeeBuilder(): {
gateway: typeof gateway;
outboundQueueApi: typeof outboundQueueApi;
xcmPaymentApi: typeof xcmPaymentApi;
};
type SourceChecker = (events: EventRecord[], sourceAddress: string) => {
matched: boolean;
messageId?: string;
event?: EventRecord;
};
type DestinationChecker = (events: EventRecord[], messageId?: string) => {
matched: boolean;
success: boolean;
event?: EventRecord;
};
interface MonitorEventReturn {
xcmPallet: () => {
messageQueue: () => EventMonitoringConfig$1;
};
polkadotXcm: () => {
messageQueue: () => EventMonitoringConfig$1;
mixedQueue: () => EventMonitoringConfig$1;
xcmpQueue: () => EventMonitoringConfig$1;
};
xTokens: () => {
messageQueue: () => EventMonitoringConfig$1;
ethereumXcm: () => EventMonitoringConfig$1;
};
bridgeMessages: () => {
bridgeMessages: () => EventMonitoringConfig$1;
};
}
interface EventMonitoringConfig$1 {
checkSource: SourceChecker;
checkDestination: DestinationChecker;
}
declare function monitorEvent(): MonitorEventReturn;
declare function MonitoringBuilder(): {
monitorEvent: typeof monitorEvent;
};
interface MonitoringBuilderConfig {
eventMonitoring: EventMonitoringConfig;
}
interface EventMonitoringConfig {
checkSource: SourceChecker;
checkDestination: DestinationChecker;
}
type SnowbridgeFunctions = 'sendToken';
interface SnowbridgeFunctionArgs {
tokenAddress: string;
destinationAddress: string;
destinationParaId: number;
amount: bigint;
bridgeFeeAmount: bigint;
bridgeChainFee: bigint;
requiresApproval: boolean;
value: bigint;
}
interface SnowbridgeConfigConstructorParams {
args: SnowbridgeFunctionArgs;
func: SnowbridgeFunctions;
}
declare class SnowbridgeConfig {
readonly args: SnowbridgeFunctionArgs;
readonly func: SnowbridgeFunctions;
readonly provider = Provider.Snowbridge;
static is(obj: unknown): obj is SnowbridgeConfig;
constructor({ args, func }: SnowbridgeConfigConstructorParams);
}
declare const GATEWAY_ABI: readonly [{
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "beefyClient";
readonly type: "address";
}, {
readonly internalType: "address";
readonly name: "agentExecutor";
readonly type: "address";
}, {
readonly internalType: "ParaID";
readonly name: "bridgeHubParaID";
readonly type: "uint32";
}, {
readonly internalType: "bytes32";
readonly name: "bridgeHubAgentID";
readonly type: "bytes32";
}, {
readonly internalType: "uint8";
readonly name: "foreignTokenDecimals";
readonly type: "uint8";
}, {
readonly internalType: "uint128";
readonly name: "maxDestinationFee";
readonly type: "uint128";
}];
readonly stateMutability: "nonpayable";
readonly type: "constructor";
}, {
readonly inputs: readonly [];
readonly name: "AgentAlreadyCreated";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "AgentDoesNotExist";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "CantSetMiddlewareToSameAddress";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "CantSetMiddlewareToZeroAddress";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "ChannelAlreadyCreated";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "ChannelDoesNotExist";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "Disabled";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "epoch";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "eraIndex";
readonly type: "uint256";
}, {
readonly internalType: "address";
readonly name: "tokenAddress";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "totalPointsToken";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "totalTokensInflated";
readonly type: "uint256";
}, {
readonly internalType: "bytes32";
readonly name: "rewardsRoot";
readonly type: "bytes32";
}, {
readonly internalType: "bytes";
readonly name: "errorBytes";
readonly type: "bytes";
}];
readonly name: "EUnableToProcessRewardsB";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "epoch";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "eraIndex";
readonly type: "uint256";
}, {
readonly internalType: "address";
readonly name: "tokenAddress";
readonly type: "address";
}, {
readonly internalType: "uint256";
readonly name: "totalPointsToken";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "totalTokensInflated";
readonly type: "uint256";
}, {
readonly internalType: "bytes32";
readonly name: "rewardsRoot";
readonly type: "bytes32";
}, {
readonly internalType: "string";
readonly name: "errorString";
readonly type: "string";
}];
readonly name: "EUnableToProcessRewardsS";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "FeePaymentToLow";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidAgentExecutionPayload";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidChannelUpdate";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidCodeHash";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidConstructorParams";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidContract";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidNonce";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "InvalidProof";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "MiddlewareNotSet";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "NativeTransferFailed";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "NotEnoughGas";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "Operators__OperatorsKeysCannotBeEmpty";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "Operators__OperatorsLengthTooLong";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "x";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "y";
readonly type: "uint256";
}];
readonly name: "PRBMath_MulDiv18_Overflow";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "x";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "y";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "denominator";
readonly type: "uint256";
}];
readonly name: "PRBMath_MulDiv_Overflow";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "uint256";
readonly name: "x";
readonly type: "uint256";
}];
readonly name: "PRBMath_UD60x18_Convert_Overflow";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "UD60x18";
readonly name: "x";
readonly type: "uint256";
}];
readonly name: "PRBMath_UD60x18_Exp2_InputTooBig";
readonly type: "error";
}, {
readonly inputs: readonly [{
readonly internalType: "UD60x18";
readonly name: "x";
readonly type: "uint256";
}];
readonly name: "PRBMath_UD60x18_Log_InputTooSmall";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "TokenNotRegistered";
readonly type: "error";
}, {
readonly inputs: readonly [];
readonly name: "Unauthorized";
readonly type: "error";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "bytes32";
readonly name: "agentID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "address";
readonly name: "agent";
readonly type: "address";
}];
readonly name: "AgentCreated";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "agentID";
readonly type: "bytes32";
}, {
readonly indexed: true;
readonly internalType: "address";
readonly name: "recipient";
readonly type: "address";
}, {
readonly indexed: false;
readonly internalType: "uint256";
readonly name: "amount";
readonly type: "uint256";
}];
readonly name: "AgentFundsWithdrawn";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}];
readonly name: "ChannelCreated";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}];
readonly name: "ChannelUpdated";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "tokenID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}];
readonly name: "ForeignTokenRegistered";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "uint64";
readonly name: "nonce";
readonly type: "uint64";
}, {
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "messageID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "bool";
readonly name: "success";
readonly type: "bool";
}];
readonly name: "InboundMessageDispatched";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "address";
readonly name: "previousMiddleware";
readonly type: "address";
}, {
readonly indexed: true;
readonly internalType: "address";
readonly name: "newMiddleware";
readonly type: "address";
}];
readonly name: "MiddlewareChanged";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "enum OperatingMode";
readonly name: "mode";
readonly type: "uint8";
}];
readonly name: "OperatingModeChanged";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "uint256";
readonly name: "validatorsCount";
readonly type: "uint256";
}, {
readonly indexed: false;
readonly internalType: "bytes";
readonly name: "payload";
readonly type: "bytes";
}];
readonly name: "OperatorsDataCreated";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "uint64";
readonly name: "nonce";
readonly type: "uint64";
}, {
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "messageID";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "bytes";
readonly name: "payload";
readonly type: "bytes";
}];
readonly name: "OutboundMessageAccepted";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "address";
readonly name: "previousOwner";
readonly type: "address";
}, {
readonly indexed: true;
readonly internalType: "address";
readonly name: "newOwner";
readonly type: "address";
}];
readonly name: "OwnershipTransferred";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [];
readonly name: "PricingParametersChanged";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}];
readonly name: "TokenRegistrationSent";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly indexed: true;
readonly internalType: "address";
readonly name: "sender";
readonly type: "address";
}, {
readonly indexed: true;
readonly internalType: "ParaID";
readonly name: "destinationChain";
readonly type: "uint32";
}, {
readonly components: readonly [{
readonly internalType: "enum Kind";
readonly name: "kind";
readonly type: "uint8";
}, {
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly indexed: false;
readonly internalType: "struct MultiAddress";
readonly name: "destinationAddress";
readonly type: "tuple";
}, {
readonly indexed: false;
readonly internalType: "uint128";
readonly name: "amount";
readonly type: "uint128";
}];
readonly name: "TokenSent";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [];
readonly name: "TokenTransferFeesChanged";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "operatorKey";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "uint256";
readonly name: "slashFranction";
readonly type: "uint256";
}, {
readonly indexed: true;
readonly internalType: "uint256";
readonly name: "epoch";
readonly type: "uint256";
}, {
readonly indexed: false;
readonly internalType: "bytes";
readonly name: "error";
readonly type: "bytes";
}];
readonly name: "UnableToProcessIndividualSlashB";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "bytes32";
readonly name: "operatorKey";
readonly type: "bytes32";
}, {
readonly indexed: false;
readonly internalType: "uint256";
readonly name: "slashFranction";
readonly type: "uint256";
}, {
readonly indexed: true;
readonly internalType: "uint256";
readonly name: "epoch";
readonly type: "uint256";
}, {
readonly indexed: false;
readonly internalType: "string";
readonly name: "error";
readonly type: "string";
}];
readonly name: "UnableToProcessIndividualSlashS";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "bytes";
readonly name: "error";
readonly type: "bytes";
}];
readonly name: "UnableToProcessRewardsMessageB";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "string";
readonly name: "error";
readonly type: "string";
}];
readonly name: "UnableToProcessRewardsMessageS";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "bytes";
readonly name: "error";
readonly type: "bytes";
}];
readonly name: "UnableToProcessSlashMessageB";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: false;
readonly internalType: "string";
readonly name: "error";
readonly type: "string";
}];
readonly name: "UnableToProcessSlashMessageS";
readonly type: "event";
}, {
readonly anonymous: false;
readonly inputs: readonly [{
readonly indexed: true;
readonly internalType: "address";
readonly name: "implementation";
readonly type: "address";
}];
readonly name: "Upgraded";
readonly type: "event";
}, {
readonly inputs: readonly [];
readonly name: "AGENT_EXECUTOR";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "BEEFY_CLIENT";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "agentExecute";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes32";
readonly name: "agentID";
readonly type: "bytes32";
}];
readonly name: "agentOf";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}];
readonly name: "channelNoncesOf";
readonly outputs: readonly [{
readonly internalType: "uint64";
readonly name: "";
readonly type: "uint64";
}, {
readonly internalType: "uint64";
readonly name: "";
readonly type: "uint64";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}];
readonly name: "channelOperatingModeOf";
readonly outputs: readonly [{
readonly internalType: "enum OperatingMode";
readonly name: "";
readonly type: "uint8";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "createAgent";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "createChannel";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "implementation";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "initialize";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}];
readonly name: "isTokenRegistered";
readonly outputs: readonly [{
readonly internalType: "bool";
readonly name: "";
readonly type: "bool";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "mintForeignToken";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "operatingMode";
readonly outputs: readonly [{
readonly internalType: "enum OperatingMode";
readonly name: "";
readonly type: "uint8";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "pricingParameters";
readonly outputs: readonly [{
readonly internalType: "UD60x18";
readonly name: "";
readonly type: "uint256";
}, {
readonly internalType: "uint128";
readonly name: "";
readonly type: "uint128";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}];
readonly name: "queryForeignTokenID";
readonly outputs: readonly [{
readonly internalType: "bytes32";
readonly name: "";
readonly type: "bytes32";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "quoteRegisterTokenFee";
readonly outputs: readonly [{
readonly internalType: "uint256";
readonly name: "";
readonly type: "uint256";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "ParaID";
readonly name: "destinationChain";
readonly type: "uint32";
}, {
readonly internalType: "uint128";
readonly name: "destinationFee";
readonly type: "uint128";
}];
readonly name: "quoteSendTokenFee";
readonly outputs: readonly [{
readonly internalType: "uint256";
readonly name: "";
readonly type: "uint256";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "registerForeignToken";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}];
readonly name: "registerToken";
readonly outputs: readonly [];
readonly stateMutability: "payable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "reportSlashes";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [];
readonly name: "s_middleware";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";
}];
readonly stateMutability: "view";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes32[]";
readonly name: "data";
readonly type: "bytes32[]";
}, {
readonly internalType: "uint48";
readonly name: "epoch";
readonly type: "uint48";
}];
readonly name: "sendOperatorsData";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "sendRewards";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "token";
readonly type: "address";
}, {
readonly internalType: "ParaID";
readonly name: "destinationChain";
readonly type: "uint32";
}, {
readonly components: readonly [{
readonly internalType: "enum Kind";
readonly name: "kind";
readonly type: "uint8";
}, {
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly internalType: "struct MultiAddress";
readonly name: "destinationAddress";
readonly type: "tuple";
}, {
readonly internalType: "uint128";
readonly name: "destinationFee";
readonly type: "uint128";
}, {
readonly internalType: "uint128";
readonly name: "amount";
readonly type: "uint128";
}];
readonly name: "sendToken";
readonly outputs: readonly [];
readonly stateMutability: "payable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "address";
readonly name: "middleware";
readonly type: "address";
}];
readonly name: "setMiddleware";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "setOperatingMode";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "setPricingParameters";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes";
readonly name: "data";
readonly type: "bytes";
}];
readonly name: "setTokenTransferFees";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly components: readonly [{
readonly internalType: "ChannelID";
readonly name: "channelID";
readonly type: "bytes32";
}, {
readonly internalType: "uint64";
readonly name: "nonce";
readonly type: "uint64";
}, {
readonly internalType: "enum Command";
readonly name: "command";
readonly type: "uint8";
}, {
readonly internalType: "bytes";
readonly name: "params";
readonly type: "bytes";
}, {
readonly internalType: "uint64";
readonly name: "maxDispatchGas";
readonly type: "uint64";
}, {
readonly internalType: "uint256";
readonly name: "maxFeePerGas";
readonly type: "uint256";
}, {
readonly internalType: "uint256";
readonly name: "reward";
readonly type: "uint256";
}, {
readonly internalType: "bytes32";
readonly name: "id";
readonly type: "bytes32";
}];
readonly internalType: "struct InboundMessage";
readonly name: "message";
readonly type: "tuple";
}, {
readonly internalType: "bytes32[]";
readonly name: "leafProof";
readonly type: "bytes32[]";
}, {
readonly components: readonly [{
readonly components: readonly [{
readonly internalType: "uint8";
readonly name: "version";
readonly type: "uint8";
}, {
readonly internalType: "uint32";
readonly name: "parentNumber";
readonly type: "uint32";
}, {
readonly internalType: "bytes32";
readonly name: "parentHash";
readonly type: "bytes32";
}, {
readonly internalType: "uint64";
readonly name: "nextAuthoritySetID";
readonly type: "uint64";
}, {
readonly internalType: "uint32";
readonly name: "nextAuthoritySetLen";
readonly type: "uint32";
}, {
readonly internalType: "bytes32";
readonly name: "nextAuthoritySetRoot";
readonly type: "bytes32";
}];
readonly internalType: "struct Verification.MMRLeafPartial";
readonly name: "leafPartial";
readonly type: "tuple";
}, {
readonly internalType: "bytes32[]";
readonly name: "leafProof";
readonly type: "bytes32[]";
}, {
readonly internalType: "bytes32";
readonly name: "parachainHeadsRoot";
readonly type: "bytes32";
}, {
readonly internalType: "uint256";
readonly name: "leafProofOrder";
readonly type: "uint256";
}];
readonly internalType: "struct Verification.Proof";
readonly name: "headerProof";
readonly type: "tuple";
}];
readonly name: "submitV1";
readonly outputs: readonly [];
readonly stateMutability: "nonpayable";
readonly type: "function";
}, {
readonly inputs: readonly [{
readonly internalType: "bytes32";
readonly name: "tokenID";
readonly type: "bytes32";
}];
readonly name: "tokenAddressOf";
readonly outputs: readonly [{
readonly internalType: "address";
readonly name: "";
readonly type: "address";