@lombard.finance/sdk 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/common/feature-config.d.ts.map +1 -1
- package/dist/index2.cjs +6 -6
- package/dist/index2.js +762 -754
- 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,69 +0,0 @@
|
|
|
1
|
-
import { Env } from '@lombard.finance/sdk-common';
|
|
2
|
-
import { beforeEach,describe, expect, it, vi } from 'vitest';
|
|
3
|
-
|
|
4
|
-
import { EvmUnstake } from '../../../chains/evm/actions/unstake/EvmUnstake';
|
|
5
|
-
import { PartnerConfiguration } from '../../../client/PartnerConfiguration';
|
|
6
|
-
import { AssetId, Chain } from '../../../core';
|
|
7
|
-
import { EvmOperationStatus } from '../../../shared/constants/statusConstants';
|
|
8
|
-
import type { EvmCoreContext } from '../../../shared/context/types';
|
|
9
|
-
|
|
10
|
-
vi.mock('../../../chains/evm/shared/feeAuth', async (importOriginal) => {
|
|
11
|
-
const actual = await importOriginal<typeof import('../../../chains/evm/shared/feeAuth')>();
|
|
12
|
-
return {
|
|
13
|
-
...actual,
|
|
14
|
-
checkFeeAuthorization: vi.fn(async () => ({
|
|
15
|
-
requiresAuth: false,
|
|
16
|
-
hasValidSignature: false,
|
|
17
|
-
feeInSatoshis: null,
|
|
18
|
-
feeFormatted: null,
|
|
19
|
-
expirationDate: null,
|
|
20
|
-
})),
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
vi.mock('../../../contract-functions/approveToken', () => ({
|
|
25
|
-
approveToken: vi.fn(),
|
|
26
|
-
getTokenAllowance: vi.fn(),
|
|
27
|
-
}));
|
|
28
|
-
|
|
29
|
-
const mockProvider = {
|
|
30
|
-
request: vi.fn(async ({ method }: { method: string }) => {
|
|
31
|
-
if (method === 'eth_accounts') {
|
|
32
|
-
return ['0x0000000000000000000000000000000000000002'];
|
|
33
|
-
}
|
|
34
|
-
return [];
|
|
35
|
-
}),
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
function createContext(): EvmCoreContext {
|
|
39
|
-
return {
|
|
40
|
-
env: Env.prod,
|
|
41
|
-
partner: new PartnerConfiguration(undefined),
|
|
42
|
-
getProvider: async () => mockProvider,
|
|
43
|
-
evm: {} as EvmCoreContext['evm'],
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
describe('EvmUnstake allowance handling', () => {
|
|
48
|
-
beforeEach(() => {
|
|
49
|
-
vi.clearAllMocks();
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('does not request ERC-20 approval for LBTC → BTC.b', async () => {
|
|
53
|
-
const { approveToken, getTokenAllowance } = await import('../../../contract-functions/approveToken');
|
|
54
|
-
|
|
55
|
-
const ctx = createContext();
|
|
56
|
-
const unstake = new EvmUnstake(ctx, {
|
|
57
|
-
assetIn: AssetId.LBTC,
|
|
58
|
-
assetOut: AssetId.BTCb,
|
|
59
|
-
sourceChain: Chain.BASE,
|
|
60
|
-
destChain: Chain.BASE,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
await unstake.prepare({ amount: '10000', recipient: '0x0000000000000000000000000000000000000002' });
|
|
64
|
-
|
|
65
|
-
expect(unstake.status).toBe(EvmOperationStatus.READY);
|
|
66
|
-
expect(approveToken).not.toHaveBeenCalled();
|
|
67
|
-
expect(getTokenAllowance).not.toHaveBeenCalled();
|
|
68
|
-
});
|
|
69
|
-
});
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EVM Unstake Config Unit Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests address validation based on assetOut to prevent
|
|
5
|
-
* bugs like #9 (EVM address validation errors when Bitcoin address expected).
|
|
6
|
-
*
|
|
7
|
-
* @module __tests__/unit/evm/EvmUnstakeConfig.test.ts
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { describe, expect,it } from 'vitest';
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
evmToBtcbConfig,
|
|
14
|
-
evmToBtcConfig,
|
|
15
|
-
} from '../../../chains/evm/actions/unstake/config/evm';
|
|
16
|
-
import { Chain, Env } from '../../../core';
|
|
17
|
-
import {
|
|
18
|
-
bitcoinAddressSchema,
|
|
19
|
-
evmAddressSchema,
|
|
20
|
-
} from '../../../shared/validation';
|
|
21
|
-
|
|
22
|
-
describe('EVM Unstake Config', () => {
|
|
23
|
-
describe('Address Schema Selection', () => {
|
|
24
|
-
it('should use Bitcoin address schema when unstaking to BTC', () => {
|
|
25
|
-
// Bug #9: When assetOut is BTC, recipient should be a Bitcoin address
|
|
26
|
-
expect(evmToBtcConfig.recipientSchema).toBe(bitcoinAddressSchema);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('should use EVM address schema when unstaking to BTC.b', () => {
|
|
30
|
-
// When assetOut is BTCb, recipient should be an EVM address
|
|
31
|
-
expect(evmToBtcbConfig.recipientSchema).toBe(evmAddressSchema);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe('Bitcoin Address Validation (assetOut = BTC)', () => {
|
|
36
|
-
const schema = evmToBtcConfig.recipientSchema;
|
|
37
|
-
|
|
38
|
-
describe('Valid Bitcoin addresses', () => {
|
|
39
|
-
it('should accept valid mainnet P2PKH address', () => {
|
|
40
|
-
expect(() => schema.parse('1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2')).not.toThrow();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should accept valid mainnet P2SH address', () => {
|
|
44
|
-
expect(() => schema.parse('3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')).not.toThrow();
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('should accept valid mainnet Bech32 address', () => {
|
|
48
|
-
expect(() => schema.parse('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq')).not.toThrow();
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('should accept valid testnet/signet P2PKH address', () => {
|
|
52
|
-
expect(() => schema.parse('mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn')).not.toThrow();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should accept valid testnet/signet Bech32 address', () => {
|
|
56
|
-
// Valid testnet bech32 address from BIP-0173
|
|
57
|
-
expect(() => schema.parse('tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx')).not.toThrow();
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('should accept valid Taproot (bc1p) address', () => {
|
|
61
|
-
expect(() => schema.parse('bc1pw0sr89hvfgwyhj98gamyewndt5yczw5cdkl7j3eystx2js48gfks2w72ct')).not.toThrow();
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
describe('Invalid Bitcoin addresses', () => {
|
|
66
|
-
it('should reject EVM address (Bug #9 scenario)', () => {
|
|
67
|
-
// This is the exact bug scenario - user entered EVM address
|
|
68
|
-
// when Bitcoin address was expected
|
|
69
|
-
expect(() =>
|
|
70
|
-
schema.parse('0x5991d9dDB5f20774A1e4D0Bf7bb30F1DdBa870fD'),
|
|
71
|
-
).toThrow();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should reject empty string', () => {
|
|
75
|
-
expect(() => schema.parse('')).toThrow();
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('should reject invalid format', () => {
|
|
79
|
-
expect(() => schema.parse('invalid-address')).toThrow();
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// Note: Basic regex validation doesn't validate checksum
|
|
83
|
-
// Full checksum validation would require a Bitcoin library
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
describe('EVM Address Validation (assetOut = BTCb)', () => {
|
|
88
|
-
const schema = evmToBtcbConfig.recipientSchema;
|
|
89
|
-
|
|
90
|
-
describe('Valid EVM addresses', () => {
|
|
91
|
-
it('should accept valid checksummed EVM address', () => {
|
|
92
|
-
expect(() =>
|
|
93
|
-
schema.parse('0x5991d9dDB5f20774A1e4D0Bf7bb30F1DdBa870fD'),
|
|
94
|
-
).not.toThrow();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should accept valid lowercase EVM address', () => {
|
|
98
|
-
expect(() =>
|
|
99
|
-
schema.parse('0x5991d9ddb5f20774a1e4d0bf7bb30f1ddba870fd'),
|
|
100
|
-
).not.toThrow();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('should accept zero address', () => {
|
|
104
|
-
expect(() =>
|
|
105
|
-
schema.parse('0x0000000000000000000000000000000000000000'),
|
|
106
|
-
).not.toThrow();
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe('Invalid EVM addresses', () => {
|
|
111
|
-
it('should reject Bitcoin address (reverse Bug #9)', () => {
|
|
112
|
-
// User entered Bitcoin address when EVM address expected
|
|
113
|
-
expect(() =>
|
|
114
|
-
schema.parse('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'),
|
|
115
|
-
).toThrow();
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('should reject address without 0x prefix', () => {
|
|
119
|
-
expect(() =>
|
|
120
|
-
schema.parse('5991d9dDB5f20774A1e4D0Bf7bb30F1DdBa870fD'),
|
|
121
|
-
).toThrow();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it('should reject address with wrong length', () => {
|
|
125
|
-
expect(() => schema.parse('0x5991d9dDB5f20774A1e4D0Bf')).toThrow();
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('should reject empty string', () => {
|
|
129
|
-
expect(() => schema.parse('')).toThrow();
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('should reject non-hex characters', () => {
|
|
133
|
-
expect(() =>
|
|
134
|
-
schema.parse('0xZZZZd9dDB5f20774A1e4D0Bf7bb30F1DdBa870fD'),
|
|
135
|
-
).toThrow();
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
describe('Route Configuration', () => {
|
|
141
|
-
describe('EVM to BTC routes', () => {
|
|
142
|
-
it('should have Sepolia as source chain for testnet', () => {
|
|
143
|
-
const testnetRoutes = evmToBtcConfig.routes.filter(r =>
|
|
144
|
-
r.envs.some(e => e === Env.testnet),
|
|
145
|
-
);
|
|
146
|
-
const sourceChains = testnetRoutes.flatMap(r => r.sourceChains);
|
|
147
|
-
// Chain identifiers use CAIP-2 format
|
|
148
|
-
expect(sourceChains).toContain(Chain.SEPOLIA);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it('should have Ethereum as source chain for production', () => {
|
|
152
|
-
const prodRoutes = evmToBtcConfig.routes.filter(r =>
|
|
153
|
-
r.envs.includes(Env.prod),
|
|
154
|
-
);
|
|
155
|
-
const sourceChains = prodRoutes.flatMap(r => r.sourceChains);
|
|
156
|
-
expect(sourceChains).toContain(Chain.ETHEREUM);
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it('should have Bitcoin as destination for cross-chain unstake', () => {
|
|
160
|
-
// All routes should have Bitcoin as destination
|
|
161
|
-
evmToBtcConfig.routes.forEach(route => {
|
|
162
|
-
expect([Chain.BITCOIN_MAINNET, Chain.BITCOIN_SIGNET]).toContain(route.destChain);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
describe('EVM to BTCb routes', () => {
|
|
168
|
-
it('should have matching destination for same-chain operations', () => {
|
|
169
|
-
// BTC.b unstake is same-chain (e.g., Avalanche → Avalanche)
|
|
170
|
-
expect(evmToBtcbConfig.routes.length).toBeGreaterThan(0);
|
|
171
|
-
|
|
172
|
-
// Each route should have source and dest as the same chain
|
|
173
|
-
evmToBtcbConfig.routes.forEach(route => {
|
|
174
|
-
route.sourceChains.forEach(source => {
|
|
175
|
-
expect(source).toBe(route.destChain);
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
describe('Bug #9: Address type mismatch scenarios', () => {
|
|
183
|
-
it('should differentiate between BTC and EVM address requirements', () => {
|
|
184
|
-
// When assetOut is BTC -> Bitcoin address required
|
|
185
|
-
const btcSchema = evmToBtcConfig.recipientSchema;
|
|
186
|
-
|
|
187
|
-
// When assetOut is BTCb -> EVM address required
|
|
188
|
-
const btcbSchema = evmToBtcbConfig.recipientSchema;
|
|
189
|
-
|
|
190
|
-
const evmAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
|
|
191
|
-
const btcAddress = 'bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh';
|
|
192
|
-
|
|
193
|
-
// EVM address should be valid for BTCb, invalid for BTC
|
|
194
|
-
expect(() => btcbSchema.parse(evmAddress)).not.toThrow();
|
|
195
|
-
expect(() => btcSchema.parse(evmAddress)).toThrow();
|
|
196
|
-
|
|
197
|
-
// Bitcoin address should be valid for BTC, invalid for BTCb
|
|
198
|
-
expect(() => btcSchema.parse(btcAddress)).not.toThrow();
|
|
199
|
-
expect(() => btcbSchema.parse(btcAddress)).toThrow();
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fee Signature Expiration Tests
|
|
3
|
-
*
|
|
4
|
-
* Verifies that Unix timestamp expiration dates are correctly parsed
|
|
5
|
-
* when checking if a stored fee signature is still valid.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { describe, expect, it } from 'vitest';
|
|
9
|
-
|
|
10
|
-
describe('Fee Signature Expiration Parsing', () => {
|
|
11
|
-
/**
|
|
12
|
-
* Helper to check if a signature is expired
|
|
13
|
-
* This mirrors the logic in stake/config/evm.ts and deposit/config/evm.ts
|
|
14
|
-
*/
|
|
15
|
-
function isSignatureExpired(expirationDate: string | undefined): boolean {
|
|
16
|
-
if (!expirationDate) return false;
|
|
17
|
-
// expirationDate is a Unix timestamp in seconds, convert to milliseconds
|
|
18
|
-
return new Date(Number(expirationDate) * 1000) < new Date();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
describe('Unix timestamp parsing', () => {
|
|
22
|
-
it('should correctly identify a future timestamp as NOT expired', () => {
|
|
23
|
-
const futureTimestamp = String(Math.floor(Date.now() / 1000) + 3600);
|
|
24
|
-
expect(isSignatureExpired(futureTimestamp)).toBe(false);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should correctly identify a past timestamp as expired', () => {
|
|
28
|
-
// Jan 1, 2020 00:00:00 UTC - clearly in the past
|
|
29
|
-
const pastTimestamp = '1577836800';
|
|
30
|
-
|
|
31
|
-
// Verify the timestamp represents the expected date (in UTC)
|
|
32
|
-
const date = new Date(Number(pastTimestamp) * 1000);
|
|
33
|
-
expect(date.getUTCFullYear()).toBe(2020);
|
|
34
|
-
expect(date.getUTCMonth()).toBe(0); // January
|
|
35
|
-
expect(date.getUTCDate()).toBe(1);
|
|
36
|
-
|
|
37
|
-
// The signature SHOULD be expired
|
|
38
|
-
expect(isSignatureExpired(pastTimestamp)).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should handle undefined expiration date as not expired', () => {
|
|
42
|
-
expect(isSignatureExpired(undefined)).toBe(false);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should handle empty string as not expired', () => {
|
|
46
|
-
// Number('') = 0, which converts to Jan 1, 1970 - in the past
|
|
47
|
-
// But the condition checks if expirationDate exists first
|
|
48
|
-
// For safety, we treat empty string as "no expiration"
|
|
49
|
-
expect(isSignatureExpired('')).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
describe('Bug fix verification: Unix timestamp vs Date string parsing', () => {
|
|
54
|
-
it('WRONG: new Date(string) parses incorrectly', () => {
|
|
55
|
-
const timestamp = '1768491343';
|
|
56
|
-
|
|
57
|
-
// This is the WRONG way - new Date() tries to parse as ISO string
|
|
58
|
-
const wrongDate = new Date(timestamp);
|
|
59
|
-
|
|
60
|
-
// This returns Invalid Date or a wrong date
|
|
61
|
-
expect(wrongDate.toString()).toMatch(/Invalid Date|1970/);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('CORRECT: new Date(number * 1000) parses correctly', () => {
|
|
65
|
-
const timestamp = '1768491343';
|
|
66
|
-
|
|
67
|
-
// This is the CORRECT way - convert to milliseconds
|
|
68
|
-
const correctDate = new Date(Number(timestamp) * 1000);
|
|
69
|
-
|
|
70
|
-
// This returns the correct date: Jan 15, 2026
|
|
71
|
-
expect(correctDate.getFullYear()).toBe(2026);
|
|
72
|
-
expect(correctDate.getMonth()).toBe(0);
|
|
73
|
-
expect(correctDate.getDate()).toBe(15);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
});
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Env } from '@lombard.finance/sdk-common';
|
|
2
|
-
import { beforeEach,describe, expect, it, vi } from 'vitest';
|
|
3
|
-
|
|
4
|
-
import { LombardConfig } from '../../../config/types';
|
|
5
|
-
import { CapabilityRegistry } from '../../../modules/CapabilityRegistry';
|
|
6
|
-
|
|
7
|
-
// Mock config
|
|
8
|
-
const mockConfig: LombardConfig = {
|
|
9
|
-
env: Env.testnet,
|
|
10
|
-
providers: {},
|
|
11
|
-
modules: [],
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
// Mock module
|
|
15
|
-
const mockModule = {
|
|
16
|
-
id: 'test-module',
|
|
17
|
-
register: vi.fn().mockReturnValue('service-instance'),
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
describe('CapabilityRegistry', () => {
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
vi.clearAllMocks();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('should require registered capabilities', () => {
|
|
26
|
-
const registry = new CapabilityRegistry([mockModule], mockConfig);
|
|
27
|
-
|
|
28
|
-
const service = registry.require('test-module');
|
|
29
|
-
expect(service).toBe('service-instance');
|
|
30
|
-
expect(mockModule.register).toHaveBeenCalled();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should throw for unregistered capabilities', () => {
|
|
34
|
-
const registry = new CapabilityRegistry([], mockConfig);
|
|
35
|
-
|
|
36
|
-
expect(() => registry.require('test-module')).toThrow(/not registered/);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('should return null for optional missing capabilities', () => {
|
|
40
|
-
const registry = new CapabilityRegistry([], mockConfig);
|
|
41
|
-
|
|
42
|
-
const service = registry.optional('test-module');
|
|
43
|
-
expect(service).toBeNull();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should cache service instances', () => {
|
|
47
|
-
const registry = new CapabilityRegistry([mockModule], mockConfig);
|
|
48
|
-
|
|
49
|
-
registry.require('test-module');
|
|
50
|
-
registry.require('test-module');
|
|
51
|
-
|
|
52
|
-
expect(mockModule.register).toHaveBeenCalledTimes(1);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { BaseAction } from '../../../shared/actions/BaseAction';
|
|
4
|
-
|
|
5
|
-
// Mock event handler types
|
|
6
|
-
type TestEventMap = {
|
|
7
|
-
// BaseAction requires handlers to be compatible with EventHandler<unknown[]>
|
|
8
|
-
// (i.e., handlers must accept unknown[] args). We cast inside tests as needed.
|
|
9
|
-
'status-change': (...args: unknown[]) => void;
|
|
10
|
-
loading: (...args: unknown[]) => void;
|
|
11
|
-
error: (...args: unknown[]) => void;
|
|
12
|
-
failed: (...args: unknown[]) => void;
|
|
13
|
-
completed: (...args: unknown[]) => void;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// Concrete implementation for testing
|
|
17
|
-
class TestAction extends BaseAction<TestEventMap, string> {
|
|
18
|
-
constructor(initialStatus: string = 'idle') {
|
|
19
|
-
super(initialStatus);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Expose protected methods for testing
|
|
23
|
-
public testUpdateStatus(status: string) {
|
|
24
|
-
this.updateStatus(status);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public testAssertStatus(expected: string | string[], action: string) {
|
|
28
|
-
this.assertStatus(expected, action);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async testAct<T>(fn: () => Promise<T>, successStatus?: string) {
|
|
32
|
-
return this.act(fn, successStatus);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
describe('BaseAction', () => {
|
|
37
|
-
it('should initialize with correct status', () => {
|
|
38
|
-
const action = new TestAction('idle');
|
|
39
|
-
expect(action.status).toBe('idle');
|
|
40
|
-
expect(action.isLoading).toBe(false);
|
|
41
|
-
expect(action.error).toBeNull();
|
|
42
|
-
expect(action.isFailed).toBe(false);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('act() Pattern', () => {
|
|
46
|
-
it('should set isLoading=true during operation', async () => {
|
|
47
|
-
const action = new TestAction();
|
|
48
|
-
const loadingStates: boolean[] = [];
|
|
49
|
-
action.on('loading', (...args) => loadingStates.push(args[0] as boolean));
|
|
50
|
-
|
|
51
|
-
await action.testAct(async () => {
|
|
52
|
-
expect(action.isLoading).toBe(true);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
expect(loadingStates).toEqual([true, false]);
|
|
56
|
-
expect(action.isLoading).toBe(false);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should update status on success if provided', async () => {
|
|
60
|
-
const action = new TestAction('idle');
|
|
61
|
-
|
|
62
|
-
await action.testAct(async () => {
|
|
63
|
-
// do work
|
|
64
|
-
}, 'ready');
|
|
65
|
-
|
|
66
|
-
expect(action.status).toBe('ready');
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should NOT update status if successStatus not provided', async () => {
|
|
70
|
-
const action = new TestAction('idle');
|
|
71
|
-
|
|
72
|
-
await action.testAct(async () => {
|
|
73
|
-
// do work
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
expect(action.status).toBe('idle');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('should preserve status on error (no rollback to FAILED)', async () => {
|
|
80
|
-
const action = new TestAction('idle');
|
|
81
|
-
const initialStatus = action.status;
|
|
82
|
-
const error = new Error('Something went wrong');
|
|
83
|
-
|
|
84
|
-
await expect(action.testAct(async () => {
|
|
85
|
-
throw error;
|
|
86
|
-
})).rejects.toThrow();
|
|
87
|
-
|
|
88
|
-
expect(action.status).toBe(initialStatus); // Status unchanged
|
|
89
|
-
expect(action.isFailed).toBe(true); // Error flag set
|
|
90
|
-
expect(action.error).not.toBeNull(); // Error captured
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('should emit error and failed events on failure', async () => {
|
|
94
|
-
const action = new TestAction();
|
|
95
|
-
const errorFn = vi.fn();
|
|
96
|
-
const failedFn = vi.fn();
|
|
97
|
-
action.on('error', errorFn);
|
|
98
|
-
action.on('failed', failedFn);
|
|
99
|
-
|
|
100
|
-
await expect(action.testAct(async () => {
|
|
101
|
-
throw new Error('Boom');
|
|
102
|
-
})).rejects.toThrow('Boom');
|
|
103
|
-
|
|
104
|
-
expect(errorFn).toHaveBeenCalled();
|
|
105
|
-
expect(failedFn).toHaveBeenCalled();
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
describe('Status assertions', () => {
|
|
110
|
-
it('should allow allowed statuses', () => {
|
|
111
|
-
const action = new TestAction('idle');
|
|
112
|
-
expect(() => action.testAssertStatus('idle', 'test')).not.toThrow();
|
|
113
|
-
expect(() => action.testAssertStatus(['idle', 'ready'], 'test')).not.toThrow();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should throw on disallowed statuses', () => {
|
|
117
|
-
const action = new TestAction('idle');
|
|
118
|
-
expect(() => action.testAssertStatus('ready', 'test')).toThrow();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
|
|
4
|
-
import { BaseBtcAction, BaseBtcParams, StatusConfig, StepDefinition } from '../../../chains/btc/actions/shared/BaseBtcAction';
|
|
5
|
-
import { ChainId } from '../../../common/chains';
|
|
6
|
-
import { Chain, StepStatus } from '../../../core';
|
|
7
|
-
import { BtcCoreContext } from '../../../shared/context';
|
|
8
|
-
|
|
9
|
-
// Mock context
|
|
10
|
-
const mockCtx = {
|
|
11
|
-
api: {
|
|
12
|
-
getDepositAddress: vi.fn(),
|
|
13
|
-
generateDepositAddress: vi.fn(),
|
|
14
|
-
getDeposits: vi.fn(),
|
|
15
|
-
},
|
|
16
|
-
partner: {
|
|
17
|
-
getPartnerId: vi.fn(),
|
|
18
|
-
},
|
|
19
|
-
} as unknown as BtcCoreContext;
|
|
20
|
-
|
|
21
|
-
// Concrete implementation
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Test mock with generic step definition
|
|
23
|
-
class TestBtcAction extends BaseBtcAction<any, string, BaseBtcParams> {
|
|
24
|
-
protected getAddressSchema() {
|
|
25
|
-
return z.string().startsWith('0x');
|
|
26
|
-
}
|
|
27
|
-
protected getStatusConfig(): StatusConfig<string> {
|
|
28
|
-
return {
|
|
29
|
-
idle: 'idle',
|
|
30
|
-
ready: 'ready',
|
|
31
|
-
addressReady: 'address_ready',
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
protected getInitialSteps(): StepDefinition {
|
|
35
|
-
return { step1: StepStatus.IDLE };
|
|
36
|
-
}
|
|
37
|
-
protected isAuthorized(): boolean {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
protected getChainId() {
|
|
41
|
-
return ChainId.sepolia;
|
|
42
|
-
}
|
|
43
|
-
protected getDepositAddressParams() {
|
|
44
|
-
return {
|
|
45
|
-
address: '0x123',
|
|
46
|
-
chainId: ChainId.sepolia,
|
|
47
|
-
signature: '0xsig',
|
|
48
|
-
token: 'LBTC',
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
protected getExpectedToken(): string {
|
|
53
|
-
return 'LBTC';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Expose for testing
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Test helper accepts any params for validation testing
|
|
58
|
-
public testValidatePrepareParams(params: any) {
|
|
59
|
-
return this.validatePrepareParams(params);
|
|
60
|
-
}
|
|
61
|
-
public async testResumeFromExistingDeposit(recipient: string) {
|
|
62
|
-
return this.resumeFromExistingDeposit(recipient);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
describe('BaseBtcAction', () => {
|
|
67
|
-
const params = { destChain: Chain.SEPOLIA };
|
|
68
|
-
|
|
69
|
-
it('should validate prepare params with correct schema', () => {
|
|
70
|
-
const action = new TestBtcAction(mockCtx, params, 'idle');
|
|
71
|
-
|
|
72
|
-
// Valid params
|
|
73
|
-
expect(() => action.testValidatePrepareParams({
|
|
74
|
-
amount: '0.001',
|
|
75
|
-
recipient: '0x123',
|
|
76
|
-
})).not.toThrow();
|
|
77
|
-
|
|
78
|
-
// Invalid amount (too low)
|
|
79
|
-
expect(() => action.testValidatePrepareParams({
|
|
80
|
-
amount: '0.00001', // Below 0.0002 minimum
|
|
81
|
-
recipient: '0x123',
|
|
82
|
-
})).toThrow(/at least 0.0002/);
|
|
83
|
-
|
|
84
|
-
// Invalid recipient (schema check)
|
|
85
|
-
expect(() => action.testValidatePrepareParams({
|
|
86
|
-
amount: '0.001',
|
|
87
|
-
recipient: 'invalid', // Must start with 0x
|
|
88
|
-
})).toThrow();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should resume from existing deposit if found', async () => {
|
|
92
|
-
vi.mocked(mockCtx.api.getDepositAddress).mockResolvedValue('tb1existing...');
|
|
93
|
-
|
|
94
|
-
const action = new TestBtcAction(mockCtx, params, 'idle');
|
|
95
|
-
const resumed = await action.testResumeFromExistingDeposit('0x123');
|
|
96
|
-
|
|
97
|
-
expect(resumed).toBe(true);
|
|
98
|
-
expect(action.depositAddress).toBe('tb1existing...');
|
|
99
|
-
// resumeFromExistingDeposit does not update status; caller must handle it
|
|
100
|
-
expect(action.status).toBe('idle');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('should not resume if no existing deposit', async () => {
|
|
104
|
-
vi.mocked(mockCtx.api.getDepositAddress).mockResolvedValue(undefined as unknown as string); // SDK types might return null/undefined
|
|
105
|
-
|
|
106
|
-
const action = new TestBtcAction(mockCtx, params, 'idle');
|
|
107
|
-
const resumed = await action.testResumeFromExistingDeposit('0x123');
|
|
108
|
-
|
|
109
|
-
expect(resumed).toBe(false);
|
|
110
|
-
expect(action.depositAddress).toBeUndefined();
|
|
111
|
-
expect(action.status).toBe('idle');
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
|