@dontuseit/swap-sdk
Version:
A SDK to swap with Mayan
1,622 lines (1,613 loc) • 430 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
FAST_MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD: () => FAST_MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD,
FAST_MCTP_PAYLOAD_TYPE_DEFAULT: () => FAST_MCTP_PAYLOAD_TYPE_DEFAULT,
FAST_MCTP_PAYLOAD_TYPE_ORDER: () => FAST_MCTP_PAYLOAD_TYPE_ORDER,
MCTP_INIT_ORDER_PAYLOAD_ID: () => MCTP_INIT_ORDER_PAYLOAD_ID,
MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD: () => MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD,
MCTP_PAYLOAD_TYPE_DEFAULT: () => MCTP_PAYLOAD_TYPE_DEFAULT,
PermitTypes: () => PermitTypes,
SWIFT_PAYLOAD_TYPE_CUSTOM_PAYLOAD: () => SWIFT_PAYLOAD_TYPE_CUSTOM_PAYLOAD,
SWIFT_PAYLOAD_TYPE_DEFAULT: () => SWIFT_PAYLOAD_TYPE_DEFAULT,
ZeroPermit: () => ZeroPermit,
addBridgeLockedFeeMoveCalls: () => addBridgeLockedFeeMoveCalls,
addBridgeWithFeeMoveCalls: () => addBridgeWithFeeMoveCalls,
addBridgeWithFeeMoveCalls2: () => addBridgeWithFeeMoveCalls2,
addInitOrderMoveCalls: () => addInitOrderMoveCalls,
addresses: () => addresses_default,
assertArgumentIsImmutable: () => assertArgumentIsImmutable,
broadcastJitoBundleId: () => broadcastJitoBundleId,
checkHyperCoreDeposit: () => checkHyperCoreDeposit,
checkSdkVersionSupport: () => checkSdkVersionSupport,
confirmJitoBundleId: () => confirmJitoBundleId,
createApproveInstruction: () => createApproveInstruction,
createAssociatedTokenAccountInstruction: () => createAssociatedTokenAccountInstruction,
createCloseAccountInstruction: () => createCloseAccountInstruction,
createHyperCoreDepositFromSolanaInstructions: () => createHyperCoreDepositFromSolanaInstructions,
createHyperCoreDepositFromSuiMoveCalls: () => createHyperCoreDepositFromSuiMoveCalls,
createInitializeRandomTokenAccountInstructions: () => createInitializeRandomTokenAccountInstructions,
createMctpBridgeLedgerInstruction: () => createMctpBridgeLedgerInstruction,
createMctpBridgeWithFeeInstruction: () => createMctpBridgeWithFeeInstruction,
createMctpFromSolanaInstructions: () => createMctpFromSolanaInstructions,
createMctpFromSuiMoveCalls: () => createMctpFromSuiMoveCalls,
createMonoChainFromSolanaInstructions: () => createMonoChainFromSolanaInstructions,
createPayloadWriterCloseInstruction: () => createPayloadWriterCloseInstruction,
createPayloadWriterCreateInstruction: () => createPayloadWriterCreateInstruction,
createSplTransferInstruction: () => createSplTransferInstruction,
createSwapFromSolanaInstructions: () => createSwapFromSolanaInstructions,
createSwapFromSuiMoveCalls: () => createSwapFromSuiMoveCalls,
createSwiftFromSolanaInstructions: () => createSwiftFromSolanaInstructions,
createSwiftOrderHash: () => createSwiftOrderHash,
createSwiftRandomKey: () => createSwiftRandomKey,
createSyncNativeInstruction: () => createSyncNativeInstruction,
createTransferAllAndCloseInstruction: () => createTransferAllAndCloseInstruction,
decentralizeClientSwapInstructions: () => decentralizeClientSwapInstructions,
decideRelayer: () => decideRelayer,
deserializeInstructionInfo: () => deserializeInstructionInfo,
estimateQuoteRequiredGas: () => estimateQuoteRequiredGas,
estimateQuoteRequiredGasAprox: () => estimateQuoteRequiredGasAprox,
estimateQuoteRequiredGasAprox2: () => estimateQuoteRequiredGasAprox2,
fetchAllCoins: () => fetchAllCoins,
fetchAllTokenList: () => fetchAllTokenList,
fetchMayanSuiPackageId: () => fetchMayanSuiPackageId,
fetchQuote: () => fetchQuote,
fetchTokenList: () => fetchTokenList,
generateFetchQuoteUrl: () => generateFetchQuoteUrl,
getAddressLookupTableAccounts: () => getAddressLookupTableAccounts,
getAmountOfFractionalAmount: () => getAmountOfFractionalAmount,
getAnchorInstructionData: () => getAnchorInstructionData,
getAssociatedTokenAddress: () => getAssociatedTokenAddress,
getCurrentChainTime: () => getCurrentChainTime,
getDisplayAmount: () => getDisplayAmount,
getEstimateGasEvm: () => getEstimateGasEvm,
getEvmChainIdByName: () => getEvmChainIdByName,
getEvmSwiftParams: () => getEvmSwiftParams,
getFastMctpFromEvmTxPayload: () => getFastMctpFromEvmTxPayload,
getGasDecimal: () => getGasDecimal,
getGasDecimalsInSolana: () => getGasDecimalsInSolana,
getHyperCoreDepositFromEvmTxPayload: () => getHyperCoreDepositFromEvmTxPayload,
getHyperCoreUSDCDepositCustomPayload: () => getHyperCoreUSDCDepositCustomPayload,
getHyperCoreUSDCDepositPermitParams: () => getHyperCoreUSDCDepositPermitParams,
getJitoTipTransfer: () => getJitoTipTransfer,
getLookupTableAddress: () => getLookupTableAddress,
getMctpFromEvmTxPayload: () => getMctpFromEvmTxPayload,
getMonoChainFromEvmTxPayload: () => getMonoChainFromEvmTxPayload,
getNormalizeFactor: () => getNormalizeFactor,
getPermitDomain: () => getPermitDomain,
getPermitParams: () => getPermitParams,
getQuoteSuitableReferrerAddress: () => getQuoteSuitableReferrerAddress,
getSafeU64Blob: () => getSafeU64Blob,
getSdkVersion: () => getSdkVersion,
getSuggestedRelayer: () => getSuggestedRelayer,
getSvmDurableNonce: () => getSvmDurableNonce,
getSwapEvm: () => getSwapEvm,
getSwapFromEvmTxPayload: () => getSwapFromEvmTxPayload,
getSwapSolana: () => getSwapSolana,
getSwapSui: () => getSwapSui,
getSwiftFromEvmGasLessParams: () => getSwiftFromEvmGasLessParams,
getSwiftFromEvmTxPayload: () => getSwiftFromEvmTxPayload,
getSwiftOrderTypeData: () => getSwiftOrderTypeData,
getSwiftToTokenHexString: () => getSwiftToTokenHexString,
getWormholeChainIdById: () => getWormholeChainIdById,
getWormholeChainIdByName: () => getWormholeChainIdByName,
hexToUint8Array: () => hexToUint8Array,
isValidAptosType: () => isValidAptosType,
nativeAddressToHexString: () => nativeAddressToHexString,
resolveInputCoin: () => resolveInputCoin,
sandwichInstructionInCpiProxy: () => sandwichInstructionInCpiProxy,
sendJitoBundle: () => sendJitoBundle,
solMint: () => solMint,
submitSwiftEvmSwap: () => submitSwiftEvmSwap,
submitSwiftSolanaSwap: () => submitSwiftSolanaSwap,
submitTransactionWithRetry: () => submitTransactionWithRetry,
swapFromEvm: () => swapFromEvm,
swapFromSolana: () => swapFromSolana,
unwrapSol: () => unwrapSol,
validateJupSwap: () => validateJupSwap,
validateJupSwapInstructionData: () => validateJupSwapInstructionData,
wait: () => wait,
wrapSol: () => wrapSol
});
module.exports = __toCommonJS(src_exports);
// src/api.ts
var import_cross_fetch = __toESM(require("cross-fetch"));
// src/addresses.ts
var addresses_default = {
"MAYAN_FORWARDER_CONTRACT": "0x337685fdaB40D39bd02028545a4FfA7D287cC3E2",
"MAYAN_PROGRAM_ID": "FC4eXxkyrMPTjiYUpp4EAnkmwMbQyZ6NDCh1kfLn6vsf",
"AUCTION_PROGRAM_ID": "8QJmxZcEzwuYmCPy6XqgN2sHcYCcFq6AEfBMJZZuLo5a",
"MCTP_PROGRAM_ID": "dkpZqrxHFrhziEMQ931GLtfy11nFkCsfMftH9u6QwBU",
"FAST_MCTP_PROGRAM_ID": "Gx9rivpS3YR8pBFwMuP6omYqVxunpLvLkNn7ubNyuZZ5",
"SWIFT_PROGRAM_ID": "BLZRi6frs4X4DNLw56V4EXai1b6QVESN1BhHBTYM9VcY",
"SWIFT_V2_PROGRAM_ID": "mayan34VedncxdK2XobtvWFDXQASUTBXhUVzt2kKgny",
"FEE_MANAGER_PROGRAM_ID": "5VtQHnhs2pfVEr68qQsbTRwKh4JV5GTu9mBHgHFxpHeQ",
"WORMHOLE_PROGRAM_ID": "worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",
"WORMHOLE_PROGRAM_ID_FOGO": "worm2mrQkG1B1KTz37erMfWN8anHkSK24nzca7UD8BB",
"WORMHOLE_SHIM_POST_MESSAGE_PROGRAM_ID": "EtZMZM22ViKMo4r5y4Anovs3wKQ2owUmDpjygnMMcdEX",
"CCTP_CORE_PROGRAM_ID": "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",
"CCTPV2_CORE_PROGRAM_ID": "CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC",
"CCTP_TOKEN_PROGRAM_ID": "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",
"CCTPV2_TOKEN_PROGRAM_ID": "CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe",
"TOKEN_PROGRAM_ID": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"TOKEN_2022_PROGRAM_ID": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
"ASSOCIATED_TOKEN_PROGRAM_ID": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"SPL_UTILS_PROGRAM_ID": "B96dV3Luxzo6SokJx3xt8i5y8Mb7HRR6Eec8hCjJDT69",
"LOOKUP_TABLE_SOLANA": "Ff3yi1meWQQ19VPZMzGg6H8JQQeRudiV7QtVtyzJyoht",
"LOOKUP_TABLE_FOGO": "ZnLmtY5qckPcBQfdD4uKh9GtiQTrzQfQXEX86U3aLq7",
"SUI_MCTP_STATE": "0xb787fe0f7530b4fd2162fa0cc92f4f6c5a97c54b4c5c55eb04ab29f4b803ac9c",
"SUI_MCTP_FEE_MANAGER_STATE": "0xa1b4a96ce93d36dd0bbce0adc39533a07d2f32928918c80cd6fe7868320978f2",
"SUI_SWIFT_STATE": "0x7ac01a7c14c53098a41593c7623823bb677b5201fb3ee35b75b47cfc6c6c6f40",
"SUI_SWIFT_FEE_MANAGER_STATE": "0xe42174b6d742f40bd2b67b967542b21e6d7433f2d277a80bb59866ac73ff3f52",
"SUI_CCTP_CORE_PACKAGE_ID": "0x08d87d37ba49e785dde270a83f8e979605b03dc552b5548f26fdf2f49bf7ed1b",
"SUI_CCTP_CORE_STATE": "0xf68268c3d9b1df3215f2439400c1c4ea08ac4ef4bb7d6f3ca6a2a239e17510af",
"SUI_CCTP_TOKEN_PACKAGE_ID": "0x2aa6c5d56376c371f88a6cc42e852824994993cb9bab8d3e6450cbe3cb32b94e",
"SUI_CCTP_TOKEN_STATE": "0x45993eecc0382f37419864992c12faee2238f5cfe22b98ad3bf455baf65c8a2f",
"SUI_WORMHOLE_PACKAGE_ID": "0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",
"SUI_WORMHOLE_STATE": "0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c",
"SUI_LOGGER_PACKAGE_ID": "0x05680e9030c147b413a489f7891273acc221d49bd061c433e5771bc170fc37ac",
"EXPLORER_URL": "https://explorer-api.mayan.finance/v3",
"PRICE_URL": "https://price-api.mayan.finance/v3",
"RELAYER_URL": "https://relayer-api.mayan.finance/v3",
"SWIFT_RELAYER_URL": "https://swift-relayer-api.mayan.finance/v3",
"GAS_ESTIMATE_URL": "https://gas-estimate.mayan.finance/v2",
"HC_ARBITRUM_BRIDGE": "0x2df1c51e09aecf9cacb7bc98cb1742757f163df7",
"HC_ARBITRUM_DEPOSIT_PROCESSOR": "0xdDd77e62C848C3334f1148d4F1457FC59ede4E4B",
"ARBITRUM_USDC_CONTRACT": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"PAYLOAD_WRITER_PROGRAM_ID": "DwMLtdtJqJQkHzNcrdTBuWHJByJfgpKBnvFvzyKdy3cU",
"CPI_PROXY_PROGRAM_ID": "D8C8iW6zmoKg5TRr8nQ7h14TMWqQX8FiBdj2ju5MF3wa"
};
// src/utils.ts
var import_ethers = require("ethers");
var import_web3 = require("@solana/web3.js");
var import_buffer = require("buffer");
// src/evm/ERC20Artifact.ts
var ERC20Artifact_default = {
"_format": "hh-sol-artifact-1",
"contractName": "ERC20Permit",
"sourceName": "contracts/token/ERC20/extensions/ERC20Permit.sol",
"abi": [
{
"inputs": [],
"name": "ECDSAInvalidSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "ECDSAInvalidSignatureLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "ECDSAInvalidSignatureS",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "ERC2612ExpiredSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "signer",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC2612InvalidSigner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "currentNonce",
"type": "uint256"
}
],
"name": "InvalidAccountNonce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidShortString",
"type": "error"
},
{
"inputs": [
{
"internalType": "string",
"name": "str",
"type": "string"
}
],
"name": "StringTooLong",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x",
"deployedBytecode": "0x",
"linkReferences": {},
"deployedLinkReferences": {}
};
// src/utils.ts
var sha3 = __toESM(require("js-sha3"));
var sha3_2562 = sha3.sha3_256;
var isValidAptosType = (str) => /^(0x)?[0-9a-fA-F]+::\w+::\w+$/.test(str);
function nativeAddressToHexString(address, wChainId) {
if (wChainId === chains.solana || wChainId === chains.fogo) {
return (0, import_ethers.zeroPadValue)(new import_web3.PublicKey(address).toBytes(), 32);
} else if (wChainId === chains.ethereum || wChainId === chains.bsc || wChainId === chains.polygon || wChainId === chains.avalanche || wChainId === chains.arbitrum || wChainId === chains.optimism || wChainId === chains.base || wChainId === chains.unichain || wChainId === chains.linea || wChainId === chains.sonic || wChainId === chains.hyperevm || wChainId === chains.monad) {
return (0, import_ethers.zeroPadValue)(address, 32);
} else if (wChainId === chains.aptos && isValidAptosType(address)) {
return `0x${sha3_2562(address)}`;
} else if (wChainId === chains.sui || wChainId === chains.ton) {
let addressStr = address.startsWith("0x") ? address.substring(2) : address;
if (import_buffer.Buffer.from(addressStr, "hex").length !== 32) {
throw new Error(`Invalid address: ` + address);
}
return (0, import_ethers.zeroPadValue)(address, 32);
} else {
console.log(`Unsupported chain id: ${wChainId}`, address);
throw new Error("Unsupported token chain");
}
}
function hexToUint8Array(input) {
return new Uint8Array(
import_buffer.Buffer.from(
input.startsWith("0x") ? input.substring(2) : input,
"hex"
)
);
}
function getAssociatedTokenAddress(mint, owner, allowOwnerOffCurve = false, programId = new import_web3.PublicKey(addresses_default.TOKEN_PROGRAM_ID), associatedTokenProgramId = new import_web3.PublicKey(addresses_default.ASSOCIATED_TOKEN_PROGRAM_ID)) {
if (!allowOwnerOffCurve && !import_web3.PublicKey.isOnCurve(owner.toBuffer())) {
throw new Error("TokenOwnerOffCurveError");
}
const [address] = import_web3.PublicKey.findProgramAddressSync(
[owner.toBuffer(), programId.toBuffer(), mint.toBuffer()],
associatedTokenProgramId
);
return address;
}
function isValidNumericInput(value) {
return (typeof value === "string" || typeof value === "number") && value !== "" && value !== null && !isNaN(Number(value)) && Number.isFinite(Number(value));
}
function getAmountOfFractionalAmount(amount, decimals) {
if (amount === null || amount === void 0) {
throw new Error("getAmountOfFractionalAmount: Amount is null or undefined");
}
if (typeof amount !== "string" && typeof amount !== "number") {
throw new Error("getAmountOfFractionalAmount: Amount is not a string or number");
}
if (typeof amount === "string" && amount.length === 0) {
throw new Error("getAmountOfFractionalAmount: Amount is empty");
}
if (!Number.isFinite(Number(amount))) {
throw new Error("getAmountOfFractionalAmount: Amount is not a number");
}
if (!isValidNumericInput(decimals)) {
throw new Error("getAmountOfFractionalAmount: decimals is not a number");
}
const cutFactor = Math.min(8, Number(decimals));
const numStr = Number(amount).toFixed(cutFactor + 1);
const reg = new RegExp(`^-?\\d+(?:\\.\\d{0,${cutFactor}})?`);
const matchResult = numStr.match(reg);
if (!matchResult) {
throw new Error("getAmountOfFractionalAmount: fixedAmount is null");
}
const fixedAmount = matchResult[0];
return (0, import_ethers.parseUnits)(fixedAmount, Number(decimals));
}
function getDisplayAmount(inputAmount, decimals) {
return Number((0, import_ethers.formatUnits)(inputAmount, decimals));
}
var chains = {
solana: 1,
ethereum: 2,
bsc: 4,
polygon: 5,
avalanche: 6,
arbitrum: 23,
optimism: 24,
base: 30,
aptos: 22,
sui: 21,
ton: 13,
unichain: 44,
linea: 38,
hypercore: 65e3,
sonic: 52,
hyperevm: 47,
fogo: 51,
monad: 48
};
function getWormholeChainIdByName(chain) {
const result = chains[chain];
if (!result) {
throw new Error(`Chain Id not found for chain: ${chain}`);
}
return result;
}
var evmChainIdMap = {
[1]: 2,
[56]: 4,
[137]: 5,
[43114]: 6,
[42161]: 23,
[10]: 24,
[8453]: 30,
[130]: 44,
[59144]: 38,
[146]: 52,
[999]: 47,
[143]: 48
};
function getEvmChainIdByName(chain) {
const wormholeChainId = chains[chain];
const evmIds = Object.keys(evmChainIdMap);
for (const evmId of evmIds) {
if (evmChainIdMap[evmId] === wormholeChainId) {
return Number(evmId);
}
}
throw new Error(`Unsupported chain: ${chain}`);
}
function getWormholeChainIdById(chainId) {
return evmChainIdMap[chainId];
}
var sdkVersion = [13, 0, 0];
function getSdkVersion() {
return sdkVersion.join("_");
}
function checkSdkVersionSupport(minimumVersion) {
if (sdkVersion[0] < minimumVersion[0]) {
return false;
}
if (sdkVersion[0] > minimumVersion[0]) {
return true;
}
if (sdkVersion[1] < minimumVersion[1]) {
return false;
}
if (sdkVersion[1] > minimumVersion[1]) {
return true;
}
if (sdkVersion[2] >= minimumVersion[2]) {
return true;
}
return false;
}
function getGasDecimal(chain) {
if (chain === "solana" || chain === "sui" || chain === "ton") {
return 9;
}
return 18;
}
function getGasDecimalsInSolana(chain) {
if (chain === "solana") {
return 9;
}
return 8;
}
var MAX_U64 = BigInt(2) ** BigInt(64) - BigInt(1);
function getSafeU64Blob(value) {
if (value < BigInt(0) || value > MAX_U64) {
throw new Error(`Invalid u64: ${value}`);
}
const buf = import_buffer.Buffer.alloc(8);
buf.writeBigUInt64LE(value);
return buf;
}
var ZeroPermit = {
value: BigInt(0),
deadline: 0,
v: 0,
r: `0x${import_web3.SystemProgram.programId.toBuffer().toString("hex")}`,
s: `0x${import_web3.SystemProgram.programId.toBuffer().toString("hex")}`
};
function wait(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, time);
});
}
function getQuoteSuitableReferrerAddress(quote, referrerAddresses) {
if (!quote || !referrerAddresses) {
return null;
}
if (quote.type === "WH") {
return referrerAddresses?.solana || null;
}
if (quote.type === "MCTP") {
if (quote.toChain === "solana") {
return referrerAddresses?.solana || null;
}
if (quote.toChain === "sui") {
return referrerAddresses?.sui || null;
}
return referrerAddresses?.evm || null;
}
if (quote.type === "SWIFT") {
if (quote.swiftVersion === "V2") {
if (quote.fromChain === "solana" || quote.fromChain === "fogo") {
return referrerAddresses?.solana || null;
}
if (quote.fromChain === "sui") {
return referrerAddresses?.sui || null;
}
return referrerAddresses?.evm || null;
} else {
if (quote.toChain === "solana") {
return referrerAddresses?.solana || null;
}
if (quote.toChain === "sui") {
throw new Error("Swift V1 does not support SUI");
}
return referrerAddresses?.evm || null;
}
}
if (quote.type === "FAST_MCTP") {
if (quote.toChain === "solana") {
return referrerAddresses?.solana || null;
}
if (quote.toChain !== "sui") {
return referrerAddresses?.evm || null;
}
}
if (quote.type === "MONO_CHAIN") {
if (quote.fromChain === "solana") {
return referrerAddresses?.solana || null;
} else if (quote.fromChain === "sui") {
return referrerAddresses?.sui || null;
}
return referrerAddresses?.evm || null;
}
return null;
}
var MCTP_PAYLOAD_TYPE_DEFAULT = 1;
var MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD = 2;
var MCTP_INIT_ORDER_PAYLOAD_ID = 1;
var FAST_MCTP_PAYLOAD_TYPE_DEFAULT = 1;
var FAST_MCTP_PAYLOAD_TYPE_CUSTOM_PAYLOAD = 2;
var FAST_MCTP_PAYLOAD_TYPE_ORDER = 3;
var SWIFT_PAYLOAD_TYPE_DEFAULT = 1;
var SWIFT_PAYLOAD_TYPE_CUSTOM_PAYLOAD = 2;
async function getPermitDomain(token, provider) {
const contract = new import_ethers.ethers.Contract(
token.contract,
ERC20Artifact_default.abi,
provider
);
let domainSeparator;
let name;
try {
let [_domainSeparator, _name] = await Promise.all([
contract.DOMAIN_SEPARATOR(),
contract.name()
]);
domainSeparator = _domainSeparator;
name = _name;
} catch (err) {
throw {
mayanError: {
permitIssue: true
}
};
}
const domain = {
name,
version: "1",
chainId: token.chainId,
verifyingContract: token.contract
};
for (let i = 1; i < 11; i++) {
domain.version = String(i);
const hash = import_ethers.TypedDataEncoder.hashDomain(domain);
if (hash.toLowerCase() === domainSeparator.toLowerCase()) {
return domain;
}
}
const salt = import_ethers.ethers.zeroPadValue(import_ethers.ethers.toBeHex(token.chainId), 32);
const LEGACY_DOMAIN_TYPEHASH = import_ethers.ethers.keccak256(
import_ethers.ethers.toUtf8Bytes(
"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
)
);
if (token.realOriginChainId && token.realOriginContractAddress && token.wChainId !== token.realOriginChainId) {
const whChainId2Bytes = new Uint8Array(2);
whChainId2Bytes[0] = token.realOriginChainId >> 8 & 255;
whChainId2Bytes[1] = token.realOriginChainId & 255;
const packed = new Uint8Array(2 + 32);
packed.set(whChainId2Bytes, 0);
packed.set(
import_ethers.ethers.getBytes(import_ethers.ethers.zeroPadValue(token.realOriginContractAddress, 32)),
2
);
const salt2 = import_ethers.ethers.keccak256(packed);
const DOMAIN_TYPEHASH = import_ethers.ethers.keccak256(
import_ethers.ethers.toUtf8Bytes(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)"
)
);
for (let i = 0; i < 11; i++) {
const hash = import_ethers.ethers.keccak256(
new import_ethers.ethers.AbiCoder().encode(
["bytes32", "bytes32", "bytes32", "uint256", "address", "bytes32"],
[
DOMAIN_TYPEHASH,
import_ethers.ethers.keccak256(import_ethers.ethers.toUtf8Bytes(name)),
import_ethers.ethers.keccak256(import_ethers.ethers.toUtf8Bytes(String(i))),
token.chainId,
token.contract,
salt2
]
)
);
if (hash.toLowerCase() === domainSeparator.toLowerCase()) {
domain.version = String(i);
domain.salt = salt2;
return domain;
}
}
}
for (let i = 0; i < 11; i++) {
const hash = import_ethers.ethers.keccak256(
new import_ethers.ethers.AbiCoder().encode(
["bytes32", "bytes32", "bytes32", "address", "bytes32"],
[
LEGACY_DOMAIN_TYPEHASH,
import_ethers.ethers.keccak256(import_ethers.ethers.toUtf8Bytes(name)),
import_ethers.ethers.keccak256(import_ethers.ethers.toUtf8Bytes(String(i))),
token.contract,
salt
]
)
);
if (hash.toLowerCase() === domainSeparator.toLowerCase()) {
delete domain.chainId;
domain.version = String(i);
domain.salt = salt;
return domain;
}
}
throw {
mayanError: {
permitIssue: true
}
};
}
var PermitTypes = {
Permit: [
{
name: "owner",
type: "address"
},
{
name: "spender",
type: "address"
},
{
name: "value",
type: "uint256"
},
{
name: "nonce",
type: "uint256"
},
{
name: "deadline",
type: "uint256"
}
]
};
async function getPermitParams(token, walletAddress, spender, amount, provider, deadline) {
if (token.standard !== "erc20" && token.standard !== "hypertoken") {
throw new Error("Token is not ERC20");
}
if (!token.supportsPermit) {
throw new Error("Token does not support permit");
}
const contract = new import_ethers.ethers.Contract(token.contract, ERC20Artifact_default.abi, provider);
const [domain, nonce] = await Promise.all([getPermitDomain(token, provider), contract.nonces(walletAddress)]);
return {
domain,
types: PermitTypes,
value: {
owner: walletAddress,
spender,
nonce: String(nonce),
value: String(amount),
deadline: String(deadline)
}
};
}
async function getHyperCoreUSDCDepositPermitParams(quote, userArbitrumAddress, arbProvider) {
if (!quote.hyperCoreParams) {
throw new Error("Quote does not have hyperCoreParams");
}
if (quote.toChain !== "hypercore") {
throw new Error("Quote toChain is not hypercore");
}
if (quote.toToken.contract.toLowerCase() !== addresses_default.ARBITRUM_USDC_CONTRACT.toLowerCase()) {
throw new Error("Quote toToken is not USDC on Arbitrum");
}
const USDC_ARB_TOKEN = {
name: "USDC",
standard: "erc20",
symbol: "USDC",
mint: "CR4xnGrhsu1fWNPoX4KbTUUtqGMF3mzRLfj4S6YEs1Yo",
verified: true,
contract: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
chainId: 42161,
wChainId: 23,
decimals: 6,
logoURI: "http://assets.coingecko.com/coins/images/6319/small/usdc.png?1696506694",
coingeckoId: "usd-coin",
realOriginContractAddress: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
realOriginChainId: 23,
supportsPermit: true,
verifiedAddress: "0xaf88d065e77c8cc2239327c5edb3a432268e5831"
};
const [permitParams, isAllowed] = await Promise.all([
getPermitParams(
USDC_ARB_TOKEN,
userArbitrumAddress,
addresses_default.HC_ARBITRUM_BRIDGE,
BigInt(quote.hyperCoreParams.depositAmountUSDC64),
arbProvider,
BigInt(quote.deadline64)
),
checkHyperCoreDeposit(userArbitrumAddress, quote.toToken.contract)
]);
if (!isAllowed) {
throw new Error("Because of concurrency, deposit is not possible at the moment, please try again later");
}
return permitParams;
}
function getHyperCoreUSDCDepositCustomPayload(quote, destinationAddress, usdcPermitSignature) {
const payload = import_buffer.Buffer.alloc(109);
const destAddressBuf = import_buffer.Buffer.from(hexToUint8Array(destinationAddress));
if (destAddressBuf.length !== 20) {
throw new Error("Invalid destination address length, expected 20 bytes");
}
const permitSignatureBuf = import_buffer.Buffer.from(
hexToUint8Array(usdcPermitSignature)
);
if (permitSignatureBuf.length !== 65) {
throw new Error("Invalid USDC permit signature length, expected 65 bytes");
}
if (!quote.redeemRelayerFee64 || !quote.hyperCoreParams) {
throw new Error("Invalid quote for HyperCore USDC deposit custom payload");
}
payload.writeBigUInt64BE(BigInt(quote.redeemRelayerFee64), 0);
payload.set(destAddressBuf, 8);
payload.writeBigUInt64BE(BigInt(quote.hyperCoreParams.depositAmountUSDC64), 28);
payload.writeBigUInt64BE(BigInt(quote.deadline64), 36);
payload.set(permitSignatureBuf, 44);
return payload;
}
function getSwiftToTokenHexString(quote) {
if (quote.toChain === "sui") {
if (!quote.toToken.verifiedAddress) {
throw new Error("To token verified address is required for SUI");
}
return nativeAddressToHexString(quote.toToken.verifiedAddress, getWormholeChainIdByName("sui"));
} else if (quote.toChain === "ton") {
if (quote.toToken.contract === import_ethers.ZeroAddress) {
return nativeAddressToHexString(import_web3.SystemProgram.programId.toString(), getWormholeChainIdByName("solana"));
} else {
if (!quote.toToken.verifiedAddress) {
throw new Error("To token verified address is required for Ton chain");
}
return quote.toToken.verifiedAddress;
}
} else {
if (quote.toToken.contract === import_ethers.ZeroAddress) {
return nativeAddressToHexString(import_web3.SystemProgram.programId.toString(), getWormholeChainIdByName("solana"));
} else {
return nativeAddressToHexString(quote.toToken.contract, getWormholeChainIdByName(quote.toChain));
}
}
}
function getNormalizeFactor(toChain, quoteType) {
if (toChain === "ton") {
if (quoteType !== "SWIFT") {
throw new Error("Unsupported quote type for Tonchain destination");
}
return Infinity;
}
return 8;
}
function createSwiftRandomKey(quote) {
try {
const idBuf = import_buffer.Buffer.from(quote.quoteId.startsWith("0x") ? quote.quoteId.substring(2) : quote.quoteId, "hex");
if (idBuf.length < 32) {
const randomBuf = import_web3.Keypair.generate().publicKey.toBytes();
return import_buffer.Buffer.concat([idBuf, randomBuf.slice(0, 32 - idBuf.length)]);
}
return idBuf.subarray(0, 32);
} catch (err) {
}
return import_web3.Keypair.generate().publicKey.toBuffer();
}
// src/api.ts
function toQueryString(params) {
return Object.entries(params).filter(([_, value]) => value !== void 0 && value !== null && !Array.isArray(value)).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&");
}
async function check5xxError(res) {
if (res.status.toString().startsWith("5")) {
let error = new Error("Internal server error");
try {
const err = await res.json();
if ((err?.code || err?.statusCode) && (err?.message || err?.msg)) {
error = {
code: err?.code || err?.statusCode,
message: err?.message || err?.msg
};
}
} catch (err) {
error = new Error("Internal server error");
}
throw error;
}
}
async function fetchAllTokenList(tokenStandards) {
const query = tokenStandards ? `?standard=${tokenStandards.join(",")}` : "";
const res = await (0, import_cross_fetch.default)(`${addresses_default.PRICE_URL}/tokens${query}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
if (res.status === 200) {
const result = await res.json();
return result;
}
throw new Error("Cannot fetch Mayan tokens!");
}
async function fetchTokenList(chain, nonPortal = false, tokenStandards) {
const queryParams = {
chain,
nonPortal,
standard: tokenStandards ? tokenStandards?.join(",") : void 0
};
const res = await (0, import_cross_fetch.default)(`${addresses_default.PRICE_URL}/tokens?${toQueryString(queryParams)}`);
await check5xxError(res);
if (res.status === 200) {
const result = await res.json();
return result[chain];
}
throw new Error("Cannot fetch Mayan tokens!");
}
function generateFetchQuoteUrl(params, quoteOptions = {
wormhole: true,
swift: true,
mctp: true,
shuttle: true,
gasless: false,
onlyDirect: false,
fastMctp: true,
fullList: false,
payload: void 0,
monoChain: true
}) {
const { gasDrop, referrerBps } = params;
let slippageBps = params.slippageBps;
if (slippageBps !== "auto" && !Number.isFinite(slippageBps)) {
if (params.slippage === void 0 || params.slippage === null || !Number.isFinite(params.slippage)) {
throw new Error("Either slippageBps or slippage must be provided");
}
slippageBps = params.slippage * 100;
}
const _quoteOptions = {
wormhole: quoteOptions.wormhole !== false,
// default to true
swift: quoteOptions.swift !== false,
// default to true
mctp: quoteOptions.mctp !== false,
// default to true
shuttle: quoteOptions.shuttle === true,
// default to false
fastMctp: quoteOptions.fastMctp !== false,
// default to true
gasless: quoteOptions.gasless === true,
// default to false
onlyDirect: quoteOptions.onlyDirect === true,
// default to false
fullList: quoteOptions.fullList === true,
// default to false
payload: typeof quoteOptions.payload === "string" ? quoteOptions.payload : void 0,
monoChain: quoteOptions.monoChain !== false
// default to true
};
const queryParams = {
..._quoteOptions,
solanaProgram: addresses_default.MAYAN_PROGRAM_ID,
forwarderAddress: addresses_default.MAYAN_FORWARDER_CONTRACT,
amountIn: !params.amountIn64 && Number.isFinite(params.amount) ? params.amount : void 0,
amountIn64: params.amountIn64,
fromToken: params.fromToken,
fromChain: params.fromChain,
toToken: params.toToken,
toChain: params.toChain,
slippageBps,
referrer: params.referrer,
referrerBps: Number.isFinite(referrerBps) ? referrerBps : void 0,
gasDrop: Number.isFinite(gasDrop) ? gasDrop : void 0,
destinationAddress: params.destinationAddress ?? void 0,
sdkVersion: getSdkVersion()
};
const baseUrl = `${addresses_default.PRICE_URL}/quote?`;
const queryString = toQueryString(queryParams);
return baseUrl + queryString;
}
async function fetchQuote(params, quoteOptions = {
swift: true,
mctp: true,
gasless: false,
onlyDirect: false
}) {
const url = generateFetchQuoteUrl(params, quoteOptions);
const res = await (0, import_cross_fetch.default)(url, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw {
code: result?.code || 0,
message: result?.msg || result?.message || "Route not found",
data: result?.data
};
}
if (!checkSdkVersionSupport(result.minimumSdkVersion)) {
throw {
code: 9999,
message: "Swap SDK is outdated!"
};
}
return result.quotes;
}
async function getCurrentChainTime(chain) {
const res = await (0, import_cross_fetch.default)(`${addresses_default.PRICE_URL}/clock/${chain}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result.clock;
}
async function getSuggestedRelayer() {
const res = await (0, import_cross_fetch.default)(`${addresses_default.RELAYER_URL}/active-relayers?solanaProgram=${addresses_default.MAYAN_PROGRAM_ID}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result.suggested;
}
async function getSwapSolana(params) {
const query = toQueryString({
...params,
sdkVersion: getSdkVersion()
});
const res = await (0, import_cross_fetch.default)(`${addresses_default.PRICE_URL}/get-swap/solana?${query}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result;
}
async function getSwapSui(params) {
const requestBody = JSON.stringify({
...params,
sdkVersion: getSdkVersion()
});
const requestUrl = `${addresses_default.PRICE_URL}/get-swap/sui`;
const res = await (0, import_cross_fetch.default)(requestUrl, {
method: "POST",
redirect: "follow",
body: requestBody,
headers: {
"Content-Type": "application/json"
}
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result;
}
async function getSwapEvm(params) {
const query = toQueryString({
...params,
sdkVersion: getSdkVersion()
});
const res = await (0, import_cross_fetch.default)(`${addresses_default.PRICE_URL}/get-swap/evm?${query}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result;
}
async function submitSwiftEvmSwap(params, signature) {
const res = await (0, import_cross_fetch.default)(`${addresses_default.EXPLORER_URL}/submit/evm`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
...params,
signature
}, (_key, value) => {
if (typeof value === "bigint") {
return value.toString();
}
return value;
})
});
await check5xxError(res);
}
async function submitSwiftSolanaSwap(signedTx, chainName) {
const res = await (0, import_cross_fetch.default)(`${addresses_default.EXPLORER_URL}/submit/v2/svm`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
signedTx,
chainName
})
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result;
}
async function checkHyperCoreDeposit(destinationAddress, tokenAddress) {
const query = toQueryString({
destWallet: destinationAddress,
destToken: tokenAddress,
sdkVersion: getSdkVersion()
});
const res = await (0, import_cross_fetch.default)(`${addresses_default.EXPLORER_URL}/hypercore/is-allowed?${query}`, {
method: "GET",
redirect: "follow"
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result.allowed === true;
}
async function getEstimateGasEvm(params) {
const res = await (0, import_cross_fetch.default)(`${addresses_default.GAS_ESTIMATE_URL}/evm`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
...params,
sdkVersion: getSdkVersion()
})
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return {
estimatedGas: BigInt(result.estimatedGas),
gasPrice: BigInt(result.gasPrice)
};
}
async function getSvmDurableNonce(chainName, swapperAddress) {
const res = await (0, import_cross_fetch.default)(`${addresses_default.SWIFT_RELAYER_URL}/nonces/assign`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
chainName,
swapperAddress,
sdkVersion: getSdkVersion()
})
});
await check5xxError(res);
const result = await res.json();
if (res.status !== 200 && res.status !== 201) {
throw result;
}
return result;
}
// src/evm/evmSwap.ts
var import_ethers10 = require("ethers");
var import_web315 = require("@solana/web3.js");
// src/evm/MayanSwapArtifact.ts
var MayanSwapArtifact_default = {
"_format": "hh-sol-artifact-1",
"contractName": "MayanSwap",
"sourceName": "src/MayanSwap.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_tokenBridge",
"type": "address"
},
{
"internalType": "address",
"name": "_weth",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "emitterChainId",
"type": "uint16"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "emitterAddress",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint64",
"name": "sequence",
"type": "uint64"
}
],
"name": "Redeemed",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "newGuardian",
"type": "address"
}
],
"name": "changeGuardian",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "claimGuardian",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint8",
"name": "payloadId",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "tokenAddr",
"type": "byte