@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
464 lines • 20.4 kB
JavaScript
import { ProtocolType, assert, objMap } from '@hyperlane-xyz/utils';
import { PROTOCOL_TO_DEFAULT_PROVIDER_TYPE, ProviderType, } from '../providers/ProviderType.js';
import { TokenType } from './config.js';
export var TokenStandard;
(function (TokenStandard) {
// EVM
TokenStandard["ERC20"] = "ERC20";
TokenStandard["ERC721"] = "ERC721";
TokenStandard["EvmNative"] = "EvmNative";
TokenStandard["EvmHypNative"] = "EvmHypNative";
TokenStandard["EvmHypCollateral"] = "EvmHypCollateral";
TokenStandard["EvmHypOwnerCollateral"] = "EvmHypOwnerCollateral";
TokenStandard["EvmHypRebaseCollateral"] = "EvmHypRebaseCollateral";
TokenStandard["EvmHypCollateralFiat"] = "EvmHypCollateralFiat";
TokenStandard["EvmHypSynthetic"] = "EvmHypSynthetic";
TokenStandard["EvmHypSyntheticRebase"] = "EvmHypSyntheticRebase";
TokenStandard["EvmHypXERC20"] = "EvmHypXERC20";
TokenStandard["EvmHypXERC20Lockbox"] = "EvmHypXERC20Lockbox";
TokenStandard["EvmHypVSXERC20"] = "EvmHypVSXERC20";
TokenStandard["EvmHypVSXERC20Lockbox"] = "EvmHypVSXERC20Lockbox";
TokenStandard["EvmM0PortalLite"] = "EvmM0PortalLite";
TokenStandard["EvmM0Portal"] = "EvmM0Portal";
TokenStandard["EvmHypEverclearCollateral"] = "EvmHypEverclearCollateral";
TokenStandard["EvmHypEverclearEth"] = "EvmHypEverclearEth";
TokenStandard["EvmHypCrossCollateralRouter"] = "EvmHypCrossCollateralRouter";
// Sealevel (Solana)
TokenStandard["SealevelSpl"] = "SealevelSpl";
TokenStandard["SealevelSpl2022"] = "SealevelSpl2022";
TokenStandard["SealevelNative"] = "SealevelNative";
TokenStandard["SealevelHypNative"] = "SealevelHypNative";
TokenStandard["SealevelHypCollateral"] = "SealevelHypCollateral";
TokenStandard["SealevelHypSynthetic"] = "SealevelHypSynthetic";
TokenStandard["SealevelHypCrossCollateral"] = "SealevelHypCrossCollateral";
// Cosmos
TokenStandard["CosmosIcs20"] = "CosmosIcs20";
TokenStandard["CosmosIcs721"] = "CosmosIcs721";
TokenStandard["CosmosNative"] = "CosmosNative";
TokenStandard["CosmosIbc"] = "CosmosIbc";
// CosmWasm
TokenStandard["CW20"] = "CW20";
TokenStandard["CWNative"] = "CWNative";
TokenStandard["CW721"] = "CW721";
TokenStandard["CwHypNative"] = "CwHypNative";
TokenStandard["CwHypCollateral"] = "CwHypCollateral";
TokenStandard["CwHypSynthetic"] = "CwHypSynthetic";
// Cosmos Native
TokenStandard["CosmNativeHypCollateral"] = "CosmosNativeHypCollateral";
TokenStandard["CosmNativeHypSynthetic"] = "CosmosNativeHypSynthetic";
// Starknet
TokenStandard["StarknetNative"] = "StarknetNative";
TokenStandard["StarknetHypNative"] = "StarknetHypNative";
TokenStandard["StarknetHypCollateral"] = "StarknetHypCollateral";
TokenStandard["StarknetHypSynthetic"] = "StarknetHypSynthetic";
// Radix
TokenStandard["RadixNative"] = "RadixNative";
TokenStandard["RadixHypCollateral"] = "RadixHypCollateral";
TokenStandard["RadixHypSynthetic"] = "RadixHypSynthetic";
// Aleo
TokenStandard["AleoNative"] = "AleoNative";
TokenStandard["AleoHypNative"] = "AleoHypNative";
TokenStandard["AleoHypCollateral"] = "AleoHypCollateral";
TokenStandard["AleoHypSynthetic"] = "AleoHypSynthetic";
// Tron
TokenStandard["TRC20"] = "TRC20";
TokenStandard["TRC721"] = "TRC721";
TokenStandard["TronNative"] = "TronNative";
TokenStandard["TronHypNative"] = "TronHypNative";
TokenStandard["TronHypCollateral"] = "TronHypCollateral";
TokenStandard["TronHypOwnerCollateral"] = "TronHypOwnerCollateral";
TokenStandard["TronHypRebaseCollateral"] = "TronHypRebaseCollateral";
TokenStandard["TronHypCollateralFiat"] = "TronHypCollateralFiat";
TokenStandard["TronHypSynthetic"] = "TronHypSynthetic";
TokenStandard["TronHypSyntheticRebase"] = "TronHypSyntheticRebase";
TokenStandard["TronHypXERC20"] = "TronHypXERC20";
TokenStandard["TronHypXERC20Lockbox"] = "TronHypXERC20Lockbox";
TokenStandard["TronHypVSXERC20"] = "TronHypVSXERC20";
TokenStandard["TronHypVSXERC20Lockbox"] = "TronHypVSXERC20Lockbox";
TokenStandard["TronM0PortalLite"] = "TronM0PortalLite";
TokenStandard["TronHypEverclearCollateral"] = "TronHypEverclearCollateral";
TokenStandard["TronHypEverclearEth"] = "TronHypEverclearEth";
TokenStandard["TronHypCrossCollateralRouter"] = "TronHypCrossCollateralRouter";
})(TokenStandard || (TokenStandard = {}));
// Allows for omission of protocol field in token args
export const TOKEN_STANDARD_TO_PROTOCOL = {
// EVM
ERC20: ProtocolType.Ethereum,
ERC721: ProtocolType.Ethereum,
EvmNative: ProtocolType.Ethereum,
EvmHypNative: ProtocolType.Ethereum,
EvmHypCollateral: ProtocolType.Ethereum,
EvmHypOwnerCollateral: ProtocolType.Ethereum,
EvmHypRebaseCollateral: ProtocolType.Ethereum,
EvmHypCollateralFiat: ProtocolType.Ethereum,
EvmHypSynthetic: ProtocolType.Ethereum,
EvmHypSyntheticRebase: ProtocolType.Ethereum,
EvmHypXERC20: ProtocolType.Ethereum,
EvmHypXERC20Lockbox: ProtocolType.Ethereum,
EvmHypVSXERC20: ProtocolType.Ethereum,
EvmHypVSXERC20Lockbox: ProtocolType.Ethereum,
EvmM0PortalLite: ProtocolType.Ethereum,
EvmM0Portal: ProtocolType.Ethereum,
[]: ProtocolType.Ethereum,
[]: ProtocolType.Ethereum,
[]: ProtocolType.Ethereum,
// Sealevel (Solana)
SealevelSpl: ProtocolType.Sealevel,
SealevelSpl2022: ProtocolType.Sealevel,
SealevelNative: ProtocolType.Sealevel,
SealevelHypNative: ProtocolType.Sealevel,
SealevelHypCollateral: ProtocolType.Sealevel,
SealevelHypSynthetic: ProtocolType.Sealevel,
SealevelHypCrossCollateral: ProtocolType.Sealevel,
// Cosmos
CosmosIcs20: ProtocolType.Cosmos,
CosmosIcs721: ProtocolType.Cosmos,
CosmosNative: ProtocolType.Cosmos,
CosmosIbc: ProtocolType.Cosmos,
// Cosmos Native
CosmosNativeHypCollateral: ProtocolType.CosmosNative,
CosmosNativeHypSynthetic: ProtocolType.CosmosNative,
// CosmWasm
CW20: ProtocolType.Cosmos,
CWNative: ProtocolType.Cosmos,
CW721: ProtocolType.Cosmos,
CwHypNative: ProtocolType.Cosmos,
CwHypCollateral: ProtocolType.Cosmos,
CwHypSynthetic: ProtocolType.Cosmos,
// Starknet
StarknetNative: ProtocolType.Starknet,
StarknetHypCollateral: ProtocolType.Starknet,
StarknetHypNative: ProtocolType.Starknet,
StarknetHypSynthetic: ProtocolType.Starknet,
// Radix
RadixNative: ProtocolType.Radix,
RadixHypCollateral: ProtocolType.Radix,
RadixHypSynthetic: ProtocolType.Radix,
// Aleo
AleoNative: ProtocolType.Aleo,
AleoHypNative: ProtocolType.Aleo,
AleoHypCollateral: ProtocolType.Aleo,
AleoHypSynthetic: ProtocolType.Aleo,
// Tron
TRC20: ProtocolType.Tron,
TRC721: ProtocolType.Tron,
TronNative: ProtocolType.Tron,
TronHypNative: ProtocolType.Tron,
TronHypCollateral: ProtocolType.Tron,
TronHypOwnerCollateral: ProtocolType.Tron,
TronHypRebaseCollateral: ProtocolType.Tron,
TronHypCollateralFiat: ProtocolType.Tron,
TronHypSynthetic: ProtocolType.Tron,
TronHypSyntheticRebase: ProtocolType.Tron,
TronHypXERC20: ProtocolType.Tron,
TronHypXERC20Lockbox: ProtocolType.Tron,
TronHypVSXERC20: ProtocolType.Tron,
TronHypVSXERC20Lockbox: ProtocolType.Tron,
TronM0PortalLite: ProtocolType.Tron,
TronHypEverclearCollateral: ProtocolType.Tron,
TronHypEverclearEth: ProtocolType.Tron,
TronHypCrossCollateralRouter: ProtocolType.Tron,
};
export const TOKEN_STANDARD_TO_PROVIDER_TYPE = objMap(TOKEN_STANDARD_TO_PROTOCOL, (k, v) => {
if (k.startsWith('CosmosNative')) {
return ProviderType.CosmJsNative;
}
if (k.startsWith('Cosmos')) {
return ProviderType.CosmJs;
}
return PROTOCOL_TO_DEFAULT_PROVIDER_TYPE[v];
});
export const TOKEN_NFT_STANDARDS = [
TokenStandard.ERC721,
TokenStandard.TRC721,
TokenStandard.CosmosIcs721,
TokenStandard.CW721,
// TODO solana here
];
export const TOKEN_COLLATERALIZED_STANDARDS = [
TokenStandard.EvmHypCollateral,
TokenStandard.EvmHypOwnerCollateral,
TokenStandard.EvmHypRebaseCollateral,
TokenStandard.EvmHypNative,
TokenStandard.SealevelHypCollateral,
TokenStandard.SealevelHypNative,
TokenStandard.CwHypCollateral,
TokenStandard.CwHypNative,
TokenStandard.CosmNativeHypCollateral,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.AleoHypNative,
TokenStandard.AleoHypCollateral,
TokenStandard.TronHypNative,
TokenStandard.TronHypCollateral,
TokenStandard.TronHypOwnerCollateral,
TokenStandard.TronHypRebaseCollateral,
TokenStandard.TronHypXERC20Lockbox,
TokenStandard.TronHypVSXERC20Lockbox,
TokenStandard.RadixHypCollateral,
TokenStandard.StarknetHypCollateral,
TokenStandard.StarknetHypNative,
TokenStandard.EvmHypCrossCollateralRouter,
TokenStandard.TronHypCrossCollateralRouter,
TokenStandard.SealevelHypCrossCollateral,
];
export const TOKEN_CROSS_COLLATERAL_STANDARDS = new Set([
TokenStandard.EvmHypCrossCollateralRouter,
TokenStandard.SealevelHypCrossCollateral,
TokenStandard.TronHypCrossCollateralRouter,
]);
export const XERC20_STANDARDS = [
TokenStandard.EvmHypXERC20,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.TronHypXERC20,
TokenStandard.TronHypXERC20Lockbox,
TokenStandard.TronHypVSXERC20,
TokenStandard.TronHypVSXERC20Lockbox,
];
export const LOCKBOX_STANDARDS = [
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.TronHypXERC20Lockbox,
TokenStandard.TronHypVSXERC20Lockbox,
];
export const ERC4626_COLLATERAL_STANDARDS = [
TokenStandard.EvmHypOwnerCollateral,
TokenStandard.EvmHypRebaseCollateral,
TokenStandard.TronHypOwnerCollateral,
TokenStandard.TronHypRebaseCollateral,
];
export const MINT_LIMITED_STANDARDS = [
TokenStandard.EvmHypXERC20,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.EvmHypCollateralFiat,
TokenStandard.TronHypXERC20,
TokenStandard.TronHypXERC20Lockbox,
TokenStandard.TronHypVSXERC20,
TokenStandard.TronHypVSXERC20Lockbox,
TokenStandard.TronHypCollateralFiat,
];
export const TOKEN_HYP_STANDARDS = [
TokenStandard.EvmHypNative,
TokenStandard.EvmHypCollateral,
TokenStandard.EvmHypCollateralFiat,
TokenStandard.EvmHypOwnerCollateral,
TokenStandard.EvmHypRebaseCollateral,
TokenStandard.EvmHypSynthetic,
TokenStandard.EvmHypSyntheticRebase,
TokenStandard.EvmHypXERC20,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.EvmM0PortalLite,
TokenStandard.EvmM0Portal,
TokenStandard.EvmHypCrossCollateralRouter,
TokenStandard.SealevelHypNative,
TokenStandard.SealevelHypCollateral,
TokenStandard.SealevelHypSynthetic,
TokenStandard.SealevelHypCrossCollateral,
TokenStandard.CwHypNative,
TokenStandard.CwHypCollateral,
TokenStandard.CwHypSynthetic,
TokenStandard.CosmNativeHypCollateral,
TokenStandard.CosmNativeHypSynthetic,
TokenStandard.StarknetHypNative,
TokenStandard.StarknetHypCollateral,
TokenStandard.StarknetHypSynthetic,
TokenStandard.RadixHypCollateral,
TokenStandard.RadixHypSynthetic,
TokenStandard.AleoHypNative,
TokenStandard.AleoHypCollateral,
TokenStandard.AleoHypSynthetic,
TokenStandard.TronHypNative,
TokenStandard.TronHypCollateral,
TokenStandard.TronHypOwnerCollateral,
TokenStandard.TronHypRebaseCollateral,
TokenStandard.TronHypCollateralFiat,
TokenStandard.TronHypSynthetic,
TokenStandard.TronHypSyntheticRebase,
TokenStandard.TronHypXERC20,
TokenStandard.TronHypXERC20Lockbox,
TokenStandard.TronHypVSXERC20,
TokenStandard.TronHypVSXERC20Lockbox,
TokenStandard.TronM0PortalLite,
TokenStandard.TronHypCrossCollateralRouter,
TokenStandard.TronHypEverclearCollateral,
TokenStandard.TronHypEverclearEth,
];
export const TOKEN_MULTI_CHAIN_STANDARDS = [
...TOKEN_HYP_STANDARDS,
TokenStandard.CosmosIbc,
];
// Useful for differentiating from norma Cosmos standards
// (e.g. for determining the appropriate cosmos client)
export const TOKEN_COSMWASM_STANDARDS = [
TokenStandard.CW20,
TokenStandard.CWNative,
TokenStandard.CW721,
TokenStandard.CwHypNative,
TokenStandard.CwHypCollateral,
TokenStandard.CwHypSynthetic,
];
export const tokenTypeToStandard = (protocolType, tokenType) => {
assert(tokenType !== TokenType.unknown, 'Cannot determine token standard for unknown token type');
switch (protocolType) {
case ProtocolType.Ethereum: {
return EVM_TOKEN_TYPE_TO_STANDARD[tokenType];
}
case ProtocolType.CosmosNative: {
if (COSMOS_NATIVE_SUPPORTED_TOKEN_TYPES.includes(tokenType)) {
return COSMOS_NATIVE_TOKEN_TYPE_TO_STANDARD[tokenType];
}
throw new Error(`token type ${tokenType} not available on protocol ${protocolType}`);
}
case ProtocolType.Radix: {
if (RADIX_SUPPORTED_TOKEN_TYPES.includes(tokenType)) {
return RADIX_TOKEN_TYPE_TO_STANDARD[tokenType];
}
throw new Error(`token type ${tokenType} not available on protocol ${protocolType}`);
}
case ProtocolType.Aleo: {
if (ALEO_SUPPORTED_TOKEN_TYPES.includes(tokenType)) {
return ALEO_TOKEN_TYPE_TO_STANDARD[tokenType];
}
throw new Error(`token type ${tokenType} not available on protocol ${protocolType}`);
}
case ProtocolType.Tron: {
return TRON_TOKEN_TYPE_TO_STANDARD[tokenType];
}
case ProtocolType.Sealevel: {
const sealevelTokenStandard = SEALEVEL_TOKEN_TYPE_TO_STANDARD[tokenType];
assert(sealevelTokenStandard, `token type ${tokenType} not available on protocol ${protocolType}`);
return sealevelTokenStandard;
}
case ProtocolType.Starknet: {
const starknetTokenStandard = STARKNET_TOKEN_TYPE_TO_STANDARD[tokenType];
assert(starknetTokenStandard, `token type ${tokenType} not available on protocol ${protocolType}`);
return starknetTokenStandard;
}
default: {
throw new Error(`no token standard available for protocol type ${protocolType}`);
}
}
};
export const EVM_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.EvmHypNative,
[]: TokenStandard.EvmHypCollateral,
[]: TokenStandard.EvmHypCollateralFiat,
[]: TokenStandard.EvmHypXERC20,
[]: TokenStandard.EvmHypXERC20Lockbox,
[]: TokenStandard.EvmHypOwnerCollateral,
[]: TokenStandard.EvmHypRebaseCollateral,
[]: TokenStandard.EvmHypCollateral,
[]: TokenStandard.EvmHypSynthetic,
[]: TokenStandard.EvmHypSyntheticRebase,
[]: TokenStandard.EvmHypSynthetic,
[]: TokenStandard.EvmHypNative,
[]: TokenStandard.EvmHypCollateral,
[]: TokenStandard.EvmHypNative,
[]: TokenStandard.EvmHypNative,
[]: TokenStandard.EvmHypEverclearEth,
[]: TokenStandard.EvmHypEverclearCollateral,
[]: TokenStandard.EvmHypCollateral,
[]: TokenStandard.EvmHypCollateral,
[]: TokenStandard.EvmHypCrossCollateralRouter,
};
// Cosmos Native supported token types
export const COSMOS_NATIVE_SUPPORTED_TOKEN_TYPES = [
TokenType.collateral,
TokenType.synthetic,
];
export const COSMOS_NATIVE_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.CosmNativeHypCollateral,
[]: TokenStandard.CosmNativeHypSynthetic,
};
// Sealevel supported token types
export const SEALEVEL_SUPPORTED_TOKEN_TYPES = [
TokenType.collateral,
TokenType.synthetic,
TokenType.native,
TokenType.crossCollateral,
];
export const SEALEVEL_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.SealevelHypCollateral,
[]: TokenStandard.SealevelHypSynthetic,
[]: TokenStandard.SealevelHypNative,
[]: TokenStandard.SealevelHypCrossCollateral,
};
// Starknet supported token types
export const STARKNET_SUPPORTED_TOKEN_TYPES = [
TokenType.collateral,
TokenType.native,
TokenType.synthetic,
];
export const STARKNET_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.StarknetHypCollateral,
[]: TokenStandard.StarknetHypNative,
[]: TokenStandard.StarknetHypSynthetic,
};
export const RADIX_SUPPORTED_TOKEN_TYPES = [
TokenType.collateral,
TokenType.synthetic,
];
export const RADIX_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.RadixHypCollateral,
[]: TokenStandard.RadixHypSynthetic,
};
export const ALEO_SUPPORTED_TOKEN_TYPES = [
TokenType.native,
TokenType.collateral,
TokenType.synthetic,
];
export const ALEO_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.AleoHypNative,
[]: TokenStandard.AleoHypCollateral,
[]: TokenStandard.AleoHypSynthetic,
};
export const TRON_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.TronHypNative,
[]: TokenStandard.TronHypCollateral,
[]: TokenStandard.TronHypCollateralFiat,
[]: TokenStandard.TronHypXERC20,
[]: TokenStandard.TronHypXERC20Lockbox,
[]: TokenStandard.TronHypOwnerCollateral,
[]: TokenStandard.TronHypRebaseCollateral,
[]: TokenStandard.TronHypCollateral,
[]: TokenStandard.TronHypSynthetic,
[]: TokenStandard.TronHypSyntheticRebase,
[]: TokenStandard.TronHypSynthetic,
[]: TokenStandard.TronHypNative,
[]: TokenStandard.TronHypCollateral,
[]: TokenStandard.TronHypNative,
[]: TokenStandard.TronHypNative,
[]: TokenStandard.TronHypEverclearEth,
[]: TokenStandard.TronHypEverclearCollateral,
[]: TokenStandard.TronHypCollateral,
[]: TokenStandard.TronHypCollateral,
[]: TokenStandard.TronHypCrossCollateralRouter,
};
export const PROTOCOL_TO_NATIVE_STANDARD = {
[]: TokenStandard.EvmNative,
[]: TokenStandard.CosmosNative,
[]: TokenStandard.CosmosNative,
[]: TokenStandard.SealevelNative,
[]: TokenStandard.StarknetNative,
[]: TokenStandard.RadixNative,
[]: TokenStandard.AleoNative,
[]: TokenStandard.TronNative,
};
export const PROTOCOL_TO_HYP_NATIVE_STANDARD = {
[]: TokenStandard.EvmHypNative,
[]: TokenStandard.CwHypNative,
[]: TokenStandard.SealevelHypNative,
[]: TokenStandard.StarknetHypNative,
// collateral and native are the same for cosmosnative and radix
[]: TokenStandard.RadixHypCollateral,
[]: TokenStandard.CosmNativeHypCollateral,
[]: TokenStandard.AleoHypNative,
[]: TokenStandard.TronHypNative,
};
//# sourceMappingURL=TokenStandard.js.map