@lombard.finance/sdk 4.0.0 → 4.1.2
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/CHANGELOG.md +12 -0
- package/dist/bridge/lib/ccip-config.d.ts.map +1 -1
- package/dist/bridge/lib/config.d.ts +3 -3
- package/dist/bridge/lib/config.d.ts.map +1 -1
- package/dist/common/chains.d.ts +2 -2
- package/dist/common/chains.d.ts.map +1 -1
- package/dist/common/feature-config.d.ts.map +1 -1
- package/dist/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.d.ts.map +1 -1
- package/dist/index2.cjs +6 -6
- package/dist/index2.js +792 -759
- package/dist/vaults/lib/config.d.ts +1 -1
- package/package.json +7 -8
- package/src/__tests__/AssetNamespace.spec.ts +0 -234
- package/src/__tests__/helpers/createTestConfig.ts +0 -90
- package/src/__tests__/integration/automint-fee.integration.test.ts +0 -74
- package/src/__tests__/integration/btc-deposit.integration.test.ts +0 -109
- package/src/__tests__/integration/btc-stake-and-deploy.integration.test.ts +0 -96
- package/src/__tests__/integration/btc-stake.integration.test.ts +0 -466
- package/src/__tests__/integration/evm-actions.integration.test.ts +0 -932
- package/src/__tests__/integration/evm-deploy.integration.test.ts +0 -122
- package/src/__tests__/integration/evm-redeem.integration.test.ts +0 -157
- package/src/__tests__/integration/faq-patterns.integration.test.ts +0 -465
- package/src/__tests__/integration/getLBTCMintingFee.integration.test.ts +0 -195
- package/src/__tests__/real-wallet/btc/btc-stake.real.test.ts +0 -70
- package/src/__tests__/real-wallet/evm/evm-stake.real.test.ts +0 -47
- package/src/__tests__/real-wallet/evm/evm-unstake.real.test.ts +0 -49
- package/src/__tests__/real-wallet/non-evm/solana-unstake.real.test.ts +0 -19
- package/src/__tests__/real-wallet/non-evm/starknet-unstake.real.test.ts +0 -19
- package/src/__tests__/real-wallet/non-evm/sui-unstake.real.test.ts +0 -19
- package/src/__tests__/services/ApiService.test.ts +0 -62
- package/src/__tests__/services/BtcService.test.ts +0 -30
- package/src/__tests__/services/EvmService.test.ts +0 -39
- package/src/__tests__/setup.ts +0 -16
- package/src/__tests__/test-utils/eip1193-adapter.ts +0 -48
- package/src/__tests__/test-utils/evm-wallet.ts +0 -38
- package/src/__tests__/test-utils/solana-wallet.ts +0 -22
- package/src/__tests__/test-utils/starknet-wallet.ts +0 -9
- package/src/__tests__/test-utils/sui-wallet.ts +0 -14
- package/src/__tests__/test-utils/test-constraints.ts +0 -110
- package/src/__tests__/unit/btc/BtcDeposit.test.ts +0 -253
- package/src/__tests__/unit/btc/BtcDepositAndDeploy.test.ts +0 -174
- package/src/__tests__/unit/btc/BtcDepositConfig.test.ts +0 -143
- package/src/__tests__/unit/btc/BtcDepositStatusTransition.test.ts +0 -221
- package/src/__tests__/unit/btc/BtcStakeAndDeploy.test.ts +0 -194
- package/src/__tests__/unit/btc/ExistingSignatureHandling.test.ts +0 -301
- package/src/__tests__/unit/btc/StakeAndBakeRatioConversion.test.ts +0 -200
- package/src/__tests__/unit/btc/StakeAndBakeSignatureRestore.test.ts +0 -216
- package/src/__tests__/unit/btc/TokenParameterConsistency.test.ts +0 -184
- package/src/__tests__/unit/btc/btc-deposit-token.test.ts +0 -191
- package/src/__tests__/unit/catalog/AssetCatalog.test.ts +0 -293
- package/src/__tests__/unit/config/ChainConfig.test.ts +0 -47
- package/src/__tests__/unit/config/FeeAuthConfig.test.ts +0 -76
- package/src/__tests__/unit/contract-functions/getLBTCMintingFee.test.ts +0 -128
- package/src/__tests__/unit/core/chain-parsing.test.ts +0 -257
- package/src/__tests__/unit/defi/AvailableProtocols.test.ts +0 -100
- package/src/__tests__/unit/defi/DefiRegistry.test.ts +0 -25
- package/src/__tests__/unit/evm/EvmDeploy.test.ts +0 -224
- package/src/__tests__/unit/evm/EvmRedeem.test.ts +0 -207
- package/src/__tests__/unit/evm/EvmRedeemFeeAuth.test.ts +0 -93
- package/src/__tests__/unit/evm/EvmStake.test.ts +0 -207
- package/src/__tests__/unit/evm/EvmStakeFeeAuth.test.ts +0 -193
- package/src/__tests__/unit/evm/EvmUnstakeAllowance.test.ts +0 -69
- package/src/__tests__/unit/evm/EvmUnstakeConfig.test.ts +0 -203
- package/src/__tests__/unit/fee-signature-expiration.test.ts +0 -76
- package/src/__tests__/unit/modules/CapabilityRegistry.test.ts +0 -55
- package/src/__tests__/unit/shared/BaseAction.test.ts +0 -122
- package/src/__tests__/unit/shared/BaseBtcAction.test.ts +0 -114
- package/src/__tests__/unit/solana/SolanaUnstake.test.ts +0 -314
- package/src/__tests__/unit/starknet/StarknetUnstake.test.ts +0 -318
- package/src/__tests__/unit/sui/SuiUnstake.test.ts +0 -310
- package/src/__tests__/unit/utils/satoshi.test.ts +0 -27
- package/src/__tests__/unit/validation/address-validation.test.ts +0 -350
- package/src/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.stories.tsx +0 -71
- package/src/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.ts +0 -235
- package/src/api-functions/generateDepositBtcAddress/index.ts +0 -1
- package/src/api-functions/get-badges-by-address/get-badges-by-address.ts +0 -13
- package/src/api-functions/get-badges-by-address/index.ts +0 -1
- package/src/api-functions/getDepositAddressReferrer/getDepositAddressReferrer.ts +0 -38
- package/src/api-functions/getDepositAddressReferrer/index.ts +0 -1
- package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.stories.tsx +0 -59
- package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.test.ts +0 -265
- package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.ts +0 -167
- package/src/api-functions/getDepositBtcAddress/getDepositBtcAddresses.stories.tsx +0 -58
- package/src/api-functions/getDepositBtcAddress/index.ts +0 -1
- package/src/api-functions/getDepositBtcAddress/make-request.ts +0 -59
- package/src/api-functions/getDepositBtcAddress/types.ts +0 -106
- package/src/api-functions/getDepositsByAddress/getDepositsByAddress.stories.tsx +0 -51
- package/src/api-functions/getDepositsByAddress/getDepositsByAddress.ts +0 -502
- package/src/api-functions/getDepositsByAddress/index.ts +0 -1
- package/src/api-functions/getLBTCExchangeRate/get-exchange-ratio.stories.tsx +0 -48
- package/src/api-functions/getLBTCExchangeRate/get-exchange-ratio.ts +0 -59
- package/src/api-functions/getLBTCExchangeRate/getLBTCExchangeRate.stories.tsx +0 -55
- package/src/api-functions/getLBTCExchangeRate/getLBTCExchangeRate.ts +0 -75
- package/src/api-functions/getLBTCExchangeRate/index.ts +0 -2
- package/src/api-functions/getNetworkFeeSignature/getNetworkFeeSignature.stories.tsx +0 -59
- package/src/api-functions/getNetworkFeeSignature/getNetworkFeeSignature.ts +0 -116
- package/src/api-functions/getNetworkFeeSignature/index.ts +0 -1
- package/src/api-functions/getPointsByAddress/getPointsByAddress.stories.tsx +0 -51
- package/src/api-functions/getPointsByAddress/getPointsByAddress.ts +0 -304
- package/src/api-functions/getPointsByAddress/index.ts +0 -1
- package/src/api-functions/getUnstakesByAddress/getUnstakesByAddress.stories.tsx +0 -51
- package/src/api-functions/getUnstakesByAddress/getUnstakesByAddress.ts +0 -368
- package/src/api-functions/getUnstakesByAddress/index.ts +0 -1
- package/src/api-functions/getUserStakeAndBakeSignature/getUserStakeAndBakeSignature.stories.tsx +0 -70
- package/src/api-functions/getUserStakeAndBakeSignature/getUserStakeAndBakeSignature.ts +0 -91
- package/src/api-functions/getUserStakeAndBakeSignature/index.ts +0 -1
- package/src/api-functions/index.ts +0 -11
- package/src/api-functions/setReferral/index.ts +0 -1
- package/src/api-functions/setReferral/setReferral.ts +0 -67
- package/src/api-functions/storeNetworkFeeSignature/index.ts +0 -1
- package/src/api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature.stories.tsx +0 -57
- package/src/api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature.ts +0 -75
- package/src/api-functions/storeStakeAndBakeSignature/index.ts +0 -1
- package/src/api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature.stories.tsx +0 -57
- package/src/api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature.ts +0 -61
- package/src/bridge/abi/CCIP_BRIDGE_ADAPTER_ABI.json +0 -704
- package/src/bridge/abi/CCIP_ROUTER_ABI.json +0 -702
- package/src/bridge/abi/OFT_BRIDGE_ADAPTER_ABI.json +0 -912
- package/src/bridge/index.ts +0 -16
- package/src/bridge/lib/bridge.stories.tsx +0 -90
- package/src/bridge/lib/bridge.ts +0 -115
- package/src/bridge/lib/ccip-bridge.stories.tsx +0 -91
- package/src/bridge/lib/ccip-bridge.ts +0 -214
- package/src/bridge/lib/ccip-config.ts +0 -54
- package/src/bridge/lib/config.ts +0 -384
- package/src/bridge/lib/oft-bridge.stories.tsx +0 -90
- package/src/bridge/lib/oft-bridge.ts +0 -217
- package/src/chains/btc/BtcActions.ts +0 -192
- package/src/chains/btc/actions/deposit/BtcDeposit.ts +0 -388
- package/src/chains/btc/actions/deposit/config/evm.ts +0 -197
- package/src/chains/btc/actions/deposit/config/index.ts +0 -53
- package/src/chains/btc/actions/deposit/config/types.ts +0 -108
- package/src/chains/btc/actions/deposit/factory.ts +0 -53
- package/src/chains/btc/actions/deposit/index.ts +0 -23
- package/src/chains/btc/actions/deposit/types.ts +0 -120
- package/src/chains/btc/actions/depositAndDeploy/BtcDepositAndDeploy.ts +0 -366
- package/src/chains/btc/actions/depositAndDeploy/config/evm.ts +0 -105
- package/src/chains/btc/actions/depositAndDeploy/config/index.ts +0 -111
- package/src/chains/btc/actions/depositAndDeploy/config/types.ts +0 -67
- package/src/chains/btc/actions/depositAndDeploy/factory.ts +0 -38
- package/src/chains/btc/actions/depositAndDeploy/index.ts +0 -24
- package/src/chains/btc/actions/depositAndDeploy/types.ts +0 -120
- package/src/chains/btc/actions/index.ts +0 -14
- package/src/chains/btc/actions/shared/BaseBtcAction.ts +0 -495
- package/src/chains/btc/actions/shared/index.ts +0 -28
- package/src/chains/btc/actions/shared/tokenUtils.ts +0 -68
- package/src/chains/btc/actions/shared/validation.ts +0 -180
- package/src/chains/btc/actions/stake/BtcStake.ts +0 -433
- package/src/chains/btc/actions/stake/__tests__/BtcStake.test.ts +0 -247
- package/src/chains/btc/actions/stake/config/evm.ts +0 -183
- package/src/chains/btc/actions/stake/config/index.ts +0 -122
- package/src/chains/btc/actions/stake/config/solana.ts +0 -96
- package/src/chains/btc/actions/stake/config/starknet.ts +0 -66
- package/src/chains/btc/actions/stake/config/sui.ts +0 -61
- package/src/chains/btc/actions/stake/config/types.ts +0 -165
- package/src/chains/btc/actions/stake/factory.ts +0 -53
- package/src/chains/btc/actions/stake/index.ts +0 -22
- package/src/chains/btc/actions/stake/types.ts +0 -175
- package/src/chains/btc/actions/stakeAndDeploy/BtcStakeAndDeploy.ts +0 -415
- package/src/chains/btc/actions/stakeAndDeploy/config/evm.ts +0 -135
- package/src/chains/btc/actions/stakeAndDeploy/config/index.ts +0 -119
- package/src/chains/btc/actions/stakeAndDeploy/config/types.ts +0 -93
- package/src/chains/btc/actions/stakeAndDeploy/factory.ts +0 -54
- package/src/chains/btc/actions/stakeAndDeploy/index.ts +0 -26
- package/src/chains/btc/actions/stakeAndDeploy/types.ts +0 -118
- package/src/chains/btc/client/getCurrentBlockHeight.ts +0 -28
- package/src/chains/btc/client/mempool/error.ts +0 -24
- package/src/chains/btc/client/mempool/mempool.ts +0 -23
- package/src/chains/btc/index.ts +0 -71
- package/src/chains/evm/EvmActions.ts +0 -185
- package/src/chains/evm/actions/deploy/EvmDeploy.ts +0 -256
- package/src/chains/evm/actions/deploy/config/evm.ts +0 -80
- package/src/chains/evm/actions/deploy/config/index.ts +0 -8
- package/src/chains/evm/actions/deploy/config/types.ts +0 -43
- package/src/chains/evm/actions/deploy/factory.ts +0 -44
- package/src/chains/evm/actions/deploy/index.ts +0 -17
- package/src/chains/evm/actions/deploy/types.ts +0 -74
- package/src/chains/evm/actions/deposit/EvmDeposit.ts +0 -159
- package/src/chains/evm/actions/deposit/config/evm.ts +0 -100
- package/src/chains/evm/actions/deposit/config/index.ts +0 -8
- package/src/chains/evm/actions/deposit/config/types.ts +0 -39
- package/src/chains/evm/actions/deposit/factory.ts +0 -44
- package/src/chains/evm/actions/deposit/index.ts +0 -17
- package/src/chains/evm/actions/deposit/types.ts +0 -87
- package/src/chains/evm/actions/index.ts +0 -67
- package/src/chains/evm/actions/redeem/EvmRedeem.ts +0 -263
- package/src/chains/evm/actions/redeem/config/evm.ts +0 -85
- package/src/chains/evm/actions/redeem/config/index.ts +0 -8
- package/src/chains/evm/actions/redeem/config/types.ts +0 -39
- package/src/chains/evm/actions/redeem/factory.ts +0 -43
- package/src/chains/evm/actions/redeem/index.ts +0 -17
- package/src/chains/evm/actions/redeem/types.ts +0 -93
- package/src/chains/evm/actions/stake/EvmStake.ts +0 -339
- package/src/chains/evm/actions/stake/config/evm.ts +0 -89
- package/src/chains/evm/actions/stake/config/index.ts +0 -8
- package/src/chains/evm/actions/stake/config/types.ts +0 -89
- package/src/chains/evm/actions/stake/factory.ts +0 -52
- package/src/chains/evm/actions/stake/index.ts +0 -30
- package/src/chains/evm/actions/stake/types.ts +0 -104
- package/src/chains/evm/actions/unstake/EvmUnstake.ts +0 -258
- package/src/chains/evm/actions/unstake/config/evm.ts +0 -123
- package/src/chains/evm/actions/unstake/config/index.ts +0 -13
- package/src/chains/evm/actions/unstake/config/types.ts +0 -37
- package/src/chains/evm/actions/unstake/factory.ts +0 -44
- package/src/chains/evm/actions/unstake/index.ts +0 -22
- package/src/chains/evm/actions/unstake/types.ts +0 -87
- package/src/chains/evm/index.ts +0 -16
- package/src/chains/evm/shared/feeAuth.ts +0 -198
- package/src/chains/evm/shared/index.ts +0 -7
- package/src/chains/solana/SolanaActions.ts +0 -85
- package/src/chains/solana/actions/index.ts +0 -7
- package/src/chains/solana/actions/unstake/SolanaUnstake.ts +0 -151
- package/src/chains/solana/actions/unstake/config/btc.ts +0 -47
- package/src/chains/solana/actions/unstake/config/index.ts +0 -8
- package/src/chains/solana/actions/unstake/config/solana.ts +0 -47
- package/src/chains/solana/actions/unstake/config/types.ts +0 -35
- package/src/chains/solana/actions/unstake/factory.ts +0 -34
- package/src/chains/solana/actions/unstake/index.ts +0 -14
- package/src/chains/solana/actions/unstake/types.ts +0 -58
- package/src/chains/solana/index.ts +0 -8
- package/src/chains/starknet/StarknetActions.ts +0 -85
- package/src/chains/starknet/actions/index.ts +0 -7
- package/src/chains/starknet/actions/unstake/StarknetUnstake.ts +0 -128
- package/src/chains/starknet/actions/unstake/config/btc.ts +0 -43
- package/src/chains/starknet/actions/unstake/config/index.ts +0 -8
- package/src/chains/starknet/actions/unstake/config/starknet.ts +0 -43
- package/src/chains/starknet/actions/unstake/config/types.ts +0 -27
- package/src/chains/starknet/actions/unstake/factory.ts +0 -32
- package/src/chains/starknet/actions/unstake/index.ts +0 -14
- package/src/chains/starknet/actions/unstake/types.ts +0 -57
- package/src/chains/starknet/index.ts +0 -8
- package/src/chains/sui/SuiActions.ts +0 -82
- package/src/chains/sui/actions/index.ts +0 -7
- package/src/chains/sui/actions/unstake/SuiUnstake.ts +0 -146
- package/src/chains/sui/actions/unstake/config/btc.ts +0 -43
- package/src/chains/sui/actions/unstake/config/index.ts +0 -8
- package/src/chains/sui/actions/unstake/config/sui.ts +0 -43
- package/src/chains/sui/actions/unstake/config/types.ts +0 -27
- package/src/chains/sui/actions/unstake/factory.ts +0 -32
- package/src/chains/sui/actions/unstake/index.ts +0 -14
- package/src/chains/sui/actions/unstake/types.ts +0 -57
- package/src/chains/sui/index.ts +0 -8
- package/src/client/ApiNamespace.ts +0 -302
- package/src/client/AssetNamespace.ts +0 -112
- package/src/client/LombardSDK.ts +0 -212
- package/src/client/PartnerConfiguration.ts +0 -50
- package/src/client/createConfig.ts +0 -90
- package/src/client/createLombardSDK.ts +0 -130
- package/src/clients/evm-signer-adapter.ts +0 -313
- package/src/clients/public-client.ts +0 -49
- package/src/clients/rpc-url-config.ts +0 -64
- package/src/clients/wallet-client.ts +0 -34
- package/src/common/api-config.ts +0 -48
- package/src/common/blockchain-identifier.ts +0 -217
- package/src/common/chains.stories.tsx +0 -68
- package/src/common/chains.ts +0 -449
- package/src/common/constants.ts +0 -1
- package/src/common/contract-info.ts +0 -9
- package/src/common/feature-config.ts +0 -79
- package/src/common/fee-requirements.ts +0 -34
- package/src/common/parameters.ts +0 -89
- package/src/config/defaults.ts +0 -49
- package/src/config/index.ts +0 -12
- package/src/config/providers.ts +0 -81
- package/src/config/types.ts +0 -216
- package/src/config/validation.ts +0 -69
- package/src/contract-functions/approveLBTC/approveLBTC.stories.tsx +0 -79
- package/src/contract-functions/approveLBTC/approveLBTC.ts +0 -66
- package/src/contract-functions/approveLBTC/index.ts +0 -1
- package/src/contract-functions/approveToken/approveToken.ts +0 -126
- package/src/contract-functions/approveToken/index.ts +0 -1
- package/src/contract-functions/claimLBTC/claimLBTC.stories.tsx +0 -82
- package/src/contract-functions/claimLBTC/claimLBTC.ts +0 -159
- package/src/contract-functions/claimLBTC/index.ts +0 -1
- package/src/contract-functions/claimUnstakeRedeem/claimUnstakeRedeem.ts +0 -95
- package/src/contract-functions/claimUnstakeRedeem/index.ts +0 -1
- package/src/contract-functions/deposit/depositToken.stories.tsx +0 -83
- package/src/contract-functions/deposit/depositToken.ts +0 -214
- package/src/contract-functions/deposit/index.ts +0 -1
- package/src/contract-functions/getBasculeDepositStatus/decodeBasculeDepositStatus.ts +0 -170
- package/src/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.stories.tsx +0 -62
- package/src/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.ts +0 -211
- package/src/contract-functions/getBasculeDepositStatus/index.ts +0 -2
- package/src/contract-functions/getLBTCMintingFee/getLBTCMintingFee.stories.tsx +0 -61
- package/src/contract-functions/getLBTCMintingFee/getLBTCMintingFee.ts +0 -193
- package/src/contract-functions/getLBTCMintingFee/index.ts +0 -1
- package/src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.stories.tsx +0 -51
- package/src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.ts +0 -40
- package/src/contract-functions/getLBTCTotalSupply/index.ts +0 -1
- package/src/contract-functions/getPermitNonce/getPermitNonce.stories.tsx +0 -56
- package/src/contract-functions/getPermitNonce/getPermitNonce.ts +0 -50
- package/src/contract-functions/getPermitNonce/index.ts +0 -1
- package/src/contract-functions/getShareValue/getShareValue.stories.tsx +0 -58
- package/src/contract-functions/getShareValue/getShareValue.ts +0 -59
- package/src/contract-functions/getShareValue/index.ts +0 -1
- package/src/contract-functions/getSharesByAddress/getSharesByAddress.stories.tsx +0 -65
- package/src/contract-functions/getSharesByAddress/getSharesByAddress.ts +0 -86
- package/src/contract-functions/getSharesByAddress/index.ts +0 -4
- package/src/contract-functions/getStakeAndBakeFee/__tests__/getStakeAndBakeFee.test.ts +0 -167
- package/src/contract-functions/getStakeAndBakeFee/getStakeAndBakeFee.stories.tsx +0 -180
- package/src/contract-functions/getStakeAndBakeFee/getStakeAndBakeFee.tsx +0 -101
- package/src/contract-functions/getStakeAndBakeFee/index.ts +0 -1
- package/src/contract-functions/index.ts +0 -21
- package/src/contract-functions/signLbtcDestionationAddr/index.ts +0 -1
- package/src/contract-functions/signLbtcDestionationAddr/signLbtcDestinationAddr.ts +0 -32
- package/src/contract-functions/signLbtcDestionationAddr/signLbtcDestionationAddr.stories.tsx +0 -64
- package/src/contract-functions/signNetworkFee/getTypedData.ts +0 -41
- package/src/contract-functions/signNetworkFee/index.ts +0 -1
- package/src/contract-functions/signNetworkFee/signNetworkFee.stories.tsx +0 -94
- package/src/contract-functions/signNetworkFee/signNetworkFee.ts +0 -106
- package/src/contract-functions/signStakeAndBake/__tests__/signStakeAndBake.test.ts +0 -888
- package/src/contract-functions/signStakeAndBake/handleApprove.ts +0 -81
- package/src/contract-functions/signStakeAndBake/handlePermit.ts +0 -28
- package/src/contract-functions/signStakeAndBake/index.ts +0 -2
- package/src/contract-functions/signStakeAndBake/signStakeAndBake.stories.tsx +0 -202
- package/src/contract-functions/signStakeAndBake/signStakeAndBake.ts +0 -160
- package/src/contract-functions/signStakeAndBake/typed-data-builder.ts +0 -137
- package/src/contract-functions/signStakeAndBake/utils.ts +0 -61
- package/src/contract-functions/signStakeAndBake/validation.ts +0 -124
- package/src/contract-functions/unstakeLBTC/index.ts +0 -1
- package/src/contract-functions/unstakeLBTC/unstakeLBTC.stories.tsx +0 -92
- package/src/contract-functions/unstakeLBTC/unstakeLBTC.ts +0 -396
- package/src/contracts/abis/index.ts +0 -29
- package/src/contracts/index.ts +0 -63
- package/src/contracts/types.ts +0 -143
- package/src/contracts/utils.ts +0 -288
- package/src/core/assets/catalog.ts +0 -343
- package/src/core/assets/index.ts +0 -40
- package/src/core/assets/types.ts +0 -142
- package/src/core/assets/utils.ts +0 -287
- package/src/core/chains/catalog.ts +0 -396
- package/src/core/chains/index.ts +0 -39
- package/src/core/chains/types.ts +0 -193
- package/src/core/chains/utils.ts +0 -245
- package/src/core/index.ts +0 -72
- package/src/core/types.ts +0 -126
- package/src/debug-api/btc-script-to-address.ts +0 -20
- package/src/debug-api/btc-tx-info.ts +0 -32
- package/src/debug-api/evm-by-btc-address.ts +0 -26
- package/src/debug-api/index.ts +0 -3
- package/src/defi/README.md +0 -517
- package/src/defi/defi-registry.stories.tsx +0 -527
- package/src/defi/defi-registry.ts +0 -295
- package/src/defi/index.ts +0 -17
- package/src/index.ts +0 -336
- package/src/metrics/get-additional-rewards.ts +0 -69
- package/src/metrics/get-lbtc-apy.ts +0 -74
- package/src/metrics/get-lbtc-stats.stories.tsx +0 -57
- package/src/metrics/get-lbtc-stats.ts +0 -59
- package/src/metrics/get-positions-summary.stories.tsx +0 -58
- package/src/metrics/get-positions-summary.ts +0 -132
- package/src/modules/CapabilityRegistry.ts +0 -125
- package/src/modules/apiModule.ts +0 -51
- package/src/modules/btcModule.ts +0 -43
- package/src/modules/evmModule.ts +0 -48
- package/src/modules/index.ts +0 -60
- package/src/referrals/ReferralsClient.ts +0 -34
- package/src/referrals/index.ts +0 -1
- package/src/services/ApiService.ts +0 -152
- package/src/services/BtcService.ts +0 -29
- package/src/services/EvmService.ts +0 -127
- package/src/services/index.ts +0 -43
- package/src/shared/__tests__/errors.test.ts +0 -185
- package/src/shared/__tests__/events.test.ts +0 -120
- package/src/shared/__tests__/types.test.ts +0 -155
- package/src/shared/actions/BaseAction.ts +0 -497
- package/src/shared/actions/__tests__/BaseAction.test.ts +0 -292
- package/src/shared/actions/index.ts +0 -9
- package/src/shared/constants/statusConstants.ts +0 -108
- package/src/shared/context/ContextBuilder.ts +0 -149
- package/src/shared/context/index.ts +0 -8
- package/src/shared/context/types.ts +0 -156
- package/src/shared/deposits/depositStatus.ts +0 -402
- package/src/shared/deposits/index.ts +0 -29
- package/src/shared/errors.ts +0 -405
- package/src/shared/events.ts +0 -260
- package/src/shared/evm/switchChain.ts +0 -109
- package/src/shared/index.ts +0 -54
- package/src/shared/monitoring/__tests__/createEventEmitter.test.ts +0 -150
- package/src/shared/monitoring/createEventEmitter.ts +0 -160
- package/src/shared/monitoring/createProgressEmitter.ts +0 -46
- package/src/shared/monitoring/depositMonitor.ts +0 -211
- package/src/shared/monitoring/index.ts +0 -25
- package/src/shared/validation/index.ts +0 -411
- package/src/stories/arg-types.ts +0 -38
- package/src/stories/components/Badge.tsx +0 -27
- package/src/stories/components/Button/Button.css +0 -10
- package/src/stories/components/Button/Button.tsx +0 -52
- package/src/stories/components/Button/index.ts +0 -1
- package/src/stories/components/Card.tsx +0 -18
- package/src/stories/components/CodeBlock/CodeBlock.tsx +0 -27
- package/src/stories/components/CodeBlock/CodeBlockStyles.css +0 -3
- package/src/stories/components/CodeBlock/index.ts +0 -1
- package/src/stories/components/ConnectButton/connect-button.tsx +0 -248
- package/src/stories/components/ConnectButton/index.ts +0 -1
- package/src/stories/components/JsonPreview.tsx +0 -84
- package/src/stories/components/Spinner/Spinner.tsx +0 -27
- package/src/stories/components/Spinner/index.ts +0 -1
- package/src/stories/components/StatsCard.tsx +0 -30
- package/src/stories/components/StatusIndicator.tsx +0 -37
- package/src/stories/components/TreeNode.tsx +0 -47
- package/src/stories/components/decorators/function-type.tsx +0 -63
- package/src/stories/components/decorators/index.ts +0 -2
- package/src/stories/components/decorators/wagmi-decorator.tsx +0 -92
- package/src/stories/components/error-block.tsx +0 -21
- package/src/stories/components/index.ts +0 -11
- package/src/stories/constants.ts +0 -3
- package/src/stories/hooks/useConnection.ts +0 -63
- package/src/stories/hooks/useQuery.ts +0 -57
- package/src/tokens/__tests__/token-addresses.test.ts +0 -551
- package/src/tokens/abi/ASSET_ROUTER_ABI.ts +0 -1966
- package/src/tokens/abi/BRIDGE_TOKEN_ADAPTER_ABI.ts +0 -1405
- package/src/tokens/abi/BTCK_ABI.ts +0 -1092
- package/src/tokens/abi/KATANA_BASCULE_ABI.ts +0 -653
- package/src/tokens/abi/LBTC_ABI.json +0 -1761
- package/src/tokens/abi/LBTC_ABI.ts +0 -1761
- package/src/tokens/abi/LBTC_BASCULE_ABI.json +0 -850
- package/src/tokens/abi/NATIVE_LBTC_ABI.ts +0 -1147
- package/src/tokens/abi/STLBTC_ABI.ts +0 -1062
- package/src/tokens/cross-chain-addresses.stories.tsx +0 -236
- package/src/tokens/denomination-utils.stories.tsx +0 -176
- package/src/tokens/getLbtcContractAddresses.stories.tsx +0 -158
- package/src/tokens/getTokenByAddress.stories.tsx +0 -172
- package/src/tokens/getTokenContractInfo.stories.tsx +0 -148
- package/src/tokens/getTokenInfo.stories.tsx +0 -133
- package/src/tokens/isUpgradedContract.stories.tsx +0 -124
- package/src/tokens/lbtc-addresses.ts +0 -18
- package/src/tokens/token-addresses.ts +0 -477
- package/src/tokens/tokens.ts +0 -249
- package/src/tokens/types.ts +0 -80
- package/src/utils/array.ts +0 -31
- package/src/utils/block.ts +0 -23
- package/src/utils/chain.ts +0 -152
- package/src/utils/consoleLogger.ts +0 -140
- package/src/utils/ensureNotSanctionedAddress.ts +0 -11
- package/src/utils/env.ts +0 -20
- package/src/utils/err.ts +0 -83
- package/src/utils/evmAccount.ts +0 -47
- package/src/utils/gas.ts +0 -36
- package/src/utils/hex.ts +0 -9
- package/src/utils/http.ts +0 -224
- package/src/utils/numbers.ts +0 -37
- package/src/utils/pagination.ts +0 -70
- package/src/utils/satoshi.ts +0 -41
- package/src/utils/time.ts +0 -12
- package/src/utils/transaction-executor.ts +0 -299
- package/src/vaults/abi/SILO_VAULT_SPENDER_ABI.json +0 -793
- package/src/vaults/abi/VEDA_VAULT_ABI.json +0 -452
- package/src/vaults/abi/VEDA_VAULT_ACCOUNTANT_ABI.json +0 -591
- package/src/vaults/abi/VEDA_VAULT_BASE_ASSET_ABI.json +0 -296
- package/src/vaults/abi/VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI.json +0 -502
- package/src/vaults/abi/VEDA_VAULT_LENS_ABI.json +0 -175
- package/src/vaults/abi/VEDA_VAULT_SPENDER_ABI.json +0 -408
- package/src/vaults/abi/VEDA_VAULT_TELLER_ABI.json +0 -700
- package/src/vaults/abi/index.ts +0 -4
- package/src/vaults/index.ts +0 -46
- package/src/vaults/lib/config.ts +0 -184
- package/src/vaults/lib/metrics/get-vault-apy.stories.tsx +0 -58
- package/src/vaults/lib/metrics/get-vault-apy.ts +0 -176
- package/src/vaults/lib/metrics/get-vault-points.stories.tsx +0 -60
- package/src/vaults/lib/metrics/get-vault-points.ts +0 -74
- package/src/vaults/lib/metrics/get-vault-tvl.stories.tsx +0 -58
- package/src/vaults/lib/metrics/get-vault-tvl.ts +0 -121
- package/src/vaults/lib/ops/cancel-withdraw.stories.tsx +0 -80
- package/src/vaults/lib/ops/deposit.stories.tsx +0 -82
- package/src/vaults/lib/ops/deposit.ts +0 -152
- package/src/vaults/lib/ops/get-vault-deposits.stories.tsx +0 -65
- package/src/vaults/lib/ops/get-vault-deposits.ts +0 -209
- package/src/vaults/lib/ops/get-vault-withdrawals.stories.tsx +0 -67
- package/src/vaults/lib/ops/get-vault-withdrawals.ts +0 -349
- package/src/vaults/lib/ops/withdraw.stories.tsx +0 -82
- package/src/vaults/lib/ops/withdraw.ts +0 -225
- package/src/version.ts +0 -56
- package/src/vite-env.d.ts +0 -1
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM Redeem Action Unit Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests the LBTC → BTC.b redemption flow on EVM chains.
|
|
5
|
-
*
|
|
6
|
-
* @module __tests__/unit/evm/EvmRedeem.test.ts
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
10
|
-
|
|
11
|
-
import { AssetId, Chain } from '../../../core';
|
|
12
|
-
import { LombardError, ValidationErrorCode } from '../../../shared/errors';
|
|
13
|
-
|
|
14
|
-
describe('EvmRedeem Interface', () => {
|
|
15
|
-
describe('EvmRedeemParams', () => {
|
|
16
|
-
it('should require LBTC as input asset', () => {
|
|
17
|
-
const params = {
|
|
18
|
-
assetIn: AssetId.LBTC,
|
|
19
|
-
assetOut: AssetId.BTCb,
|
|
20
|
-
sourceChain: Chain.AVALANCHE,
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
expect(params.assetIn).toBe(AssetId.LBTC);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('should require BTCb as output asset', () => {
|
|
27
|
-
const params = {
|
|
28
|
-
assetIn: AssetId.LBTC,
|
|
29
|
-
assetOut: AssetId.BTCb,
|
|
30
|
-
sourceChain: Chain.AVALANCHE,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
expect(params.assetOut).toBe(AssetId.BTCb);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should be same-chain operation', () => {
|
|
37
|
-
const params = {
|
|
38
|
-
assetIn: AssetId.LBTC,
|
|
39
|
-
assetOut: AssetId.BTCb,
|
|
40
|
-
sourceChain: Chain.AVALANCHE,
|
|
41
|
-
destChain: Chain.AVALANCHE, // Same as source
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
expect(params.sourceChain).toBe(params.destChain);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
describe('EvmRedeemPrepareParams', () => {
|
|
49
|
-
it('should accept valid prepare parameters', () => {
|
|
50
|
-
const params = {
|
|
51
|
-
amount: '0.1',
|
|
52
|
-
recipient: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0',
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
expect(params.amount).toBe('0.1');
|
|
56
|
-
expect(params.recipient).toBeDefined();
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should require EVM recipient address', () => {
|
|
60
|
-
const params = {
|
|
61
|
-
amount: '0.1',
|
|
62
|
-
recipient: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0',
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
expect(params.recipient).toMatch(/^0x/);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
describe('Status Transitions', () => {
|
|
70
|
-
it('should define all required status values', () => {
|
|
71
|
-
const statuses = [
|
|
72
|
-
'idle',
|
|
73
|
-
'needs-approval',
|
|
74
|
-
'ready',
|
|
75
|
-
'completed',
|
|
76
|
-
];
|
|
77
|
-
|
|
78
|
-
statuses.forEach(status => {
|
|
79
|
-
expect(typeof status).toBe('string');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('Method Signatures', () => {
|
|
85
|
-
it('should define prepare method', () => {
|
|
86
|
-
type PrepareMethod = (params: { amount: string; recipient: string }) => Promise<void>;
|
|
87
|
-
const testType: PrepareMethod = async () => {};
|
|
88
|
-
expect(testType).toBeDefined();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should define approve method', () => {
|
|
92
|
-
type ApproveMethod = () => Promise<void>;
|
|
93
|
-
const testType: ApproveMethod = async () => {};
|
|
94
|
-
expect(testType).toBeDefined();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should define execute method', () => {
|
|
98
|
-
type ExecuteMethod = () => Promise<{ txHash: string }>;
|
|
99
|
-
const testType: ExecuteMethod = async () => ({ txHash: '0x123' });
|
|
100
|
-
expect(testType).toBeDefined();
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
describe('Redemption Logic', () => {
|
|
105
|
-
it('should burn LBTC and mint BTC.b', () => {
|
|
106
|
-
// Redeem burns LBTC and mints equivalent BTC.b
|
|
107
|
-
const redeemFlow = {
|
|
108
|
-
input: AssetId.LBTC,
|
|
109
|
-
output: AssetId.BTCb,
|
|
110
|
-
operation: 'burn-and-mint',
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
expect(redeemFlow.operation).toBe('burn-and-mint');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should be 1:1 conversion', () => {
|
|
117
|
-
const inputAmount = '0.1';
|
|
118
|
-
const outputAmount = '0.1'; // 1:1 ratio
|
|
119
|
-
|
|
120
|
-
expect(inputAmount).toBe(outputAmount);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
describe('Token Approval', () => {
|
|
125
|
-
it('should require LBTC approval before redemption', () => {
|
|
126
|
-
const approvalRequired = true;
|
|
127
|
-
expect(approvalRequired).toBe(true);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
describe('Error Handling', () => {
|
|
132
|
-
it('should reject BTC as output (use unstake)', () => {
|
|
133
|
-
const error = new LombardError(
|
|
134
|
-
ValidationErrorCode.INVALID_ASSET,
|
|
135
|
-
`Cannot redeem to BTC. Use EvmUnstake for LBTC → BTC.`,
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
expect(error.code).toBe(ValidationErrorCode.INVALID_ASSET);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it('should reject chains without BTC.b support', () => {
|
|
142
|
-
const error = new LombardError(
|
|
143
|
-
ValidationErrorCode.INVALID_CHAIN,
|
|
144
|
-
`BTC.b is not available on ethereum. Cannot redeem.`,
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
expect(error.code).toBe(ValidationErrorCode.INVALID_CHAIN);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('should handle insufficient LBTC balance', () => {
|
|
151
|
-
const error = new LombardError(
|
|
152
|
-
ValidationErrorCode.INVALID_PARAMETER,
|
|
153
|
-
`Insufficient LBTC balance for redemption.`,
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
expect(error.message).toContain('Insufficient');
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
describe('Chain Support', () => {
|
|
161
|
-
it('should support Avalanche chains', () => {
|
|
162
|
-
const supportedChains = [Chain.AVALANCHE, Chain.AVALANCHE_FUJI];
|
|
163
|
-
|
|
164
|
-
// Chains are CAIP-2 format (e.g., eip155:43114)
|
|
165
|
-
supportedChains.forEach(chain => {
|
|
166
|
-
expect(chain).toBeDefined();
|
|
167
|
-
expect(typeof chain).toBe('string');
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// Verify they are the correct Avalanche chain IDs
|
|
171
|
-
expect(supportedChains).toContain(Chain.AVALANCHE);
|
|
172
|
-
expect(supportedChains).toContain(Chain.AVALANCHE_FUJI);
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
describe('Event Emissions', () => {
|
|
177
|
-
it('should emit progress events', () => {
|
|
178
|
-
const handler = vi.fn((progress: { status: string; txHash?: string }) => {
|
|
179
|
-
expect(progress.status).toBeDefined();
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
handler({ status: 'completed', txHash: '0x123' });
|
|
183
|
-
expect(handler).toHaveBeenCalledOnce();
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
describe('Public Properties', () => {
|
|
188
|
-
it('should expose status property', () => {
|
|
189
|
-
type HasStatus = { readonly status: string };
|
|
190
|
-
const obj: HasStatus = { status: 'idle' };
|
|
191
|
-
expect(obj.status).toBe('idle');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('should expose amount property', () => {
|
|
195
|
-
type HasAmount = { readonly amount?: string };
|
|
196
|
-
const obj: HasAmount = { amount: '0.1' };
|
|
197
|
-
expect(obj.amount).toBe('0.1');
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it('should expose txHash after execute', () => {
|
|
201
|
-
type HasTxHash = { readonly txHash?: string };
|
|
202
|
-
const obj: HasTxHash = { txHash: '0x123' };
|
|
203
|
-
expect(obj.txHash).toBeDefined();
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM Redeem Fee Authorization Tests
|
|
3
|
-
*
|
|
4
|
-
* Verifies that:
|
|
5
|
-
* 1. EvmRedeem correctly checks for fee authorization on unsubsidized chains
|
|
6
|
-
* 2. EvmRedeem skips fee auth on subsidized chains
|
|
7
|
-
* 3. EvmRedeem correctly handles existing valid signatures
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { afterEach,beforeEach, describe, expect, it, vi } from 'vitest';
|
|
11
|
-
|
|
12
|
-
import { ChainId } from '../../../common/chains';
|
|
13
|
-
import { requiresAutoMintFee } from '../../../common/fee-requirements';
|
|
14
|
-
import { EvmOperationStatus } from '../../../shared/constants/statusConstants';
|
|
15
|
-
|
|
16
|
-
// Mock the fee requirements module
|
|
17
|
-
vi.mock('../../../common/fee-requirements', () => ({
|
|
18
|
-
requiresAutoMintFee: vi.fn(),
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
describe('EVM Redeem Fee Authorization', () => {
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
vi.clearAllMocks();
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
afterEach(() => {
|
|
27
|
-
vi.restoreAllMocks();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
describe('requiresAutoMintFee', () => {
|
|
31
|
-
it('should return true for Ethereum mainnet', () => {
|
|
32
|
-
vi.mocked(requiresAutoMintFee).mockReturnValue(true);
|
|
33
|
-
expect(requiresAutoMintFee(ChainId.ethereum)).toBe(true);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should return true for Sepolia testnet', () => {
|
|
37
|
-
vi.mocked(requiresAutoMintFee).mockReturnValue(true);
|
|
38
|
-
expect(requiresAutoMintFee(ChainId.sepolia)).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should return false for Base (subsidized)', () => {
|
|
42
|
-
vi.mocked(requiresAutoMintFee).mockReturnValue(false);
|
|
43
|
-
expect(requiresAutoMintFee(ChainId.base)).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should return false for BSC (subsidized)', () => {
|
|
47
|
-
vi.mocked(requiresAutoMintFee).mockReturnValue(false);
|
|
48
|
-
expect(requiresAutoMintFee(ChainId.binanceSmartChain)).toBe(false);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe('EvmOperationStatus', () => {
|
|
53
|
-
it('should have NEEDS_FEE_AUTHORIZATION status', () => {
|
|
54
|
-
expect(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION).toBe('needs_fee_authorization');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('should have all required statuses for EVM redeem flow', () => {
|
|
58
|
-
expect(EvmOperationStatus.IDLE).toBe('idle');
|
|
59
|
-
expect(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION).toBe('needs_fee_authorization');
|
|
60
|
-
expect(EvmOperationStatus.READY).toBe('ready');
|
|
61
|
-
expect(EvmOperationStatus.COMPLETED).toBe('completed');
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
describe('Fee Authorization Flow', () => {
|
|
66
|
-
it('documents expected flow for Ethereum (unsubsidized)', () => {
|
|
67
|
-
// On Ethereum/Sepolia, the flow should be:
|
|
68
|
-
// IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED
|
|
69
|
-
const expectedFlow = [
|
|
70
|
-
EvmOperationStatus.IDLE,
|
|
71
|
-
EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,
|
|
72
|
-
EvmOperationStatus.READY,
|
|
73
|
-
EvmOperationStatus.COMPLETED,
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
expect(expectedFlow).toHaveLength(4);
|
|
77
|
-
expect(expectedFlow[1]).toBe(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('documents expected flow for Base (subsidized)', () => {
|
|
81
|
-
// On Base/BSC (subsidized), the flow should skip fee auth:
|
|
82
|
-
// IDLE → READY → COMPLETED
|
|
83
|
-
const expectedFlow = [
|
|
84
|
-
EvmOperationStatus.IDLE,
|
|
85
|
-
EvmOperationStatus.READY,
|
|
86
|
-
EvmOperationStatus.COMPLETED,
|
|
87
|
-
];
|
|
88
|
-
|
|
89
|
-
expect(expectedFlow).toHaveLength(3);
|
|
90
|
-
expect(expectedFlow).not.toContain(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM Stake Action Unit Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests the BTC.b → LBTC staking flow on EVM chains.
|
|
5
|
-
*
|
|
6
|
-
* ## Fee Authorization
|
|
7
|
-
*
|
|
8
|
-
* Fee authorization is required on unsubsidized chains (Ethereum, Sepolia).
|
|
9
|
-
* On subsidized chains (Avalanche, Base, BSC), no fee auth is required.
|
|
10
|
-
*
|
|
11
|
-
* @module __tests__/unit/evm/EvmStake.test.ts
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
15
|
-
|
|
16
|
-
import { AssetId, Chain } from '../../../core';
|
|
17
|
-
import { LombardError, ValidationErrorCode } from '../../../shared/errors';
|
|
18
|
-
|
|
19
|
-
describe('EvmStake Interface', () => {
|
|
20
|
-
describe('EvmStakeParams', () => {
|
|
21
|
-
it('should require BTCb as input asset', () => {
|
|
22
|
-
const params = {
|
|
23
|
-
assetIn: AssetId.BTCb,
|
|
24
|
-
assetOut: AssetId.LBTC,
|
|
25
|
-
sourceChain: Chain.AVALANCHE,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
expect(params.assetIn).toBe(AssetId.BTCb);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('should require LBTC as output asset', () => {
|
|
32
|
-
const params = {
|
|
33
|
-
assetIn: AssetId.BTCb,
|
|
34
|
-
assetOut: AssetId.LBTC,
|
|
35
|
-
sourceChain: Chain.AVALANCHE,
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
expect(params.assetOut).toBe(AssetId.LBTC);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should support Avalanche chains', () => {
|
|
42
|
-
const mainnetParams = {
|
|
43
|
-
assetIn: AssetId.BTCb,
|
|
44
|
-
assetOut: AssetId.LBTC,
|
|
45
|
-
sourceChain: Chain.AVALANCHE,
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const testnetParams = {
|
|
49
|
-
assetIn: AssetId.BTCb,
|
|
50
|
-
assetOut: AssetId.LBTC,
|
|
51
|
-
sourceChain: Chain.AVALANCHE_FUJI,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
expect(mainnetParams.sourceChain).toBe(Chain.AVALANCHE);
|
|
55
|
-
expect(testnetParams.sourceChain).toBe(Chain.AVALANCHE_FUJI);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('EvmStakePrepareParams', () => {
|
|
60
|
-
it('should accept valid prepare parameters', () => {
|
|
61
|
-
const params = {
|
|
62
|
-
amount: '0.1',
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
expect(params.amount).toBe('0.1');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
describe('Status Transitions', () => {
|
|
70
|
-
it('should define all required status values for fee auth flow', () => {
|
|
71
|
-
const statuses = [
|
|
72
|
-
'idle',
|
|
73
|
-
'needs-fee-authorization',
|
|
74
|
-
'ready',
|
|
75
|
-
'completed',
|
|
76
|
-
];
|
|
77
|
-
|
|
78
|
-
statuses.forEach(status => {
|
|
79
|
-
expect(typeof status).toBe('string');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('Method Signatures', () => {
|
|
85
|
-
it('should define prepare method', () => {
|
|
86
|
-
type PrepareMethod = (params: { amount: string }) => Promise<void>;
|
|
87
|
-
const testType: PrepareMethod = async () => {};
|
|
88
|
-
expect(testType).toBeDefined();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should define authorizeFee method for unsubsidized chains', () => {
|
|
92
|
-
type AuthorizeFeeMethod = () => Promise<void>;
|
|
93
|
-
const testType: AuthorizeFeeMethod = async () => {};
|
|
94
|
-
expect(testType).toBeDefined();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should define execute method', () => {
|
|
98
|
-
type ExecuteMethod = () => Promise<{ txHash: string }>;
|
|
99
|
-
const testType: ExecuteMethod = async () => ({ txHash: '0x123' });
|
|
100
|
-
expect(testType).toBeDefined();
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
describe('Fee Authorization', () => {
|
|
105
|
-
it('should require fee auth on unsubsidized chains (Ethereum, Sepolia)', () => {
|
|
106
|
-
const unsubsidizedChains = [Chain.ETHEREUM, Chain.SEPOLIA];
|
|
107
|
-
expect(unsubsidizedChains).toHaveLength(2);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it('should skip fee auth on subsidized chains (Avalanche, Base, BSC)', () => {
|
|
111
|
-
const subsidizedChains = [Chain.AVALANCHE, Chain.BASE, Chain.BSC];
|
|
112
|
-
expect(subsidizedChains).toHaveLength(3);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('should expose feeAuth state for UI display', () => {
|
|
116
|
-
type FeeAuthState = {
|
|
117
|
-
requiresAuth: boolean;
|
|
118
|
-
isAuthorized: boolean;
|
|
119
|
-
feeInSatoshis: bigint | null;
|
|
120
|
-
feeFormatted: string | null;
|
|
121
|
-
expirationDate: string | null;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const feeAuth: FeeAuthState = {
|
|
125
|
-
requiresAuth: true,
|
|
126
|
-
isAuthorized: false,
|
|
127
|
-
feeInSatoshis: BigInt(32),
|
|
128
|
-
feeFormatted: '0.00000032',
|
|
129
|
-
expirationDate: null,
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
expect(feeAuth.requiresAuth).toBe(true);
|
|
133
|
-
expect(feeAuth.isAuthorized).toBe(false);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
describe('Error Handling', () => {
|
|
138
|
-
it('should reject LBTC as input asset', () => {
|
|
139
|
-
const error = new LombardError(
|
|
140
|
-
ValidationErrorCode.INVALID_ASSET,
|
|
141
|
-
`Cannot stake LBTC. Stake is for BTC.b → LBTC conversion.`,
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
expect(error.code).toBe(ValidationErrorCode.INVALID_ASSET);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('should reject chains without BTC.b', () => {
|
|
148
|
-
const error = new LombardError(
|
|
149
|
-
ValidationErrorCode.INVALID_CHAIN,
|
|
150
|
-
`BTC.b is not available on ethereum. Use Avalanche instead.`,
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
expect(error.code).toBe(ValidationErrorCode.INVALID_CHAIN);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
it('should handle insufficient balance', () => {
|
|
157
|
-
const error = new LombardError(
|
|
158
|
-
ValidationErrorCode.INVALID_PARAMETER,
|
|
159
|
-
`Insufficient BTC.b balance. Have: 0, Need: 0.1`,
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
expect(error.message).toContain('Insufficient');
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
describe('Event Emissions', () => {
|
|
167
|
-
it('should emit progress events', () => {
|
|
168
|
-
const handler = vi.fn((progress: { status: string; txHash?: string }) => {
|
|
169
|
-
expect(progress.status).toBeDefined();
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
handler({ status: 'completed', txHash: '0x123' });
|
|
173
|
-
expect(handler).toHaveBeenCalledOnce();
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('should emit transaction hash on completion', () => {
|
|
177
|
-
const result = { txHash: '0x1234567890abcdef' };
|
|
178
|
-
expect(result.txHash).toMatch(/^0x/);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
describe('Public Properties', () => {
|
|
183
|
-
it('should expose status property', () => {
|
|
184
|
-
type HasStatus = { readonly status: string };
|
|
185
|
-
const obj: HasStatus = { status: 'idle' };
|
|
186
|
-
expect(obj.status).toBe('idle');
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
it('should expose amount property', () => {
|
|
190
|
-
type HasAmount = { readonly amount?: string };
|
|
191
|
-
const obj: HasAmount = { amount: '0.1' };
|
|
192
|
-
expect(obj.amount).toBe('0.1');
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it('should expose txHash after execute', () => {
|
|
196
|
-
type HasTxHash = { readonly txHash?: string };
|
|
197
|
-
const obj: HasTxHash = { txHash: '0x123' };
|
|
198
|
-
expect(obj.txHash).toBeDefined();
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
it('should expose feeAuth state', () => {
|
|
202
|
-
type HasFeeAuth = { readonly feeAuth: { requiresAuth: boolean; isAuthorized: boolean } };
|
|
203
|
-
const obj: HasFeeAuth = { feeAuth: { requiresAuth: true, isAuthorized: false } };
|
|
204
|
-
expect(obj.feeAuth.requiresAuth).toBe(true);
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
});
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM Stake Fee Authorization Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests the fee authorization flow for BTC.b → LBTC staking on EVM chains.
|
|
5
|
-
*
|
|
6
|
-
* Fee authorization is required on unsubsidized chains (Ethereum, Sepolia).
|
|
7
|
-
* On subsidized chains (Avalanche, Base, BSC), no fee auth is required.
|
|
8
|
-
*
|
|
9
|
-
* @module __tests__/unit/evm/EvmStakeFeeAuth.test.ts
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { Env } from '@lombard.finance/sdk-common';
|
|
13
|
-
import BigNumber from 'bignumber.js';
|
|
14
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
15
|
-
|
|
16
|
-
import { EvmStake } from '../../../chains/evm/actions/stake/EvmStake';
|
|
17
|
-
import * as feeAuthModule from '../../../chains/evm/shared/feeAuth';
|
|
18
|
-
import { PartnerConfiguration } from '../../../client/PartnerConfiguration';
|
|
19
|
-
import { AssetId, Chain } from '../../../core';
|
|
20
|
-
import { EvmOperationStatus } from '../../../shared/constants/statusConstants';
|
|
21
|
-
import type { EvmCoreContext } from '../../../shared/context/types';
|
|
22
|
-
|
|
23
|
-
// Mock the token functions to avoid contract address lookups
|
|
24
|
-
vi.mock('../../../tokens/tokens', () => ({
|
|
25
|
-
getTokenContractInfo: vi.fn().mockResolvedValue({
|
|
26
|
-
address: '0x1234567890123456789012345678901234567890' as `0x${string}`,
|
|
27
|
-
abi: [],
|
|
28
|
-
}),
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
vi.mock('../../../contract-functions/approveToken', () => ({
|
|
32
|
-
getTokenAllowance: vi.fn().mockResolvedValue(new BigNumber('1000')), // Sufficient allowance
|
|
33
|
-
approveToken: vi.fn().mockResolvedValue('0xtxhash'),
|
|
34
|
-
}));
|
|
35
|
-
|
|
36
|
-
// Spy on the fee authorization functions
|
|
37
|
-
vi.spyOn(feeAuthModule, 'checkFeeAuthorization');
|
|
38
|
-
vi.spyOn(feeAuthModule, 'authorizeFee');
|
|
39
|
-
|
|
40
|
-
const mockProvider = {
|
|
41
|
-
request: vi.fn(async ({ method }: { method: string }) => {
|
|
42
|
-
if (method === 'eth_accounts') {
|
|
43
|
-
return ['0x0000000000000000000000000000000000000002'];
|
|
44
|
-
}
|
|
45
|
-
return [];
|
|
46
|
-
}),
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
function createContext(): EvmCoreContext {
|
|
50
|
-
return {
|
|
51
|
-
env: Env.prod,
|
|
52
|
-
partner: new PartnerConfiguration(undefined),
|
|
53
|
-
getProvider: async () => mockProvider,
|
|
54
|
-
evm: {} as EvmCoreContext['evm'],
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
describe('EvmStake Fee Authorization', () => {
|
|
59
|
-
beforeEach(() => {
|
|
60
|
-
vi.clearAllMocks();
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe('Subsidized Chains (no fee auth required)', () => {
|
|
64
|
-
it('should transition directly to READY on Base (no approval, no fee auth)', async () => {
|
|
65
|
-
// Base doesn't require approval, and is subsidized (no fee auth)
|
|
66
|
-
vi.mocked(feeAuthModule.checkFeeAuthorization).mockResolvedValueOnce({
|
|
67
|
-
requiresAuth: false,
|
|
68
|
-
hasValidSignature: false,
|
|
69
|
-
feeInSatoshis: null,
|
|
70
|
-
feeFormatted: null,
|
|
71
|
-
expirationDate: null,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
const ctx = createContext();
|
|
75
|
-
const stake = new EvmStake(ctx, {
|
|
76
|
-
assetIn: AssetId.BTCb,
|
|
77
|
-
assetOut: AssetId.LBTC,
|
|
78
|
-
sourceChain: Chain.BASE,
|
|
79
|
-
destChain: Chain.BASE,
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
await stake.prepare({ amount: '0.5' });
|
|
83
|
-
|
|
84
|
-
expect(stake.status).toBe(EvmOperationStatus.READY);
|
|
85
|
-
expect(stake.feeAuth.requiresAuth).toBe(false);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
describe('Unsubsidized Chains (fee auth required)', () => {
|
|
90
|
-
it('should transition to NEEDS_FEE_AUTHORIZATION on Ethereum when no signature exists', async () => {
|
|
91
|
-
vi.mocked(feeAuthModule.checkFeeAuthorization).mockResolvedValueOnce({
|
|
92
|
-
requiresAuth: true,
|
|
93
|
-
hasValidSignature: false,
|
|
94
|
-
feeInSatoshis: BigInt(32),
|
|
95
|
-
feeFormatted: '0.00000032',
|
|
96
|
-
expirationDate: null,
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const ctx = createContext();
|
|
100
|
-
const stake = new EvmStake(ctx, {
|
|
101
|
-
assetIn: AssetId.BTCb,
|
|
102
|
-
assetOut: AssetId.LBTC,
|
|
103
|
-
sourceChain: Chain.ETHEREUM,
|
|
104
|
-
destChain: Chain.ETHEREUM,
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
await stake.prepare({ amount: '0.5' });
|
|
108
|
-
|
|
109
|
-
expect(stake.status).toBe(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);
|
|
110
|
-
expect(stake.feeAuth.requiresAuth).toBe(true);
|
|
111
|
-
expect(stake.feeAuth.isAuthorized).toBe(false);
|
|
112
|
-
expect(stake.feeAuth.feeFormatted).toBe('0.00000032');
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('should skip fee auth when valid signature exists on Ethereum', async () => {
|
|
116
|
-
vi.mocked(feeAuthModule.checkFeeAuthorization).mockResolvedValueOnce({
|
|
117
|
-
requiresAuth: true,
|
|
118
|
-
hasValidSignature: true,
|
|
119
|
-
feeInSatoshis: null,
|
|
120
|
-
feeFormatted: null,
|
|
121
|
-
expirationDate: '1737331200', // Some future timestamp
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
const ctx = createContext();
|
|
125
|
-
const stake = new EvmStake(ctx, {
|
|
126
|
-
assetIn: AssetId.BTCb,
|
|
127
|
-
assetOut: AssetId.LBTC,
|
|
128
|
-
sourceChain: Chain.ETHEREUM,
|
|
129
|
-
destChain: Chain.ETHEREUM,
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
await stake.prepare({ amount: '0.5' });
|
|
133
|
-
|
|
134
|
-
expect(stake.status).toBe(EvmOperationStatus.READY);
|
|
135
|
-
expect(stake.feeAuth.requiresAuth).toBe(true);
|
|
136
|
-
expect(stake.feeAuth.isAuthorized).toBe(true);
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('should transition to READY after authorizeFee', async () => {
|
|
140
|
-
vi.mocked(feeAuthModule.checkFeeAuthorization).mockResolvedValueOnce({
|
|
141
|
-
requiresAuth: true,
|
|
142
|
-
hasValidSignature: false,
|
|
143
|
-
feeInSatoshis: BigInt(32),
|
|
144
|
-
feeFormatted: '0.00000032',
|
|
145
|
-
expirationDate: null,
|
|
146
|
-
});
|
|
147
|
-
vi.mocked(feeAuthModule.authorizeFee).mockResolvedValueOnce({
|
|
148
|
-
signature: '0xabc123' as `0x${string}`,
|
|
149
|
-
typedData: '{}',
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
const ctx = createContext();
|
|
153
|
-
const stake = new EvmStake(ctx, {
|
|
154
|
-
assetIn: AssetId.BTCb,
|
|
155
|
-
assetOut: AssetId.LBTC,
|
|
156
|
-
sourceChain: Chain.ETHEREUM,
|
|
157
|
-
destChain: Chain.ETHEREUM,
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
await stake.prepare({ amount: '0.5' });
|
|
161
|
-
expect(stake.status).toBe(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);
|
|
162
|
-
|
|
163
|
-
await stake.authorizeFee();
|
|
164
|
-
expect(stake.status).toBe(EvmOperationStatus.READY);
|
|
165
|
-
expect(stake.feeAuth.isAuthorized).toBe(true);
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
describe('FeeAuth State', () => {
|
|
170
|
-
it('should expose fee information for UI display', async () => {
|
|
171
|
-
vi.mocked(feeAuthModule.checkFeeAuthorization).mockResolvedValueOnce({
|
|
172
|
-
requiresAuth: true,
|
|
173
|
-
hasValidSignature: false,
|
|
174
|
-
feeInSatoshis: BigInt(32),
|
|
175
|
-
feeFormatted: '0.00000032',
|
|
176
|
-
expirationDate: null,
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
const ctx = createContext();
|
|
180
|
-
const stake = new EvmStake(ctx, {
|
|
181
|
-
assetIn: AssetId.BTCb,
|
|
182
|
-
assetOut: AssetId.LBTC,
|
|
183
|
-
sourceChain: Chain.ETHEREUM,
|
|
184
|
-
destChain: Chain.ETHEREUM,
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
await stake.prepare({ amount: '0.5' });
|
|
188
|
-
|
|
189
|
-
expect(stake.feeAuth.feeInSatoshis).toBe(BigInt(32));
|
|
190
|
-
expect(stake.feeAuth.feeFormatted).toBe('0.00000032');
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
});
|