@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.
Files changed (474) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/bridge/lib/ccip-config.d.ts.map +1 -1
  3. package/dist/bridge/lib/config.d.ts +3 -3
  4. package/dist/bridge/lib/config.d.ts.map +1 -1
  5. package/dist/common/chains.d.ts +2 -2
  6. package/dist/common/chains.d.ts.map +1 -1
  7. package/dist/common/feature-config.d.ts.map +1 -1
  8. package/dist/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.d.ts.map +1 -1
  9. package/dist/index2.cjs +6 -6
  10. package/dist/index2.js +792 -759
  11. package/dist/vaults/lib/config.d.ts +1 -1
  12. package/package.json +7 -8
  13. package/src/__tests__/AssetNamespace.spec.ts +0 -234
  14. package/src/__tests__/helpers/createTestConfig.ts +0 -90
  15. package/src/__tests__/integration/automint-fee.integration.test.ts +0 -74
  16. package/src/__tests__/integration/btc-deposit.integration.test.ts +0 -109
  17. package/src/__tests__/integration/btc-stake-and-deploy.integration.test.ts +0 -96
  18. package/src/__tests__/integration/btc-stake.integration.test.ts +0 -466
  19. package/src/__tests__/integration/evm-actions.integration.test.ts +0 -932
  20. package/src/__tests__/integration/evm-deploy.integration.test.ts +0 -122
  21. package/src/__tests__/integration/evm-redeem.integration.test.ts +0 -157
  22. package/src/__tests__/integration/faq-patterns.integration.test.ts +0 -465
  23. package/src/__tests__/integration/getLBTCMintingFee.integration.test.ts +0 -195
  24. package/src/__tests__/real-wallet/btc/btc-stake.real.test.ts +0 -70
  25. package/src/__tests__/real-wallet/evm/evm-stake.real.test.ts +0 -47
  26. package/src/__tests__/real-wallet/evm/evm-unstake.real.test.ts +0 -49
  27. package/src/__tests__/real-wallet/non-evm/solana-unstake.real.test.ts +0 -19
  28. package/src/__tests__/real-wallet/non-evm/starknet-unstake.real.test.ts +0 -19
  29. package/src/__tests__/real-wallet/non-evm/sui-unstake.real.test.ts +0 -19
  30. package/src/__tests__/services/ApiService.test.ts +0 -62
  31. package/src/__tests__/services/BtcService.test.ts +0 -30
  32. package/src/__tests__/services/EvmService.test.ts +0 -39
  33. package/src/__tests__/setup.ts +0 -16
  34. package/src/__tests__/test-utils/eip1193-adapter.ts +0 -48
  35. package/src/__tests__/test-utils/evm-wallet.ts +0 -38
  36. package/src/__tests__/test-utils/solana-wallet.ts +0 -22
  37. package/src/__tests__/test-utils/starknet-wallet.ts +0 -9
  38. package/src/__tests__/test-utils/sui-wallet.ts +0 -14
  39. package/src/__tests__/test-utils/test-constraints.ts +0 -110
  40. package/src/__tests__/unit/btc/BtcDeposit.test.ts +0 -253
  41. package/src/__tests__/unit/btc/BtcDepositAndDeploy.test.ts +0 -174
  42. package/src/__tests__/unit/btc/BtcDepositConfig.test.ts +0 -143
  43. package/src/__tests__/unit/btc/BtcDepositStatusTransition.test.ts +0 -221
  44. package/src/__tests__/unit/btc/BtcStakeAndDeploy.test.ts +0 -194
  45. package/src/__tests__/unit/btc/ExistingSignatureHandling.test.ts +0 -301
  46. package/src/__tests__/unit/btc/StakeAndBakeRatioConversion.test.ts +0 -200
  47. package/src/__tests__/unit/btc/StakeAndBakeSignatureRestore.test.ts +0 -216
  48. package/src/__tests__/unit/btc/TokenParameterConsistency.test.ts +0 -184
  49. package/src/__tests__/unit/btc/btc-deposit-token.test.ts +0 -191
  50. package/src/__tests__/unit/catalog/AssetCatalog.test.ts +0 -293
  51. package/src/__tests__/unit/config/ChainConfig.test.ts +0 -47
  52. package/src/__tests__/unit/config/FeeAuthConfig.test.ts +0 -76
  53. package/src/__tests__/unit/contract-functions/getLBTCMintingFee.test.ts +0 -128
  54. package/src/__tests__/unit/core/chain-parsing.test.ts +0 -257
  55. package/src/__tests__/unit/defi/AvailableProtocols.test.ts +0 -100
  56. package/src/__tests__/unit/defi/DefiRegistry.test.ts +0 -25
  57. package/src/__tests__/unit/evm/EvmDeploy.test.ts +0 -224
  58. package/src/__tests__/unit/evm/EvmRedeem.test.ts +0 -207
  59. package/src/__tests__/unit/evm/EvmRedeemFeeAuth.test.ts +0 -93
  60. package/src/__tests__/unit/evm/EvmStake.test.ts +0 -207
  61. package/src/__tests__/unit/evm/EvmStakeFeeAuth.test.ts +0 -193
  62. package/src/__tests__/unit/evm/EvmUnstakeAllowance.test.ts +0 -69
  63. package/src/__tests__/unit/evm/EvmUnstakeConfig.test.ts +0 -203
  64. package/src/__tests__/unit/fee-signature-expiration.test.ts +0 -76
  65. package/src/__tests__/unit/modules/CapabilityRegistry.test.ts +0 -55
  66. package/src/__tests__/unit/shared/BaseAction.test.ts +0 -122
  67. package/src/__tests__/unit/shared/BaseBtcAction.test.ts +0 -114
  68. package/src/__tests__/unit/solana/SolanaUnstake.test.ts +0 -314
  69. package/src/__tests__/unit/starknet/StarknetUnstake.test.ts +0 -318
  70. package/src/__tests__/unit/sui/SuiUnstake.test.ts +0 -310
  71. package/src/__tests__/unit/utils/satoshi.test.ts +0 -27
  72. package/src/__tests__/unit/validation/address-validation.test.ts +0 -350
  73. package/src/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.stories.tsx +0 -71
  74. package/src/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.ts +0 -235
  75. package/src/api-functions/generateDepositBtcAddress/index.ts +0 -1
  76. package/src/api-functions/get-badges-by-address/get-badges-by-address.ts +0 -13
  77. package/src/api-functions/get-badges-by-address/index.ts +0 -1
  78. package/src/api-functions/getDepositAddressReferrer/getDepositAddressReferrer.ts +0 -38
  79. package/src/api-functions/getDepositAddressReferrer/index.ts +0 -1
  80. package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.stories.tsx +0 -59
  81. package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.test.ts +0 -265
  82. package/src/api-functions/getDepositBtcAddress/getDepositBtcAddress.ts +0 -167
  83. package/src/api-functions/getDepositBtcAddress/getDepositBtcAddresses.stories.tsx +0 -58
  84. package/src/api-functions/getDepositBtcAddress/index.ts +0 -1
  85. package/src/api-functions/getDepositBtcAddress/make-request.ts +0 -59
  86. package/src/api-functions/getDepositBtcAddress/types.ts +0 -106
  87. package/src/api-functions/getDepositsByAddress/getDepositsByAddress.stories.tsx +0 -51
  88. package/src/api-functions/getDepositsByAddress/getDepositsByAddress.ts +0 -502
  89. package/src/api-functions/getDepositsByAddress/index.ts +0 -1
  90. package/src/api-functions/getLBTCExchangeRate/get-exchange-ratio.stories.tsx +0 -48
  91. package/src/api-functions/getLBTCExchangeRate/get-exchange-ratio.ts +0 -59
  92. package/src/api-functions/getLBTCExchangeRate/getLBTCExchangeRate.stories.tsx +0 -55
  93. package/src/api-functions/getLBTCExchangeRate/getLBTCExchangeRate.ts +0 -75
  94. package/src/api-functions/getLBTCExchangeRate/index.ts +0 -2
  95. package/src/api-functions/getNetworkFeeSignature/getNetworkFeeSignature.stories.tsx +0 -59
  96. package/src/api-functions/getNetworkFeeSignature/getNetworkFeeSignature.ts +0 -116
  97. package/src/api-functions/getNetworkFeeSignature/index.ts +0 -1
  98. package/src/api-functions/getPointsByAddress/getPointsByAddress.stories.tsx +0 -51
  99. package/src/api-functions/getPointsByAddress/getPointsByAddress.ts +0 -304
  100. package/src/api-functions/getPointsByAddress/index.ts +0 -1
  101. package/src/api-functions/getUnstakesByAddress/getUnstakesByAddress.stories.tsx +0 -51
  102. package/src/api-functions/getUnstakesByAddress/getUnstakesByAddress.ts +0 -368
  103. package/src/api-functions/getUnstakesByAddress/index.ts +0 -1
  104. package/src/api-functions/getUserStakeAndBakeSignature/getUserStakeAndBakeSignature.stories.tsx +0 -70
  105. package/src/api-functions/getUserStakeAndBakeSignature/getUserStakeAndBakeSignature.ts +0 -91
  106. package/src/api-functions/getUserStakeAndBakeSignature/index.ts +0 -1
  107. package/src/api-functions/index.ts +0 -11
  108. package/src/api-functions/setReferral/index.ts +0 -1
  109. package/src/api-functions/setReferral/setReferral.ts +0 -67
  110. package/src/api-functions/storeNetworkFeeSignature/index.ts +0 -1
  111. package/src/api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature.stories.tsx +0 -57
  112. package/src/api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature.ts +0 -75
  113. package/src/api-functions/storeStakeAndBakeSignature/index.ts +0 -1
  114. package/src/api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature.stories.tsx +0 -57
  115. package/src/api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature.ts +0 -61
  116. package/src/bridge/abi/CCIP_BRIDGE_ADAPTER_ABI.json +0 -704
  117. package/src/bridge/abi/CCIP_ROUTER_ABI.json +0 -702
  118. package/src/bridge/abi/OFT_BRIDGE_ADAPTER_ABI.json +0 -912
  119. package/src/bridge/index.ts +0 -16
  120. package/src/bridge/lib/bridge.stories.tsx +0 -90
  121. package/src/bridge/lib/bridge.ts +0 -115
  122. package/src/bridge/lib/ccip-bridge.stories.tsx +0 -91
  123. package/src/bridge/lib/ccip-bridge.ts +0 -214
  124. package/src/bridge/lib/ccip-config.ts +0 -54
  125. package/src/bridge/lib/config.ts +0 -384
  126. package/src/bridge/lib/oft-bridge.stories.tsx +0 -90
  127. package/src/bridge/lib/oft-bridge.ts +0 -217
  128. package/src/chains/btc/BtcActions.ts +0 -192
  129. package/src/chains/btc/actions/deposit/BtcDeposit.ts +0 -388
  130. package/src/chains/btc/actions/deposit/config/evm.ts +0 -197
  131. package/src/chains/btc/actions/deposit/config/index.ts +0 -53
  132. package/src/chains/btc/actions/deposit/config/types.ts +0 -108
  133. package/src/chains/btc/actions/deposit/factory.ts +0 -53
  134. package/src/chains/btc/actions/deposit/index.ts +0 -23
  135. package/src/chains/btc/actions/deposit/types.ts +0 -120
  136. package/src/chains/btc/actions/depositAndDeploy/BtcDepositAndDeploy.ts +0 -366
  137. package/src/chains/btc/actions/depositAndDeploy/config/evm.ts +0 -105
  138. package/src/chains/btc/actions/depositAndDeploy/config/index.ts +0 -111
  139. package/src/chains/btc/actions/depositAndDeploy/config/types.ts +0 -67
  140. package/src/chains/btc/actions/depositAndDeploy/factory.ts +0 -38
  141. package/src/chains/btc/actions/depositAndDeploy/index.ts +0 -24
  142. package/src/chains/btc/actions/depositAndDeploy/types.ts +0 -120
  143. package/src/chains/btc/actions/index.ts +0 -14
  144. package/src/chains/btc/actions/shared/BaseBtcAction.ts +0 -495
  145. package/src/chains/btc/actions/shared/index.ts +0 -28
  146. package/src/chains/btc/actions/shared/tokenUtils.ts +0 -68
  147. package/src/chains/btc/actions/shared/validation.ts +0 -180
  148. package/src/chains/btc/actions/stake/BtcStake.ts +0 -433
  149. package/src/chains/btc/actions/stake/__tests__/BtcStake.test.ts +0 -247
  150. package/src/chains/btc/actions/stake/config/evm.ts +0 -183
  151. package/src/chains/btc/actions/stake/config/index.ts +0 -122
  152. package/src/chains/btc/actions/stake/config/solana.ts +0 -96
  153. package/src/chains/btc/actions/stake/config/starknet.ts +0 -66
  154. package/src/chains/btc/actions/stake/config/sui.ts +0 -61
  155. package/src/chains/btc/actions/stake/config/types.ts +0 -165
  156. package/src/chains/btc/actions/stake/factory.ts +0 -53
  157. package/src/chains/btc/actions/stake/index.ts +0 -22
  158. package/src/chains/btc/actions/stake/types.ts +0 -175
  159. package/src/chains/btc/actions/stakeAndDeploy/BtcStakeAndDeploy.ts +0 -415
  160. package/src/chains/btc/actions/stakeAndDeploy/config/evm.ts +0 -135
  161. package/src/chains/btc/actions/stakeAndDeploy/config/index.ts +0 -119
  162. package/src/chains/btc/actions/stakeAndDeploy/config/types.ts +0 -93
  163. package/src/chains/btc/actions/stakeAndDeploy/factory.ts +0 -54
  164. package/src/chains/btc/actions/stakeAndDeploy/index.ts +0 -26
  165. package/src/chains/btc/actions/stakeAndDeploy/types.ts +0 -118
  166. package/src/chains/btc/client/getCurrentBlockHeight.ts +0 -28
  167. package/src/chains/btc/client/mempool/error.ts +0 -24
  168. package/src/chains/btc/client/mempool/mempool.ts +0 -23
  169. package/src/chains/btc/index.ts +0 -71
  170. package/src/chains/evm/EvmActions.ts +0 -185
  171. package/src/chains/evm/actions/deploy/EvmDeploy.ts +0 -256
  172. package/src/chains/evm/actions/deploy/config/evm.ts +0 -80
  173. package/src/chains/evm/actions/deploy/config/index.ts +0 -8
  174. package/src/chains/evm/actions/deploy/config/types.ts +0 -43
  175. package/src/chains/evm/actions/deploy/factory.ts +0 -44
  176. package/src/chains/evm/actions/deploy/index.ts +0 -17
  177. package/src/chains/evm/actions/deploy/types.ts +0 -74
  178. package/src/chains/evm/actions/deposit/EvmDeposit.ts +0 -159
  179. package/src/chains/evm/actions/deposit/config/evm.ts +0 -100
  180. package/src/chains/evm/actions/deposit/config/index.ts +0 -8
  181. package/src/chains/evm/actions/deposit/config/types.ts +0 -39
  182. package/src/chains/evm/actions/deposit/factory.ts +0 -44
  183. package/src/chains/evm/actions/deposit/index.ts +0 -17
  184. package/src/chains/evm/actions/deposit/types.ts +0 -87
  185. package/src/chains/evm/actions/index.ts +0 -67
  186. package/src/chains/evm/actions/redeem/EvmRedeem.ts +0 -263
  187. package/src/chains/evm/actions/redeem/config/evm.ts +0 -85
  188. package/src/chains/evm/actions/redeem/config/index.ts +0 -8
  189. package/src/chains/evm/actions/redeem/config/types.ts +0 -39
  190. package/src/chains/evm/actions/redeem/factory.ts +0 -43
  191. package/src/chains/evm/actions/redeem/index.ts +0 -17
  192. package/src/chains/evm/actions/redeem/types.ts +0 -93
  193. package/src/chains/evm/actions/stake/EvmStake.ts +0 -339
  194. package/src/chains/evm/actions/stake/config/evm.ts +0 -89
  195. package/src/chains/evm/actions/stake/config/index.ts +0 -8
  196. package/src/chains/evm/actions/stake/config/types.ts +0 -89
  197. package/src/chains/evm/actions/stake/factory.ts +0 -52
  198. package/src/chains/evm/actions/stake/index.ts +0 -30
  199. package/src/chains/evm/actions/stake/types.ts +0 -104
  200. package/src/chains/evm/actions/unstake/EvmUnstake.ts +0 -258
  201. package/src/chains/evm/actions/unstake/config/evm.ts +0 -123
  202. package/src/chains/evm/actions/unstake/config/index.ts +0 -13
  203. package/src/chains/evm/actions/unstake/config/types.ts +0 -37
  204. package/src/chains/evm/actions/unstake/factory.ts +0 -44
  205. package/src/chains/evm/actions/unstake/index.ts +0 -22
  206. package/src/chains/evm/actions/unstake/types.ts +0 -87
  207. package/src/chains/evm/index.ts +0 -16
  208. package/src/chains/evm/shared/feeAuth.ts +0 -198
  209. package/src/chains/evm/shared/index.ts +0 -7
  210. package/src/chains/solana/SolanaActions.ts +0 -85
  211. package/src/chains/solana/actions/index.ts +0 -7
  212. package/src/chains/solana/actions/unstake/SolanaUnstake.ts +0 -151
  213. package/src/chains/solana/actions/unstake/config/btc.ts +0 -47
  214. package/src/chains/solana/actions/unstake/config/index.ts +0 -8
  215. package/src/chains/solana/actions/unstake/config/solana.ts +0 -47
  216. package/src/chains/solana/actions/unstake/config/types.ts +0 -35
  217. package/src/chains/solana/actions/unstake/factory.ts +0 -34
  218. package/src/chains/solana/actions/unstake/index.ts +0 -14
  219. package/src/chains/solana/actions/unstake/types.ts +0 -58
  220. package/src/chains/solana/index.ts +0 -8
  221. package/src/chains/starknet/StarknetActions.ts +0 -85
  222. package/src/chains/starknet/actions/index.ts +0 -7
  223. package/src/chains/starknet/actions/unstake/StarknetUnstake.ts +0 -128
  224. package/src/chains/starknet/actions/unstake/config/btc.ts +0 -43
  225. package/src/chains/starknet/actions/unstake/config/index.ts +0 -8
  226. package/src/chains/starknet/actions/unstake/config/starknet.ts +0 -43
  227. package/src/chains/starknet/actions/unstake/config/types.ts +0 -27
  228. package/src/chains/starknet/actions/unstake/factory.ts +0 -32
  229. package/src/chains/starknet/actions/unstake/index.ts +0 -14
  230. package/src/chains/starknet/actions/unstake/types.ts +0 -57
  231. package/src/chains/starknet/index.ts +0 -8
  232. package/src/chains/sui/SuiActions.ts +0 -82
  233. package/src/chains/sui/actions/index.ts +0 -7
  234. package/src/chains/sui/actions/unstake/SuiUnstake.ts +0 -146
  235. package/src/chains/sui/actions/unstake/config/btc.ts +0 -43
  236. package/src/chains/sui/actions/unstake/config/index.ts +0 -8
  237. package/src/chains/sui/actions/unstake/config/sui.ts +0 -43
  238. package/src/chains/sui/actions/unstake/config/types.ts +0 -27
  239. package/src/chains/sui/actions/unstake/factory.ts +0 -32
  240. package/src/chains/sui/actions/unstake/index.ts +0 -14
  241. package/src/chains/sui/actions/unstake/types.ts +0 -57
  242. package/src/chains/sui/index.ts +0 -8
  243. package/src/client/ApiNamespace.ts +0 -302
  244. package/src/client/AssetNamespace.ts +0 -112
  245. package/src/client/LombardSDK.ts +0 -212
  246. package/src/client/PartnerConfiguration.ts +0 -50
  247. package/src/client/createConfig.ts +0 -90
  248. package/src/client/createLombardSDK.ts +0 -130
  249. package/src/clients/evm-signer-adapter.ts +0 -313
  250. package/src/clients/public-client.ts +0 -49
  251. package/src/clients/rpc-url-config.ts +0 -64
  252. package/src/clients/wallet-client.ts +0 -34
  253. package/src/common/api-config.ts +0 -48
  254. package/src/common/blockchain-identifier.ts +0 -217
  255. package/src/common/chains.stories.tsx +0 -68
  256. package/src/common/chains.ts +0 -449
  257. package/src/common/constants.ts +0 -1
  258. package/src/common/contract-info.ts +0 -9
  259. package/src/common/feature-config.ts +0 -79
  260. package/src/common/fee-requirements.ts +0 -34
  261. package/src/common/parameters.ts +0 -89
  262. package/src/config/defaults.ts +0 -49
  263. package/src/config/index.ts +0 -12
  264. package/src/config/providers.ts +0 -81
  265. package/src/config/types.ts +0 -216
  266. package/src/config/validation.ts +0 -69
  267. package/src/contract-functions/approveLBTC/approveLBTC.stories.tsx +0 -79
  268. package/src/contract-functions/approveLBTC/approveLBTC.ts +0 -66
  269. package/src/contract-functions/approveLBTC/index.ts +0 -1
  270. package/src/contract-functions/approveToken/approveToken.ts +0 -126
  271. package/src/contract-functions/approveToken/index.ts +0 -1
  272. package/src/contract-functions/claimLBTC/claimLBTC.stories.tsx +0 -82
  273. package/src/contract-functions/claimLBTC/claimLBTC.ts +0 -159
  274. package/src/contract-functions/claimLBTC/index.ts +0 -1
  275. package/src/contract-functions/claimUnstakeRedeem/claimUnstakeRedeem.ts +0 -95
  276. package/src/contract-functions/claimUnstakeRedeem/index.ts +0 -1
  277. package/src/contract-functions/deposit/depositToken.stories.tsx +0 -83
  278. package/src/contract-functions/deposit/depositToken.ts +0 -214
  279. package/src/contract-functions/deposit/index.ts +0 -1
  280. package/src/contract-functions/getBasculeDepositStatus/decodeBasculeDepositStatus.ts +0 -170
  281. package/src/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.stories.tsx +0 -62
  282. package/src/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.ts +0 -211
  283. package/src/contract-functions/getBasculeDepositStatus/index.ts +0 -2
  284. package/src/contract-functions/getLBTCMintingFee/getLBTCMintingFee.stories.tsx +0 -61
  285. package/src/contract-functions/getLBTCMintingFee/getLBTCMintingFee.ts +0 -193
  286. package/src/contract-functions/getLBTCMintingFee/index.ts +0 -1
  287. package/src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.stories.tsx +0 -51
  288. package/src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.ts +0 -40
  289. package/src/contract-functions/getLBTCTotalSupply/index.ts +0 -1
  290. package/src/contract-functions/getPermitNonce/getPermitNonce.stories.tsx +0 -56
  291. package/src/contract-functions/getPermitNonce/getPermitNonce.ts +0 -50
  292. package/src/contract-functions/getPermitNonce/index.ts +0 -1
  293. package/src/contract-functions/getShareValue/getShareValue.stories.tsx +0 -58
  294. package/src/contract-functions/getShareValue/getShareValue.ts +0 -59
  295. package/src/contract-functions/getShareValue/index.ts +0 -1
  296. package/src/contract-functions/getSharesByAddress/getSharesByAddress.stories.tsx +0 -65
  297. package/src/contract-functions/getSharesByAddress/getSharesByAddress.ts +0 -86
  298. package/src/contract-functions/getSharesByAddress/index.ts +0 -4
  299. package/src/contract-functions/getStakeAndBakeFee/__tests__/getStakeAndBakeFee.test.ts +0 -167
  300. package/src/contract-functions/getStakeAndBakeFee/getStakeAndBakeFee.stories.tsx +0 -180
  301. package/src/contract-functions/getStakeAndBakeFee/getStakeAndBakeFee.tsx +0 -101
  302. package/src/contract-functions/getStakeAndBakeFee/index.ts +0 -1
  303. package/src/contract-functions/index.ts +0 -21
  304. package/src/contract-functions/signLbtcDestionationAddr/index.ts +0 -1
  305. package/src/contract-functions/signLbtcDestionationAddr/signLbtcDestinationAddr.ts +0 -32
  306. package/src/contract-functions/signLbtcDestionationAddr/signLbtcDestionationAddr.stories.tsx +0 -64
  307. package/src/contract-functions/signNetworkFee/getTypedData.ts +0 -41
  308. package/src/contract-functions/signNetworkFee/index.ts +0 -1
  309. package/src/contract-functions/signNetworkFee/signNetworkFee.stories.tsx +0 -94
  310. package/src/contract-functions/signNetworkFee/signNetworkFee.ts +0 -106
  311. package/src/contract-functions/signStakeAndBake/__tests__/signStakeAndBake.test.ts +0 -888
  312. package/src/contract-functions/signStakeAndBake/handleApprove.ts +0 -81
  313. package/src/contract-functions/signStakeAndBake/handlePermit.ts +0 -28
  314. package/src/contract-functions/signStakeAndBake/index.ts +0 -2
  315. package/src/contract-functions/signStakeAndBake/signStakeAndBake.stories.tsx +0 -202
  316. package/src/contract-functions/signStakeAndBake/signStakeAndBake.ts +0 -160
  317. package/src/contract-functions/signStakeAndBake/typed-data-builder.ts +0 -137
  318. package/src/contract-functions/signStakeAndBake/utils.ts +0 -61
  319. package/src/contract-functions/signStakeAndBake/validation.ts +0 -124
  320. package/src/contract-functions/unstakeLBTC/index.ts +0 -1
  321. package/src/contract-functions/unstakeLBTC/unstakeLBTC.stories.tsx +0 -92
  322. package/src/contract-functions/unstakeLBTC/unstakeLBTC.ts +0 -396
  323. package/src/contracts/abis/index.ts +0 -29
  324. package/src/contracts/index.ts +0 -63
  325. package/src/contracts/types.ts +0 -143
  326. package/src/contracts/utils.ts +0 -288
  327. package/src/core/assets/catalog.ts +0 -343
  328. package/src/core/assets/index.ts +0 -40
  329. package/src/core/assets/types.ts +0 -142
  330. package/src/core/assets/utils.ts +0 -287
  331. package/src/core/chains/catalog.ts +0 -396
  332. package/src/core/chains/index.ts +0 -39
  333. package/src/core/chains/types.ts +0 -193
  334. package/src/core/chains/utils.ts +0 -245
  335. package/src/core/index.ts +0 -72
  336. package/src/core/types.ts +0 -126
  337. package/src/debug-api/btc-script-to-address.ts +0 -20
  338. package/src/debug-api/btc-tx-info.ts +0 -32
  339. package/src/debug-api/evm-by-btc-address.ts +0 -26
  340. package/src/debug-api/index.ts +0 -3
  341. package/src/defi/README.md +0 -517
  342. package/src/defi/defi-registry.stories.tsx +0 -527
  343. package/src/defi/defi-registry.ts +0 -295
  344. package/src/defi/index.ts +0 -17
  345. package/src/index.ts +0 -336
  346. package/src/metrics/get-additional-rewards.ts +0 -69
  347. package/src/metrics/get-lbtc-apy.ts +0 -74
  348. package/src/metrics/get-lbtc-stats.stories.tsx +0 -57
  349. package/src/metrics/get-lbtc-stats.ts +0 -59
  350. package/src/metrics/get-positions-summary.stories.tsx +0 -58
  351. package/src/metrics/get-positions-summary.ts +0 -132
  352. package/src/modules/CapabilityRegistry.ts +0 -125
  353. package/src/modules/apiModule.ts +0 -51
  354. package/src/modules/btcModule.ts +0 -43
  355. package/src/modules/evmModule.ts +0 -48
  356. package/src/modules/index.ts +0 -60
  357. package/src/referrals/ReferralsClient.ts +0 -34
  358. package/src/referrals/index.ts +0 -1
  359. package/src/services/ApiService.ts +0 -152
  360. package/src/services/BtcService.ts +0 -29
  361. package/src/services/EvmService.ts +0 -127
  362. package/src/services/index.ts +0 -43
  363. package/src/shared/__tests__/errors.test.ts +0 -185
  364. package/src/shared/__tests__/events.test.ts +0 -120
  365. package/src/shared/__tests__/types.test.ts +0 -155
  366. package/src/shared/actions/BaseAction.ts +0 -497
  367. package/src/shared/actions/__tests__/BaseAction.test.ts +0 -292
  368. package/src/shared/actions/index.ts +0 -9
  369. package/src/shared/constants/statusConstants.ts +0 -108
  370. package/src/shared/context/ContextBuilder.ts +0 -149
  371. package/src/shared/context/index.ts +0 -8
  372. package/src/shared/context/types.ts +0 -156
  373. package/src/shared/deposits/depositStatus.ts +0 -402
  374. package/src/shared/deposits/index.ts +0 -29
  375. package/src/shared/errors.ts +0 -405
  376. package/src/shared/events.ts +0 -260
  377. package/src/shared/evm/switchChain.ts +0 -109
  378. package/src/shared/index.ts +0 -54
  379. package/src/shared/monitoring/__tests__/createEventEmitter.test.ts +0 -150
  380. package/src/shared/monitoring/createEventEmitter.ts +0 -160
  381. package/src/shared/monitoring/createProgressEmitter.ts +0 -46
  382. package/src/shared/monitoring/depositMonitor.ts +0 -211
  383. package/src/shared/monitoring/index.ts +0 -25
  384. package/src/shared/validation/index.ts +0 -411
  385. package/src/stories/arg-types.ts +0 -38
  386. package/src/stories/components/Badge.tsx +0 -27
  387. package/src/stories/components/Button/Button.css +0 -10
  388. package/src/stories/components/Button/Button.tsx +0 -52
  389. package/src/stories/components/Button/index.ts +0 -1
  390. package/src/stories/components/Card.tsx +0 -18
  391. package/src/stories/components/CodeBlock/CodeBlock.tsx +0 -27
  392. package/src/stories/components/CodeBlock/CodeBlockStyles.css +0 -3
  393. package/src/stories/components/CodeBlock/index.ts +0 -1
  394. package/src/stories/components/ConnectButton/connect-button.tsx +0 -248
  395. package/src/stories/components/ConnectButton/index.ts +0 -1
  396. package/src/stories/components/JsonPreview.tsx +0 -84
  397. package/src/stories/components/Spinner/Spinner.tsx +0 -27
  398. package/src/stories/components/Spinner/index.ts +0 -1
  399. package/src/stories/components/StatsCard.tsx +0 -30
  400. package/src/stories/components/StatusIndicator.tsx +0 -37
  401. package/src/stories/components/TreeNode.tsx +0 -47
  402. package/src/stories/components/decorators/function-type.tsx +0 -63
  403. package/src/stories/components/decorators/index.ts +0 -2
  404. package/src/stories/components/decorators/wagmi-decorator.tsx +0 -92
  405. package/src/stories/components/error-block.tsx +0 -21
  406. package/src/stories/components/index.ts +0 -11
  407. package/src/stories/constants.ts +0 -3
  408. package/src/stories/hooks/useConnection.ts +0 -63
  409. package/src/stories/hooks/useQuery.ts +0 -57
  410. package/src/tokens/__tests__/token-addresses.test.ts +0 -551
  411. package/src/tokens/abi/ASSET_ROUTER_ABI.ts +0 -1966
  412. package/src/tokens/abi/BRIDGE_TOKEN_ADAPTER_ABI.ts +0 -1405
  413. package/src/tokens/abi/BTCK_ABI.ts +0 -1092
  414. package/src/tokens/abi/KATANA_BASCULE_ABI.ts +0 -653
  415. package/src/tokens/abi/LBTC_ABI.json +0 -1761
  416. package/src/tokens/abi/LBTC_ABI.ts +0 -1761
  417. package/src/tokens/abi/LBTC_BASCULE_ABI.json +0 -850
  418. package/src/tokens/abi/NATIVE_LBTC_ABI.ts +0 -1147
  419. package/src/tokens/abi/STLBTC_ABI.ts +0 -1062
  420. package/src/tokens/cross-chain-addresses.stories.tsx +0 -236
  421. package/src/tokens/denomination-utils.stories.tsx +0 -176
  422. package/src/tokens/getLbtcContractAddresses.stories.tsx +0 -158
  423. package/src/tokens/getTokenByAddress.stories.tsx +0 -172
  424. package/src/tokens/getTokenContractInfo.stories.tsx +0 -148
  425. package/src/tokens/getTokenInfo.stories.tsx +0 -133
  426. package/src/tokens/isUpgradedContract.stories.tsx +0 -124
  427. package/src/tokens/lbtc-addresses.ts +0 -18
  428. package/src/tokens/token-addresses.ts +0 -477
  429. package/src/tokens/tokens.ts +0 -249
  430. package/src/tokens/types.ts +0 -80
  431. package/src/utils/array.ts +0 -31
  432. package/src/utils/block.ts +0 -23
  433. package/src/utils/chain.ts +0 -152
  434. package/src/utils/consoleLogger.ts +0 -140
  435. package/src/utils/ensureNotSanctionedAddress.ts +0 -11
  436. package/src/utils/env.ts +0 -20
  437. package/src/utils/err.ts +0 -83
  438. package/src/utils/evmAccount.ts +0 -47
  439. package/src/utils/gas.ts +0 -36
  440. package/src/utils/hex.ts +0 -9
  441. package/src/utils/http.ts +0 -224
  442. package/src/utils/numbers.ts +0 -37
  443. package/src/utils/pagination.ts +0 -70
  444. package/src/utils/satoshi.ts +0 -41
  445. package/src/utils/time.ts +0 -12
  446. package/src/utils/transaction-executor.ts +0 -299
  447. package/src/vaults/abi/SILO_VAULT_SPENDER_ABI.json +0 -793
  448. package/src/vaults/abi/VEDA_VAULT_ABI.json +0 -452
  449. package/src/vaults/abi/VEDA_VAULT_ACCOUNTANT_ABI.json +0 -591
  450. package/src/vaults/abi/VEDA_VAULT_BASE_ASSET_ABI.json +0 -296
  451. package/src/vaults/abi/VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI.json +0 -502
  452. package/src/vaults/abi/VEDA_VAULT_LENS_ABI.json +0 -175
  453. package/src/vaults/abi/VEDA_VAULT_SPENDER_ABI.json +0 -408
  454. package/src/vaults/abi/VEDA_VAULT_TELLER_ABI.json +0 -700
  455. package/src/vaults/abi/index.ts +0 -4
  456. package/src/vaults/index.ts +0 -46
  457. package/src/vaults/lib/config.ts +0 -184
  458. package/src/vaults/lib/metrics/get-vault-apy.stories.tsx +0 -58
  459. package/src/vaults/lib/metrics/get-vault-apy.ts +0 -176
  460. package/src/vaults/lib/metrics/get-vault-points.stories.tsx +0 -60
  461. package/src/vaults/lib/metrics/get-vault-points.ts +0 -74
  462. package/src/vaults/lib/metrics/get-vault-tvl.stories.tsx +0 -58
  463. package/src/vaults/lib/metrics/get-vault-tvl.ts +0 -121
  464. package/src/vaults/lib/ops/cancel-withdraw.stories.tsx +0 -80
  465. package/src/vaults/lib/ops/deposit.stories.tsx +0 -82
  466. package/src/vaults/lib/ops/deposit.ts +0 -152
  467. package/src/vaults/lib/ops/get-vault-deposits.stories.tsx +0 -65
  468. package/src/vaults/lib/ops/get-vault-deposits.ts +0 -209
  469. package/src/vaults/lib/ops/get-vault-withdrawals.stories.tsx +0 -67
  470. package/src/vaults/lib/ops/get-vault-withdrawals.ts +0 -349
  471. package/src/vaults/lib/ops/withdraw.stories.tsx +0 -82
  472. package/src/vaults/lib/ops/withdraw.ts +0 -225
  473. package/src/version.ts +0 -56
  474. package/src/vite-env.d.ts +0 -1
@@ -1,888 +0,0 @@
1
- /**
2
- * Tests for signStakeAndBake function
3
- *
4
- * These tests encode the CURRENT expected behavior before refactoring.
5
- * They serve as a safety net to ensure refactoring doesn't break existing functionality.
6
- *
7
- * Test Coverage:
8
- * 1. LBTC Permit Flow (standard EIP-2612)
9
- * 2. BTC → LBTC Conversion + Permit
10
- * 3. BTCb Approve Flow (Avalanche special case)
11
- * 4. Validation Errors
12
- * 5. Typed Data Structure
13
- * 6. Nonce Handling
14
- * 7. Expiry Behavior
15
- */
16
-
17
- import { Env } from '@lombard.finance/sdk-common';
18
- import BigNumber from 'bignumber.js';
19
- import type { EIP1193Provider } from 'viem';
20
- import type { Mock } from 'vitest';
21
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
22
-
23
- import { ChainId } from '../../../common/chains';
24
- import { DefiProtocol } from '../../../defi/defi-registry';
25
- import { Token } from '../../../tokens/token-addresses';
26
- import { signStakeAndBake } from '../signStakeAndBake';
27
- import { calculateStakeAndBakeLBTCAmount } from '../utils';
28
- import { StakeAndBakeValidationError } from '../validation';
29
-
30
- // Mock dependencies
31
- vi.mock('../../../clients/wallet-client', () => ({
32
- makeWalletClient: vi.fn(() => ({
33
- signTypedData: vi.fn(async _typedData => {
34
- // Return a mock signature - can't JSON.stringify BigInt values
35
- return '0xmocksignature1234567890abcdef';
36
- }),
37
- writeContract: vi.fn(async _params => {
38
- // Return a mock transaction hash for approve transactions
39
- return '0xapprovetxhash1234567890abcdef';
40
- }),
41
- })),
42
- }));
43
-
44
- vi.mock('../../../clients/public-client', () => ({
45
- makePublicClient: vi.fn(() => ({
46
- readContract: vi.fn(async ({ functionName }) => {
47
- // Mock nonce response
48
- if (functionName === 'nonces') {
49
- return 5n; // Mock nonce value
50
- }
51
- // Mock allowance response (return 0 to trigger approve tx)
52
- if (functionName === 'allowance') {
53
- return 0n; // Zero allowance triggers approve transaction
54
- }
55
- return 0n;
56
- }),
57
- waitForTransactionReceipt: vi.fn(async ({ hash }) => {
58
- // Mock successful transaction receipt
59
- return {
60
- status: 'success',
61
- transactionHash: hash,
62
- blockNumber: 1n,
63
- blockHash: '0xblockhash',
64
- };
65
- }),
66
- })),
67
- }));
68
-
69
- vi.mock('../../../tokens/tokens', () => ({
70
- getTokenContractInfo: vi.fn(async (token, chainId, _env, _addressKind) => {
71
- // Return mock contract info based on token
72
- // nosemgrep: codacy.tools-configs.rules_lgpl_javascript_crypto_rule-node-timing-attack -- comparing Token enum values in test mock, not secrets
73
- if (token === Token.LBTC) {
74
- return {
75
- address: '0xLBTC_CONTRACT_ADDRESS',
76
- abi: [],
77
- chainId,
78
- };
79
- }
80
- if (token === Token.BTCb) {
81
- return {
82
- address: '0xBTCB_CONTRACT_ADDRESS',
83
- abi: [],
84
- chainId,
85
- };
86
- }
87
- throw new Error(`Unknown token: ${token}`);
88
- }),
89
- }));
90
-
91
- vi.mock(
92
- '../../../api-functions/getLBTCExchangeRate/get-exchange-ratio',
93
- () => ({
94
- getExchangeRatio: vi.fn(async () => ({
95
- LBTC: {
96
- BTCTokenRatio: new BigNumber('1.05'), // 1 BTC = 0.952381 LBTC
97
- },
98
- })),
99
- }),
100
- );
101
-
102
- // Test data
103
- const MOCK_ACCOUNT = '0x1234567890123456789012345678901234567890';
104
- const MOCK_PROVIDER = {} as EIP1193Provider;
105
- const MOCK_EXPIRY = 1700000000;
106
-
107
- describe('signStakeAndBake - Current Behavior Tests', () => {
108
- beforeEach(() => {
109
- vi.clearAllMocks();
110
- });
111
-
112
- afterEach(() => {
113
- vi.restoreAllMocks();
114
- });
115
-
116
- describe('LBTC Permit Flow (Standard EIP-2612)', () => {
117
- it('should generate valid permit signature for LBTC on Ethereum', async () => {
118
- const result = await signStakeAndBake({
119
- account: MOCK_ACCOUNT,
120
- value: new BigNumber('1'),
121
- token: Token.LBTC,
122
- vaultKey: DefiProtocol.Veda,
123
- chainId: ChainId.ethereum,
124
- provider: MOCK_PROVIDER,
125
- expiry: MOCK_EXPIRY,
126
- env: Env.prod,
127
- });
128
-
129
- // Should be permit mode
130
- expect(result.mode).toBe('permit');
131
-
132
- // Should return a signature
133
- expect(result.signature).toBeTruthy();
134
- expect(result.signature).toMatch(/^0x/);
135
-
136
- // Should have typed data
137
- expect(result.typedData).toBeTruthy();
138
- const typedData = JSON.parse(result.typedData);
139
-
140
- // Verify EIP-712 domain
141
- expect(typedData.domain).toEqual({
142
- name: 'Lombard Staked Bitcoin',
143
- version: '1',
144
- chainId: ChainId.ethereum.toString(),
145
- verifyingContract: '0xLBTC_CONTRACT_ADDRESS',
146
- });
147
-
148
- // Verify primary type
149
- expect(typedData.primaryType).toBe('Permit');
150
-
151
- // Verify message structure
152
- expect(typedData.message).toMatchObject({
153
- owner: MOCK_ACCOUNT,
154
- spender: expect.any(String),
155
- value: expect.any(String),
156
- nonce: '5', // Mocked nonce
157
- deadline: MOCK_EXPIRY.toString(),
158
- });
159
- });
160
-
161
- it('should generate permit for LBTC on Ethereum', async () => {
162
- const result = await signStakeAndBake({
163
- account: MOCK_ACCOUNT,
164
- value: new BigNumber('0.5'),
165
- token: Token.LBTC,
166
- vaultKey: DefiProtocol.Veda,
167
- chainId: ChainId.ethereum,
168
- provider: MOCK_PROVIDER,
169
- expiry: MOCK_EXPIRY,
170
- env: Env.prod,
171
- });
172
-
173
- expect(result.signature).toBeTruthy();
174
- const typedData = JSON.parse(result.typedData);
175
- expect(typedData.primaryType).toBe('Permit');
176
- expect(typedData.domain.name).toBe('Lombard Staked Bitcoin');
177
- });
178
-
179
- it('should use default expiry of 24 hours if not provided', async () => {
180
- const beforeCall = Math.floor(Date.now() / 1000);
181
-
182
- const result = await signStakeAndBake({
183
- account: MOCK_ACCOUNT,
184
- value: new BigNumber('1'),
185
- token: Token.LBTC,
186
- vaultKey: DefiProtocol.Veda,
187
- chainId: ChainId.ethereum,
188
- provider: MOCK_PROVIDER,
189
- // No expiry provided
190
- env: Env.prod,
191
- });
192
-
193
- const typedData = JSON.parse(result.typedData);
194
- const deadline = Number(typedData.message.deadline);
195
- const afterCall = Math.floor(Date.now() / 1000);
196
-
197
- // Should be approximately 24 hours from now
198
- const expectedExpiry = beforeCall + 86400; // 24 hours
199
- expect(deadline).toBeGreaterThanOrEqual(expectedExpiry - 5);
200
- expect(deadline).toBeLessThanOrEqual(afterCall + 86400 + 5);
201
- });
202
-
203
- it('should fetch nonce from contract', async () => {
204
- const { makePublicClient } = await import(
205
- '../../../clients/public-client'
206
- );
207
-
208
- await signStakeAndBake({
209
- account: MOCK_ACCOUNT,
210
- value: new BigNumber('1'),
211
- token: Token.LBTC,
212
- vaultKey: DefiProtocol.Veda,
213
- chainId: ChainId.ethereum,
214
- provider: MOCK_PROVIDER,
215
- env: Env.prod,
216
- });
217
-
218
- // Verify nonce was fetched
219
- expect(makePublicClient).toHaveBeenCalledWith(
220
- expect.objectContaining({ chainId: ChainId.ethereum }),
221
- );
222
- });
223
- });
224
-
225
- describe('BTC → LBTC Conversion + Permit', () => {
226
- it('should convert BTC amount to LBTC using exchange ratio', async () => {
227
- const btcAmount = new BigNumber('1');
228
- const expectedLBTC = new BigNumber('1').dividedBy(new BigNumber('1.05'));
229
-
230
- const result = await signStakeAndBake({
231
- account: MOCK_ACCOUNT,
232
- value: btcAmount,
233
- token: 'BTC',
234
- vaultKey: DefiProtocol.Veda,
235
- chainId: ChainId.ethereum,
236
- provider: MOCK_PROVIDER,
237
- expiry: MOCK_EXPIRY,
238
- env: Env.prod,
239
- });
240
-
241
- const typedData = JSON.parse(result.typedData);
242
- const permitValue = new BigNumber(typedData.message.value);
243
-
244
- // Should use converted LBTC amount
245
- expect(permitValue.toFixed(0)).toBe(
246
- expectedLBTC.toFixed(0, BigNumber.ROUND_DOWN),
247
- );
248
- });
249
-
250
- it('should default to BTC token when no token specified', async () => {
251
- const result = await signStakeAndBake({
252
- account: MOCK_ACCOUNT,
253
- value: new BigNumber('1'),
254
- // token not specified - should default to 'BTC'
255
- vaultKey: DefiProtocol.Veda,
256
- chainId: ChainId.ethereum,
257
- provider: MOCK_PROVIDER,
258
- env: Env.prod,
259
- });
260
-
261
- // Should still generate LBTC permit after conversion
262
- const typedData = JSON.parse(result.typedData);
263
- expect(typedData.domain.name).toBe('Lombard Staked Bitcoin');
264
- expect(typedData.primaryType).toBe('Permit');
265
- });
266
-
267
- it('calculateStakeAndBakeLBTCAmount should apply ratio correctly', async () => {
268
- const btcAmount = new BigNumber('2.5');
269
- const lbtcAmount = await calculateStakeAndBakeLBTCAmount(
270
- btcAmount,
271
- Env.prod,
272
- );
273
-
274
- // Expected: 2.5 / 1.05 = 2.380952...
275
- expect(lbtcAmount.toFixed(6)).toBe('2.380952');
276
- });
277
- });
278
-
279
- describe('BTCb Approve Flow (Avalanche Special Case)', () => {
280
- it('should return empty signature for BTCb on Avalanche Fuji', async () => {
281
- const result = await signStakeAndBake({
282
- account: MOCK_ACCOUNT,
283
- value: new BigNumber('1'),
284
- token: Token.BTCb,
285
- vaultKey: DefiProtocol.Silo,
286
- chainId: ChainId.avalancheFuji,
287
- provider: MOCK_PROVIDER,
288
- expiry: MOCK_EXPIRY,
289
- env: Env.testnet,
290
- });
291
-
292
- // Should be approve mode
293
- expect(result.mode).toBe('approve');
294
-
295
- // Approve mode returns empty signature
296
- expect(result.signature).toBe('');
297
-
298
- // But should have typed data
299
- expect(result.typedData).toBeTruthy();
300
-
301
- // Should have approval transaction hash
302
- expect(result.approvalTxHash).toBeTruthy();
303
- expect(result.approvalTxHash).toMatch(/^0x/);
304
- });
305
-
306
- it('should use "Approve" primary type for BTCb on Avalanche', async () => {
307
- const result = await signStakeAndBake({
308
- account: MOCK_ACCOUNT,
309
- value: new BigNumber('1'),
310
- token: Token.BTCb,
311
- vaultKey: DefiProtocol.Silo,
312
- chainId: ChainId.avalancheFuji,
313
- provider: MOCK_PROVIDER,
314
- env: Env.testnet,
315
- });
316
-
317
- const typedData = JSON.parse(result.typedData);
318
-
319
- // Should use Approve, not Permit
320
- expect(typedData.primaryType).toBe('Approve');
321
- });
322
-
323
- it('should use "Bitcoin" domain name for BTCb', async () => {
324
- const result = await signStakeAndBake({
325
- account: MOCK_ACCOUNT,
326
- value: new BigNumber('1'),
327
- token: Token.BTCb,
328
- vaultKey: DefiProtocol.Silo,
329
- chainId: ChainId.avalancheFuji,
330
- provider: MOCK_PROVIDER,
331
- env: Env.testnet,
332
- });
333
-
334
- const typedData = JSON.parse(result.typedData);
335
-
336
- expect(typedData.domain.name).toBe('Bitcoin');
337
- expect(typedData.domain.version).toBe('1');
338
- });
339
-
340
- it('should use zero nonce and deadline for BTCb approve', async () => {
341
- const result = await signStakeAndBake({
342
- account: MOCK_ACCOUNT,
343
- value: new BigNumber('1'),
344
- token: Token.BTCb,
345
- vaultKey: DefiProtocol.Silo,
346
- chainId: ChainId.avalancheFuji,
347
- provider: MOCK_PROVIDER,
348
- expiry: MOCK_EXPIRY, // Should be ignored
349
- env: Env.testnet,
350
- });
351
-
352
- const typedData = JSON.parse(result.typedData);
353
-
354
- // BTCb approve uses zero nonce and deadline
355
- expect(typedData.message.nonce).toBe('0');
356
- expect(typedData.message.deadline).toBe('0');
357
- });
358
-
359
- it('should handle BTCb on Avalanche Fuji testnet', async () => {
360
- // NOTE: Avalanche Fuji is currently not configured in Silo vault
361
- // This test documents expected behavior if/when it's added
362
-
363
- // Skip this test for now since Fuji isn't configured
364
- // Once Silo adds Fuji support, this test should pass
365
- expect(true).toBe(true); // Placeholder
366
-
367
- /* Future test when Fuji is added to Silo:
368
- const result = await signStakeAndBake({
369
- account: MOCK_ACCOUNT,
370
- value: new BigNumber('0.1'),
371
- token: Token.BTCb,
372
- vaultKey: DefiProtocolKey.Silo,
373
- chainId: ChainId.avalancheFuji,
374
- provider: MOCK_PROVIDER,
375
- env: Env.testnet,
376
- });
377
-
378
- expect(result.signature).toBe('');
379
- const typedData = JSON.parse(result.typedData);
380
- expect(typedData.primaryType).toBe('Approve');
381
- expect(typedData.domain.name).toBe('Bitcoin');
382
- */
383
- });
384
-
385
- it('should throw validation error for BTCb on unsupported vault/chain', async () => {
386
- // BTCb is only configured for Silo vault on Avalanche
387
- // Attempting to use it with Veda vault or on other chains should fail validation
388
-
389
- await expect(
390
- signStakeAndBake({
391
- account: MOCK_ACCOUNT,
392
- value: new BigNumber('1'),
393
- token: Token.BTCb,
394
- vaultKey: DefiProtocol.Veda, // BTCb not configured for Veda
395
- chainId: ChainId.sepolia, // BTCb not configured for Sepolia
396
- provider: MOCK_PROVIDER,
397
- env: Env.testnet,
398
- }),
399
- ).rejects.toThrow(StakeAndBakeValidationError);
400
- });
401
- });
402
-
403
- describe('Validation Errors', () => {
404
- it('should throw error for unknown vault', async () => {
405
- await expect(
406
- signStakeAndBake({
407
- account: MOCK_ACCOUNT,
408
- value: new BigNumber('1'),
409
- vaultKey: 'nonexistent' as DefiProtocol,
410
- chainId: ChainId.ethereum,
411
- provider: MOCK_PROVIDER,
412
- env: Env.prod,
413
- }),
414
- ).rejects.toThrow(StakeAndBakeValidationError);
415
- });
416
-
417
- it('should throw error for unsupported chain', async () => {
418
- await expect(
419
- signStakeAndBake({
420
- account: MOCK_ACCOUNT,
421
- value: new BigNumber('1'),
422
- vaultKey: DefiProtocol.Veda,
423
- chainId: ChainId.avalanche, // Not supported by Veda
424
- provider: MOCK_PROVIDER,
425
- env: Env.prod,
426
- }),
427
- ).rejects.toThrow(StakeAndBakeValidationError);
428
- });
429
-
430
- it('should throw error when spender contract missing', async () => {
431
- // Create a scenario where chain is in stakeAndBakeChains but no spender contract
432
- // This is a defensive check in the current code
433
-
434
- await expect(
435
- signStakeAndBake({
436
- account: MOCK_ACCOUNT,
437
- value: new BigNumber('1'),
438
- vaultKey: DefiProtocol.Veda,
439
- chainId: 99999 as ChainId, // Invalid chain
440
- provider: MOCK_PROVIDER,
441
- env: Env.prod,
442
- }),
443
- ).rejects.toThrow();
444
- });
445
-
446
- it('should include supported chains in error message', async () => {
447
- try {
448
- await signStakeAndBake({
449
- account: MOCK_ACCOUNT,
450
- value: new BigNumber('1'),
451
- vaultKey: DefiProtocol.Veda,
452
- chainId: ChainId.avalanche,
453
- provider: MOCK_PROVIDER,
454
- env: Env.prod,
455
- });
456
- expect.fail('Should have thrown error');
457
- } catch (error: unknown) {
458
- const err = error as Error;
459
- expect(err.message).toMatch(/supported chains/i);
460
- // Should list at least Ethereum
461
- expect(err.message).toContain(ChainId.ethereum.toString());
462
- }
463
- });
464
- });
465
-
466
- describe('Typed Data Structure Validation', () => {
467
- it('should have correct EIP-712 domain fields', async () => {
468
- const result = await signStakeAndBake({
469
- account: MOCK_ACCOUNT,
470
- value: new BigNumber('1'),
471
- token: Token.LBTC,
472
- vaultKey: DefiProtocol.Veda,
473
- chainId: ChainId.ethereum,
474
- provider: MOCK_PROVIDER,
475
- env: Env.prod,
476
- });
477
-
478
- const typedData = JSON.parse(result.typedData);
479
-
480
- expect(typedData.domain).toHaveProperty('name');
481
- expect(typedData.domain).toHaveProperty('version');
482
- expect(typedData.domain).toHaveProperty('chainId');
483
- expect(typedData.domain).toHaveProperty('verifyingContract');
484
- });
485
-
486
- it('should have correct EIP712Domain type definition', async () => {
487
- const result = await signStakeAndBake({
488
- account: MOCK_ACCOUNT,
489
- value: new BigNumber('1'),
490
- token: Token.LBTC,
491
- vaultKey: DefiProtocol.Veda,
492
- chainId: ChainId.ethereum,
493
- provider: MOCK_PROVIDER,
494
- env: Env.prod,
495
- });
496
-
497
- const typedData = JSON.parse(result.typedData);
498
- const domainType = typedData.types.EIP712Domain;
499
-
500
- expect(domainType).toEqual([
501
- { name: 'name', type: 'string' },
502
- { name: 'version', type: 'string' },
503
- { name: 'chainId', type: 'uint256' },
504
- { name: 'verifyingContract', type: 'address' },
505
- ]);
506
- });
507
-
508
- it('should have correct Permit message type definition', async () => {
509
- const result = await signStakeAndBake({
510
- account: MOCK_ACCOUNT,
511
- value: new BigNumber('1'),
512
- token: Token.LBTC,
513
- vaultKey: DefiProtocol.Veda,
514
- chainId: ChainId.ethereum,
515
- provider: MOCK_PROVIDER,
516
- env: Env.prod,
517
- });
518
-
519
- const typedData = JSON.parse(result.typedData);
520
- const permitType = typedData.types.Permit;
521
-
522
- expect(permitType).toEqual([
523
- { name: 'owner', type: 'address' },
524
- { name: 'spender', type: 'address' },
525
- { name: 'value', type: 'uint256' },
526
- { name: 'nonce', type: 'uint256' },
527
- { name: 'deadline', type: 'uint256' },
528
- ]);
529
- });
530
-
531
- it('should have correct message field values', async () => {
532
- const testValue = new BigNumber('1.5');
533
-
534
- const result = await signStakeAndBake({
535
- account: MOCK_ACCOUNT,
536
- value: testValue,
537
- token: Token.LBTC,
538
- vaultKey: DefiProtocol.Veda,
539
- chainId: ChainId.ethereum,
540
- provider: MOCK_PROVIDER,
541
- expiry: MOCK_EXPIRY,
542
- env: Env.prod,
543
- });
544
-
545
- const typedData = JSON.parse(result.typedData);
546
- const message = typedData.message;
547
-
548
- expect(message.owner).toBe(MOCK_ACCOUNT);
549
- expect(message.spender).toBeTruthy();
550
- expect(message.spender).toMatch(/^0x/);
551
- expect(message.value).toBeTruthy();
552
- expect(message.nonce).toBe('5');
553
- expect(message.deadline).toBe(MOCK_EXPIRY.toString());
554
- });
555
-
556
- it('should serialize BigInt values to strings in typedData', async () => {
557
- const result = await signStakeAndBake({
558
- account: MOCK_ACCOUNT,
559
- value: new BigNumber('1'),
560
- token: Token.LBTC,
561
- vaultKey: DefiProtocol.Veda,
562
- chainId: ChainId.ethereum,
563
- provider: MOCK_PROVIDER,
564
- env: Env.prod,
565
- });
566
-
567
- // Typed data should be serializable JSON
568
- expect(() => JSON.parse(result.typedData)).not.toThrow();
569
-
570
- const typedData = JSON.parse(result.typedData);
571
-
572
- // All numeric values should be strings
573
- expect(typeof typedData.domain.chainId).toBe('string');
574
- expect(typeof typedData.message.value).toBe('string');
575
- expect(typeof typedData.message.nonce).toBe('string');
576
- expect(typeof typedData.message.deadline).toBe('string');
577
- });
578
- });
579
-
580
- describe('Value Precision Handling', () => {
581
- it('should round down value to integer', async () => {
582
- const result = await signStakeAndBake({
583
- account: MOCK_ACCOUNT,
584
- value: new BigNumber('1.123456789'),
585
- token: Token.LBTC,
586
- vaultKey: DefiProtocol.Veda,
587
- chainId: ChainId.ethereum,
588
- provider: MOCK_PROVIDER,
589
- env: Env.prod,
590
- });
591
-
592
- const typedData = JSON.parse(result.typedData);
593
- const value = typedData.message.value;
594
-
595
- // Should be rounded down, no decimals
596
- expect(value).toBe('1');
597
- });
598
-
599
- it('should handle very large values', async () => {
600
- const largeValue = new BigNumber('21000000'); // 21M BTC in satoshis
601
-
602
- const result = await signStakeAndBake({
603
- account: MOCK_ACCOUNT,
604
- value: largeValue,
605
- token: Token.LBTC,
606
- vaultKey: DefiProtocol.Veda,
607
- chainId: ChainId.ethereum,
608
- provider: MOCK_PROVIDER,
609
- env: Env.prod,
610
- });
611
-
612
- const typedData = JSON.parse(result.typedData);
613
- expect(typedData.message.value).toBe(largeValue.toFixed(0));
614
- });
615
-
616
- it('should handle very small values', async () => {
617
- const smallValue = new BigNumber('0.00000001'); // 1 satoshi
618
-
619
- const result = await signStakeAndBake({
620
- account: MOCK_ACCOUNT,
621
- value: smallValue,
622
- token: Token.LBTC,
623
- vaultKey: DefiProtocol.Veda,
624
- chainId: ChainId.ethereum,
625
- provider: MOCK_PROVIDER,
626
- env: Env.prod,
627
- });
628
-
629
- const typedData = JSON.parse(result.typedData);
630
- // Should be 0 when rounded down
631
- expect(typedData.message.value).toBe('0');
632
- });
633
- });
634
-
635
- describe('Spender Contract Selection', () => {
636
- it('should use correct spender contract for Veda on Ethereum', async () => {
637
- const result = await signStakeAndBake({
638
- account: MOCK_ACCOUNT,
639
- value: new BigNumber('1'),
640
- token: Token.LBTC,
641
- vaultKey: DefiProtocol.Veda,
642
- chainId: ChainId.ethereum,
643
- provider: MOCK_PROVIDER,
644
- env: Env.prod,
645
- });
646
-
647
- const typedData = JSON.parse(result.typedData);
648
-
649
- // Should match Veda spender contract for Ethereum
650
- expect(typedData.message.spender).toBe(
651
- '0xC8bbF6153D7Ba105f1399D992ebd32B0541996ef',
652
- );
653
- });
654
-
655
- it('should use correct spender contract for Veda on Sepolia (testnet)', async () => {
656
- const result = await signStakeAndBake({
657
- account: MOCK_ACCOUNT,
658
- value: new BigNumber('1'),
659
- token: Token.LBTC,
660
- vaultKey: DefiProtocol.Veda,
661
- chainId: ChainId.sepolia,
662
- provider: MOCK_PROVIDER,
663
- env: Env.testnet,
664
- });
665
-
666
- const typedData = JSON.parse(result.typedData);
667
- expect(typedData.message.spender).toBe(
668
- '0x77eD6a84fEF665156e81247ECbd43A847B8A6398',
669
- );
670
- });
671
-
672
- it('should use correct spender contract for Silo on Avalanche Fuji', async () => {
673
- const result = await signStakeAndBake({
674
- account: MOCK_ACCOUNT,
675
- value: new BigNumber('1'),
676
- token: Token.BTCb,
677
- vaultKey: DefiProtocol.Silo,
678
- chainId: ChainId.avalancheFuji,
679
- provider: MOCK_PROVIDER,
680
- env: Env.testnet,
681
- });
682
-
683
- const typedData = JSON.parse(result.typedData);
684
- expect(typedData.message.spender).toBe(
685
- '0xFe1e76D9e065e879A9D1914482f0F13d85F39877',
686
- );
687
- });
688
- });
689
-
690
- describe('Environment Handling', () => {
691
- it('should use testnet configuration when env is testnet', async () => {
692
- const result = await signStakeAndBake({
693
- account: MOCK_ACCOUNT,
694
- value: new BigNumber('1'),
695
- token: Token.LBTC,
696
- vaultKey: DefiProtocol.Veda,
697
- chainId: ChainId.sepolia,
698
- provider: MOCK_PROVIDER,
699
- env: Env.testnet,
700
- });
701
-
702
- expect(result.signature).toBeTruthy();
703
- });
704
-
705
- it('should default to production env', async () => {
706
- const result = await signStakeAndBake({
707
- account: MOCK_ACCOUNT,
708
- value: new BigNumber('1'),
709
- token: Token.LBTC,
710
- vaultKey: DefiProtocol.Veda,
711
- chainId: ChainId.ethereum,
712
- provider: MOCK_PROVIDER,
713
- // No env specified
714
- });
715
-
716
- expect(result.signature).toBeTruthy();
717
- });
718
- });
719
-
720
- describe('Token Contract Address Selection', () => {
721
- it('should use LBTC contract for BTC token (after conversion)', async () => {
722
- const { getTokenContractInfo } = await import('../../../tokens/tokens');
723
-
724
- await signStakeAndBake({
725
- account: MOCK_ACCOUNT,
726
- value: new BigNumber('1'),
727
- token: 'BTC',
728
- vaultKey: DefiProtocol.Veda,
729
- chainId: ChainId.ethereum,
730
- provider: MOCK_PROVIDER,
731
- env: Env.prod,
732
- });
733
-
734
- // Should fetch LBTC contract for 'BTC' token
735
- expect(getTokenContractInfo).toHaveBeenCalledWith(
736
- Token.LBTC,
737
- ChainId.ethereum,
738
- Env.prod,
739
- );
740
- });
741
-
742
- it('should use LBTC contract for LBTC token', async () => {
743
- const { getTokenContractInfo } = await import('../../../tokens/tokens');
744
-
745
- await signStakeAndBake({
746
- account: MOCK_ACCOUNT,
747
- value: new BigNumber('1'),
748
- token: Token.LBTC,
749
- vaultKey: DefiProtocol.Veda,
750
- chainId: ChainId.ethereum,
751
- provider: MOCK_PROVIDER,
752
- env: Env.prod,
753
- });
754
-
755
- expect(getTokenContractInfo).toHaveBeenCalledWith(
756
- Token.LBTC,
757
- ChainId.ethereum,
758
- Env.prod,
759
- );
760
- });
761
-
762
- it('should use BTCb token contract (AddressKind.Token) for BTCb', async () => {
763
- const { getTokenContractInfo } = await import('../../../tokens/tokens');
764
-
765
- await signStakeAndBake({
766
- account: MOCK_ACCOUNT,
767
- value: new BigNumber('1'),
768
- token: Token.BTCb,
769
- vaultKey: DefiProtocol.Silo,
770
- chainId: ChainId.avalancheFuji,
771
- provider: MOCK_PROVIDER,
772
- env: Env.testnet,
773
- });
774
-
775
- // Should use AddressKind.Token for permit signature
776
- const { AddressKind } = await import('../../../tokens/token-addresses');
777
- expect(getTokenContractInfo).toHaveBeenCalledWith(
778
- Token.BTCb,
779
- ChainId.avalancheFuji,
780
- Env.testnet,
781
- AddressKind.Token,
782
- );
783
- });
784
- });
785
-
786
- describe('Exchange Ratio Error Handling', () => {
787
- it('should throw error if exchange ratio fetch fails', async () => {
788
- const { getExchangeRatio } = await import(
789
- '../../../api-functions/getLBTCExchangeRate/get-exchange-ratio'
790
- );
791
-
792
- const mockedGetExchangeRatio = getExchangeRatio as Mock;
793
- mockedGetExchangeRatio.mockRejectedValueOnce(new Error('API error'));
794
-
795
- await expect(
796
- calculateStakeAndBakeLBTCAmount(new BigNumber('1'), Env.prod),
797
- ).rejects.toThrow('Failed to get exchange ratio');
798
- });
799
-
800
- it('should use ratio of 1 if BTCTokenRatio is missing', async () => {
801
- const { getExchangeRatio } = await import(
802
- '../../../api-functions/getLBTCExchangeRate/get-exchange-ratio'
803
- );
804
-
805
- const mockedGetExchangeRatio = getExchangeRatio as Mock;
806
- mockedGetExchangeRatio.mockResolvedValueOnce({
807
- LBTC: {},
808
- });
809
-
810
- const result = await calculateStakeAndBakeLBTCAmount(
811
- new BigNumber('2'),
812
- Env.prod,
813
- );
814
-
815
- // Should use 1:1 ratio
816
- expect(result.toString()).toBe('2');
817
- });
818
- });
819
-
820
- describe('Integration: Full Flow Tests', () => {
821
- it('should complete full permit flow for LBTC', async () => {
822
- const result = await signStakeAndBake({
823
- account: '0xUser123',
824
- value: new BigNumber('0.5'),
825
- token: Token.LBTC,
826
- vaultKey: DefiProtocol.Veda,
827
- chainId: ChainId.ethereum,
828
- provider: MOCK_PROVIDER,
829
- expiry: 1700000000,
830
- env: Env.prod,
831
- });
832
-
833
- // Verify complete result
834
- expect(result).toMatchObject({
835
- mode: 'permit',
836
- signature: expect.stringMatching(/^0x/),
837
- typedData: expect.any(String),
838
- });
839
-
840
- // Verify typedData is valid JSON
841
- const typedData = JSON.parse(result.typedData);
842
- expect(typedData).toMatchObject({
843
- account: '0xUser123',
844
- domain: expect.objectContaining({
845
- name: 'Lombard Staked Bitcoin',
846
- }),
847
- primaryType: 'Permit',
848
- message: expect.objectContaining({
849
- owner: '0xUser123',
850
- value: expect.any(String),
851
- }),
852
- });
853
- });
854
-
855
- it('should complete full approve flow for BTCb on Avalanche Fuji', async () => {
856
- const result = await signStakeAndBake({
857
- account: '0xUser456',
858
- value: new BigNumber('1.5'),
859
- token: Token.BTCb,
860
- vaultKey: DefiProtocol.Silo,
861
- chainId: ChainId.avalancheFuji,
862
- provider: MOCK_PROVIDER,
863
- env: Env.testnet,
864
- });
865
-
866
- // Verify approve result
867
- expect(result).toMatchObject({
868
- mode: 'approve',
869
- signature: '', // Empty for approve
870
- typedData: expect.any(String),
871
- approvalTxHash: expect.stringMatching(/^0x/), // Should have tx hash
872
- });
873
-
874
- const typedData = JSON.parse(result.typedData);
875
- expect(typedData).toMatchObject({
876
- domain: expect.objectContaining({
877
- name: 'Bitcoin',
878
- }),
879
- primaryType: 'Approve',
880
- message: expect.objectContaining({
881
- owner: '0xUser456',
882
- nonce: '0',
883
- deadline: '0',
884
- }),
885
- });
886
- });
887
- });
888
- });