@lifi/sdk 3.0.0-alpha.4 → 3.0.0-alpha.41
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 +31 -86
- package/src/_cjs/config.js +71 -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 +284 -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 +12 -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/{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 -11
- package/src/_cjs/core/EVM/multisig.js.map +1 -0
- package/src/_cjs/core/EVM/publicClient.js +35 -0
- package/src/_cjs/core/EVM/publicClient.js.map +1 -0
- package/src/_cjs/core/EVM/setAllowance.js +71 -0
- 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} +10 -3
- package/src/_cjs/core/EVM/utils.js.map +1 -0
- package/src/_cjs/core/Solana/Solana.js +44 -0
- package/src/_cjs/core/Solana/Solana.js.map +1 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +163 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_cjs/core/Solana/connection.js +18 -0
- package/src/_cjs/core/Solana/connection.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/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 +5 -5
- package/src/_cjs/core/checkBalance.js.map +1 -0
- package/src/_cjs/core/execution.js +134 -0
- package/src/_cjs/core/execution.js.map +1 -0
- package/src/_cjs/core/executionState.js +23 -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/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 +16 -10
- package/src/_cjs/core/utils.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +11 -12
- package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_cjs/createConfig.js +32 -0
- package/src/_cjs/createConfig.js.map +1 -0
- package/src/_cjs/helpers.js +57 -0
- package/src/_cjs/helpers.js.map +1 -0
- package/src/_cjs/index.js +22 -0
- package/src/_cjs/index.js.map +1 -0
- package/src/_cjs/package.json +1 -0
- package/src/_cjs/request.js +66 -0
- package/src/_cjs/request.js.map +1 -0
- package/src/_cjs/services/api.js +311 -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/{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/types/internal.types.js → src/_cjs/types/internal.js} +1 -0
- package/src/_cjs/types/internal.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/errors.js +25 -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 +67 -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 +68 -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 +309 -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 +8 -6
- 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/{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 +37 -0
- package/src/_esm/core/EVM/publicClient.js.map +1 -0
- package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +46 -11
- package/src/_esm/core/EVM/setAllowance.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/switchChain.js +7 -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} +9 -1
- package/src/_esm/core/EVM/utils.js.map +1 -0
- package/src/_esm/core/Solana/Solana.js +40 -0
- package/src/_esm/core/Solana/Solana.js.map +1 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js +164 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_esm/core/Solana/connection.js +19 -0
- package/src/_esm/core/Solana/connection.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/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 +3 -2
- package/src/_esm/core/checkBalance.js.map +1 -0
- package/src/_esm/core/execution.js +173 -0
- package/src/_esm/core/execution.js.map +1 -0
- package/src/_esm/core/executionState.js +20 -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/{dist/execution → src/_esm/core}/stepComparison.js +7 -5
- 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 +14 -0
- package/src/_esm/core/utils.js.map +1 -0
- package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +9 -7
- package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_esm/createConfig.js +28 -0
- package/src/_esm/createConfig.js.map +1 -0
- package/{dist → src/_esm}/helpers.js +5 -17
- package/src/_esm/helpers.js.map +1 -0
- package/src/_esm/index.js +13 -0
- package/src/_esm/index.js.map +1 -0
- package/src/_esm/package.json +1 -0
- package/{dist → src/_esm}/request.js +23 -13
- package/src/_esm/request.js.map +1 -0
- package/src/_esm/services/api.js +380 -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/{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/{dist → src/_esm}/utils/errors.js +25 -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 +4 -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 +16 -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/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/cjs/execution → src/_types/core/EVM}/switchChain.d.ts +5 -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 +5 -0
- package/src/_types/core/EVM/utils.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 +12 -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/getSolanaBalance.d.ts +3 -0
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
- package/src/_types/core/Solana/types.d.ts +13 -0
- package/src/_types/core/Solana/types.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +15 -28
- package/src/_types/core/StatusManager.d.ts.map +1 -0
- package/src/_types/core/checkBalance.d.ts +3 -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 +15 -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/{dist/execution → src/_types/core}/stepComparison.d.ts +7 -4
- package/src/_types/core/stepComparison.d.ts.map +1 -0
- package/src/_types/core/types.d.ts +80 -0
- package/src/_types/core/types.d.ts.map +1 -0
- package/{dist/execution → src/_types/core}/utils.d.ts +5 -2
- package/src/_types/core/utils.d.ts.map +1 -0
- package/src/_types/core/waitForReceivingTransaction.d.ts +4 -0
- 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 → src/_types}/helpers.d.ts +4 -3
- package/src/_types/helpers.d.ts.map +1 -0
- package/src/_types/index.d.ts +13 -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/{dist/cjs → src/_types}/typeguards.d.ts +3 -2
- 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/src/_types/types/internal.d.ts +58 -0
- package/src/_types/types/internal.d.ts.map +1 -0
- package/{dist → src/_types}/utils/errors.d.ts +1 -0
- 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 +4 -6
- 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 +71 -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 +461 -0
- package/src/core/EVM/abi.ts +47 -0
- package/src/core/EVM/checkAllowance.ts +152 -0
- package/src/core/EVM/getAllowance.ts +144 -0
- package/src/core/EVM/getEVMBalance.ts +118 -0
- package/src/core/EVM/multisig.ts +53 -0
- package/src/core/EVM/publicClient.ts +46 -0
- package/src/core/EVM/setAllowance.ts +144 -0
- package/src/core/EVM/switchChain.ts +77 -0
- package/src/core/EVM/types.ts +73 -0
- package/src/core/EVM/utils.ts +42 -0
- package/src/core/Solana/Solana.ts +46 -0
- package/src/core/Solana/SolanaStepExecutor.ts +259 -0
- package/src/core/Solana/connection.ts +19 -0
- package/src/core/Solana/getSolanaBalance.ts +72 -0
- package/src/core/Solana/types.ts +18 -0
- package/src/core/StatusManager.ts +231 -0
- package/src/core/checkBalance.ts +48 -0
- package/src/core/execution.ts +218 -0
- package/src/core/executionState.ts +39 -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/stepComparison.ts +51 -0
- package/src/core/types.ts +117 -0
- package/src/core/utils.ts +122 -0
- package/src/core/waitForReceivingTransaction.ts +74 -0
- package/src/createConfig.ts +33 -0
- package/src/helpers.ts +83 -0
- package/src/index.ts +12 -0
- package/src/request.ts +79 -0
- package/src/services/api.ts +511 -0
- package/src/services/balance.ts +93 -0
- package/src/typeguards.ts +89 -0
- package/src/types/index.ts +1 -0
- package/src/types/internal.ts +60 -0
- package/src/utils/errors.ts +231 -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 +204 -0
- package/src/utils/utils.ts +48 -0
- package/src/version.ts +2 -0
- package/dist/LiFi.d.ts +0 -171
- package/dist/LiFi.js +0 -246
- 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 -5
- 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 -171
- package/dist/cjs/LiFi.js +0 -276
- 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 -5
- package/dist/cjs/allowance/setAllowance.js +0 -56
- 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 -75
- package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -59
- package/dist/cjs/execution/RouteExecutionManager.js +0 -202
- package/dist/cjs/execution/StatusManager.js +0 -171
- package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
- package/dist/cjs/execution/StepExecutionManager.js +0 -267
- package/dist/cjs/execution/StepExecutor.d.ts +0 -15
- package/dist/cjs/execution/StepExecutor.js +0 -62
- package/dist/cjs/execution/checkAllowance.d.ts +0 -4
- package/dist/cjs/execution/checkBalance.d.ts +0 -2
- package/dist/cjs/execution/index.d.ts +0 -1
- package/dist/cjs/execution/index.js +0 -17
- package/dist/cjs/execution/multisig.d.ts +0 -4
- package/dist/cjs/execution/prepareRestart.d.ts +0 -3
- package/dist/cjs/execution/prepareRestart.js +0 -65
- package/dist/cjs/execution/stepComparison.d.ts +0 -14
- package/dist/cjs/execution/stepComparison.js +0 -37
- package/dist/cjs/execution/switchChain.js +0 -54
- package/dist/cjs/execution/utils.d.ts +0 -12
- package/dist/cjs/execution/waitForReceivingTransaction.d.ts +0 -3
- package/dist/cjs/helpers.d.ts +0 -18
- package/dist/cjs/helpers.js +0 -84
- package/dist/cjs/index.d.ts +0 -5
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/request.d.ts +0 -9
- package/dist/cjs/request.js +0 -60
- package/dist/cjs/services/ApiService.d.ts +0 -17
- package/dist/cjs/services/ApiService.js +0 -326
- package/dist/cjs/services/ChainsService.d.ts +0 -11
- package/dist/cjs/services/ChainsService.js +0 -39
- package/dist/cjs/services/ConfigService.d.ts +0 -23
- package/dist/cjs/services/ConfigService.js +0 -101
- package/dist/cjs/types/index.d.ts +0 -4
- package/dist/cjs/types/index.js +0 -22
- package/dist/cjs/types/internal.types.d.ts +0 -142
- package/dist/cjs/utils/errors.d.ts +0 -107
- 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 -157
- 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/RouteExecutionManager.d.ts +0 -59
- package/dist/execution/RouteExecutionManager.js +0 -195
- package/dist/execution/StatusManager.d.ts +0 -67
- package/dist/execution/StatusManager.js +0 -167
- package/dist/execution/StepExecutionManager.d.ts +0 -7
- package/dist/execution/StepExecutionManager.js +0 -260
- package/dist/execution/StepExecutor.d.ts +0 -15
- package/dist/execution/StepExecutor.js +0 -58
- package/dist/execution/checkAllowance.d.ts +0 -4
- package/dist/execution/checkBalance.d.ts +0 -2
- package/dist/execution/index.d.ts +0 -1
- package/dist/execution/index.js +0 -1
- package/dist/execution/multisig.d.ts +0 -4
- package/dist/execution/prepareRestart.d.ts +0 -3
- package/dist/execution/prepareRestart.js +0 -61
- package/dist/execution/switchChain.d.ts +0 -21
- package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -6
- package/dist/services/ApiService.d.ts +0 -17
- 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 -23
- package/dist/services/ConfigService.js +0 -99
- package/dist/typeguards.d.ts +0 -4
- package/dist/types/abi.d.ts +0 -5
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -4
- package/dist/types/internal.types.d.ts +0 -142
- package/dist/types/internal.types.js +0 -1
- 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,144 @@
|
|
|
1
|
+
import type { ChainId, Token } from '@lifi/types'
|
|
2
|
+
import type { Address } from 'viem'
|
|
3
|
+
import { getContract } from 'viem'
|
|
4
|
+
import { isNativeTokenAddress } from '../../utils/utils.js'
|
|
5
|
+
import { allowanceAbi } from './abi.js'
|
|
6
|
+
import { getPublicClient } from './publicClient.js'
|
|
7
|
+
import type {
|
|
8
|
+
TokenAllowance,
|
|
9
|
+
TokenSpender,
|
|
10
|
+
TokenSpenderAllowance,
|
|
11
|
+
} from './types.js'
|
|
12
|
+
import { getMulticallAddress } from './utils.js'
|
|
13
|
+
|
|
14
|
+
export const getAllowance = async (
|
|
15
|
+
chainId: ChainId,
|
|
16
|
+
tokenAddress: string,
|
|
17
|
+
ownerAddress: string,
|
|
18
|
+
spenderAddress: string
|
|
19
|
+
): Promise<bigint> => {
|
|
20
|
+
const client = await getPublicClient(chainId)
|
|
21
|
+
const contract = getContract({
|
|
22
|
+
address: tokenAddress as Address,
|
|
23
|
+
abi: allowanceAbi,
|
|
24
|
+
client: client,
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const approved = (await contract.read.allowance([
|
|
29
|
+
ownerAddress,
|
|
30
|
+
spenderAddress,
|
|
31
|
+
])) as bigint
|
|
32
|
+
return approved
|
|
33
|
+
} catch (e) {
|
|
34
|
+
return 0n
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const getAllowanceMulticall = async (
|
|
39
|
+
chainId: ChainId,
|
|
40
|
+
tokens: TokenSpender[],
|
|
41
|
+
ownerAddress: string
|
|
42
|
+
): Promise<TokenSpenderAllowance[]> => {
|
|
43
|
+
if (!tokens.length) {
|
|
44
|
+
return []
|
|
45
|
+
}
|
|
46
|
+
const multicallAddress = await getMulticallAddress(chainId)
|
|
47
|
+
if (!multicallAddress) {
|
|
48
|
+
throw new Error(`No multicall address configured for chainId ${chainId}.`)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const client = await getPublicClient(chainId)
|
|
52
|
+
|
|
53
|
+
const contracts = tokens.map((token) => ({
|
|
54
|
+
address: token.token.address as Address,
|
|
55
|
+
abi: allowanceAbi,
|
|
56
|
+
functionName: 'allowance',
|
|
57
|
+
args: [ownerAddress, token.spenderAddress],
|
|
58
|
+
}))
|
|
59
|
+
|
|
60
|
+
const results = await client.multicall({
|
|
61
|
+
contracts,
|
|
62
|
+
multicallAddress: multicallAddress as Address,
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
if (!results.length) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
`Couldn't load allowance from chainId ${chainId} using multicall.`
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return tokens.map(({ token, spenderAddress }, i: number) => ({
|
|
72
|
+
token,
|
|
73
|
+
spenderAddress,
|
|
74
|
+
allowance: results[i].result as bigint,
|
|
75
|
+
}))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get the current allowance for a certain token.
|
|
80
|
+
* @param token - The token that should be checked
|
|
81
|
+
* @param ownerAddress - The owner of the token
|
|
82
|
+
* @param spenderAddress - The spender address that has to be approved
|
|
83
|
+
* @returns Returns allowance
|
|
84
|
+
*/
|
|
85
|
+
export const getTokenAllowance = async (
|
|
86
|
+
token: Token,
|
|
87
|
+
ownerAddress: string,
|
|
88
|
+
spenderAddress: string
|
|
89
|
+
): Promise<bigint | undefined> => {
|
|
90
|
+
// native token don't need approval
|
|
91
|
+
if (isNativeTokenAddress(token.address)) {
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const approved = await getAllowance(
|
|
96
|
+
token.chainId,
|
|
97
|
+
token.address,
|
|
98
|
+
ownerAddress,
|
|
99
|
+
spenderAddress
|
|
100
|
+
)
|
|
101
|
+
return approved
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get the current allowance for a list of token/spender address pairs.
|
|
106
|
+
* @param ownerAddress - The owner of the tokens
|
|
107
|
+
* @param tokens - A list of token and spender address pairs
|
|
108
|
+
* @returns Returns array of tokens and their allowance
|
|
109
|
+
*/
|
|
110
|
+
export const getTokenAllowanceMulticall = async (
|
|
111
|
+
ownerAddress: string,
|
|
112
|
+
tokens: TokenSpender[]
|
|
113
|
+
): Promise<TokenAllowance[]> => {
|
|
114
|
+
// filter out native tokens
|
|
115
|
+
const filteredTokens = tokens.filter(
|
|
116
|
+
({ token }) => !isNativeTokenAddress(token.address)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
// group by chain
|
|
120
|
+
const tokenDataByChain: { [chainId: number]: TokenSpender[] } = {}
|
|
121
|
+
filteredTokens.forEach((data) => {
|
|
122
|
+
if (!tokenDataByChain[data.token.chainId]) {
|
|
123
|
+
tokenDataByChain[data.token.chainId] = []
|
|
124
|
+
}
|
|
125
|
+
tokenDataByChain[data.token.chainId].push(data)
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
const chainKeys = Object.keys(tokenDataByChain).map(Number.parseInt)
|
|
129
|
+
|
|
130
|
+
const allowances = (
|
|
131
|
+
await Promise.all(
|
|
132
|
+
chainKeys.map(async (chainId) => {
|
|
133
|
+
// get allowances for current chain and token list
|
|
134
|
+
return getAllowanceMulticall(
|
|
135
|
+
chainId,
|
|
136
|
+
tokenDataByChain[chainId],
|
|
137
|
+
ownerAddress
|
|
138
|
+
)
|
|
139
|
+
})
|
|
140
|
+
)
|
|
141
|
+
).flat()
|
|
142
|
+
|
|
143
|
+
return allowances
|
|
144
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { ChainId, Token, TokenAmount } from '@lifi/types'
|
|
2
|
+
import type { Address } from 'viem'
|
|
3
|
+
import { isZeroAddress } from '../../utils/utils.js'
|
|
4
|
+
import { balanceOfAbi, getEthBalanceAbi } from './abi.js'
|
|
5
|
+
import { getPublicClient } from './publicClient.js'
|
|
6
|
+
import { getMulticallAddress } from './utils.js'
|
|
7
|
+
|
|
8
|
+
export const getEVMBalance = async (
|
|
9
|
+
walletAddress: string,
|
|
10
|
+
tokens: Token[]
|
|
11
|
+
): Promise<TokenAmount[]> => {
|
|
12
|
+
if (tokens.length === 0) {
|
|
13
|
+
return []
|
|
14
|
+
}
|
|
15
|
+
const { chainId } = tokens[0]
|
|
16
|
+
tokens.forEach((token) => {
|
|
17
|
+
if (token.chainId !== chainId) {
|
|
18
|
+
console.warn(`Requested tokens have to be on the same chain.`)
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const multicallAddress = await getMulticallAddress(chainId)
|
|
23
|
+
|
|
24
|
+
if (multicallAddress && tokens.length > 1) {
|
|
25
|
+
return getEVMBalanceMulticall(
|
|
26
|
+
chainId,
|
|
27
|
+
tokens,
|
|
28
|
+
walletAddress,
|
|
29
|
+
multicallAddress
|
|
30
|
+
)
|
|
31
|
+
} else {
|
|
32
|
+
return getEVMBalanceDefault(chainId, tokens, walletAddress)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const getEVMBalanceMulticall = async (
|
|
37
|
+
chainId: ChainId,
|
|
38
|
+
tokens: Token[],
|
|
39
|
+
walletAddress: string,
|
|
40
|
+
multicallAddress: string
|
|
41
|
+
): Promise<TokenAmount[]> => {
|
|
42
|
+
const client = await getPublicClient(chainId)
|
|
43
|
+
|
|
44
|
+
const contracts = tokens.map((token) => {
|
|
45
|
+
if (isZeroAddress(token.address)) {
|
|
46
|
+
return {
|
|
47
|
+
address: multicallAddress as Address,
|
|
48
|
+
abi: getEthBalanceAbi,
|
|
49
|
+
functionName: 'getEthBalance',
|
|
50
|
+
args: [walletAddress],
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
address: token.address as Address,
|
|
55
|
+
abi: balanceOfAbi,
|
|
56
|
+
functionName: 'balanceOf',
|
|
57
|
+
args: [walletAddress],
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
const blockNumber = await client.getBlockNumber()
|
|
61
|
+
const results = await client.multicall({
|
|
62
|
+
contracts,
|
|
63
|
+
multicallAddress: multicallAddress as Address,
|
|
64
|
+
blockNumber,
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
if (!results.length) {
|
|
68
|
+
return []
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return tokens.map((token, i: number) => {
|
|
72
|
+
return {
|
|
73
|
+
...token,
|
|
74
|
+
amount: results[i].result as bigint,
|
|
75
|
+
blockNumber,
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const getEVMBalanceDefault = async (
|
|
81
|
+
chainId: ChainId,
|
|
82
|
+
tokens: Token[],
|
|
83
|
+
walletAddress: string
|
|
84
|
+
): Promise<TokenAmount[]> => {
|
|
85
|
+
const client = await getPublicClient(chainId)
|
|
86
|
+
const blockNumber = await client.getBlockNumber()
|
|
87
|
+
const queue: Promise<bigint>[] = tokens.map((token) => {
|
|
88
|
+
if (isZeroAddress(token.address)) {
|
|
89
|
+
return client.getBalance({
|
|
90
|
+
address: walletAddress as Address,
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
return client.readContract({
|
|
94
|
+
address: token.address as Address,
|
|
95
|
+
abi: balanceOfAbi,
|
|
96
|
+
functionName: 'balanceOf',
|
|
97
|
+
args: [walletAddress],
|
|
98
|
+
}) as Promise<bigint>
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const results = await Promise.allSettled(queue)
|
|
102
|
+
|
|
103
|
+
const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {
|
|
104
|
+
const result = results[index]
|
|
105
|
+
if (result.status === 'rejected') {
|
|
106
|
+
return {
|
|
107
|
+
...token,
|
|
108
|
+
blockNumber,
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
...token,
|
|
113
|
+
amount: result.value,
|
|
114
|
+
blockNumber,
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
return tokenAmounts
|
|
118
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ExtendedChain, LiFiStep, ProcessType } from '@lifi/types'
|
|
2
|
+
import type { Hash } from 'viem'
|
|
3
|
+
import { LiFiErrorCode, TransactionError } from '../../utils/errors.js'
|
|
4
|
+
import type { StatusManager } from '../StatusManager.js'
|
|
5
|
+
import type { MultisigConfig, MultisigTxDetails } from './types.js'
|
|
6
|
+
|
|
7
|
+
export const updateMultisigRouteProcess = async (
|
|
8
|
+
internalTxHash: Hash,
|
|
9
|
+
step: LiFiStep,
|
|
10
|
+
processType: ProcessType,
|
|
11
|
+
fromChain: ExtendedChain,
|
|
12
|
+
statusManager: StatusManager,
|
|
13
|
+
multisig?: MultisigConfig
|
|
14
|
+
) => {
|
|
15
|
+
if (!multisig?.getMultisigTransactionDetails) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
'getMultisigTransactionDetails is missing in multisig config.'
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const updateIntermediateMultisigStatus = () => {
|
|
22
|
+
statusManager.updateProcess(step, processType, 'PENDING')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const multisigStatusResponse: MultisigTxDetails =
|
|
26
|
+
await multisig?.getMultisigTransactionDetails(
|
|
27
|
+
internalTxHash,
|
|
28
|
+
fromChain.id,
|
|
29
|
+
updateIntermediateMultisigStatus
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
if (multisigStatusResponse.status === 'DONE') {
|
|
33
|
+
statusManager.updateProcess(step, processType, 'PENDING', {
|
|
34
|
+
txHash: multisigStatusResponse.txHash,
|
|
35
|
+
multisigTxHash: undefined,
|
|
36
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${multisigStatusResponse.txHash}`,
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (multisigStatusResponse.status === 'FAILED') {
|
|
41
|
+
throw new TransactionError(
|
|
42
|
+
LiFiErrorCode.TransactionFailed,
|
|
43
|
+
'Multisig transaction failed.'
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (multisigStatusResponse.status === 'CANCELLED') {
|
|
48
|
+
throw new TransactionError(
|
|
49
|
+
LiFiErrorCode.SignatureRejected,
|
|
50
|
+
'Transaction was rejected by user.'
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PublicClient } from 'viem'
|
|
2
|
+
import { createPublicClient, fallback, http } from 'viem'
|
|
3
|
+
import type { Chain } from 'viem/chains'
|
|
4
|
+
import { config } from '../../config.js'
|
|
5
|
+
import { getRpcUrls } from '../utils.js'
|
|
6
|
+
|
|
7
|
+
// cached providers
|
|
8
|
+
const publicClients: Record<number, PublicClient> = {}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get an instance of a provider for a specific chain
|
|
12
|
+
* @param chainId - Id of the chain the provider is for
|
|
13
|
+
* @returns The public client for the given chain
|
|
14
|
+
*/
|
|
15
|
+
export const getPublicClient = async (
|
|
16
|
+
chainId: number
|
|
17
|
+
): Promise<PublicClient> => {
|
|
18
|
+
if (!publicClients[chainId]) {
|
|
19
|
+
const urls = await getRpcUrls(chainId)
|
|
20
|
+
const fallbackTransports = urls.map((url) =>
|
|
21
|
+
http(url, {
|
|
22
|
+
batch: true,
|
|
23
|
+
})
|
|
24
|
+
)
|
|
25
|
+
const _chain = await config.getChainById(chainId)
|
|
26
|
+
const chain: Chain = {
|
|
27
|
+
..._chain,
|
|
28
|
+
..._chain.metamask,
|
|
29
|
+
name: _chain.metamask.chainName,
|
|
30
|
+
rpcUrls: {
|
|
31
|
+
default: { http: _chain.metamask.rpcUrls },
|
|
32
|
+
public: { http: _chain.metamask.rpcUrls },
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
publicClients[chainId] = createPublicClient({
|
|
36
|
+
chain: chain,
|
|
37
|
+
transport: fallback(fallbackTransports),
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!publicClients[chainId]) {
|
|
42
|
+
throw new Error(`Unable to configure provider for chain ${chainId}`)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return publicClients[chainId]
|
|
46
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Address,
|
|
3
|
+
Hash,
|
|
4
|
+
PublicClient,
|
|
5
|
+
SendTransactionParameters,
|
|
6
|
+
WalletClient,
|
|
7
|
+
} from 'viem'
|
|
8
|
+
import { encodeFunctionData, maxUint256, publicActions } from 'viem'
|
|
9
|
+
import { isNativeTokenAddress } from '../../utils/utils.js'
|
|
10
|
+
import type { ExecutionOptions, TransactionParameters } from '../types.js'
|
|
11
|
+
import { approveAbi } from './abi.js'
|
|
12
|
+
import { getAllowance } from './getAllowance.js'
|
|
13
|
+
import type { ApproveTokenRequest, RevokeApprovalRequest } from './types.js'
|
|
14
|
+
import { getMaxPriorityFeePerGas } from './utils.js'
|
|
15
|
+
|
|
16
|
+
export const setAllowance = async (
|
|
17
|
+
walletClient: WalletClient,
|
|
18
|
+
tokenAddress: string,
|
|
19
|
+
contractAddress: string,
|
|
20
|
+
amount: bigint,
|
|
21
|
+
settings?: ExecutionOptions,
|
|
22
|
+
returnPopulatedTransaction?: boolean
|
|
23
|
+
): Promise<Hash> => {
|
|
24
|
+
const data = encodeFunctionData({
|
|
25
|
+
abi: approveAbi,
|
|
26
|
+
functionName: 'approve',
|
|
27
|
+
args: [contractAddress, amount],
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
if (returnPopulatedTransaction) {
|
|
31
|
+
return data
|
|
32
|
+
}
|
|
33
|
+
const client = walletClient.extend(publicActions)
|
|
34
|
+
|
|
35
|
+
let transactionRequest: TransactionParameters = {
|
|
36
|
+
to: tokenAddress,
|
|
37
|
+
data,
|
|
38
|
+
maxPriorityFeePerGas:
|
|
39
|
+
walletClient.account?.type === 'local'
|
|
40
|
+
? await getMaxPriorityFeePerGas(client as PublicClient)
|
|
41
|
+
: undefined,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (settings?.updateTransactionRequestHook) {
|
|
45
|
+
const customizedTransactionRequest: TransactionParameters =
|
|
46
|
+
await settings.updateTransactionRequestHook({
|
|
47
|
+
requestType: 'approve',
|
|
48
|
+
...transactionRequest,
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
transactionRequest = {
|
|
52
|
+
...transactionRequest,
|
|
53
|
+
...customizedTransactionRequest,
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return client.sendTransaction({
|
|
58
|
+
to: transactionRequest.to as Address,
|
|
59
|
+
account: walletClient.account!,
|
|
60
|
+
data: transactionRequest.data,
|
|
61
|
+
gas: transactionRequest.gas,
|
|
62
|
+
gasPrice: transactionRequest.gasPrice,
|
|
63
|
+
maxFeePerGas: transactionRequest.maxFeePerGas,
|
|
64
|
+
maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,
|
|
65
|
+
chain: null,
|
|
66
|
+
} as SendTransactionParameters)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Set approval for a certain token and amount.
|
|
71
|
+
* @param request - The approval request
|
|
72
|
+
* @param request.walletClient
|
|
73
|
+
* @param request.token
|
|
74
|
+
* @param request.spenderAddress
|
|
75
|
+
* @param request.amount
|
|
76
|
+
* @param request.infiniteApproval
|
|
77
|
+
* @returns Returns Hash or nothing
|
|
78
|
+
*/
|
|
79
|
+
export const setTokenAllowance = async ({
|
|
80
|
+
walletClient,
|
|
81
|
+
token,
|
|
82
|
+
spenderAddress,
|
|
83
|
+
amount,
|
|
84
|
+
infiniteApproval = false,
|
|
85
|
+
}: ApproveTokenRequest): Promise<Hash | void> => {
|
|
86
|
+
// native token don't need approval
|
|
87
|
+
if (isNativeTokenAddress(token.address)) {
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
const approvedAmount = await getAllowance(
|
|
91
|
+
token.chainId,
|
|
92
|
+
token.address,
|
|
93
|
+
walletClient.account!.address,
|
|
94
|
+
spenderAddress
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if (amount > approvedAmount) {
|
|
98
|
+
const approvalAmount = infiniteApproval ? maxUint256 : amount
|
|
99
|
+
|
|
100
|
+
const approveTx = await setAllowance(
|
|
101
|
+
walletClient,
|
|
102
|
+
token.address,
|
|
103
|
+
spenderAddress,
|
|
104
|
+
approvalAmount
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return approveTx
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Revoke approval for a certain token.
|
|
113
|
+
* @param request - The revoke request
|
|
114
|
+
* @param request.walletClient
|
|
115
|
+
* @param request.token
|
|
116
|
+
* @param request.spenderAddress
|
|
117
|
+
* @returns Returns Hash or nothing
|
|
118
|
+
*/
|
|
119
|
+
export const revokeTokenApproval = async ({
|
|
120
|
+
walletClient,
|
|
121
|
+
token,
|
|
122
|
+
spenderAddress,
|
|
123
|
+
}: RevokeApprovalRequest): Promise<Hash | void> => {
|
|
124
|
+
// native token don't need approval
|
|
125
|
+
if (isNativeTokenAddress(token.address)) {
|
|
126
|
+
return
|
|
127
|
+
}
|
|
128
|
+
const approvedAmount = await getAllowance(
|
|
129
|
+
token.chainId,
|
|
130
|
+
token.address,
|
|
131
|
+
walletClient.account!.address,
|
|
132
|
+
spenderAddress
|
|
133
|
+
)
|
|
134
|
+
if (approvedAmount > 0) {
|
|
135
|
+
const approveTx = await setAllowance(
|
|
136
|
+
walletClient,
|
|
137
|
+
token.address,
|
|
138
|
+
spenderAddress,
|
|
139
|
+
0n
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
return approveTx
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { WalletClient } from 'viem'
|
|
2
|
+
import { LiFiErrorCode, ProviderError } from '../../utils/errors.js'
|
|
3
|
+
import type { StatusManager } from '../StatusManager.js'
|
|
4
|
+
import type { LiFiStepExtended, SwitchChainHook } from '../types.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This method checks whether the wallet client is configured for the correct chain.
|
|
8
|
+
* If yes it returns the wallet clien.
|
|
9
|
+
* If no and if user interaction is allowed it triggers the switchChainHook. If no user interaction is allowed it aborts.
|
|
10
|
+
*
|
|
11
|
+
* Account Type: local -
|
|
12
|
+
* We need to create and return a new WalletClient from the switchChainHook in order to continue execution on a new chain.
|
|
13
|
+
*
|
|
14
|
+
* Account Type: json-rpc -
|
|
15
|
+
* We can switch chain and return existing WalletClient from the switchChainHook in order to continue execution on a new chain.
|
|
16
|
+
* @param walletClient
|
|
17
|
+
* @param statusManager
|
|
18
|
+
* @param step
|
|
19
|
+
* @param switchChainHook
|
|
20
|
+
* @param allowUserInteraction
|
|
21
|
+
* @returns New WalletClient
|
|
22
|
+
*/
|
|
23
|
+
export const switchChain = async (
|
|
24
|
+
walletClient: WalletClient,
|
|
25
|
+
statusManager: StatusManager,
|
|
26
|
+
step: LiFiStepExtended,
|
|
27
|
+
allowUserInteraction: boolean,
|
|
28
|
+
switchChainHook?: SwitchChainHook
|
|
29
|
+
): Promise<WalletClient | undefined> => {
|
|
30
|
+
// if we are already on the correct chain we can proceed directly
|
|
31
|
+
const currentChainId = await walletClient.getChainId()
|
|
32
|
+
if (currentChainId === step.action.fromChainId) {
|
|
33
|
+
return walletClient
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// -> set status message
|
|
37
|
+
step.execution = statusManager.initExecutionObject(step)
|
|
38
|
+
statusManager.updateExecution(step, 'ACTION_REQUIRED')
|
|
39
|
+
|
|
40
|
+
let switchProcess = statusManager.findOrCreateProcess(
|
|
41
|
+
step,
|
|
42
|
+
'SWITCH_CHAIN',
|
|
43
|
+
'ACTION_REQUIRED'
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
if (!allowUserInteraction) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const updatedWalletClient = await switchChainHook?.(step.action.fromChainId)
|
|
52
|
+
const updatedChainId = await updatedWalletClient?.getChainId()
|
|
53
|
+
if (updatedChainId !== step.action.fromChainId) {
|
|
54
|
+
throw new ProviderError(
|
|
55
|
+
LiFiErrorCode.ChainSwitchError,
|
|
56
|
+
'Chain switch required.'
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
switchProcess = statusManager.updateProcess(
|
|
61
|
+
step,
|
|
62
|
+
switchProcess.type,
|
|
63
|
+
'DONE'
|
|
64
|
+
)
|
|
65
|
+
statusManager.updateExecution(step, 'PENDING')
|
|
66
|
+
return updatedWalletClient
|
|
67
|
+
} catch (error: any) {
|
|
68
|
+
statusManager.updateProcess(step, switchProcess.type, 'FAILED', {
|
|
69
|
+
error: {
|
|
70
|
+
message: error.message,
|
|
71
|
+
code: LiFiErrorCode.ChainSwitchError,
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
statusManager.updateExecution(step, 'FAILED')
|
|
75
|
+
throw error
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ChainType, type Token } from '@lifi/types'
|
|
2
|
+
import type { Hash, WalletClient } from 'viem'
|
|
3
|
+
import type { SwitchChainHook } from '../types.js'
|
|
4
|
+
import { type SDKProvider } from '../types.js'
|
|
5
|
+
|
|
6
|
+
export interface EVMProviderOptions {
|
|
7
|
+
getWalletClient?: () => Promise<WalletClient>
|
|
8
|
+
switchChain?: SwitchChainHook
|
|
9
|
+
multisig?: MultisigConfig
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface EVMProvider extends SDKProvider {
|
|
13
|
+
setOptions(options: EVMProviderOptions): void
|
|
14
|
+
multisig?: MultisigConfig
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function isEVM(provider: SDKProvider): provider is EVMProvider {
|
|
18
|
+
return provider.type === ChainType.EVM
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type TokenSpender = {
|
|
22
|
+
token: Token
|
|
23
|
+
spenderAddress: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type TokenAllowance = {
|
|
27
|
+
token: Token
|
|
28
|
+
allowance?: bigint
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type TokenSpenderAllowance = {
|
|
32
|
+
token: Token
|
|
33
|
+
spenderAddress: string
|
|
34
|
+
allowance?: bigint
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ApproveTokenRequest {
|
|
38
|
+
walletClient: WalletClient
|
|
39
|
+
token: Token
|
|
40
|
+
spenderAddress: string
|
|
41
|
+
amount: bigint
|
|
42
|
+
infiniteApproval?: boolean
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface RevokeApprovalRequest {
|
|
46
|
+
walletClient: WalletClient
|
|
47
|
+
token: Token
|
|
48
|
+
spenderAddress: string
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface MultisigTxDetails {
|
|
52
|
+
status: 'DONE' | 'FAILED' | 'PENDING' | 'CANCELLED'
|
|
53
|
+
txHash?: Hash
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface MultisigTransaction {
|
|
57
|
+
to: string
|
|
58
|
+
value?: bigint
|
|
59
|
+
data: string
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface MultisigConfig {
|
|
63
|
+
isMultisigWalletClient: boolean
|
|
64
|
+
getMultisigTransactionDetails: (
|
|
65
|
+
txHash: Hash,
|
|
66
|
+
fromChainId: number,
|
|
67
|
+
updateIntermediateStatus?: () => void
|
|
68
|
+
) => Promise<MultisigTxDetails>
|
|
69
|
+
sendBatchTransaction?: (
|
|
70
|
+
batchTransactions: MultisigTransaction[]
|
|
71
|
+
) => Promise<Hash>
|
|
72
|
+
shouldBatchTransactions?: boolean
|
|
73
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
}
|