@lifi/sdk 3.0.0-alpha.9 → 3.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +40 -98
- package/src/_cjs/config.js +90 -0
- package/src/_cjs/config.js.map +1 -0
- package/{dist/cjs → src/_cjs}/constants.js +3 -5
- package/src/_cjs/constants.js.map +1 -0
- package/src/_cjs/core/BaseStepExecutor.js +55 -0
- package/src/_cjs/core/BaseStepExecutor.js.map +1 -0
- package/src/_cjs/core/EVM/EVM.js +43 -0
- package/src/_cjs/core/EVM/EVM.js.map +1 -0
- package/src/_cjs/core/EVM/EVMStepExecutor.js +304 -0
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -0
- package/{dist/cjs/types → src/_cjs/core/EVM}/abi.js +1 -0
- package/src/_cjs/core/EVM/abi.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core/EVM}/checkAllowance.js +19 -12
- package/src/_cjs/core/EVM/checkAllowance.js.map +1 -0
- package/{dist/cjs/allowance → src/_cjs/core/EVM}/getAllowance.js +13 -17
- package/src/_cjs/core/EVM/getAllowance.js.map +1 -0
- package/src/_cjs/core/EVM/getENSAddress.js +20 -0
- package/src/_cjs/core/EVM/getENSAddress.js.map +1 -0
- package/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
- package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -8
- package/src/_cjs/core/EVM/multisig.js.map +1 -0
- package/src/_cjs/core/EVM/publicClient.js +43 -0
- package/src/_cjs/core/EVM/publicClient.js.map +1 -0
- package/{dist/cjs/allowance → src/_cjs/core/EVM}/setAllowance.js +11 -12
- package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
- package/src/_cjs/core/EVM/switchChain.js +38 -0
- package/src/_cjs/core/EVM/switchChain.js.map +1 -0
- package/src/_cjs/core/EVM/types.js +9 -0
- package/src/_cjs/core/EVM/types.js.map +1 -0
- package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +13 -3
- package/src/_cjs/core/EVM/utils.js.map +1 -0
- package/src/_cjs/core/Solana/KeypairWalletAdapter.js +88 -0
- package/src/_cjs/core/Solana/KeypairWalletAdapter.js.map +1 -0
- package/src/_cjs/core/Solana/Solana.js +38 -0
- package/src/_cjs/core/Solana/Solana.js.map +1 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +200 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_cjs/core/Solana/connection.js +19 -0
- package/src/_cjs/core/Solana/connection.js.map +1 -0
- package/src/_cjs/core/Solana/getSNSAddress.js +26 -0
- package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -0
- package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
- package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
- package/src/_cjs/core/Solana/isAddress.js +15 -0
- package/src/_cjs/core/Solana/isAddress.js.map +1 -0
- package/src/_cjs/core/Solana/types.js +10 -0
- package/src/_cjs/core/Solana/types.js.map +1 -0
- package/src/_cjs/core/StatusManager.js +167 -0
- package/src/_cjs/core/StatusManager.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +6 -6
- package/src/_cjs/core/checkBalance.js.map +1 -0
- package/src/_cjs/core/execution.js +138 -0
- package/src/_cjs/core/execution.js.map +1 -0
- package/src/_cjs/core/executionState.js +29 -0
- package/src/_cjs/core/executionState.js.map +1 -0
- package/src/_cjs/core/index.js +7 -0
- package/src/_cjs/core/index.js.map +1 -0
- package/src/_cjs/core/prepareRestart.js +23 -0
- package/src/_cjs/core/prepareRestart.js.map +1 -0
- package/src/_cjs/core/provider.js +15 -0
- package/src/_cjs/core/provider.js.map +1 -0
- package/src/_cjs/core/rpc.js +18 -0
- package/src/_cjs/core/rpc.js.map +1 -0
- package/src/_cjs/core/stepComparison.js +25 -0
- package/src/_cjs/core/stepComparison.js.map +1 -0
- package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
- package/src/_cjs/core/types.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/utils.js +2 -11
- package/src/_cjs/core/utils.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +13 -14
- package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_cjs/createConfig.js +34 -0
- package/src/_cjs/createConfig.js.map +1 -0
- package/src/_cjs/helpers.js +50 -0
- package/src/_cjs/helpers.js.map +1 -0
- package/src/_cjs/index.js +30 -0
- package/src/_cjs/index.js.map +1 -0
- package/src/_cjs/package.json +1 -0
- package/{dist/cjs → src/_cjs}/request.js +18 -15
- package/src/_cjs/request.js.map +1 -0
- package/src/_cjs/services/api.js +309 -0
- package/src/_cjs/services/api.js.map +1 -0
- package/src/_cjs/services/balance.js +49 -0
- package/src/_cjs/services/balance.js.map +1 -0
- package/src/_cjs/services/getNameServiceAddress.js +29 -0
- package/src/_cjs/services/getNameServiceAddress.js.map +1 -0
- package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
- package/src/_cjs/typeguards.js.map +1 -0
- package/src/_cjs/types/index.js +5 -0
- package/src/_cjs/types/index.js.map +1 -0
- package/{dist/cjs → src/_cjs}/types/internal.js +1 -0
- package/src/_cjs/types/internal.js.map +1 -0
- package/src/_cjs/utils/base64ToUint8Array.js +14 -0
- package/src/_cjs/utils/base64ToUint8Array.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/errors.js +26 -3
- package/src/_cjs/utils/errors.js.map +1 -0
- package/src/_cjs/utils/getTransactionMessage.js +31 -0
- package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
- package/src/_cjs/utils/index.js +9 -0
- package/src/_cjs/utils/index.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
- package/src/_cjs/utils/median.js.map +1 -0
- package/src/_cjs/utils/parseBackendError.js +27 -0
- package/src/_cjs/utils/parseBackendError.js.map +1 -0
- package/src/_cjs/utils/parseError.js +69 -0
- package/src/_cjs/utils/parseError.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
- package/src/_cjs/utils/utils.js.map +1 -0
- package/{dist/cjs → src/_cjs}/version.js +2 -1
- package/src/_cjs/version.js.map +1 -0
- package/src/_esm/config.js +87 -0
- package/src/_esm/config.js.map +1 -0
- package/{dist → src/_esm}/constants.js +2 -4
- package/src/_esm/constants.js.map +1 -0
- package/src/_esm/core/BaseStepExecutor.js +52 -0
- package/src/_esm/core/BaseStepExecutor.js.map +1 -0
- package/src/_esm/core/EVM/EVM.js +39 -0
- package/src/_esm/core/EVM/EVM.js.map +1 -0
- package/src/_esm/core/EVM/EVMStepExecutor.js +329 -0
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
- package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
- package/src/_esm/core/EVM/abi.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +14 -5
- package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
- package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
- package/src/_esm/core/EVM/getAllowance.js.map +1 -0
- package/src/_esm/core/EVM/getENSAddress.js +17 -0
- package/src/_esm/core/EVM/getENSAddress.js.map +1 -0
- package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
- package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
- package/src/_esm/core/EVM/multisig.js.map +1 -0
- package/src/_esm/core/EVM/publicClient.js +46 -0
- package/src/_esm/core/EVM/publicClient.js.map +1 -0
- package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +23 -4
- package/src/_esm/core/EVM/setAllowance.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/switchChain.js +6 -4
- package/src/_esm/core/EVM/switchChain.js.map +1 -0
- package/src/_esm/core/EVM/types.js +6 -0
- package/src/_esm/core/EVM/types.js.map +1 -0
- package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +12 -1
- package/src/_esm/core/EVM/utils.js.map +1 -0
- package/src/_esm/core/Solana/KeypairWalletAdapter.js +92 -0
- package/src/_esm/core/Solana/KeypairWalletAdapter.js.map +1 -0
- package/src/_esm/core/Solana/Solana.js +34 -0
- package/src/_esm/core/Solana/Solana.js.map +1 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js +214 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_esm/core/Solana/connection.js +20 -0
- package/src/_esm/core/Solana/connection.js.map +1 -0
- package/src/_esm/core/Solana/getSNSAddress.js +26 -0
- package/src/_esm/core/Solana/getSNSAddress.js.map +1 -0
- package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
- package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
- package/src/_esm/core/Solana/isAddress.js +11 -0
- package/src/_esm/core/Solana/isAddress.js.map +1 -0
- package/src/_esm/core/Solana/types.js +7 -0
- package/src/_esm/core/Solana/types.js.map +1 -0
- package/src/_esm/core/StatusManager.js +203 -0
- package/src/_esm/core/StatusManager.js.map +1 -0
- package/{dist/execution → src/_esm/core}/checkBalance.js +4 -3
- package/src/_esm/core/checkBalance.js.map +1 -0
- package/src/_esm/core/execution.js +176 -0
- package/src/_esm/core/execution.js.map +1 -0
- package/src/_esm/core/executionState.js +26 -0
- package/src/_esm/core/executionState.js.map +1 -0
- package/src/_esm/core/index.js +4 -0
- package/src/_esm/core/index.js.map +1 -0
- package/src/_esm/core/prepareRestart.js +64 -0
- package/src/_esm/core/prepareRestart.js.map +1 -0
- package/src/_esm/core/provider.js +11 -0
- package/src/_esm/core/provider.js.map +1 -0
- package/src/_esm/core/rpc.js +14 -0
- package/src/_esm/core/rpc.js.map +1 -0
- package/{dist/execution → src/_esm/core}/stepComparison.js +6 -4
- package/src/_esm/core/stepComparison.js.map +1 -0
- package/src/_esm/core/types.js +2 -0
- package/src/_esm/core/types.js.map +1 -0
- package/{dist/execution → src/_esm/core}/utils.js +4 -3
- package/src/_esm/core/utils.js.map +1 -0
- package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +11 -9
- package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_esm/createConfig.js +30 -0
- package/src/_esm/createConfig.js.map +1 -0
- package/{dist → src/_esm}/helpers.js +6 -30
- package/src/_esm/helpers.js.map +1 -0
- package/src/_esm/index.js +17 -0
- package/src/_esm/index.js.map +1 -0
- package/src/_esm/package.json +1 -0
- package/{dist → src/_esm}/request.js +14 -10
- package/src/_esm/request.js.map +1 -0
- package/src/_esm/services/api.js +378 -0
- package/src/_esm/services/api.js.map +1 -0
- package/src/_esm/services/balance.js +65 -0
- package/src/_esm/services/balance.js.map +1 -0
- package/src/_esm/services/getNameServiceAddress.js +25 -0
- package/src/_esm/services/getNameServiceAddress.js.map +1 -0
- package/{dist → src/_esm}/typeguards.js +1 -0
- package/src/_esm/typeguards.js.map +1 -0
- package/src/_esm/types/index.js +2 -0
- package/src/_esm/types/index.js.map +1 -0
- package/src/_esm/types/internal.js +2 -0
- package/src/_esm/types/internal.js.map +1 -0
- package/src/_esm/utils/base64ToUint8Array.js +10 -0
- package/src/_esm/utils/base64ToUint8Array.js.map +1 -0
- package/{dist → src/_esm}/utils/errors.js +26 -0
- package/src/_esm/utils/errors.js.map +1 -0
- package/src/_esm/utils/getTransactionMessage.js +28 -0
- package/src/_esm/utils/getTransactionMessage.js.map +1 -0
- package/src/_esm/utils/index.js +6 -0
- package/src/_esm/utils/index.js.map +1 -0
- package/{dist → src/_esm}/utils/median.js +1 -0
- package/src/_esm/utils/median.js.map +1 -0
- package/src/_esm/utils/parseBackendError.js +24 -0
- package/src/_esm/utils/parseBackendError.js.map +1 -0
- package/{dist → src/_esm}/utils/parseError.js +6 -53
- package/src/_esm/utils/parseError.js.map +1 -0
- package/{dist → src/_esm}/utils/utils.js +2 -1
- package/src/_esm/utils/utils.js.map +1 -0
- package/src/_esm/version.js +3 -0
- package/src/_esm/version.js.map +1 -0
- package/src/_types/config.d.ts +15 -0
- package/src/_types/config.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/constants.d.ts +2 -4
- package/src/_types/constants.d.ts.map +1 -0
- package/src/_types/core/BaseStepExecutor.d.ts +13 -0
- package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
- package/src/_types/core/EVM/EVM.d.ts +3 -0
- package/src/_types/core/EVM/EVM.d.ts.map +1 -0
- package/src/_types/core/EVM/EVMStepExecutor.d.ts +17 -0
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
- package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
- package/src/_types/core/EVM/abi.d.ts.map +1 -0
- package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
- package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
- package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
- package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
- package/src/_types/core/EVM/getENSAddress.d.ts +2 -0
- package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -0
- package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
- package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
- package/src/_types/core/EVM/multisig.d.ts +6 -0
- package/src/_types/core/EVM/multisig.d.ts.map +1 -0
- package/src/_types/core/EVM/publicClient.d.ts +8 -0
- package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
- package/src/_types/core/EVM/setAllowance.d.ts +25 -0
- package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
- package/{dist/execution → src/_types/core/EVM}/switchChain.d.ts +4 -4
- package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
- package/src/_types/core/EVM/types.d.ts +55 -0
- package/src/_types/core/EVM/types.d.ts.map +1 -0
- package/src/_types/core/EVM/utils.d.ts +10 -0
- package/src/_types/core/EVM/utils.d.ts.map +1 -0
- package/src/_types/core/Solana/KeypairWalletAdapter.d.ts +28 -0
- package/src/_types/core/Solana/KeypairWalletAdapter.d.ts.map +1 -0
- package/src/_types/core/Solana/Solana.d.ts +3 -0
- package/src/_types/core/Solana/Solana.d.ts.map +1 -0
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts +13 -0
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
- package/src/_types/core/Solana/connection.d.ts +8 -0
- package/src/_types/core/Solana/connection.d.ts.map +1 -0
- package/src/_types/core/Solana/getSNSAddress.d.ts +2 -0
- package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -0
- package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
- package/src/_types/core/Solana/isAddress.d.ts +2 -0
- package/src/_types/core/Solana/isAddress.d.ts.map +1 -0
- package/src/_types/core/Solana/types.d.ts +11 -0
- package/src/_types/core/Solana/types.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +14 -28
- package/src/_types/core/StatusManager.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core}/checkBalance.d.ts +1 -0
- package/src/_types/core/checkBalance.d.ts.map +1 -0
- package/src/_types/core/execution.d.ts +42 -0
- package/src/_types/core/execution.d.ts.map +1 -0
- package/src/_types/core/executionState.d.ts +17 -0
- package/src/_types/core/executionState.d.ts.map +1 -0
- package/src/_types/core/index.d.ts +4 -0
- package/src/_types/core/index.d.ts.map +1 -0
- package/src/_types/core/prepareRestart.d.ts +3 -0
- package/src/_types/core/prepareRestart.d.ts.map +1 -0
- package/src/_types/core/provider.d.ts +3 -0
- package/src/_types/core/provider.d.ts.map +1 -0
- package/src/_types/core/rpc.d.ts +4 -0
- package/src/_types/core/rpc.d.ts.map +1 -0
- package/{dist/execution → src/_types/core}/stepComparison.d.ts +5 -3
- package/src/_types/core/stepComparison.d.ts.map +1 -0
- package/src/_types/core/types.d.ts +81 -0
- package/src/_types/core/types.d.ts.map +1 -0
- package/{dist/execution → src/_types/core}/utils.d.ts +2 -1
- package/src/_types/core/utils.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core}/waitForReceivingTransaction.d.ts +2 -1
- package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
- package/src/_types/createConfig.d.ts +4 -0
- package/src/_types/createConfig.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/helpers.d.ts +3 -9
- package/src/_types/helpers.d.ts.map +1 -0
- package/src/_types/index.d.ts +18 -0
- package/src/_types/index.d.ts.map +1 -0
- package/{dist → src/_types}/request.d.ts +1 -0
- package/src/_types/request.d.ts.map +1 -0
- package/src/_types/services/api.d.ts +89 -0
- package/src/_types/services/api.d.ts.map +1 -0
- package/src/_types/services/balance.d.ts +30 -0
- package/src/_types/services/balance.d.ts.map +1 -0
- package/src/_types/services/getNameServiceAddress.d.ts +3 -0
- package/src/_types/services/getNameServiceAddress.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/typeguards.d.ts +1 -0
- package/src/_types/typeguards.d.ts.map +1 -0
- package/src/_types/types/index.d.ts +2 -0
- package/src/_types/types/index.d.ts.map +1 -0
- package/{dist → src/_types}/types/internal.d.ts +14 -15
- package/src/_types/types/internal.d.ts.map +1 -0
- package/src/_types/utils/base64ToUint8Array.d.ts +2 -0
- package/src/_types/utils/base64ToUint8Array.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/utils/errors.d.ts +3 -1
- package/src/_types/utils/errors.d.ts.map +1 -0
- package/src/_types/utils/getTransactionMessage.d.ts +4 -0
- package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
- package/src/_types/utils/index.d.ts +6 -0
- package/src/_types/utils/index.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
- package/src/_types/utils/median.d.ts.map +1 -0
- package/src/_types/utils/parseBackendError.d.ts +3 -0
- package/src/_types/utils/parseBackendError.d.ts.map +1 -0
- package/{dist → src/_types}/utils/parseError.d.ts +2 -4
- package/src/_types/utils/parseError.d.ts.map +1 -0
- package/{dist → src/_types}/utils/utils.d.ts +1 -0
- package/src/_types/utils/utils.d.ts.map +1 -0
- package/src/_types/version.d.ts +3 -0
- package/src/_types/version.d.ts.map +1 -0
- package/src/config.ts +91 -0
- package/src/constants.ts +4 -0
- package/src/core/BaseStepExecutor.ts +40 -0
- package/src/core/EVM/EVM.ts +47 -0
- package/src/core/EVM/EVMStepExecutor.ts +500 -0
- package/src/core/EVM/abi.ts +47 -0
- package/src/core/EVM/checkAllowance.ts +168 -0
- package/src/core/EVM/getAllowance.ts +144 -0
- package/src/core/EVM/getENSAddress.ts +18 -0
- package/src/core/EVM/getEVMBalance.ts +118 -0
- package/src/core/EVM/multisig.ts +53 -0
- package/src/core/EVM/publicClient.ts +54 -0
- package/src/core/EVM/setAllowance.ts +143 -0
- package/src/core/EVM/switchChain.ts +77 -0
- package/src/core/EVM/types.ts +73 -0
- package/src/core/EVM/utils.ts +48 -0
- package/src/core/Solana/KeypairWalletAdapter.ts +100 -0
- package/src/core/Solana/Solana.ts +41 -0
- package/src/core/Solana/SolanaStepExecutor.ts +331 -0
- package/src/core/Solana/connection.ts +20 -0
- package/src/core/Solana/getSNSAddress.ts +33 -0
- package/src/core/Solana/getSolanaBalance.ts +72 -0
- package/src/core/Solana/isAddress.ts +10 -0
- package/src/core/Solana/types.ts +17 -0
- package/src/core/StatusManager.ts +231 -0
- package/src/core/checkBalance.ts +48 -0
- package/src/core/execution.ts +214 -0
- package/src/core/executionState.ts +44 -0
- package/src/core/index.ts +3 -0
- package/src/core/prepareRestart.ts +82 -0
- package/src/core/provider.ts +12 -0
- package/src/core/rpc.ts +15 -0
- package/src/core/stepComparison.ts +51 -0
- package/src/core/types.ts +118 -0
- package/src/core/utils.ts +105 -0
- package/src/core/waitForReceivingTransaction.ts +74 -0
- package/src/createConfig.ts +35 -0
- package/src/helpers.ts +69 -0
- package/src/index.ts +24 -0
- package/src/request.ts +79 -0
- package/src/services/api.ts +509 -0
- package/src/services/balance.ts +93 -0
- package/src/services/getNameServiceAddress.ts +30 -0
- package/src/typeguards.ts +89 -0
- package/src/types/index.ts +1 -0
- package/src/types/internal.ts +62 -0
- package/src/utils/base64ToUint8Array.ts +9 -0
- package/src/utils/errors.ts +232 -0
- package/src/utils/getTransactionMessage.ts +46 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/median.ts +11 -0
- package/src/utils/parseBackendError.ts +50 -0
- package/src/utils/parseError.ts +210 -0
- package/src/utils/utils.ts +48 -0
- package/src/version.ts +2 -0
- package/dist/LiFi.d.ts +0 -178
- package/dist/LiFi.js +0 -253
- package/dist/allowance/getAllowance.d.ts +0 -6
- package/dist/allowance/index.d.ts +0 -3
- package/dist/allowance/index.js +0 -3
- package/dist/allowance/setAllowance.d.ts +0 -6
- package/dist/allowance/types.d.ts +0 -27
- package/dist/allowance/types.js +0 -1
- package/dist/balance/getBalance.d.ts +0 -2
- package/dist/balance/getTokenBalance.d.ts +0 -8
- package/dist/balance/getTokenBalance.js +0 -27
- package/dist/balance/index.d.ts +0 -2
- package/dist/balance/index.js +0 -2
- package/dist/cjs/LiFi.d.ts +0 -178
- package/dist/cjs/LiFi.js +0 -283
- package/dist/cjs/allowance/index.d.ts +0 -3
- package/dist/cjs/allowance/index.js +0 -19
- package/dist/cjs/allowance/setAllowance.d.ts +0 -6
- package/dist/cjs/allowance/types.d.ts +0 -27
- package/dist/cjs/balance/getBalance.d.ts +0 -2
- package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
- package/dist/cjs/balance/getTokenBalance.js +0 -33
- package/dist/cjs/balance/index.d.ts +0 -2
- package/dist/cjs/balance/index.js +0 -18
- package/dist/cjs/connectors.d.ts +0 -8
- package/dist/cjs/connectors.js +0 -72
- package/dist/cjs/execution/BaseStepExecutor.d.ts +0 -12
- package/dist/cjs/execution/BaseStepExecutor.js +0 -27
- package/dist/cjs/execution/EVMStepExecutor.d.ts +0 -13
- package/dist/cjs/execution/EVMStepExecutor.js +0 -292
- package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -60
- package/dist/cjs/execution/RouteExecutionManager.js +0 -204
- package/dist/cjs/execution/StatusManager.js +0 -171
- package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
- package/dist/cjs/execution/StepExecutionManager.js +0 -272
- package/dist/cjs/execution/checkAllowance.d.ts +0 -5
- package/dist/cjs/execution/index.d.ts +0 -2
- package/dist/cjs/execution/index.js +0 -18
- package/dist/cjs/execution/multisig.d.ts +0 -4
- package/dist/cjs/execution/prepareRestart.d.ts +0 -2
- package/dist/cjs/execution/prepareRestart.js +0 -65
- package/dist/cjs/execution/stepComparison.d.ts +0 -15
- package/dist/cjs/execution/stepComparison.js +0 -37
- package/dist/cjs/execution/switchChain.d.ts +0 -22
- package/dist/cjs/execution/switchChain.js +0 -55
- package/dist/cjs/execution/types.d.ts +0 -82
- package/dist/cjs/execution/types.js +0 -2
- package/dist/cjs/execution/utils.d.ts +0 -12
- package/dist/cjs/helpers.js +0 -84
- package/dist/cjs/index.d.ts +0 -9
- package/dist/cjs/index.js +0 -30
- package/dist/cjs/providers/EVM.d.ts +0 -10
- package/dist/cjs/providers/EVM.js +0 -34
- package/dist/cjs/providers/Solana.d.ts +0 -9
- package/dist/cjs/providers/Solana.js +0 -38
- package/dist/cjs/providers/index.d.ts +0 -1
- package/dist/cjs/providers/index.js +0 -17
- package/dist/cjs/providers/types.d.ts +0 -12
- package/dist/cjs/providers/types.js +0 -8
- package/dist/cjs/request.d.ts +0 -9
- package/dist/cjs/services/ApiService.d.ts +0 -16
- package/dist/cjs/services/ApiService.js +0 -323
- package/dist/cjs/services/ChainsService.d.ts +0 -11
- package/dist/cjs/services/ChainsService.js +0 -40
- package/dist/cjs/services/ConfigService.d.ts +0 -26
- package/dist/cjs/services/ConfigService.js +0 -104
- package/dist/cjs/types/index.d.ts +0 -2
- package/dist/cjs/types/index.js +0 -18
- package/dist/cjs/types/internal.d.ts +0 -60
- package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
- package/dist/cjs/utils/index.d.ts +0 -5
- package/dist/cjs/utils/index.js +0 -21
- package/dist/cjs/utils/parseError.d.ts +0 -37
- package/dist/cjs/utils/parseError.js +0 -154
- package/dist/cjs/utils/utils.d.ts +0 -10
- package/dist/cjs/version.d.ts +0 -2
- package/dist/connectors.d.ts +0 -8
- package/dist/connectors.js +0 -41
- package/dist/constants.d.ts +0 -6
- package/dist/execution/BaseStepExecutor.d.ts +0 -12
- package/dist/execution/BaseStepExecutor.js +0 -23
- package/dist/execution/EVMStepExecutor.d.ts +0 -13
- package/dist/execution/EVMStepExecutor.js +0 -285
- package/dist/execution/RouteExecutionManager.d.ts +0 -60
- package/dist/execution/RouteExecutionManager.js +0 -200
- package/dist/execution/StatusManager.d.ts +0 -68
- package/dist/execution/StatusManager.js +0 -167
- package/dist/execution/StepExecutionManager.d.ts +0 -7
- package/dist/execution/StepExecutionManager.js +0 -265
- package/dist/execution/checkAllowance.d.ts +0 -5
- package/dist/execution/checkBalance.d.ts +0 -2
- package/dist/execution/index.d.ts +0 -2
- package/dist/execution/index.js +0 -2
- package/dist/execution/multisig.d.ts +0 -4
- package/dist/execution/prepareRestart.d.ts +0 -2
- package/dist/execution/prepareRestart.js +0 -61
- package/dist/execution/types.d.ts +0 -82
- package/dist/execution/types.js +0 -1
- package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
- package/dist/helpers.d.ts +0 -18
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -9
- package/dist/providers/EVM.d.ts +0 -10
- package/dist/providers/EVM.js +0 -29
- package/dist/providers/Solana.d.ts +0 -9
- package/dist/providers/Solana.js +0 -33
- package/dist/providers/index.d.ts +0 -1
- package/dist/providers/index.js +0 -1
- package/dist/providers/types.d.ts +0 -12
- package/dist/providers/types.js +0 -5
- package/dist/services/ApiService.d.ts +0 -16
- package/dist/services/ApiService.js +0 -321
- package/dist/services/ChainsService.d.ts +0 -11
- package/dist/services/ChainsService.js +0 -33
- package/dist/services/ConfigService.d.ts +0 -26
- package/dist/services/ConfigService.js +0 -100
- package/dist/typeguards.d.ts +0 -4
- package/dist/types/abi.d.ts +0 -5
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.js +0 -2
- package/dist/types/internal.js +0 -1
- package/dist/utils/errors.d.ts +0 -107
- package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -5
- package/dist/utils/median.d.ts +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.js +0 -2
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type ChainId } from '@lifi/types'
|
|
2
|
+
import type { PublicClient, Transaction } from 'viem'
|
|
3
|
+
import { config } from '../../config.js'
|
|
4
|
+
import { median } from '../../utils/median.js'
|
|
5
|
+
|
|
6
|
+
export const getMaxPriorityFeePerGas = async (
|
|
7
|
+
client: PublicClient
|
|
8
|
+
): Promise<bigint | undefined> => {
|
|
9
|
+
const block = await client.getBlock({
|
|
10
|
+
includeTransactions: true,
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const maxPriorityFeePerGasList = (block.transactions as Transaction[])
|
|
14
|
+
.filter((tx) => tx.maxPriorityFeePerGas)
|
|
15
|
+
.map((tx) => tx.maxPriorityFeePerGas) as bigint[]
|
|
16
|
+
|
|
17
|
+
if (!maxPriorityFeePerGasList.length) {
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const maxPriorityFeePerGasSum = maxPriorityFeePerGasList.reduce(
|
|
22
|
+
(acc, value) => (acc += value),
|
|
23
|
+
0n
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
const maxPriorityFeePerGasMedian = median(maxPriorityFeePerGasList) ?? 0n
|
|
27
|
+
|
|
28
|
+
const maxPriorityFeePerGasAvg =
|
|
29
|
+
maxPriorityFeePerGasSum / BigInt(maxPriorityFeePerGasList.length)
|
|
30
|
+
|
|
31
|
+
return maxPriorityFeePerGasMedian > maxPriorityFeePerGasAvg
|
|
32
|
+
? maxPriorityFeePerGasAvg
|
|
33
|
+
: maxPriorityFeePerGasMedian
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Multicall
|
|
37
|
+
export const getMulticallAddress = async (
|
|
38
|
+
chainId: ChainId
|
|
39
|
+
): Promise<string | undefined> => {
|
|
40
|
+
const chains = await config.getChains()
|
|
41
|
+
return chains.find((chain) => chain.id === chainId)?.multicallAddress
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Modified viem retryDelay exponential backoff function.
|
|
45
|
+
export const retryDelay = ({ count }: { count: number; error: Error }) =>
|
|
46
|
+
Math.min(~~(1 << count) * 200, 3000)
|
|
47
|
+
|
|
48
|
+
export const retryCount = 20
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ed25519 } from '@noble/curves/ed25519'
|
|
2
|
+
import type {
|
|
3
|
+
SignerWalletAdapter,
|
|
4
|
+
WalletName,
|
|
5
|
+
} from '@solana/wallet-adapter-base'
|
|
6
|
+
import {
|
|
7
|
+
BaseSignerWalletAdapter,
|
|
8
|
+
WalletConfigError,
|
|
9
|
+
WalletNotConnectedError,
|
|
10
|
+
WalletReadyState,
|
|
11
|
+
isVersionedTransaction,
|
|
12
|
+
} from '@solana/wallet-adapter-base'
|
|
13
|
+
import type {
|
|
14
|
+
Transaction,
|
|
15
|
+
TransactionVersion,
|
|
16
|
+
VersionedTransaction,
|
|
17
|
+
} from '@solana/web3.js'
|
|
18
|
+
import { Keypair } from '@solana/web3.js'
|
|
19
|
+
import { decode } from 'bs58'
|
|
20
|
+
|
|
21
|
+
export const KeypairWalletName =
|
|
22
|
+
'Keypair Wallet' as WalletName<'Keypair Wallet'>
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* This keypair wallet adapter is unsafe to use on the frontend and is only included to provide an easy way for applications to test
|
|
26
|
+
* Wallet Adapter without using a third-party wallet.
|
|
27
|
+
*/
|
|
28
|
+
export class KeypairWalletAdapter
|
|
29
|
+
extends BaseSignerWalletAdapter
|
|
30
|
+
implements SignerWalletAdapter
|
|
31
|
+
{
|
|
32
|
+
name = KeypairWalletName
|
|
33
|
+
url = 'https://github.com/anza-xyz/wallet-adapter'
|
|
34
|
+
icon = ''
|
|
35
|
+
supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set([
|
|
36
|
+
'legacy',
|
|
37
|
+
0,
|
|
38
|
+
])
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Storing a keypair locally like this is not safe because any application using this adapter could retrieve the
|
|
42
|
+
* secret key, and because the keypair will be lost any time the wallet is disconnected or the window is refreshed.
|
|
43
|
+
*/
|
|
44
|
+
private _keypair: Keypair | undefined
|
|
45
|
+
|
|
46
|
+
constructor(privateKey: string) {
|
|
47
|
+
if (!privateKey) {
|
|
48
|
+
throw new WalletConfigError()
|
|
49
|
+
}
|
|
50
|
+
super()
|
|
51
|
+
this._keypair = Keypair.fromSecretKey(decode(privateKey))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
get connecting() {
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get publicKey() {
|
|
59
|
+
return this._keypair?.publicKey || null
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
get readyState() {
|
|
63
|
+
return WalletReadyState.Loadable
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async connect(privateKey?: string): Promise<void> {
|
|
67
|
+
if (!privateKey) {
|
|
68
|
+
throw new WalletConfigError()
|
|
69
|
+
}
|
|
70
|
+
this._keypair = Keypair.fromSecretKey(decode(privateKey))
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async disconnect(): Promise<void> {
|
|
74
|
+
this._keypair = undefined
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async signTransaction<T extends Transaction | VersionedTransaction>(
|
|
78
|
+
transaction: T
|
|
79
|
+
): Promise<T> {
|
|
80
|
+
if (!this._keypair) {
|
|
81
|
+
throw new WalletNotConnectedError()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (isVersionedTransaction(transaction)) {
|
|
85
|
+
transaction.sign([this._keypair])
|
|
86
|
+
} else {
|
|
87
|
+
transaction.partialSign(this._keypair)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return transaction
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async signMessage(message: Uint8Array): Promise<Uint8Array> {
|
|
94
|
+
if (!this._keypair) {
|
|
95
|
+
throw new WalletNotConnectedError()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return ed25519.sign(message, this._keypair.secretKey.slice(0, 32))
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ChainType } from '@lifi/types'
|
|
2
|
+
import type { StepExecutorOptions } from '../types.js'
|
|
3
|
+
import { SolanaStepExecutor } from './SolanaStepExecutor.js'
|
|
4
|
+
import { getSNSAddress } from './getSNSAddress.js'
|
|
5
|
+
import { getSolanaBalance } from './getSolanaBalance.js'
|
|
6
|
+
import { isAddress } from './isAddress.js'
|
|
7
|
+
import type { SolanaProvider, SolanaProviderOptions } from './types.js'
|
|
8
|
+
|
|
9
|
+
export function Solana(options?: SolanaProviderOptions): SolanaProvider {
|
|
10
|
+
const _options: SolanaProviderOptions = options ?? {}
|
|
11
|
+
return {
|
|
12
|
+
get type() {
|
|
13
|
+
return ChainType.SVM
|
|
14
|
+
},
|
|
15
|
+
isAddress,
|
|
16
|
+
resolveAddress: getSNSAddress,
|
|
17
|
+
getBalance: getSolanaBalance,
|
|
18
|
+
async getStepExecutor(
|
|
19
|
+
options: StepExecutorOptions
|
|
20
|
+
): Promise<SolanaStepExecutor> {
|
|
21
|
+
if (!_options.getWalletAdapter) {
|
|
22
|
+
throw new Error(`getWalletAdapter is not provided.`)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const walletAdapter = await _options.getWalletAdapter()
|
|
26
|
+
|
|
27
|
+
const executor = new SolanaStepExecutor({
|
|
28
|
+
walletAdapter,
|
|
29
|
+
routeId: options.routeId,
|
|
30
|
+
executionOptions: {
|
|
31
|
+
...options.executionOptions,
|
|
32
|
+
},
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
return executor
|
|
36
|
+
},
|
|
37
|
+
setOptions(options: SolanaProviderOptions) {
|
|
38
|
+
Object.assign(_options, options)
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
|
|
2
|
+
import { type SignerWalletAdapter } from '@solana/wallet-adapter-base'
|
|
3
|
+
import {
|
|
4
|
+
VersionedTransaction,
|
|
5
|
+
type SendOptions,
|
|
6
|
+
type SignatureResult,
|
|
7
|
+
} from '@solana/web3.js'
|
|
8
|
+
import { config } from '../../config.js'
|
|
9
|
+
import { getStepTransaction } from '../../services/api.js'
|
|
10
|
+
import { base64ToUint8Array } from '../../utils/base64ToUint8Array.js'
|
|
11
|
+
import {
|
|
12
|
+
LiFiErrorCode,
|
|
13
|
+
TransactionError,
|
|
14
|
+
getTransactionFailedMessage,
|
|
15
|
+
parseError,
|
|
16
|
+
} from '../../utils/index.js'
|
|
17
|
+
import { BaseStepExecutor } from '../BaseStepExecutor.js'
|
|
18
|
+
import { checkBalance } from '../checkBalance.js'
|
|
19
|
+
import { stepComparison } from '../stepComparison.js'
|
|
20
|
+
import type {
|
|
21
|
+
LiFiStepExtended,
|
|
22
|
+
StepExecutorOptions,
|
|
23
|
+
TransactionParameters,
|
|
24
|
+
} from '../types.js'
|
|
25
|
+
import { getSubstatusMessage } from '../utils.js'
|
|
26
|
+
import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js'
|
|
27
|
+
import { getSolanaConnection } from './connection.js'
|
|
28
|
+
|
|
29
|
+
export interface SolanaStepExecutorOptions extends StepExecutorOptions {
|
|
30
|
+
walletAdapter: SignerWalletAdapter
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const TX_RETRY_INTERVAL = 500
|
|
34
|
+
// https://solana.com/docs/advanced/confirmation
|
|
35
|
+
const TIMEOUT_PERIOD = 60_000
|
|
36
|
+
|
|
37
|
+
export class SolanaStepExecutor extends BaseStepExecutor {
|
|
38
|
+
private walletAdapter: SignerWalletAdapter
|
|
39
|
+
|
|
40
|
+
constructor(options: SolanaStepExecutorOptions) {
|
|
41
|
+
super(options)
|
|
42
|
+
this.walletAdapter = options.walletAdapter
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
checkWalletAdapter = (step: LiFiStepExtended) => {
|
|
46
|
+
// Prevent execution of the quote by wallet different from the one which requested the quote
|
|
47
|
+
if (this.walletAdapter.publicKey!.toString() !== step.action.fromAddress) {
|
|
48
|
+
throw new TransactionError(
|
|
49
|
+
LiFiErrorCode.WalletChangedDuringExecution,
|
|
50
|
+
'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.'
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
executeStep = async (step: LiFiStepExtended): Promise<LiFiStepExtended> => {
|
|
56
|
+
step.execution = this.statusManager.initExecutionObject(step)
|
|
57
|
+
|
|
58
|
+
const fromChain = await config.getChainById(step.action.fromChainId)
|
|
59
|
+
const toChain = await config.getChainById(step.action.toChainId)
|
|
60
|
+
|
|
61
|
+
const isBridgeExecution = fromChain.id !== toChain.id
|
|
62
|
+
const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
|
|
63
|
+
|
|
64
|
+
// STEP 2: Get transaction
|
|
65
|
+
let process = this.statusManager.findOrCreateProcess(
|
|
66
|
+
step,
|
|
67
|
+
currentProcessType
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if (process.status !== 'DONE') {
|
|
71
|
+
try {
|
|
72
|
+
const connection = await getSolanaConnection()
|
|
73
|
+
|
|
74
|
+
process = this.statusManager.updateProcess(
|
|
75
|
+
step,
|
|
76
|
+
process.type,
|
|
77
|
+
'STARTED'
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
// Check balance
|
|
81
|
+
await checkBalance(this.walletAdapter.publicKey!.toString(), step)
|
|
82
|
+
|
|
83
|
+
// Create new transaction
|
|
84
|
+
if (!step.transactionRequest) {
|
|
85
|
+
const updatedStep = await getStepTransaction(step)
|
|
86
|
+
const comparedStep = await stepComparison(
|
|
87
|
+
this.statusManager,
|
|
88
|
+
step,
|
|
89
|
+
updatedStep,
|
|
90
|
+
this.allowUserInteraction,
|
|
91
|
+
this.executionOptions
|
|
92
|
+
)
|
|
93
|
+
step = {
|
|
94
|
+
...comparedStep,
|
|
95
|
+
execution: step.execution,
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!step.transactionRequest?.data) {
|
|
100
|
+
throw new TransactionError(
|
|
101
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
102
|
+
'Unable to prepare transaction.'
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
process = this.statusManager.updateProcess(
|
|
107
|
+
step,
|
|
108
|
+
process.type,
|
|
109
|
+
'ACTION_REQUIRED'
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
if (!this.allowUserInteraction) {
|
|
113
|
+
return step
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
let transactionRequest: TransactionParameters = {
|
|
117
|
+
data: step.transactionRequest.data,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
121
|
+
const customizedTransactionRequest: TransactionParameters =
|
|
122
|
+
await this.executionOptions.updateTransactionRequestHook({
|
|
123
|
+
requestType: 'transaction',
|
|
124
|
+
...transactionRequest,
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
transactionRequest = {
|
|
128
|
+
...transactionRequest,
|
|
129
|
+
...customizedTransactionRequest,
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!transactionRequest.data) {
|
|
134
|
+
throw new TransactionError(
|
|
135
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
136
|
+
'Unable to prepare transaction.'
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const versionedTransaction = VersionedTransaction.deserialize(
|
|
141
|
+
base64ToUint8Array(transactionRequest.data)
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
const blockhashResult = await connection.getLatestBlockhashAndContext({
|
|
145
|
+
commitment: 'confirmed',
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
// Update transaction recent blockhash with the latest blockhash
|
|
149
|
+
versionedTransaction.message.recentBlockhash =
|
|
150
|
+
blockhashResult.value.blockhash
|
|
151
|
+
|
|
152
|
+
this.checkWalletAdapter(step)
|
|
153
|
+
|
|
154
|
+
const signedTx =
|
|
155
|
+
await this.walletAdapter.signTransaction(versionedTransaction)
|
|
156
|
+
|
|
157
|
+
process = this.statusManager.updateProcess(
|
|
158
|
+
step,
|
|
159
|
+
process.type,
|
|
160
|
+
'PENDING'
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
const rawTransactionOptions: SendOptions = {
|
|
164
|
+
// Skipping preflight i.e. tx simulation by RPC as we simulated the tx above
|
|
165
|
+
skipPreflight: true,
|
|
166
|
+
// Setting max retries to 0 as we are handling retries manually
|
|
167
|
+
// Set this manually so that the default is skipped
|
|
168
|
+
maxRetries: 0,
|
|
169
|
+
// https://solana.com/docs/advanced/confirmation#use-an-appropriate-preflight-commitment-level
|
|
170
|
+
preflightCommitment: 'confirmed',
|
|
171
|
+
// minContextSlot: blockhashResult.context.slot,
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const txSignature = await connection.sendRawTransaction(
|
|
175
|
+
signedTx.serialize(),
|
|
176
|
+
rawTransactionOptions
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
// In the following section, we wait and constantly check for the transaction to be confirmed
|
|
180
|
+
// and resend the transaction if it is not confirmed within a certain time interval
|
|
181
|
+
// thus handling tx retries on the client side rather than relying on the RPC
|
|
182
|
+
const confirmTransactionPromise = connection
|
|
183
|
+
.confirmTransaction(
|
|
184
|
+
{
|
|
185
|
+
signature: txSignature,
|
|
186
|
+
blockhash: blockhashResult.value.blockhash,
|
|
187
|
+
lastValidBlockHeight: blockhashResult.value.lastValidBlockHeight,
|
|
188
|
+
},
|
|
189
|
+
'confirmed'
|
|
190
|
+
)
|
|
191
|
+
.then((result) => result.value)
|
|
192
|
+
|
|
193
|
+
let confirmedTx: SignatureResult | null = null
|
|
194
|
+
const startTime = Date.now()
|
|
195
|
+
|
|
196
|
+
while (!confirmedTx && Date.now() - startTime <= TIMEOUT_PERIOD) {
|
|
197
|
+
confirmedTx = await Promise.race([
|
|
198
|
+
confirmTransactionPromise,
|
|
199
|
+
new Promise<null>((resolve) =>
|
|
200
|
+
setTimeout(() => {
|
|
201
|
+
resolve(null)
|
|
202
|
+
}, TX_RETRY_INTERVAL)
|
|
203
|
+
),
|
|
204
|
+
])
|
|
205
|
+
if (confirmedTx) {
|
|
206
|
+
break
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
await connection.sendRawTransaction(
|
|
210
|
+
signedTx.serialize(),
|
|
211
|
+
rawTransactionOptions
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (confirmedTx?.err) {
|
|
216
|
+
throw new TransactionError(
|
|
217
|
+
LiFiErrorCode.TransactionFailed,
|
|
218
|
+
`Transaction failed: ${confirmedTx?.err}`
|
|
219
|
+
)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (!confirmedTx) {
|
|
223
|
+
throw new TransactionError(
|
|
224
|
+
LiFiErrorCode.TransactionFailed,
|
|
225
|
+
'Failed to land the transaction'
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Transaction has been confirmed and we can update the process
|
|
230
|
+
process = this.statusManager.updateProcess(
|
|
231
|
+
step,
|
|
232
|
+
process.type,
|
|
233
|
+
'PENDING',
|
|
234
|
+
{
|
|
235
|
+
txHash: txSignature,
|
|
236
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txSignature}`,
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
if (isBridgeExecution) {
|
|
241
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE')
|
|
242
|
+
}
|
|
243
|
+
} catch (e: any) {
|
|
244
|
+
const error = await parseError(e, step, process)
|
|
245
|
+
process = this.statusManager.updateProcess(
|
|
246
|
+
step,
|
|
247
|
+
process.type,
|
|
248
|
+
'FAILED',
|
|
249
|
+
{
|
|
250
|
+
error: {
|
|
251
|
+
message: error.message,
|
|
252
|
+
htmlMessage: error.htmlMessage,
|
|
253
|
+
code: error.code,
|
|
254
|
+
},
|
|
255
|
+
}
|
|
256
|
+
)
|
|
257
|
+
this.statusManager.updateExecution(step, 'FAILED')
|
|
258
|
+
throw error
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// STEP 5: Wait for the receiving chain
|
|
263
|
+
if (isBridgeExecution) {
|
|
264
|
+
process = this.statusManager.findOrCreateProcess(
|
|
265
|
+
step,
|
|
266
|
+
'RECEIVING_CHAIN',
|
|
267
|
+
'PENDING'
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
let statusResponse: FullStatusData
|
|
271
|
+
try {
|
|
272
|
+
if (!process.txHash) {
|
|
273
|
+
throw new Error('Transaction hash is undefined.')
|
|
274
|
+
}
|
|
275
|
+
statusResponse = (await waitForReceivingTransaction(
|
|
276
|
+
process.txHash,
|
|
277
|
+
this.statusManager,
|
|
278
|
+
process.type,
|
|
279
|
+
step
|
|
280
|
+
)) as FullStatusData
|
|
281
|
+
|
|
282
|
+
const statusReceiving =
|
|
283
|
+
statusResponse.receiving as ExtendedTransactionInfo
|
|
284
|
+
|
|
285
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE', {
|
|
286
|
+
substatus: statusResponse.substatus,
|
|
287
|
+
substatusMessage:
|
|
288
|
+
statusResponse.substatusMessage ||
|
|
289
|
+
getSubstatusMessage(statusResponse.status, statusResponse.substatus),
|
|
290
|
+
txHash: statusReceiving?.txHash,
|
|
291
|
+
txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
|
|
292
|
+
})
|
|
293
|
+
|
|
294
|
+
this.statusManager.updateExecution(step, 'DONE', {
|
|
295
|
+
fromAmount: statusResponse.sending.amount,
|
|
296
|
+
toAmount: statusReceiving?.amount,
|
|
297
|
+
toToken: statusReceiving?.token,
|
|
298
|
+
gasCosts: [
|
|
299
|
+
{
|
|
300
|
+
amount: statusResponse.sending.gasAmount,
|
|
301
|
+
amountUSD: statusResponse.sending.gasAmountUSD,
|
|
302
|
+
token: statusResponse.sending.gasToken,
|
|
303
|
+
estimate: statusResponse.sending.gasUsed,
|
|
304
|
+
limit: statusResponse.sending.gasUsed,
|
|
305
|
+
price: statusResponse.sending.gasPrice,
|
|
306
|
+
type: 'SEND',
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
})
|
|
310
|
+
} catch (e: unknown) {
|
|
311
|
+
const htmlMessage = await getTransactionFailedMessage(
|
|
312
|
+
step,
|
|
313
|
+
process.txLink
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
|
|
317
|
+
error: {
|
|
318
|
+
code: LiFiErrorCode.TransactionFailed,
|
|
319
|
+
message: 'Failed while waiting for receiving chain.',
|
|
320
|
+
htmlMessage,
|
|
321
|
+
},
|
|
322
|
+
})
|
|
323
|
+
this.statusManager.updateExecution(step, 'FAILED')
|
|
324
|
+
console.warn(e)
|
|
325
|
+
throw e
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// DONE
|
|
329
|
+
return step
|
|
330
|
+
}
|
|
331
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChainId } from '@lifi/types'
|
|
2
|
+
import { Connection } from '@solana/web3.js'
|
|
3
|
+
import { getRpcUrl } from '../rpc.js'
|
|
4
|
+
|
|
5
|
+
let connection: Connection | undefined = undefined
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* getSolanaConnection is just a thin wrapper around getting the
|
|
9
|
+
* connection (rpc provider) for Solana
|
|
10
|
+
* @returns - Solana rpc connection
|
|
11
|
+
*/
|
|
12
|
+
export const getSolanaConnection = async (): Promise<Connection> => {
|
|
13
|
+
if (!connection) {
|
|
14
|
+
const rpcUrl = await getRpcUrl(ChainId.SOL)
|
|
15
|
+
connection = new Connection(rpcUrl)
|
|
16
|
+
return connection
|
|
17
|
+
} else {
|
|
18
|
+
return connection
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { isAddress } from './isAddress.js'
|
|
2
|
+
|
|
3
|
+
interface SNSResult {
|
|
4
|
+
s: 'ok' | 'error'
|
|
5
|
+
result: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Subject to change
|
|
9
|
+
// https://github.com/Bonfida/sns-sdk?tab=readme-ov-file#sdk-proxy
|
|
10
|
+
export const getSNSAddress = async (name: string) => {
|
|
11
|
+
try {
|
|
12
|
+
if (!name.endsWith('.sol')) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
// const rpcUrl = await getRpcUrl(ChainId.SOL)
|
|
16
|
+
const snsWorkerUrl = `https://sns-sdk-proxy.bonfida.workers.dev/resolve/${name}`
|
|
17
|
+
const response: Response = await fetch(snsWorkerUrl)
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const data: SNSResult = await response.json()
|
|
23
|
+
|
|
24
|
+
if (!isAddress(data.result)) {
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return data.result
|
|
29
|
+
} catch (_) {
|
|
30
|
+
// ignore
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ChainId, Token, TokenAmount } from '@lifi/types'
|
|
2
|
+
import { PublicKey } from '@solana/web3.js'
|
|
3
|
+
import { wrappedSolAddress } from '../../constants.js'
|
|
4
|
+
import { getSolanaConnection } from './connection.js'
|
|
5
|
+
import { TokenProgramAddress } from './types.js'
|
|
6
|
+
|
|
7
|
+
export const getSolanaBalance = async (
|
|
8
|
+
walletAddress: string,
|
|
9
|
+
tokens: Token[]
|
|
10
|
+
): Promise<TokenAmount[]> => {
|
|
11
|
+
if (tokens.length === 0) {
|
|
12
|
+
return []
|
|
13
|
+
}
|
|
14
|
+
const { chainId } = tokens[0]
|
|
15
|
+
tokens.forEach((token) => {
|
|
16
|
+
if (token.chainId !== chainId) {
|
|
17
|
+
console.warn(`Requested tokens have to be on the same chain.`)
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
return getSolanaBalanceDefault(chainId, tokens, walletAddress)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const getSolanaBalanceDefault = async (
|
|
25
|
+
_chainId: ChainId,
|
|
26
|
+
tokens: Token[],
|
|
27
|
+
walletAddress: string
|
|
28
|
+
): Promise<TokenAmount[]> => {
|
|
29
|
+
const connection = await getSolanaConnection()
|
|
30
|
+
const accountPublicKey = new PublicKey(walletAddress)
|
|
31
|
+
const tokenProgramPublicKey = new PublicKey(TokenProgramAddress)
|
|
32
|
+
const [slot, balance, tokenAccountsByOwner] = await Promise.allSettled([
|
|
33
|
+
connection.getSlot(),
|
|
34
|
+
connection.getBalance(accountPublicKey),
|
|
35
|
+
connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
36
|
+
programId: tokenProgramPublicKey,
|
|
37
|
+
}),
|
|
38
|
+
])
|
|
39
|
+
const blockNumber = slot.status === 'fulfilled' ? BigInt(slot.value) : 0n
|
|
40
|
+
const solBalance = balance.status === 'fulfilled' ? BigInt(balance.value) : 0n
|
|
41
|
+
const walletTokenAmounts =
|
|
42
|
+
tokenAccountsByOwner.status === 'fulfilled'
|
|
43
|
+
? tokenAccountsByOwner.value.value.reduce(
|
|
44
|
+
(tokenAmounts, value) => {
|
|
45
|
+
const amount = BigInt(
|
|
46
|
+
value.account.data.parsed.info.tokenAmount.amount
|
|
47
|
+
)
|
|
48
|
+
if (amount > 0n) {
|
|
49
|
+
tokenAmounts[value.account.data.parsed.info.mint] = amount
|
|
50
|
+
}
|
|
51
|
+
return tokenAmounts
|
|
52
|
+
},
|
|
53
|
+
{} as Record<string, bigint>
|
|
54
|
+
)
|
|
55
|
+
: {}
|
|
56
|
+
walletTokenAmounts[wrappedSolAddress] ??= 0n
|
|
57
|
+
walletTokenAmounts[wrappedSolAddress] += solBalance
|
|
58
|
+
const tokenAmounts: TokenAmount[] = tokens.map((token) => {
|
|
59
|
+
if (walletTokenAmounts[token.address]) {
|
|
60
|
+
return {
|
|
61
|
+
...token,
|
|
62
|
+
amount: walletTokenAmounts[token.address],
|
|
63
|
+
blockNumber,
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...token,
|
|
68
|
+
blockNumber,
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
return tokenAmounts
|
|
72
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChainType } from '@lifi/types'
|
|
2
|
+
import type { SignerWalletAdapter } from '@solana/wallet-adapter-base'
|
|
3
|
+
import { type SDKProvider } from '../types.js'
|
|
4
|
+
|
|
5
|
+
export interface SolanaProviderOptions {
|
|
6
|
+
getWalletAdapter?: () => Promise<SignerWalletAdapter>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface SolanaProvider extends SDKProvider {
|
|
10
|
+
setOptions(options: SolanaProviderOptions): void
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isSolana(provider: SDKProvider): provider is SolanaProvider {
|
|
14
|
+
return provider.type === ChainType.SVM
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const TokenProgramAddress = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
|