@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
327 lines • 13.7 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["EvmHypEverclearCollateral"] = "EvmHypEverclearCollateral";
TokenStandard["EvmHypEverclearEth"] = "EvmHypEverclearEth";
// Sealevel (Solana)
TokenStandard["SealevelSpl"] = "SealevelSpl";
TokenStandard["SealevelSpl2022"] = "SealevelSpl2022";
TokenStandard["SealevelNative"] = "SealevelNative";
TokenStandard["SealevelHypNative"] = "SealevelHypNative";
TokenStandard["SealevelHypCollateral"] = "SealevelHypCollateral";
TokenStandard["SealevelHypSynthetic"] = "SealevelHypSynthetic";
// 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";
})(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,
[]: ProtocolType.Ethereum,
[]: ProtocolType.Ethereum,
// Sealevel (Solana)
SealevelSpl: ProtocolType.Sealevel,
SealevelSpl2022: ProtocolType.Sealevel,
SealevelNative: ProtocolType.Sealevel,
SealevelHypNative: ProtocolType.Sealevel,
SealevelHypCollateral: ProtocolType.Sealevel,
SealevelHypSynthetic: 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,
};
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.CosmosIcs721,
TokenStandard.CW721,
// TODO solana here
];
export const TOKEN_COLLATERALIZED_STANDARDS = [
TokenStandard.EvmHypCollateral,
TokenStandard.EvmHypNative,
TokenStandard.SealevelHypCollateral,
TokenStandard.SealevelHypNative,
TokenStandard.CwHypCollateral,
TokenStandard.CwHypNative,
TokenStandard.CosmNativeHypCollateral,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.AleoHypNative,
TokenStandard.AleoHypCollateral,
];
export const XERC20_STANDARDS = [
TokenStandard.EvmHypXERC20,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20,
TokenStandard.EvmHypVSXERC20Lockbox,
];
export const LOCKBOX_STANDARDS = [
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20Lockbox,
];
export const MINT_LIMITED_STANDARDS = [
TokenStandard.EvmHypXERC20,
TokenStandard.EvmHypXERC20Lockbox,
TokenStandard.EvmHypVSXERC20,
TokenStandard.EvmHypVSXERC20Lockbox,
TokenStandard.EvmHypCollateralFiat,
];
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.SealevelHypNative,
TokenStandard.SealevelHypCollateral,
TokenStandard.SealevelHypSynthetic,
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,
];
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) => {
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.Sealevel: {
const sealevelTokenStandard = SEALEVEL_TOKEN_TYPE_TO_STANDARD[tokenType];
assert(sealevelTokenStandard, `token type ${tokenType} not available on protocol ${protocolType}`);
return sealevelTokenStandard;
}
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,
};
// 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,
];
export const SEALEVEL_TOKEN_TYPE_TO_STANDARD = {
[]: TokenStandard.SealevelHypCollateral,
[]: TokenStandard.SealevelHypSynthetic,
[]: TokenStandard.SealevelHypNative,
};
// 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 PROTOCOL_TO_NATIVE_STANDARD = {
[]: TokenStandard.EvmNative,
[]: TokenStandard.CosmosNative,
[]: TokenStandard.CosmosNative,
[]: TokenStandard.SealevelNative,
[]: TokenStandard.StarknetNative,
[]: TokenStandard.RadixNative,
[]: TokenStandard.AleoNative,
};
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,
};
//# sourceMappingURL=TokenStandard.js.map