@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,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token Utilities for BTC Actions
|
|
3
|
-
*
|
|
4
|
-
* Shared utilities for mapping asset IDs to tokens.
|
|
5
|
-
*
|
|
6
|
-
* ## Token Parameter Pattern for StakeAndBake/DepositAndDeploy
|
|
7
|
-
*
|
|
8
|
-
* The `token` parameter in authorization functions determines which DEFI_REGISTRY
|
|
9
|
-
* entry is used, which affects the `amountStrategy`:
|
|
10
|
-
*
|
|
11
|
-
* | Action | Flow | Token Param | Strategy | Reason |
|
|
12
|
-
* |---------------------|-------------------|---------------|-------------|----------------------------|
|
|
13
|
-
* | BtcStakeAndDeploy | BTC → LBTC → Vault | AssetId.BTC | btcToLbtc | Apply BTC/LBTC ratio |
|
|
14
|
-
* | BtcDepositAndDeploy | BTC → BTCb → Vault | Token.BTCb | identity | 1:1 ratio, no conversion |
|
|
15
|
-
*
|
|
16
|
-
* **Key Insight:**
|
|
17
|
-
* - LBTC has a variable exchange rate with BTC (~1.00265 BTC = 1 LBTC)
|
|
18
|
-
* - BTC.b is 1:1 with BTC (wrapped representation)
|
|
19
|
-
*
|
|
20
|
-
* For LBTC outputs, use the SOURCE asset (`'BTC'`) to trigger ratio conversion.
|
|
21
|
-
* For BTC.b outputs, use the OUTPUT asset (`Token.BTCb`) since no conversion needed.
|
|
22
|
-
*
|
|
23
|
-
* @see DEFI_REGISTRY in defi/defi-registry.ts
|
|
24
|
-
* @see signStakeAndBake for how amountStrategy is applied
|
|
25
|
-
*
|
|
26
|
-
* @module chains/btc/actions/shared/tokenUtils
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
import { AssetId } from '../../../../core/assets';
|
|
30
|
-
import { Token } from '../../../../tokens/token-addresses';
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Maps an AssetId to its corresponding Token value for API calls.
|
|
34
|
-
*
|
|
35
|
-
* **Note:** This function handles LBTC and BTCb. For BTC → LBTC flows that need
|
|
36
|
-
* ratio conversion, use `AssetId.BTC` directly instead of this function.
|
|
37
|
-
*
|
|
38
|
-
* @param assetId - The asset ID to convert
|
|
39
|
-
* @param defaultToken - The default token if assetId doesn't match known types (defaults to LBTC)
|
|
40
|
-
* @returns The corresponding Token value
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* // For BTC.b outputs (1:1 with BTC)
|
|
44
|
-
* assetIdToToken(AssetId.BTCb) // returns Token.BTCb
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* // For LBTC outputs from LBTC source (no ratio conversion)
|
|
48
|
-
* assetIdToToken(AssetId.LBTC) // returns Token.LBTC
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* // For BTC → LBTC (needs ratio conversion)
|
|
52
|
-
* // DON'T use assetIdToToken, use AssetId.BTC directly
|
|
53
|
-
* token: AssetId.BTC // triggers btcToLbtc strategy
|
|
54
|
-
*/
|
|
55
|
-
export function assetIdToToken(
|
|
56
|
-
assetId: AssetId,
|
|
57
|
-
defaultToken: Token = Token.LBTC,
|
|
58
|
-
): Token {
|
|
59
|
-
switch (assetId) {
|
|
60
|
-
case AssetId.LBTC:
|
|
61
|
-
return Token.LBTC;
|
|
62
|
-
case AssetId.BTCb:
|
|
63
|
-
return Token.BTCb;
|
|
64
|
-
default:
|
|
65
|
-
return defaultToken;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared Validation Utilities for BTC Actions
|
|
3
|
-
*
|
|
4
|
-
* Provides common validation logic used across all BTC actions.
|
|
5
|
-
* Reduces code duplication and ensures consistent error handling.
|
|
6
|
-
*
|
|
7
|
-
* @module chains/btc/actions/shared/validation
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { AssetId, Chain, Env } from '../../../../core';
|
|
11
|
-
import { LombardError, ValidationErrorCode } from '../../../../shared/errors';
|
|
12
|
-
|
|
13
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
14
|
-
// Types
|
|
15
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Common config interface for validation
|
|
19
|
-
* All BTC action configs should implement these properties
|
|
20
|
-
*/
|
|
21
|
-
export interface ValidatableConfig {
|
|
22
|
-
destChains: Chain[];
|
|
23
|
-
supportedAssetsOut: AssetId[];
|
|
24
|
-
routes: Array<{
|
|
25
|
-
sourceChains: Chain[];
|
|
26
|
-
envs: Env[];
|
|
27
|
-
}>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Common params interface for validation
|
|
32
|
-
*/
|
|
33
|
-
export interface ValidatableParams {
|
|
34
|
-
assetOut: AssetId;
|
|
35
|
-
destChain: Chain;
|
|
36
|
-
sourceChain?: Chain;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Validation context
|
|
41
|
-
*/
|
|
42
|
-
export interface ValidationContext {
|
|
43
|
-
env: Env;
|
|
44
|
-
actionName: string;
|
|
45
|
-
expectedAssets: AssetId[];
|
|
46
|
-
alternativeAction?: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
50
|
-
// Validation Functions
|
|
51
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Check if an asset is in the supported list
|
|
55
|
-
*/
|
|
56
|
-
export function isAssetSupported(
|
|
57
|
-
supportedAssets: AssetId[],
|
|
58
|
-
assetOut: AssetId,
|
|
59
|
-
): boolean {
|
|
60
|
-
return supportedAssets.includes(assetOut);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Check if a destination chain is in the supported list
|
|
65
|
-
*/
|
|
66
|
-
export function isDestChainSupported(
|
|
67
|
-
supportedChains: Chain[],
|
|
68
|
-
destChain: Chain,
|
|
69
|
-
): boolean {
|
|
70
|
-
return supportedChains.includes(destChain);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Check if a route is available for the given source chain and environment
|
|
75
|
-
*/
|
|
76
|
-
export function isRouteAvailable(
|
|
77
|
-
routes: ValidatableConfig['routes'],
|
|
78
|
-
sourceChain: Chain | undefined,
|
|
79
|
-
env: Env,
|
|
80
|
-
): boolean {
|
|
81
|
-
if (!sourceChain) return true; // No source chain specified, allow all
|
|
82
|
-
|
|
83
|
-
return routes.some(
|
|
84
|
-
route =>
|
|
85
|
-
route.sourceChains.includes(sourceChain) && route.envs.includes(env),
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
90
|
-
// Combined Validation
|
|
91
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Validate common BTC action parameters
|
|
95
|
-
*
|
|
96
|
-
* Performs all standard validations in one call:
|
|
97
|
-
* - Asset output validation
|
|
98
|
-
* - Destination chain validation
|
|
99
|
-
* - Route availability validation
|
|
100
|
-
*
|
|
101
|
-
* Throws descriptive errors if validation fails.
|
|
102
|
-
*
|
|
103
|
-
* @param config - Action configuration with supported chains/assets
|
|
104
|
-
* @param params - Action parameters to validate
|
|
105
|
-
* @param context - Validation context (env, action name, etc.)
|
|
106
|
-
*
|
|
107
|
-
* @throws LombardError with appropriate code and message
|
|
108
|
-
*
|
|
109
|
-
* @example
|
|
110
|
-
* ```typescript
|
|
111
|
-
* validateBtcActionParams(
|
|
112
|
-
* stakeConfig,
|
|
113
|
-
* { assetOut: AssetId.LBTC, destChain: Chain.ETHEREUM },
|
|
114
|
-
* {
|
|
115
|
-
* env: 'prod',
|
|
116
|
-
* actionName: 'BTC Stake',
|
|
117
|
-
* expectedAssets: [AssetId.LBTC],
|
|
118
|
-
* alternativeAction: 'BtcDeposit',
|
|
119
|
-
* }
|
|
120
|
-
* );
|
|
121
|
-
* ```
|
|
122
|
-
*/
|
|
123
|
-
export function validateBtcActionParams(
|
|
124
|
-
config: ValidatableConfig,
|
|
125
|
-
params: ValidatableParams,
|
|
126
|
-
context: ValidationContext,
|
|
127
|
-
): void {
|
|
128
|
-
// 1. Validate asset output
|
|
129
|
-
if (!isAssetSupported(config.supportedAssetsOut, params.assetOut)) {
|
|
130
|
-
const supported = config.supportedAssetsOut.join(', ');
|
|
131
|
-
const alternative = context.alternativeAction
|
|
132
|
-
? ` Use ${context.alternativeAction} instead.`
|
|
133
|
-
: '';
|
|
134
|
-
|
|
135
|
-
throw new LombardError(
|
|
136
|
-
ValidationErrorCode.INVALID_ASSET,
|
|
137
|
-
`Asset ${params.assetOut} is not supported for ${context.actionName}. ` +
|
|
138
|
-
`Supported: ${supported}.${alternative}`,
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// 2. Validate destination chain
|
|
143
|
-
if (!isDestChainSupported(config.destChains, params.destChain)) {
|
|
144
|
-
throw new LombardError(
|
|
145
|
-
ValidationErrorCode.INVALID_CHAIN,
|
|
146
|
-
`Destination chain ${params.destChain} is not supported for ${context.actionName}`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// 3. Validate route availability
|
|
151
|
-
if (!isRouteAvailable(config.routes, params.sourceChain, context.env)) {
|
|
152
|
-
throw LombardError.routeNotFound({
|
|
153
|
-
assetOut: params.assetOut,
|
|
154
|
-
sourceChain: params.sourceChain,
|
|
155
|
-
destChain: params.destChain,
|
|
156
|
-
env: context.env,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Validate protocol is supported (for deploy actions)
|
|
163
|
-
*
|
|
164
|
-
* @param supportedProtocols - List of supported protocols
|
|
165
|
-
* @param protocol - Protocol to validate
|
|
166
|
-
* @param actionName - Name of action for error message
|
|
167
|
-
*/
|
|
168
|
-
export function validateProtocol(
|
|
169
|
-
supportedProtocols: string[],
|
|
170
|
-
protocol: string,
|
|
171
|
-
actionName: string,
|
|
172
|
-
): void {
|
|
173
|
-
if (!supportedProtocols.includes(protocol)) {
|
|
174
|
-
throw new LombardError(
|
|
175
|
-
ValidationErrorCode.INVALID_PARAMETER,
|
|
176
|
-
`Protocol ${protocol} is not supported for ${actionName}. ` +
|
|
177
|
-
`Supported: ${supportedProtocols.join(', ')}`,
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BTC Stake Action
|
|
3
|
-
*
|
|
4
|
-
* A configuration-driven action that handles BTC → LBTC staking
|
|
5
|
-
* to any supported destination chain. Chain-specific logic is delegated
|
|
6
|
-
* to ChainConfig objects in the config/ folder.
|
|
7
|
-
*
|
|
8
|
-
* @module chains/btc/actions/stake/BtcStake
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { z } from 'zod';
|
|
12
|
-
|
|
13
|
-
import type {
|
|
14
|
-
ChainId,
|
|
15
|
-
SolanaChain,
|
|
16
|
-
StarknetChainId,
|
|
17
|
-
SuiChain,
|
|
18
|
-
} from '../../../../common/chains';
|
|
19
|
-
import {
|
|
20
|
-
getChainType,
|
|
21
|
-
parseChainIdentifier,
|
|
22
|
-
StepStatus,
|
|
23
|
-
} from '../../../../core';
|
|
24
|
-
import { BtcActionStatus } from '../../../../shared/constants/statusConstants';
|
|
25
|
-
import type { BtcCoreContext } from '../../../../shared/context';
|
|
26
|
-
import { LombardError, ValidationErrorCode } from '../../../../shared/errors';
|
|
27
|
-
import type { StakeEventMap } from '../../../../shared/events';
|
|
28
|
-
import type { MonitorProgress } from '../../../../shared/monitoring';
|
|
29
|
-
import { Token } from '../../../../tokens/token-addresses';
|
|
30
|
-
import { ensureNotSanctionedAddress } from '../../../../utils/ensureNotSanctionedAddress';
|
|
31
|
-
import {
|
|
32
|
-
assetIdToToken,
|
|
33
|
-
BaseBtcAction,
|
|
34
|
-
type StatusConfig,
|
|
35
|
-
type StepDefinition,
|
|
36
|
-
} from '../shared';
|
|
37
|
-
import {
|
|
38
|
-
type ChainConfig,
|
|
39
|
-
type FeeAuthConfig,
|
|
40
|
-
getChainConfig,
|
|
41
|
-
isAssetOutSupported,
|
|
42
|
-
isDestChainSupported,
|
|
43
|
-
isRouteAvailable,
|
|
44
|
-
type SignatureResult,
|
|
45
|
-
} from './config';
|
|
46
|
-
import type { BtcStake as IBtcStake,BtcStakeParams } from './types';
|
|
47
|
-
|
|
48
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
49
|
-
// Types
|
|
50
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
51
|
-
|
|
52
|
-
type AnyChainId = ChainId | SolanaChain | SuiChain | StarknetChainId;
|
|
53
|
-
|
|
54
|
-
interface AuthorizationState {
|
|
55
|
-
mintingFee?: string;
|
|
56
|
-
networkFee?: {
|
|
57
|
-
signature: string;
|
|
58
|
-
typedData?: string;
|
|
59
|
-
};
|
|
60
|
-
destinationSignature?: SignatureResult;
|
|
61
|
-
authorized: boolean;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
65
|
-
// BtcStake Implementation
|
|
66
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* BTC Stake Action
|
|
70
|
-
*
|
|
71
|
-
* Handles BTC → LBTC staking to any supported destination chain.
|
|
72
|
-
* Uses configuration-driven design for chain-specific logic.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* const stake = new BtcStake(ctx, {
|
|
77
|
-
* assetOut: AssetId.LBTC,
|
|
78
|
-
* destChain: Chain.ETHEREUM,
|
|
79
|
-
* });
|
|
80
|
-
*
|
|
81
|
-
* await stake.prepare({ amount: '0.1', recipient: '0x...' });
|
|
82
|
-
* await stake.authorize();
|
|
83
|
-
* const address = await stake.generateDepositAddress();
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
export class BtcStake
|
|
87
|
-
extends BaseBtcAction<StakeEventMap, BtcActionStatus, BtcStakeParams>
|
|
88
|
-
implements IBtcStake
|
|
89
|
-
{
|
|
90
|
-
private readonly config: ChainConfig;
|
|
91
|
-
private readonly chainId: AnyChainId;
|
|
92
|
-
private readonly authState: AuthorizationState = { authorized: false };
|
|
93
|
-
|
|
94
|
-
/** Fee auth config - null if not required for this destination */
|
|
95
|
-
private feeAuthConfig: FeeAuthConfig | null = null;
|
|
96
|
-
|
|
97
|
-
constructor(ctx: BtcCoreContext, params: BtcStakeParams) {
|
|
98
|
-
super(ctx, params, BtcActionStatus.IDLE);
|
|
99
|
-
|
|
100
|
-
const chainType = getChainType(params.destChain);
|
|
101
|
-
const config = getChainConfig(chainType);
|
|
102
|
-
|
|
103
|
-
if (!config) {
|
|
104
|
-
throw new LombardError(
|
|
105
|
-
ValidationErrorCode.INVALID_CHAIN,
|
|
106
|
-
`Unsupported destination chain type: ${chainType} (${params.destChain})`,
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Validate assetOut - BTC Stake should only produce LBTC
|
|
111
|
-
if (!isAssetOutSupported(config, params.assetOut)) {
|
|
112
|
-
throw new LombardError(
|
|
113
|
-
ValidationErrorCode.INVALID_ASSET,
|
|
114
|
-
`Asset ${params.assetOut} is not supported for BTC staking. ` +
|
|
115
|
-
`BTC Stake produces LBTC. For BTC.b, use BtcDeposit instead.`,
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (!isDestChainSupported(config, params.destChain)) {
|
|
120
|
-
throw new LombardError(
|
|
121
|
-
ValidationErrorCode.INVALID_CHAIN,
|
|
122
|
-
`Destination chain ${params.destChain} is not supported for ${chainType}`,
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (!isRouteAvailable(config, params.sourceChain, ctx.env)) {
|
|
127
|
-
throw LombardError.routeNotFound({
|
|
128
|
-
assetOut: params.assetOut,
|
|
129
|
-
sourceChain: params.sourceChain,
|
|
130
|
-
destChain: params.destChain,
|
|
131
|
-
env: ctx.env,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
this.config = config;
|
|
136
|
-
this.chainId = parseChainIdentifier(params.destChain);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
140
|
-
// Abstract Method Implementations
|
|
141
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
142
|
-
|
|
143
|
-
protected getAddressSchema(): z.ZodType<string> {
|
|
144
|
-
return this.config.addressSchema;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
protected getStatusConfig(): StatusConfig<BtcActionStatus> {
|
|
148
|
-
return {
|
|
149
|
-
idle: BtcActionStatus.IDLE,
|
|
150
|
-
ready: BtcActionStatus.READY,
|
|
151
|
-
addressReady: BtcActionStatus.ADDRESS_READY,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
protected getInitialSteps(): StepDefinition {
|
|
156
|
-
return {
|
|
157
|
-
created: StepStatus.IDLE,
|
|
158
|
-
verifying: StepStatus.IDLE,
|
|
159
|
-
issuing: StepStatus.IDLE,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
protected isAuthorized(): boolean {
|
|
164
|
-
return this.authState.authorized;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
protected getChainId(): AnyChainId {
|
|
168
|
-
return this.chainId;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
protected getDepositAddressParams() {
|
|
172
|
-
const recipient = this.ensureRecipient();
|
|
173
|
-
const signature = this.getActiveSignature();
|
|
174
|
-
|
|
175
|
-
if (!signature) {
|
|
176
|
-
throw new LombardError(
|
|
177
|
-
ValidationErrorCode.INVALID_PARAMETER,
|
|
178
|
-
'Missing signature. Complete authorization first.',
|
|
179
|
-
);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return {
|
|
183
|
-
address: signature.paddedAddress ?? recipient,
|
|
184
|
-
chainId: this.chainId,
|
|
185
|
-
signature: signature.signature,
|
|
186
|
-
token: this.getExpectedToken(),
|
|
187
|
-
eip712Data: this.authState.networkFee?.typedData,
|
|
188
|
-
pubKey: signature.pubKey,
|
|
189
|
-
partnerId: this.ctx.partner.getPartnerId(),
|
|
190
|
-
referrerCode: this._referralCode,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Get expected token for this action (LBTC by default for BTC Stake)
|
|
196
|
-
*/
|
|
197
|
-
protected getExpectedToken(): string {
|
|
198
|
-
return assetIdToToken(this.params.assetOut, Token.LBTC);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
protected getAuthRequiredMessage(): string {
|
|
202
|
-
return 'Authorization required. Call authorize() first.';
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
206
|
-
// Public Getters
|
|
207
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
208
|
-
|
|
209
|
-
/** Get minting fee (available after prepare() for fee-auth chains) */
|
|
210
|
-
get mintingFee(): string | undefined {
|
|
211
|
-
return this.authState.mintingFee;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
215
|
-
// Public Methods
|
|
216
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
217
|
-
|
|
218
|
-
async prepare(params: {
|
|
219
|
-
amount: string;
|
|
220
|
-
recipient: string;
|
|
221
|
-
referralCode?: string;
|
|
222
|
-
}): Promise<void> {
|
|
223
|
-
this.assertStatus(BtcActionStatus.IDLE, 'prepare');
|
|
224
|
-
|
|
225
|
-
return this.act(async () => {
|
|
226
|
-
const validated = this.validatePrepareParams(params);
|
|
227
|
-
|
|
228
|
-
this._amount = validated.amount;
|
|
229
|
-
this._recipient = validated.recipient;
|
|
230
|
-
this._referralCode = validated.referralCode;
|
|
231
|
-
|
|
232
|
-
// Get fee auth config for this destination chain (needed for both resume and new flow)
|
|
233
|
-
this.feeAuthConfig = this.config.getFeeAuthConfig(this.params.destChain);
|
|
234
|
-
|
|
235
|
-
// Check for existing deposit (resume flow)
|
|
236
|
-
const hasExistingDeposit = await this.resumeFromExistingDeposit(
|
|
237
|
-
validated.recipient,
|
|
238
|
-
);
|
|
239
|
-
|
|
240
|
-
if (hasExistingDeposit) {
|
|
241
|
-
// We have a deposit address, but we still need to validate fee authorization
|
|
242
|
-
// The deposit address might have been created when fee auth was valid,
|
|
243
|
-
// but the fee auth could have expired since then
|
|
244
|
-
if (this.feeAuthConfig) {
|
|
245
|
-
const stored = await this.feeAuthConfig.restoreFeeSignature(
|
|
246
|
-
this.ctx,
|
|
247
|
-
this.chainId,
|
|
248
|
-
validated.recipient,
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
// Check hasSignature flag - the actual signature string may not be returned by API
|
|
252
|
-
if (!stored?.hasSignature) {
|
|
253
|
-
// Fee auth is required but expired/missing - need re-authorization
|
|
254
|
-
this.authState.mintingFee = await this.feeAuthConfig.getMintingFee(
|
|
255
|
-
this.ctx,
|
|
256
|
-
this.chainId,
|
|
257
|
-
);
|
|
258
|
-
this.updateStatus(BtcActionStatus.NEEDS_FEE_AUTHORIZATION);
|
|
259
|
-
this.emitInitialProgress();
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Fee auth is still valid on server - store signature if available
|
|
264
|
-
if (stored.signature) {
|
|
265
|
-
this.authState.networkFee = {
|
|
266
|
-
signature: stored.signature,
|
|
267
|
-
typedData: stored.typedData,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
this.authState.authorized = true;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// Deposit address exists and fee auth is valid (or not required)
|
|
274
|
-
// Now we can safely set the status to ADDRESS_READY
|
|
275
|
-
this.updateStatus(BtcActionStatus.ADDRESS_READY);
|
|
276
|
-
this.emitInitialProgress();
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
// No existing deposit - proceed with normal flow
|
|
281
|
-
if (this.feeAuthConfig) {
|
|
282
|
-
// Fee authorization required - try to restore stored signature first
|
|
283
|
-
const stored = await this.feeAuthConfig.restoreFeeSignature(
|
|
284
|
-
this.ctx,
|
|
285
|
-
this.chainId,
|
|
286
|
-
validated.recipient,
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
// Check hasSignature flag - the actual signature string may not be returned by API
|
|
290
|
-
if (stored?.hasSignature) {
|
|
291
|
-
// Fee auth already exists on server - store signature if available
|
|
292
|
-
if (stored.signature) {
|
|
293
|
-
this.authState.networkFee = {
|
|
294
|
-
signature: stored.signature,
|
|
295
|
-
typedData: stored.typedData,
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
this.authState.authorized = true;
|
|
299
|
-
this.updateStatus(BtcActionStatus.READY);
|
|
300
|
-
this.emitInitialProgress();
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// Get minting fee for display
|
|
305
|
-
this.authState.mintingFee = await this.feeAuthConfig.getMintingFee(
|
|
306
|
-
this.ctx,
|
|
307
|
-
this.chainId,
|
|
308
|
-
);
|
|
309
|
-
this.updateStatus(BtcActionStatus.NEEDS_FEE_AUTHORIZATION);
|
|
310
|
-
} else {
|
|
311
|
-
// No fee auth required - go to address confirmation
|
|
312
|
-
this.updateStatus(BtcActionStatus.NEEDS_ADDRESS_CONFIRMATION);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
this.emitInitialProgress();
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
async authorize(): Promise<void> {
|
|
320
|
-
this.assertStatus(
|
|
321
|
-
[
|
|
322
|
-
BtcActionStatus.NEEDS_FEE_AUTHORIZATION,
|
|
323
|
-
BtcActionStatus.NEEDS_ADDRESS_CONFIRMATION,
|
|
324
|
-
BtcActionStatus.READY,
|
|
325
|
-
],
|
|
326
|
-
'authorize',
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
if (this.status === BtcActionStatus.READY) return;
|
|
330
|
-
|
|
331
|
-
const recipient = this.ensureRecipient();
|
|
332
|
-
const needsFeeAuth = this.feeAuthConfig !== null;
|
|
333
|
-
|
|
334
|
-
return this.act(async () => {
|
|
335
|
-
if (needsFeeAuth) {
|
|
336
|
-
// Fee authorization flow
|
|
337
|
-
const fee = this.ensureMintingFee();
|
|
338
|
-
const result = await this.feeAuthConfig!.authorizeFee(this.ctx, {
|
|
339
|
-
chainId: this.chainId,
|
|
340
|
-
recipient,
|
|
341
|
-
fee,
|
|
342
|
-
});
|
|
343
|
-
this.authState.networkFee = {
|
|
344
|
-
signature: result.signature,
|
|
345
|
-
typedData: result.typedData,
|
|
346
|
-
};
|
|
347
|
-
} else {
|
|
348
|
-
// Destination signature flow
|
|
349
|
-
this.authState.destinationSignature = await this.config.getSignature(
|
|
350
|
-
this.ctx,
|
|
351
|
-
recipient,
|
|
352
|
-
this.chainId,
|
|
353
|
-
);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
this.authState.authorized = true;
|
|
357
|
-
}, BtcActionStatus.READY);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
async generateDepositAddress(): Promise<string> {
|
|
361
|
-
this.assertStatus(BtcActionStatus.READY, 'generateDepositAddress');
|
|
362
|
-
this.ensureAuthorized();
|
|
363
|
-
|
|
364
|
-
if (this._depositAddress) {
|
|
365
|
-
return this._depositAddress;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
// If no signature is available locally (fee auth exists on server but wasn't returned),
|
|
369
|
-
// fall back to signing the destination address
|
|
370
|
-
if (!this.getActiveSignature()) {
|
|
371
|
-
const result = await this.config.getSignature(
|
|
372
|
-
this.ctx,
|
|
373
|
-
this.ensureRecipient(),
|
|
374
|
-
this.chainId,
|
|
375
|
-
);
|
|
376
|
-
this.authState.destinationSignature = result;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
return this.act(async () => {
|
|
380
|
-
const apiParams = this.getDepositAddressParams();
|
|
381
|
-
const depositAddress =
|
|
382
|
-
await this.ctx.api.generateDepositAddress(apiParams);
|
|
383
|
-
|
|
384
|
-
ensureNotSanctionedAddress(depositAddress);
|
|
385
|
-
this._depositAddress = depositAddress;
|
|
386
|
-
|
|
387
|
-
this.emitProgress({
|
|
388
|
-
status: BtcActionStatus.ADDRESS_READY,
|
|
389
|
-
steps: {
|
|
390
|
-
created: StepStatus.COMPLETE,
|
|
391
|
-
verifying: StepStatus.IDLE,
|
|
392
|
-
issuing: StepStatus.IDLE,
|
|
393
|
-
},
|
|
394
|
-
metadata: { depositAddress },
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
return depositAddress;
|
|
398
|
-
}, BtcActionStatus.ADDRESS_READY);
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
async execute(): Promise<{ depositAddress: string; txHash?: string }> {
|
|
402
|
-
return this.executeImpl();
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
async monitorDeposit(): Promise<MonitorProgress | undefined> {
|
|
406
|
-
return super.monitorDeposit();
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
410
|
-
// Private: Ensure Methods
|
|
411
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
412
|
-
|
|
413
|
-
private ensureMintingFee(): string {
|
|
414
|
-
if (!this.authState.mintingFee) {
|
|
415
|
-
throw new LombardError(
|
|
416
|
-
ValidationErrorCode.INVALID_PARAMETER,
|
|
417
|
-
'Minting fee not fetched. Call prepare() first.',
|
|
418
|
-
);
|
|
419
|
-
}
|
|
420
|
-
return this.authState.mintingFee;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
424
|
-
// Private: Signature Helpers
|
|
425
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
426
|
-
|
|
427
|
-
private getActiveSignature(): SignatureResult | undefined {
|
|
428
|
-
if (this.authState.networkFee?.signature) {
|
|
429
|
-
return { signature: this.authState.networkFee.signature };
|
|
430
|
-
}
|
|
431
|
-
return this.authState.destinationSignature;
|
|
432
|
-
}
|
|
433
|
-
}
|