@lombard.finance/sdk 4.3.2 → 4.4.1

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 (231) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +6 -6
  4. package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
  5. package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
  6. package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts +13 -1
  7. package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts.map +1 -1
  8. package/dist/api.cjs +1 -1
  9. package/dist/api.js +29 -29
  10. package/dist/bridge.cjs +1 -1
  11. package/dist/bridge.js +7 -7
  12. package/dist/btc.cjs +1 -1
  13. package/dist/btc.js +10 -10
  14. package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts +7 -4
  15. package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
  16. package/dist/chains/btc/actions/deposit/config/index.d.ts +16 -8
  17. package/dist/chains/btc/actions/deposit/config/index.d.ts.map +1 -1
  18. package/dist/chains/btc/actions/deposit/config/solana.d.ts +20 -0
  19. package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -0
  20. package/dist/chains/btc/actions/deposit/config/types.d.ts +4 -3
  21. package/dist/chains/btc/actions/deposit/config/types.d.ts.map +1 -1
  22. package/dist/chains/evm/EvmActions.d.ts +4 -4
  23. package/dist/chains/evm/actions/deposit/config/evm.d.ts +3 -3
  24. package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
  25. package/dist/chains/evm/actions/deposit/config/types.d.ts +1 -1
  26. package/dist/chains/evm/actions/deposit/config/types.d.ts.map +1 -1
  27. package/dist/chains/evm/actions/deposit/factory.d.ts +1 -1
  28. package/dist/chains/evm/actions/deposit/types.d.ts +1 -1
  29. package/dist/chains/evm/actions/deposit/types.d.ts.map +1 -1
  30. package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
  31. package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
  32. package/dist/chains/solana/SolanaActions.d.ts +10 -0
  33. package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
  34. package/dist/chains/solana/actions/index.d.ts +1 -0
  35. package/dist/chains/solana/actions/index.d.ts.map +1 -1
  36. package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts +37 -0
  37. package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -0
  38. package/dist/chains/solana/actions/redeem/config/index.d.ts +8 -0
  39. package/dist/chains/solana/actions/redeem/config/index.d.ts.map +1 -0
  40. package/dist/chains/solana/actions/redeem/config/solana.d.ts +22 -0
  41. package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -0
  42. package/dist/chains/solana/actions/redeem/config/types.d.ts +35 -0
  43. package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -0
  44. package/dist/chains/solana/actions/redeem/factory.d.ts +12 -0
  45. package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -0
  46. package/dist/chains/solana/actions/redeem/index.d.ts +9 -0
  47. package/dist/chains/solana/actions/redeem/index.d.ts.map +1 -0
  48. package/dist/chains/solana/actions/redeem/types.d.ts +52 -0
  49. package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -0
  50. package/dist/chains/solana/utils.d.ts +15 -0
  51. package/dist/chains/solana/utils.d.ts.map +1 -0
  52. package/dist/chunks/BtcActions-BIBsbYIt.cjs +2 -0
  53. package/dist/chunks/BtcActions-BIBsbYIt.cjs.map +1 -0
  54. package/dist/chunks/{BtcActions-k-qs1uO0.js → BtcActions-Df41lbsb.js} +457 -414
  55. package/dist/chunks/BtcActions-Df41lbsb.js.map +1 -0
  56. package/dist/chunks/{EvmActions-B_dF42So.js → EvmActions-5lPqhRaM.js} +163 -173
  57. package/dist/chunks/EvmActions-5lPqhRaM.js.map +1 -0
  58. package/dist/chunks/EvmActions-BY_18gTg.cjs +2 -0
  59. package/dist/chunks/EvmActions-BY_18gTg.cjs.map +1 -0
  60. package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs +2 -0
  61. package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs.map +1 -0
  62. package/dist/chunks/{ReferralsClient-DbFWWtVi.js → ReferralsClient-DvEsA3II.js} +160 -160
  63. package/dist/chunks/ReferralsClient-DvEsA3II.js.map +1 -0
  64. package/dist/chunks/{api-config-CtcP3TVl.js → api-config-Dm6dR85f.js} +6 -6
  65. package/dist/chunks/{api-config-CtcP3TVl.js.map → api-config-Dm6dR85f.js.map} +1 -1
  66. package/dist/chunks/{approveLBTC-CZiZmdcX.cjs → approveLBTC-CUXEC3kw.cjs} +2 -2
  67. package/dist/chunks/{approveLBTC-CZiZmdcX.cjs.map → approveLBTC-CUXEC3kw.cjs.map} +1 -1
  68. package/dist/chunks/approveLBTC-Du2El1tW.js +26 -0
  69. package/dist/chunks/{approveLBTC-B5-ZWqct.js.map → approveLBTC-Du2El1tW.js.map} +1 -1
  70. package/dist/chunks/{array-Cev6kyLJ.js → array-DYttUPf5.js} +7 -7
  71. package/dist/chunks/{array-Cev6kyLJ.js.map → array-DYttUPf5.js.map} +1 -1
  72. package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs → blockchain-identifier-BTPGxLio.cjs} +2 -2
  73. package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs.map → blockchain-identifier-BTPGxLio.cjs.map} +1 -1
  74. package/dist/chunks/{blockchain-identifier-BmadkNtK.js → blockchain-identifier-CTVaEPpY.js} +24 -24
  75. package/dist/chunks/{blockchain-identifier-BmadkNtK.js.map → blockchain-identifier-CTVaEPpY.js.map} +1 -1
  76. package/dist/chunks/{bridge-CTsiodO1.js → bridge-DqGabhIY.js} +13 -13
  77. package/dist/chunks/{bridge-CTsiodO1.js.map → bridge-DqGabhIY.js.map} +1 -1
  78. package/dist/chunks/{bridge-BzRlY9pP.cjs → bridge-dWaKrMKm.cjs} +2 -2
  79. package/dist/chunks/{bridge-BzRlY9pP.cjs.map → bridge-dWaKrMKm.cjs.map} +1 -1
  80. package/dist/chunks/{config-hFKqUyg3.js → config-DghboRx0.js} +10 -10
  81. package/dist/chunks/{config-hFKqUyg3.js.map → config-DghboRx0.js.map} +1 -1
  82. package/dist/chunks/{config-l4ZaZw_g.cjs → config-DmCmanM_.cjs} +2 -2
  83. package/dist/chunks/{config-l4ZaZw_g.cjs.map → config-DmCmanM_.cjs.map} +1 -1
  84. package/dist/chunks/constants-D1FnS2Z8.js +6 -0
  85. package/dist/chunks/constants-D1FnS2Z8.js.map +1 -0
  86. package/dist/chunks/constants-ueShGH9R.cjs +2 -0
  87. package/dist/chunks/constants-ueShGH9R.cjs.map +1 -0
  88. package/dist/chunks/{defi-registry-BIRv_zkp.cjs → defi-registry-DDNavtO1.cjs} +2 -2
  89. package/dist/chunks/{defi-registry-BIRv_zkp.cjs.map → defi-registry-DDNavtO1.cjs.map} +1 -1
  90. package/dist/chunks/{defi-registry-wNFN3qyB.js → defi-registry-DxjjBQTV.js} +13 -13
  91. package/dist/chunks/{defi-registry-wNFN3qyB.js.map → defi-registry-DxjjBQTV.js.map} +1 -1
  92. package/dist/chunks/depositStatus-CFo5jW89.cjs +2 -0
  93. package/dist/chunks/depositStatus-CFo5jW89.cjs.map +1 -0
  94. package/dist/chunks/{depositStatus-DM7fRmbN.js → depositStatus-DTc01ZoZ.js} +63 -61
  95. package/dist/chunks/depositStatus-DTc01ZoZ.js.map +1 -0
  96. package/dist/chunks/events-6PV6NP-o.cjs +2 -0
  97. package/dist/chunks/events-6PV6NP-o.cjs.map +1 -0
  98. package/dist/chunks/{events-DdV_xi-2.js → events-BvRwXePq.js} +414 -303
  99. package/dist/chunks/events-BvRwXePq.js.map +1 -0
  100. package/dist/chunks/evm-by-btc-address-CZvE15lx.js +39 -0
  101. package/dist/chunks/{evm-by-btc-address-CwLiENtM.js.map → evm-by-btc-address-CZvE15lx.js.map} +1 -1
  102. package/dist/chunks/fee-requirements-CCNsxAvJ.js +14 -0
  103. package/dist/chunks/{fee-requirements-x8-8mpJ7.js.map → fee-requirements-CCNsxAvJ.js.map} +1 -1
  104. package/dist/chunks/get-exchange-ratio-B-xzYND1.js +20 -0
  105. package/dist/chunks/{get-exchange-ratio-NtnkG1kZ.js.map → get-exchange-ratio-B-xzYND1.js.map} +1 -1
  106. package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs → get-exchange-ratio-BEhD4gLB.cjs} +2 -2
  107. package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs.map → get-exchange-ratio-BEhD4gLB.cjs.map} +1 -1
  108. package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs → get-positions-summary-Dh1QPLYO.cjs} +2 -2
  109. package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs.map → get-positions-summary-Dh1QPLYO.cjs.map} +1 -1
  110. package/dist/chunks/{get-positions-summary-B_MmGHLv.js → get-positions-summary-iYshN1RQ.js} +28 -28
  111. package/dist/chunks/{get-positions-summary-B_MmGHLv.js.map → get-positions-summary-iYshN1RQ.js.map} +1 -1
  112. package/dist/chunks/{get-vault-tvl-YAXePAW3.js → get-vault-tvl-Ct_Zkg7C.js} +41 -41
  113. package/dist/chunks/{get-vault-tvl-YAXePAW3.js.map → get-vault-tvl-Ct_Zkg7C.js.map} +1 -1
  114. package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs → get-vault-tvl-D_tQIDAs.cjs} +2 -2
  115. package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs.map → get-vault-tvl-D_tQIDAs.cjs.map} +1 -1
  116. package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs → get-vault-withdrawals-8ALlEiAC.cjs} +2 -2
  117. package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs.map → get-vault-withdrawals-8ALlEiAC.cjs.map} +1 -1
  118. package/dist/chunks/get-vault-withdrawals-jk7Sv4S4.js +161 -0
  119. package/dist/chunks/{get-vault-withdrawals-BrpZlt6s.js.map → get-vault-withdrawals-jk7Sv4S4.js.map} +1 -1
  120. package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs → getSharesByAddress-D8hehnP1.cjs} +2 -2
  121. package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs.map → getSharesByAddress-D8hehnP1.cjs.map} +1 -1
  122. package/dist/chunks/{getSharesByAddress-BiruCDp6.js → getSharesByAddress-_tBaIBsw.js} +38 -38
  123. package/dist/chunks/{getSharesByAddress-BiruCDp6.js.map → getSharesByAddress-_tBaIBsw.js.map} +1 -1
  124. package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs +2 -0
  125. package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs.map +1 -0
  126. package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js +125 -0
  127. package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js.map +1 -0
  128. package/dist/chunks/lbtc-addresses-D8MYCdsx.js +10 -0
  129. package/dist/chunks/{lbtc-addresses-BLRmtR3c.js.map → lbtc-addresses-D8MYCdsx.js.map} +1 -1
  130. package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs → lbtc-addresses-Kil252DX.cjs} +2 -2
  131. package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs.map → lbtc-addresses-Kil252DX.cjs.map} +1 -1
  132. package/dist/chunks/numbers-CclN2Ohk.js +15 -0
  133. package/dist/chunks/{numbers-CM-lcmt4.js.map → numbers-CclN2Ohk.js.map} +1 -1
  134. package/dist/chunks/parameters-C_16L5ft.js +11 -0
  135. package/dist/chunks/{parameters-CDV-6Hk5.js.map → parameters-C_16L5ft.js.map} +1 -1
  136. package/dist/chunks/satoshi-CSoJBXc6.js +19 -0
  137. package/dist/chunks/{satoshi-Ch6y8aYG.js.map → satoshi-CSoJBXc6.js.map} +1 -1
  138. package/dist/chunks/{statusConstants-DFxMrVob.js → statusConstants-C4YNx2q0.js} +1134 -1113
  139. package/dist/chunks/statusConstants-C4YNx2q0.js.map +1 -0
  140. package/dist/chunks/statusConstants-DlM2oPfW.cjs +2 -0
  141. package/dist/chunks/statusConstants-DlM2oPfW.cjs.map +1 -0
  142. package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js → storeNetworkFeeSignature-BODIpq3Y.js} +26 -26
  143. package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js.map → storeNetworkFeeSignature-BODIpq3Y.js.map} +1 -1
  144. package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs → storeNetworkFeeSignature-Buk4091C.cjs} +2 -2
  145. package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs.map → storeNetworkFeeSignature-Buk4091C.cjs.map} +1 -1
  146. package/dist/chunks/time-Sa5gggPG.js +24 -0
  147. package/dist/chunks/{time-QPeEEEnQ.js.map → time-Sa5gggPG.js.map} +1 -1
  148. package/dist/chunks/{token-addresses-FKpA3uc4.js → token-addresses-D0v5cR1j.js} +174 -163
  149. package/dist/chunks/{token-addresses-FKpA3uc4.js.map → token-addresses-D0v5cR1j.js.map} +1 -1
  150. package/dist/chunks/{token-addresses-DRBecUa7.cjs → token-addresses-nzvTOi24.cjs} +2 -2
  151. package/dist/chunks/{token-addresses-DRBecUa7.cjs.map → token-addresses-nzvTOi24.cjs.map} +1 -1
  152. package/dist/chunks/{tokens-D_HeVB5p.cjs → tokens-BkvA0Gp1.cjs} +2 -2
  153. package/dist/chunks/{tokens-D_HeVB5p.cjs.map → tokens-BkvA0Gp1.cjs.map} +1 -1
  154. package/dist/chunks/{tokens-C6qZHzph.js → tokens-DgC1hfkm.js} +18 -18
  155. package/dist/chunks/{tokens-C6qZHzph.js.map → tokens-DgC1hfkm.js.map} +1 -1
  156. package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs → unstakeLBTC-CmoCaGX9.cjs} +2 -2
  157. package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs.map → unstakeLBTC-CmoCaGX9.cjs.map} +1 -1
  158. package/dist/chunks/{unstakeLBTC-DAIR9NO_.js → unstakeLBTC-DtvVbpbU.js} +50 -50
  159. package/dist/chunks/{unstakeLBTC-DAIR9NO_.js.map → unstakeLBTC-DtvVbpbU.js.map} +1 -1
  160. package/dist/chunks/{withdraw-hHueI2p7.js → withdraw-DgjuaUN3.js} +45 -45
  161. package/dist/chunks/{withdraw-hHueI2p7.js.map → withdraw-DgjuaUN3.js.map} +1 -1
  162. package/dist/chunks/{withdraw-C1fMFSwy.cjs → withdraw-i0AueZ_C.cjs} +2 -2
  163. package/dist/chunks/{withdraw-C1fMFSwy.cjs.map → withdraw-i0AueZ_C.cjs.map} +1 -1
  164. package/dist/common/constants.d.ts +1 -0
  165. package/dist/common/constants.d.ts.map +1 -1
  166. package/dist/contracts.cjs +1 -1
  167. package/dist/contracts.js +16 -16
  168. package/dist/core/assets/catalog.d.ts.map +1 -1
  169. package/dist/core.cjs +1 -1
  170. package/dist/core.js +85 -85
  171. package/dist/debug.js +4 -4
  172. package/dist/defi.cjs +1 -1
  173. package/dist/defi.js +10 -10
  174. package/dist/evm.cjs +1 -1
  175. package/dist/evm.js +34 -34
  176. package/dist/index.cjs +1 -1
  177. package/dist/index.d.ts +2 -1
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +287 -283
  180. package/dist/index.js.map +1 -1
  181. package/dist/metrics.cjs +1 -1
  182. package/dist/metrics.js +6 -6
  183. package/dist/shared/deposits/depositStatus.d.ts +9 -5
  184. package/dist/shared/deposits/depositStatus.d.ts.map +1 -1
  185. package/dist/stories/arg-types.d.ts +1 -0
  186. package/dist/stories/arg-types.d.ts.map +1 -1
  187. package/dist/tokens/token-addresses.d.ts +2 -2
  188. package/dist/tokens/token-addresses.d.ts.map +1 -1
  189. package/dist/utils/chain.d.ts +7 -0
  190. package/dist/utils/chain.d.ts.map +1 -1
  191. package/dist/utils.cjs +1 -1
  192. package/dist/utils.js +76 -76
  193. package/dist/vaults.cjs +1 -1
  194. package/dist/vaults.js +14 -14
  195. package/package.json +19 -6
  196. package/dist/chunks/BtcActions-XbVRQEcM.cjs +0 -2
  197. package/dist/chunks/BtcActions-XbVRQEcM.cjs.map +0 -1
  198. package/dist/chunks/BtcActions-k-qs1uO0.js.map +0 -1
  199. package/dist/chunks/EvmActions-BVzQ3fLK.cjs +0 -2
  200. package/dist/chunks/EvmActions-BVzQ3fLK.cjs.map +0 -1
  201. package/dist/chunks/EvmActions-B_dF42So.js.map +0 -1
  202. package/dist/chunks/ReferralsClient-BC-1wT1q.cjs +0 -2
  203. package/dist/chunks/ReferralsClient-BC-1wT1q.cjs.map +0 -1
  204. package/dist/chunks/ReferralsClient-DbFWWtVi.js.map +0 -1
  205. package/dist/chunks/approveLBTC-B5-ZWqct.js +0 -26
  206. package/dist/chunks/constants-BBK-JNcY.cjs +0 -2
  207. package/dist/chunks/constants-BBK-JNcY.cjs.map +0 -1
  208. package/dist/chunks/constants-CuT4axsy.js +0 -5
  209. package/dist/chunks/constants-CuT4axsy.js.map +0 -1
  210. package/dist/chunks/depositStatus-C3-EgT2a.cjs +0 -2
  211. package/dist/chunks/depositStatus-C3-EgT2a.cjs.map +0 -1
  212. package/dist/chunks/depositStatus-DM7fRmbN.js.map +0 -1
  213. package/dist/chunks/events-DdV_xi-2.js.map +0 -1
  214. package/dist/chunks/events-DqIJRzJo.cjs +0 -2
  215. package/dist/chunks/events-DqIJRzJo.cjs.map +0 -1
  216. package/dist/chunks/evm-by-btc-address-CwLiENtM.js +0 -39
  217. package/dist/chunks/fee-requirements-x8-8mpJ7.js +0 -14
  218. package/dist/chunks/get-exchange-ratio-NtnkG1kZ.js +0 -20
  219. package/dist/chunks/get-vault-withdrawals-BrpZlt6s.js +0 -161
  220. package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs +0 -2
  221. package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs.map +0 -1
  222. package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js +0 -120
  223. package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js.map +0 -1
  224. package/dist/chunks/lbtc-addresses-BLRmtR3c.js +0 -10
  225. package/dist/chunks/numbers-CM-lcmt4.js +0 -15
  226. package/dist/chunks/parameters-CDV-6Hk5.js +0 -11
  227. package/dist/chunks/satoshi-Ch6y8aYG.js +0 -19
  228. package/dist/chunks/statusConstants-BLiNBT6s.cjs +0 -2
  229. package/dist/chunks/statusConstants-BLiNBT6s.cjs.map +0 -1
  230. package/dist/chunks/statusConstants-DFxMrVob.js.map +0 -1
  231. package/dist/chunks/time-QPeEEEnQ.js +0 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmActions-5lPqhRaM.js","sources":["../../src/services/EvmService.ts","../../src/modules/evmModule.ts","../../src/chains/evm/actions/deploy/config/evm.ts","../../src/chains/evm/actions/deploy/EvmDeploy.ts","../../src/chains/evm/actions/deploy/factory.ts","../../src/chains/evm/actions/deposit/config/evm.ts","../../src/chains/evm/actions/deposit/types.ts","../../src/chains/evm/actions/deposit/EvmDeposit.ts","../../src/chains/evm/actions/deposit/factory.ts","../../src/chains/evm/actions/redeem/config/evm.ts","../../src/chains/evm/shared/feeAuth.ts","../../src/chains/evm/actions/redeem/EvmRedeem.ts","../../src/chains/evm/actions/redeem/factory.ts","../../src/chains/evm/actions/stake/EvmStake.ts","../../src/chains/evm/actions/stake/factory.ts","../../src/chains/evm/actions/unstake/config/evm.ts","../../src/chains/evm/actions/unstake/EvmUnstake.ts","../../src/chains/evm/actions/unstake/factory.ts","../../src/chains/evm/actions/withdraw/config/evm.ts","../../src/chains/evm/actions/withdraw/EvmCancelWithdraw.ts","../../src/chains/evm/actions/withdraw/EvmWithdraw.ts","../../src/chains/evm/actions/withdraw/factory.ts","../../src/chains/evm/EvmActions.ts"],"sourcesContent":["/**\n * EVM Service\n *\n * Provides EVM-specific operations via contract functions.\n *\n * @module services/EvmService\n */\n\nimport type {\n Env,\n EvmChainId,\n EvmProvider,\n EvmService as IEvmService,\n SignNetworkFeeParams,\n SignNetworkFeeResult,\n SignStakeAndBakeParams,\n} from '@lombard.finance/sdk-common';\nimport BigNumber from 'bignumber.js';\nimport type { EIP1193Provider } from 'viem';\n\nimport type { ChainId } from '../common/chains';\nimport { getMintingFee } from '../contract-functions/getLBTCMintingFee/getLBTCMintingFee';\nimport { getStakeAndBakeFee } from '../contract-functions/getStakeAndBakeFee/getStakeAndBakeFee';\nimport { signLbtcDestinationAddr } from '../contract-functions/signLbtcDestionationAddr/signLbtcDestinationAddr';\nimport { signNetworkFee } from '../contract-functions/signNetworkFee/signNetworkFee';\nimport { signStakeAndBake } from '../contract-functions/signStakeAndBake/signStakeAndBake';\nimport type { DefiProtocol, StakeAndBakeToken } from '../defi/defi-registry';\nimport { Token } from '../tokens/token-addresses';\n\n/**\n * EVM Service\n *\n * Implementation of the EvmService interface from sdk-common.\n * Provides EVM contract interactions and fee authorization.\n */\nexport class EvmService implements IEvmService {\n constructor(private readonly env: Env) {}\n\n /**\n * Get minting fee for a chain\n * @param chainId - The chain ID\n * @param token - Optional token (defaults to LBTC). Use Token.BTCb for BTC.b deposits.\n */\n async getMintingFee(chainId: EvmChainId, token?: string): Promise<string> {\n const fee = await getMintingFee({\n token: (token as Token) || Token.LBTC,\n chainId: chainId as ChainId,\n env: this.env,\n });\n return fee.toString();\n }\n\n /**\n * Sign network fee authorization (EIP-712)\n */\n async signNetworkFee(\n params: SignNetworkFeeParams,\n ): Promise<SignNetworkFeeResult> {\n const result = await signNetworkFee({\n fee: new BigNumber(params.fee),\n account: params.account as `0x${string}`,\n chainId: params.chainId as ChainId,\n provider: params.provider as EIP1193Provider,\n env: this.env,\n // Pass token for signing - defaults to LBTC for backwards compatibility\n token: (params.token as Token) ?? Token.LBTC,\n });\n\n return {\n signature: result.signature,\n typedData: result.typedData,\n };\n }\n\n /**\n * Get stake and bake fee for a vault\n */\n async getStakeAndBakeFee(\n chainId: EvmChainId,\n protocol: DefiProtocol,\n ): Promise<string> {\n const fee = await getStakeAndBakeFee({\n chainId: chainId as ChainId,\n protocol,\n });\n return fee.toString();\n }\n\n /**\n * Sign stake and bake authorization\n */\n async signStakeAndBake(\n params: SignStakeAndBakeParams,\n ): Promise<SignNetworkFeeResult> {\n const result = await signStakeAndBake({\n value: new BigNumber(params.value),\n account: params.account as `0x${string}`,\n chainId: params.chainId as ChainId,\n provider: params.provider as EIP1193Provider,\n env: this.env,\n vaultKey: params.vaultKey as DefiProtocol,\n token: params.token as StakeAndBakeToken,\n });\n\n return {\n signature: result.signature,\n typedData: result.typedData,\n };\n }\n\n /**\n * Sign LBTC destination address (for non-Ethereum EVM chains)\n */\n async signLbtcDestination(params: {\n chainId: EvmChainId;\n address: string;\n provider: EvmProvider;\n }): Promise<{ signature: string }> {\n const signature = await signLbtcDestinationAddr({\n account: params.address as `0x${string}`,\n chainId: params.chainId as ChainId,\n provider: params.provider as EIP1193Provider,\n });\n\n return { signature };\n }\n}\n","/**\n * EVM Module\n *\n * Provides EVM chain service for contract interactions and fee authorization.\n * Uses Service-First pattern: module is a thin factory that instantiates the service.\n *\n * @module modules/evmModule\n */\n\nimport type {\n ChainModule,\n EvmService as IEvmService,\n} from '@lombard.finance/sdk-common';\n\nimport { EvmService } from '../services/EvmService';\n\n/**\n * Create EVM module\n *\n * Built-in module that provides EvmService. Automatically included by createLombardSDK().\n *\n * @example\n * ```ts\n * const sdk = await createLombardSDK({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * });\n * const unstake = sdk.chain.evm.unstake({ ... });\n * ```\n */\nexport function evmModule(): ChainModule<'evm', IEvmService> {\n return {\n id: 'evm',\n chain: 'evm',\n register(ctx) {\n return new EvmService(ctx.env);\n },\n };\n}\n\n// Re-export service class and interface type\nexport { EvmService };\nexport type { IEvmService as EvmServiceInterface };\nexport type {\n EvmChainId,\n FeeAuthorizationResult,\n StoredFeeSignature,\n} from '@lombard.finance/sdk-common';\n","/**\n * EVM Chain Configuration for Deploy\n *\n * Handles deploying L-Assets to DeFi protocols.\n *\n * @module chains/evm/actions/deploy/config/evm\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { AssetId, Chain, DeployProtocol } from '../../../../../core';\nimport { evmAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n/**\n * EVM deploy configuration\n *\n * Protocol availability:\n * - Veda: Ethereum, Base, BSC, Corn (prod only)\n * - Silo: Avalanche (prod only)\n */\nexport const evmConfig: ChainConfig = {\n chainType: 'evm',\n\n routes: [\n // Veda - Ethereum\n {\n asset: AssetId.LBTC,\n sourceChains: [Chain.ETHEREUM],\n protocols: [DeployProtocol.Veda],\n envs: [Env.prod],\n },\n // Veda - Base\n {\n asset: AssetId.LBTC,\n sourceChains: [Chain.BASE],\n protocols: [DeployProtocol.Veda],\n envs: [Env.prod],\n },\n // Veda - BSC\n {\n asset: AssetId.LBTC,\n sourceChains: [Chain.BSC],\n protocols: [DeployProtocol.Veda],\n envs: [Env.prod],\n },\n // Veda - Corn\n {\n asset: AssetId.LBTC,\n sourceChains: [Chain.CORN],\n protocols: [DeployProtocol.Veda],\n envs: [Env.prod],\n },\n // Silo - Avalanche\n {\n asset: AssetId.LBTC,\n sourceChains: [Chain.AVALANCHE],\n protocols: [DeployProtocol.Silo],\n envs: [Env.prod],\n },\n ],\n\n addressSchema: evmAddressSchema,\n};\n\n/**\n * Check if a deploy route is supported\n */\nexport function isDeploySupported(\n asset: AssetId,\n chain: Chain,\n protocol: DeployProtocol,\n env: Env,\n): boolean {\n return evmConfig.routes.some(\n route =>\n route.asset === asset &&\n route.sourceChains.includes(chain) &&\n route.protocols.includes(protocol) &&\n route.envs.includes(env),\n );\n}\n","/**\n * EVM Deploy Action\n *\n * Deploys L-Assets to DeFi protocols (Veda, Silo).\n *\n * Protocol availability:\n * - Veda: Ethereum, Base, BSC, Corn (prod only)\n * - Silo: Avalanche (prod only)\n *\n * @module chains/evm/actions/deploy/EvmDeploy\n */\n\nimport BigNumber from 'bignumber.js';\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport { makePublicClient } from '../../../../clients/public-client';\nimport { makeWalletClient } from '../../../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP, type ChainId } from '../../../../common/chains';\nimport type { DeployProtocol } from '../../../../core';\nimport { parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { DeployEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { Token } from '../../../../tokens/token-addresses';\nimport { getTokenInfo, toBaseDenomination } from '../../../../tokens/tokens';\nimport toBigInt from '../../../../utils/numbers';\nimport { waitForTransactionReceipt } from '../../../../utils/transaction-executor';\nimport { Vault, VAULTS } from '../../../../vaults/lib/config';\nimport { deposit } from '../../../../vaults/lib/ops/deposit';\nimport { evmConfig } from './config';\nimport type {\n EvmDeployParams,\n EvmDeployPrepareParams,\n IEvmDeploy,\n} from './types';\n\nexport class EvmDeploy\n extends BaseAction<DeployEventMap, EvmOperationStatus>\n implements IEvmDeploy\n{\n private _amount?: string;\n private _protocol?: DeployProtocol;\n private _needsApproval = false;\n private _txHash?: string;\n private _account?: `0x${string}`;\n private _chainId?: ChainId;\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmDeployParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get protocol(): DeployProtocol | undefined {\n return this._protocol;\n }\n\n get needsApproval(): boolean {\n return this._needsApproval;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(params: EvmDeployPrepareParams): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params);\n this._amount = validated.amount;\n this._protocol = params.protocol;\n\n this.validateProtocol(params.protocol);\n\n // Get provider and account\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = (accounts as string[])[0] as `0x${string}`;\n if (!account) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n this._account = account;\n this._chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Check actual allowance to determine if approval is needed\n const vault = VAULTS[Vault.Veda];\n const depositToken = await getTokenInfo(Token.LBTC, this._chainId, this.ctx.env);\n if (!depositToken) {\n throw LombardError.invalidParameter('token', 'Could not get LBTC token info');\n }\n\n const publicClient = makePublicClient({ chainId: this._chainId });\n const allowanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'allowance',\n args: [account, vault.vaultContract.address],\n });\n\n const amount = new BigNumber(validated.amount);\n const amountBase = toBaseDenomination(amount, depositToken.decimals);\n const allowance = new BigNumber(String(allowanceRaw));\n\n // Check if approval is needed\n this._needsApproval = amountBase.isGreaterThan(allowance);\n\n if (this._needsApproval) {\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_APPROVAL,\n steps: { approval: StepStatus.PENDING, deploying: StepStatus.IDLE },\n });\n this.updateStatus(EvmOperationStatus.NEEDS_APPROVAL);\n } else {\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, deploying: StepStatus.PENDING },\n });\n this.updateStatus(EvmOperationStatus.READY);\n }\n });\n }\n\n async approve(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_APPROVAL, 'approve');\n\n return this.act(async () => {\n if (!this._account || !this._chainId || !this._amount) {\n throw LombardError.missingParameter('account, chainId, or amount');\n }\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n // Get vault and token info\n const vault = VAULTS[Vault.Veda];\n const depositToken = await getTokenInfo(Token.LBTC, this._chainId, this.ctx.env);\n if (!depositToken) {\n throw LombardError.invalidParameter('token', 'Could not get LBTC token info');\n }\n\n const amount = new BigNumber(this._amount);\n const amountBase = toBigInt(toBaseDenomination(amount, depositToken.decimals));\n\n // Execute approval transaction\n const publicClient = makePublicClient({ chainId: this._chainId });\n const walletClient = makeWalletClient({\n provider: provider as EIP1193Provider,\n chainId: this._chainId,\n });\n\n const { request } = await publicClient.simulateContract({\n account: this._account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[this._chainId],\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'approve',\n args: [vault.vaultContract.address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n await waitForTransactionReceipt(publicClient, txHash, 'LBTC vault deposit approval');\n\n this._needsApproval = false;\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, deploying: StepStatus.PENDING },\n });\n }, EvmOperationStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n if (!this._account || !this._chainId) {\n throw LombardError.missingParameter('account or chainId');\n }\n\n // Map protocol to vault key\n const vaultKey = this._protocol === 'veda' ? Vault.Veda : Vault.Veda;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, deploying: StepStatus.PENDING },\n });\n\n // Execute vault deposit (approval already done, so pass approve: false)\n const txHash = await deposit({\n amount: this._amount!,\n approve: false, // Approval was handled in approve() step\n token: Token.LBTC,\n vaultKey,\n account: this._account,\n chainId: this._chainId,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: { approval: StepStatus.COMPLETE, deploying: StepStatus.COMPLETE },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: evmAmountSchema,\n protocol: z.string().min(1, 'Protocol is required'),\n });\n }\n\n private validateProtocol(protocol: DeployProtocol): void {\n const isSupported = evmConfig.routes.some(\n route =>\n route.protocols.includes(protocol) && route.envs.includes(this.ctx.env),\n );\n if (!isSupported) {\n throw LombardError.invalidParameter(\n 'protocol',\n `Protocol ${protocol} is not supported in ${this.ctx.env} environment`,\n );\n }\n }\n}\n","/**\n * EVM Deploy Factory Functions\n *\n * @module chains/evm/actions/deploy/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmDeploy } from './EvmDeploy';\nimport type { EvmDeployParams } from './types';\n\n/**\n * Create EvmDeploy action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const deploy = sdk.chain.evm.deploy({\n * sourceChain: Chain.ETHEREUM,\n * protocol: DeployProtocol.Veda,\n * });\n * await deploy.prepare({ amount: '0.1' });\n * ```\n */\nexport function evmDeploy(\n config: LombardConfig,\n params: EvmDeployParams,\n): EvmDeploy {\n const ctx = createEvmCoreContext(config);\n return new EvmDeploy(ctx, params);\n}\n\n/**\n * Create EvmDeploy action from context\n */\nexport function createEvmDeploy(\n ctx: EvmCoreContext,\n params: EvmDeployParams,\n): EvmDeploy {\n return new EvmDeploy(ctx, params);\n}\n","/**\n * EVM Chain Configuration for Deposit\n *\n * Handles depositing BTCb to get LBTC.\n * Routes are derived from ASSET_CATALOG to ensure consistency.\n *\n * @module chains/evm/actions/deposit/config/evm\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport {\n AssetId,\n Chain,\n getEvmAssetChains,\n} from '../../../../../core';\nimport { evmAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog-Derived Chain Lists\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Source chains: EVM chains with BTCb deployed\n */\nconst DEPOSIT_PROD_SOURCE_CHAINS = getEvmAssetChains(AssetId.BTCb, [Env.prod]);\n\nconst DEPOSIT_TESTNET_SOURCE_CHAINS = getEvmAssetChains(AssetId.BTCb, [Env.testnet, Env.stage, Env.dev, Env.ibc]);\n\n/** Dest chains: EVM chains with LBTC deployed */\nconst LBTC_PROD_CHAINS = getEvmAssetChains(AssetId.LBTC, [Env.prod]);\nconst LBTC_TESTNET_CHAINS = getEvmAssetChains(AssetId.LBTC, [\n Env.testnet,\n Env.stage,\n Env.dev,\n Env.ibc,\n]);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Configuration Objects\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * EVM deposit configuration\n *\n * Supports depositing BTCb to get LBTC on EVM chains.\n * Source chains derived from BTCb deployments.\n * Dest chains derived from LBTC deployments.\n */\nexport const evmConfig: ChainConfig = {\n chainType: 'evm',\n\n routes: [\n // Production: BTCb → LBTC\n {\n assetsIn: [AssetId.BTCb],\n assetOut: AssetId.LBTC,\n sourceChains: DEPOSIT_PROD_SOURCE_CHAINS,\n destChains: LBTC_PROD_CHAINS,\n envs: [Env.prod],\n },\n // Testnet\n {\n assetsIn: [AssetId.BTCb],\n assetOut: AssetId.LBTC,\n sourceChains: DEPOSIT_TESTNET_SOURCE_CHAINS,\n destChains: LBTC_TESTNET_CHAINS,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n ],\n\n addressSchema: evmAddressSchema,\n};\n\n/**\n * Check if a deposit route is supported\n */\nexport function isDepositSupported(\n assetIn: AssetId,\n sourceChain: Chain,\n env: Env,\n): boolean {\n return evmConfig.routes.some(\n route =>\n route.assetsIn.includes(assetIn) &&\n route.sourceChains.includes(sourceChain) &&\n route.envs.includes(env),\n );\n}\n","/**\n * EVM Deposit Action Types\n *\n * @module chains/evm/actions/deposit/types\n */\n\nimport type {\n AssetId,\n Chain,\n StepStatus,\n StrategyProgress,\n} from '../../../../core';\nimport type { MonitorableAction } from '../../../../shared/actions/BaseAction';\nimport type { LombardError } from '../../../../shared/errors';\n\n/**\n * EVM Deposit status\n *\n * Note: There is NO 'failed' status. Error handling is separate from status:\n * - `status` = \"What step are you at?\" (flow position)\n * - `error` = \"Did something go wrong?\" (Error | null)\n * - `isFailed` = Derived from `error !== null`\n *\n * Use `isLoading` for operation-in-progress state (no transitional statuses).\n */\nexport enum EvmDepositStatus {\n IDLE = 'idle',\n NEEDS_APPROVAL = 'needs-approval',\n READY = 'ready',\n BRIDGING = 'bridging',\n COMPLETED = 'completed',\n}\n\n/**\n * EVM Deposit parameters\n */\nexport interface EvmDepositParams {\n /** Input asset (BTCb) */\n assetIn: AssetId;\n /** Output asset (LBTC) */\n assetOut: AssetId;\n /** Source chain */\n sourceChain: Chain;\n /** Destination chain */\n destChain: Chain;\n}\n\n/**\n * EVM Deposit prepare parameters\n */\nexport interface EvmDepositPrepareParams {\n /** Amount to deposit */\n amount: string;\n /** Recipient address */\n recipient: string;\n}\n\n/**\n * EVM Deposit progress\n */\nexport interface EvmDepositProgress extends StrategyProgress<EvmDepositStatus> {\n status: EvmDepositStatus;\n steps: {\n approval: StepStatus;\n execution: StepStatus;\n bridging?: StepStatus;\n };\n txHash?: string;\n}\n\n/**\n * EVM Deposit interface\n */\nexport interface IEvmDeposit extends MonitorableAction {\n readonly status: EvmDepositStatus;\n readonly error: LombardError | null;\n readonly amount?: string;\n readonly recipient?: string;\n readonly needsApproval: boolean;\n readonly txHash?: string;\n\n /** Set claim data from a notarized deposit (required before execute) */\n setClaimData(data: string, proofSignature: string): void;\n prepare(params: EvmDepositPrepareParams): Promise<void>;\n approve(): Promise<void>;\n execute(): Promise<{ txHash: string }>;\n}\n","/**\n * EVM Deposit Action\n *\n * Claims LBTC from a notarized BTC deposit.\n *\n * Flow:\n * 1. BTC is deposited to Lombard's BTC address (via BtcDeposit/BtcStake)\n * 2. Deposit is notarized by the consortium\n * 3. User claims LBTC using setClaimData() + execute()\n *\n * @module chains/evm/actions/deposit/EvmDeposit\n */\n\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport type { ChainId } from '../../../../common/chains';\nimport { claimLBTC } from '../../../../contract-functions';\nimport { parseChainIdentifier,StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { DepositEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { evmConfig } from './config';\nimport {\n type EvmDepositParams,\n type EvmDepositPrepareParams,\n EvmDepositStatus,\n type IEvmDeposit,\n} from './types';\n\nexport class EvmDeposit\n extends BaseAction<DepositEventMap, EvmDepositStatus>\n implements IEvmDeposit\n{\n private _amount?: string;\n private _recipient?: string;\n private _needsApproval = false;\n private _txHash?: string;\n private _claimData?: { data: string; proofSignature: string };\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmDepositParams,\n ) {\n super(EvmDepositStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get needsApproval(): boolean {\n return this._needsApproval;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n setClaimData(data: string, proofSignature: string): void {\n this._claimData = { data, proofSignature };\n }\n\n async prepare(params: EvmDepositPrepareParams): Promise<void> {\n this.assertStatus(EvmDepositStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount;\n this._recipient = validated.recipient;\n\n this._needsApproval = false;\n this.emitProgress({\n status: EvmDepositStatus.READY,\n steps: {\n approval: StepStatus.COMPLETE,\n execution: StepStatus.IDLE,\n bridging: StepStatus.IDLE,\n },\n });\n }, EvmDepositStatus.READY);\n }\n\n async approve(): Promise<void> {\n this.assertStatus(EvmDepositStatus.NEEDS_APPROVAL, 'approve');\n\n return this.act(async () => {\n this._needsApproval = false;\n }, EvmDepositStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmDepositStatus.READY, 'execute');\n\n if (!this._claimData) {\n throw LombardError.missingParameter('claimData');\n }\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.destChain) as ChainId;\n\n this.emitProgress({\n status: EvmDepositStatus.READY,\n steps: {\n approval: StepStatus.COMPLETE,\n execution: StepStatus.PENDING,\n bridging: StepStatus.IDLE,\n },\n });\n\n const txHash = await claimLBTC({\n provider: provider as EIP1193Provider,\n account: this._recipient! as `0x${string}`,\n data: this._claimData!.data,\n proofSignature: this._claimData!.proofSignature,\n chainId,\n env: this.ctx.env,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmDepositStatus.COMPLETED,\n steps: {\n approval: StepStatus.COMPLETE,\n execution: StepStatus.COMPLETE,\n bridging: StepStatus.IDLE,\n },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmDepositStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: evmAmountSchema,\n recipient: evmConfig.addressSchema,\n });\n }\n}\n","/**\n * EVM Deposit Factory Functions\n *\n * @module chains/evm/actions/deposit/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmDeposit } from './EvmDeposit';\nimport type { EvmDepositParams } from './types';\n\n/**\n * Create EvmDeposit action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const deposit = sdk.chain.evm.deposit({\n * sourceChain: Chain.ETHEREUM,\n * assetIn: AssetId.BTCb,\n * });\n * await deposit.prepare({ amount: '0.1' });\n * ```\n */\nexport function evmDeposit(\n config: LombardConfig,\n params: EvmDepositParams,\n): EvmDeposit {\n const ctx = createEvmCoreContext(config);\n return new EvmDeposit(ctx, params);\n}\n\n/**\n * Create EvmDeposit action from context\n */\nexport function createEvmDeposit(\n ctx: EvmCoreContext,\n params: EvmDepositParams,\n): EvmDeposit {\n return new EvmDeposit(ctx, params);\n}\n","/**\n * EVM Chain Configuration for Redeem\n *\n * Handles redeeming BTC.b to native BTC (cross-chain).\n * This is the opposite operation to BTC Deposit.\n *\n * Future: Will also support L-Assets (L_ZEC, L_SOL, etc.) → native chains.\n *\n * @module chains/evm/actions/redeem/config/evm\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport {\n AssetId,\n Chain,\n getEvmAssetChains,\n} from '../../../../../core';\nimport { bitcoinAddressSchema } from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog-Derived Chain Lists\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** EVM chains with BTC.b deployed (can redeem to BTC) */\nconst BTCB_PROD_CHAINS = getEvmAssetChains(AssetId.BTCb, [Env.prod]);\nconst BTCB_TESTNET_CHAINS = getEvmAssetChains(AssetId.BTCb, [\n Env.testnet,\n Env.stage,\n Env.dev,\n Env.ibc,\n]);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Configuration Objects\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * EVM redeem configuration\n *\n * Currently supports BTC.b → BTC (cross-chain to Bitcoin).\n * Source chains derived from BTC.b deployments in ASSET_CATALOG.\n */\nexport const evmConfig: ChainConfig = {\n chainType: 'evm',\n\n routes: [\n // BTC.b → BTC (to Bitcoin Mainnet)\n {\n assetIn: AssetId.BTCb,\n assetOut: AssetId.BTC,\n sourceChains: BTCB_PROD_CHAINS,\n destChain: Chain.BITCOIN_MAINNET,\n envs: [Env.prod],\n },\n // BTC.b → BTC (to Bitcoin Signet - testnet)\n {\n assetIn: AssetId.BTCb,\n assetOut: AssetId.BTC,\n sourceChains: BTCB_TESTNET_CHAINS,\n destChain: Chain.BITCOIN_SIGNET,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n // TODO: Add L-Asset routes when deployed\n // L-ZEC → ZEC, L-SOL → SOL, L-XRP → XRP, L-DOGE → DOGE\n ],\n\n recipientSchema: bitcoinAddressSchema,\n};\n\n/**\n * Check if a redeem route is supported\n */\nexport function isRedeemSupported(\n assetIn: AssetId,\n sourceChain: Chain,\n env: Env,\n): boolean {\n return evmConfig.routes.some(\n route =>\n route.assetIn === assetIn &&\n route.sourceChains.includes(sourceChain) &&\n route.envs.includes(env),\n );\n}\n","/**\n * Shared Fee Authorization Logic for EVM Actions\n *\n * Provides fee authorization support for EVM actions that require it:\n * - EvmStake (BTC.b → LBTC on Ethereum/Sepolia)\n * - EvmRedeem (BTC.b → BTC on Ethereum/Sepolia)\n * - EvmUnstake (LBTC → BTC.b on Ethereum/Sepolia)\n *\n * Fee authorization is only required on unsubsidized chains (Ethereum, Sepolia).\n * Other chains (Base, BSC, Avalanche) are subsidized by Lombard.\n *\n * @module chains/evm/shared/feeAuth\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\nimport type { EIP1193Provider } from 'viem';\n\nimport { getNetworkFeeSignature } from '../../../api-functions';\nimport { storeNetworkFeeSignature } from '../../../api-functions/storeNetworkFeeSignature/storeNetworkFeeSignature';\nimport type { ChainId } from '../../../common/chains';\nimport { requiresAutoMintFee } from '../../../common/fee-requirements';\nimport { getMintingFee } from '../../../contract-functions';\nimport { signNetworkFee } from '../../../contract-functions/signNetworkFee/signNetworkFee';\nimport { Token } from '../../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../../tokens/tokens';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Fee authorization state\n */\nexport interface FeeAuthState {\n /** Whether fee authorization is required for this chain */\n requiresAuth: boolean;\n /** Whether fee authorization is complete (valid signature exists) */\n isAuthorized: boolean;\n /** Minting fee in satoshis (for signing) */\n feeInSatoshis: bigint | null;\n /** Minting fee formatted in BTC (for display) */\n feeFormatted: string | null;\n /** Signature expiration date (Unix timestamp in seconds) */\n expirationDate: string | null;\n}\n\n/**\n * Fee authorization check result\n */\nexport interface FeeAuthCheckResult {\n /** Whether fee authorization is required */\n requiresAuth: boolean;\n /** Whether a valid (non-expired) signature exists */\n hasValidSignature: boolean;\n /** Minting fee in satoshis */\n feeInSatoshis: bigint | null;\n /** Minting fee formatted in BTC */\n feeFormatted: string | null;\n /** Expiration date if signature exists */\n expirationDate: string | null;\n}\n\n/**\n * Parameters for fee authorization\n */\nexport interface AuthorizeFeeParams {\n chainId: ChainId;\n account: `0x${string}`;\n feeInSatoshis: bigint;\n provider: EIP1193Provider;\n env: Env;\n token: Token;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Fee Authorization Logic\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Check if fee authorization is required and if a valid signature exists\n *\n * This should be called in the action's prepare() method to determine\n * whether to transition to NEEDS_FEE_AUTHORIZATION or READY status.\n *\n * @param chainId - The EVM chain ID\n * @param account - The user's EVM account address\n * @param env - The environment (prod, stage, testnet)\n * @param token - The token type (BTCb or LBTC)\n * @returns Fee authorization check result\n */\nexport async function checkFeeAuthorization(\n chainId: ChainId,\n account: `0x${string}`,\n env: Env,\n token: Token,\n): Promise<FeeAuthCheckResult> {\n // Check if this chain requires fee authorization\n if (!requiresAutoMintFee(chainId)) {\n return {\n requiresAuth: false,\n hasValidSignature: false,\n feeInSatoshis: null,\n feeFormatted: null,\n expirationDate: null,\n };\n }\n\n // Get token address for signature lookup\n const tokenInfo = await getTokenContractInfo(token, chainId, env);\n\n // Check for existing valid signature on server\n const existingSignature = await getNetworkFeeSignature({\n address: account,\n chainId,\n env,\n tokenAddress: tokenInfo.address,\n });\n\n // Check if signature exists and is not expired\n const isExpired = existingSignature.expirationDate\n ? new Date(Number(existingSignature.expirationDate) * 1000) < new Date()\n : false;\n\n const hasValidSignature = existingSignature.hasSignature && !isExpired;\n\n // If no valid signature, fetch the minting fee\n let feeInSatoshis: bigint | null = null;\n let feeFormatted: string | null = null;\n\n if (!hasValidSignature) {\n const feeInBtc = await getMintingFee({\n token,\n chainId,\n env,\n });\n feeInSatoshis = BigInt(feeInBtc.times(1e8).toFixed(0));\n feeFormatted = feeInBtc.toFixed(8);\n }\n\n return {\n requiresAuth: true,\n hasValidSignature,\n feeInSatoshis,\n feeFormatted,\n expirationDate: existingSignature.expirationDate ?? null,\n };\n}\n\n/**\n * Authorize fee by signing and storing the signature\n *\n * This should be called from the action's authorizeFee() method.\n *\n * @param params - Authorization parameters\n * @returns The signature\n */\nexport async function authorizeFee(\n params: AuthorizeFeeParams,\n): Promise<{ signature: `0x${string}`; typedData: string }> {\n const { chainId, account, feeInSatoshis, provider, env, token } = params;\n\n // Get token address for storing signature\n const tokenInfo = await getTokenContractInfo(token, chainId, env);\n\n // Sign the network fee\n const signResult = await signNetworkFee({\n fee: feeInSatoshis,\n account,\n chainId,\n provider,\n env,\n token,\n });\n\n // Store the signature on the server\n await storeNetworkFeeSignature({\n signature: signResult.signature,\n typedData: signResult.typedData,\n address: account,\n env,\n tokenAddress: tokenInfo.address,\n });\n\n return signResult;\n}\n\n/**\n * Create initial fee auth state\n */\nexport function createInitialFeeAuthState(): FeeAuthState {\n return {\n requiresAuth: false,\n isAuthorized: false,\n feeInSatoshis: null,\n feeFormatted: null,\n expirationDate: null,\n };\n}\n","/**\n * EVM Redeem Action\n *\n * Redeems BTC.b to native BTC (cross-chain).\n * This is the opposite operation to BTC Deposit.\n *\n * Flow: BTC.b (EVM) → BTC (Bitcoin)\n *\n * ## Fee Authorization\n *\n * On Ethereum/Sepolia, fee authorization is required before redemption.\n * This covers the gas cost of the auto-mint operation on the destination.\n *\n * **Flow with fee auth (Ethereum/Sepolia):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED\n *\n * **Flow without fee auth (Base, BSC - subsidized):**\n * IDLE → READY → COMPLETED\n *\n * @module chains/evm/actions/redeem/EvmRedeem\n */\n\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport type { ChainId } from '../../../../common/chains';\nimport { redeemToken } from '../../../../contract-functions';\nimport { parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { RedeemEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { Token } from '../../../../tokens/token-addresses';\nimport {\n authorizeFee as authorizeFeeShared,\n checkFeeAuthorization,\n createInitialFeeAuthState,\n type FeeAuthState,\n} from '../../shared/feeAuth';\nimport { evmConfig } from './config';\nimport type {\n EvmRedeemParams,\n EvmRedeemPrepareParams,\n IEvmRedeem,\n} from './types';\n\nexport class EvmRedeem\n extends BaseAction<RedeemEventMap, EvmOperationStatus>\n implements IEvmRedeem\n{\n private _amount?: string;\n private _recipient?: string;\n private _needsApproval = false;\n private _txHash?: string;\n private _feeAuth: FeeAuthState = createInitialFeeAuthState();\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmRedeemParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get needsApproval(): boolean {\n return this._needsApproval;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n /** Fee authorization state (for UI display) */\n get feeAuth(): FeeAuthState {\n return this._feeAuth;\n }\n\n async prepare(params: EvmRedeemPrepareParams): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount as string;\n this._recipient = validated.recipient as string;\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Get EVM account for fee auth check\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = accounts[0] as `0x${string}`;\n\n // Check fee authorization status (BTC.b redeem uses Token.BTCb)\n const feeAuthResult = await checkFeeAuthorization(\n chainId,\n account,\n this.ctx.env,\n Token.BTCb,\n );\n\n // Update fee auth state\n this._feeAuth = {\n requiresAuth: feeAuthResult.requiresAuth,\n isAuthorized: feeAuthResult.hasValidSignature,\n feeInSatoshis: feeAuthResult.feeInSatoshis,\n feeFormatted: feeAuthResult.feeFormatted,\n expirationDate: feeAuthResult.expirationDate,\n };\n\n // Determine next status based on fee auth\n // Note: Status is set here (not via act's successStatus) because the\n // fee auth state is only known after the async check completes.\n if (feeAuthResult.requiresAuth && !feeAuthResult.hasValidSignature) {\n this.updateStatus(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n return;\n }\n\n // No fee auth required or already authorized\n this._needsApproval = false;\n this.updateStatus(EvmOperationStatus.READY);\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n });\n }\n\n /**\n * Authorize the network fee\n *\n * Must be called when status is NEEDS_FEE_AUTHORIZATION.\n * Signs the fee authorization and stores it on the server.\n */\n async authorizeFee(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION, 'authorizeFee');\n\n if (!this._feeAuth.feeInSatoshis) {\n throw LombardError.missingParameter('feeInSatoshis');\n }\n\n return this.act(async () => {\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = accounts[0] as `0x${string}`;\n\n // Sign and store fee authorization\n await authorizeFeeShared({\n chainId,\n account,\n feeInSatoshis: this._feeAuth.feeInSatoshis!,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n token: Token.BTCb,\n });\n\n // Update state\n this._feeAuth.isAuthorized = true;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, EvmOperationStatus.READY);\n }\n\n async approve(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_APPROVAL, 'approve');\n\n return this.act(async () => {\n this._needsApproval = false;\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, EvmOperationStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n // Get the connected EVM account address from the provider\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const evmAccount = accounts[0] as `0x${string}`;\n if (!evmAccount) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.PENDING, releasing: StepStatus.IDLE },\n });\n\n // Execute BTC.b → BTC redemption (burn BTC.b, release BTC to Bitcoin address)\n const txHash = await redeemToken({\n provider: provider as EIP1193Provider,\n account: evmAccount,\n amount: this._amount!,\n btcAddress: this._recipient!, // Bitcoin address to receive BTC\n chainId,\n env: this.ctx.env,\n tokenIn: Token.BTCb,\n tokenOut: undefined, // Native BTC output\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: { burning: StepStatus.COMPLETE, releasing: StepStatus.PENDING },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: evmAmountSchema,\n recipient: evmConfig.recipientSchema,\n });\n }\n}\n","/**\n * EVM Redeem Factory Functions\n *\n * @module chains/evm/actions/redeem/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmRedeem } from './EvmRedeem';\nimport type { EvmRedeemParams } from './types';\n\n/**\n * Create EvmRedeem action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const redeem = sdk.chain.evm.redeem({\n * sourceChain: Chain.ETHEREUM,\n * });\n * await redeem.prepare({ amount: '0.1' });\n * ```\n */\nexport function evmRedeem(\n config: LombardConfig,\n params: EvmRedeemParams,\n): EvmRedeem {\n const ctx = createEvmCoreContext(config);\n return new EvmRedeem(ctx, params);\n}\n\n/**\n * Create EvmRedeem action from context\n */\nexport function createEvmRedeem(\n ctx: EvmCoreContext,\n params: EvmRedeemParams,\n): EvmRedeem {\n return new EvmRedeem(ctx, params);\n}\n","/**\n * EVM Stake Action\n *\n * Stakes BTC.b to receive LBTC via the Asset Router.\n * This is the EVM equivalent of staking - converting wrapped BTC to LBTC.\n *\n * ## Approval (Avalanche only)\n *\n * On Avalanche, users must approve the Adapter contract to spend their BTC.b.\n *\n * ## Fee Authorization (Ethereum/Sepolia only)\n *\n * Fee authorization is required on unsubsidized chains (Ethereum, Sepolia).\n * On subsidized chains (Avalanche, Base, BSC), no fee auth is required.\n *\n * **Flow with approval (Avalanche):**\n * IDLE → NEEDS_APPROVAL → READY → COMPLETED\n *\n * **Flow with fee auth (Ethereum/Sepolia):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED\n *\n * **Flow without either (Base, BSC):**\n * IDLE → READY → COMPLETED\n *\n * @module chains/evm/actions/stake/EvmStake\n */\n\nimport BigNumber from 'bignumber.js';\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport { makePublicClient } from '../../../../clients/public-client';\nimport { ChainId } from '../../../../common/chains';\nimport {\n approveToken,\n getTokenAllowance,\n} from '../../../../contract-functions/approveToken';\nimport { depositToken } from '../../../../contract-functions/deposit';\nimport { parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { StakeEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { AddressKind, Token } from '../../../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../../../tokens/tokens';\nimport { waitForTransactionReceipt } from '../../../../utils/transaction-executor';\nimport {\n authorizeFee as authorizeFeeShared,\n checkFeeAuthorization,\n createInitialFeeAuthState,\n type FeeAuthState,\n} from '../../shared/feeAuth';\nimport type { EvmStakeParams, EvmStakePrepareParams, IEvmStake } from './types';\n\n/**\n * Chains that require ERC20 approval for BTC.b staking (to the Adapter)\n */\nconst APPROVAL_REQUIRED_CHAINS: readonly ChainId[] = [\n ChainId.avalanche,\n ChainId.avalancheFuji,\n] as const;\n\nfunction requiresApproval(chainId: ChainId): boolean {\n return APPROVAL_REQUIRED_CHAINS.includes(chainId);\n}\n\nexport class EvmStake\n extends BaseAction<StakeEventMap, EvmOperationStatus>\n implements IEvmStake\n{\n private _amount?: string;\n private _txHash?: string;\n private _feeAuth: FeeAuthState = createInitialFeeAuthState();\n private _account?: `0x${string}`;\n private _needsApproval = false;\n private _spenderAddress?: `0x${string}`;\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmStakeParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n /** Fee authorization state (for UI display) */\n get feeAuth(): FeeAuthState {\n return this._feeAuth;\n }\n\n /** Whether approval is needed */\n get needsApproval(): boolean {\n return this._needsApproval;\n }\n\n async prepare(params: EvmStakePrepareParams): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params);\n this._amount = validated.amount;\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = (accounts as string[])[0] as `0x${string}`;\n\n if (!account) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n this._account = account;\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Check if approval is required (Avalanche only)\n if (requiresApproval(chainId)) {\n // Get the Adapter address (spender for approval)\n const adapterInfo = await getTokenContractInfo(\n Token.BTCb,\n chainId,\n this.ctx.env,\n AddressKind.Adapter,\n );\n this._spenderAddress = adapterInfo.address;\n\n // Check current allowance\n const allowance = await getTokenAllowance({\n token: Token.BTCb,\n owner: account,\n spender: adapterInfo.address,\n chainId,\n env: this.ctx.env,\n });\n\n const requiredAmount = new BigNumber(validated.amount);\n this._needsApproval = allowance.isLessThan(requiredAmount);\n\n if (this._needsApproval) {\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_APPROVAL,\n steps: { approval: StepStatus.PENDING, staking: StepStatus.IDLE },\n });\n this.updateStatus(EvmOperationStatus.NEEDS_APPROVAL);\n return;\n }\n }\n\n // Check fee authorization status (BTC.b → LBTC uses Token.LBTC for fee signature)\n const feeAuthResult = await checkFeeAuthorization(\n chainId,\n account,\n this.ctx.env,\n Token.LBTC,\n );\n\n // Update fee auth state\n this._feeAuth = {\n requiresAuth: feeAuthResult.requiresAuth,\n isAuthorized: feeAuthResult.hasValidSignature,\n feeInSatoshis: feeAuthResult.feeInSatoshis,\n feeFormatted: feeAuthResult.feeFormatted,\n expirationDate: feeAuthResult.expirationDate,\n };\n\n // Determine next status based on fee auth\n const needsFeeAuth =\n feeAuthResult.requiresAuth && !feeAuthResult.hasValidSignature;\n\n if (needsFeeAuth) {\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,\n steps: { staking: StepStatus.IDLE },\n });\n this.updateStatus(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);\n } else {\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { staking: StepStatus.PENDING },\n });\n this.updateStatus(EvmOperationStatus.READY);\n }\n });\n }\n\n /**\n * Approve BTC.b spending (Avalanche only)\n *\n * Must be called when status is NEEDS_APPROVAL.\n */\n async approve(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_APPROVAL, 'approve');\n\n return this.act(async () => {\n if (!this._account || !this._spenderAddress || !this._amount) {\n throw LombardError.missingParameter(\n 'account, spenderAddress, or amount',\n );\n }\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Execute approval transaction\n const txHash = await approveToken({\n account: this._account,\n token: Token.BTCb,\n spender: this._spenderAddress,\n amount: this._amount,\n chainId,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n });\n\n // Wait for approval to be confirmed on-chain\n const publicClient = makePublicClient({ chainId, env: this.ctx.env });\n await waitForTransactionReceipt(publicClient, txHash, 'BTC.b approval');\n\n // Mark approval as done\n this._needsApproval = false;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, staking: StepStatus.PENDING },\n });\n }, EvmOperationStatus.READY);\n }\n\n async authorizeFee(): Promise<void> {\n this.assertStatus(\n EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,\n 'authorizeFee',\n );\n\n return this.act(async () => {\n if (!this._feeAuth.feeInSatoshis) {\n throw LombardError.missingParameter('feeInSatoshis');\n }\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Sign and store the fee authorization\n await authorizeFeeShared({\n chainId,\n account: this._account!,\n feeInSatoshis: this._feeAuth.feeInSatoshis,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n token: Token.LBTC, // BTC.b → LBTC uses LBTC token for fee signature\n });\n\n // Update fee auth state\n this._feeAuth = {\n ...this._feeAuth,\n isAuthorized: true,\n };\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { staking: StepStatus.PENDING },\n });\n }, EvmOperationStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Get account from provider\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = (accounts as string[])[0] as `0x${string}`;\n\n if (!account) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { staking: StepStatus.PENDING },\n });\n\n // Execute BTC.b → LBTC via Asset Router\n const txHash = await depositToken({\n amount: this._amount!,\n tokenIn: Token.BTCb,\n tokenOut: Token.LBTC,\n account,\n chainId,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: { staking: StepStatus.COMPLETE },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: evmAmountSchema,\n });\n }\n}\n","/**\n * EVM Stake Factory Functions\n *\n * Provides factory functions for creating EvmStake instances.\n *\n * @module chains/evm/actions/stake/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmStake } from './EvmStake';\nimport type { EvmStakeParams } from './types';\n\n/**\n * Create EvmStake action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const stake = sdk.chain.evm.stake({\n * sourceChain: Chain.ETHEREUM,\n * destChain: Chain.ETHEREUM,\n * });\n * await stake.prepare({ amount: '0.1' });\n * ```\n */\nexport function evmStake(\n config: LombardConfig,\n params: EvmStakeParams,\n): EvmStake {\n const ctx = createEvmCoreContext(config);\n return new EvmStake(ctx, params);\n}\n\n/**\n * Create EvmStake action from context\n *\n * Use this when you already have an EvmCoreContext (e.g., in EvmActions).\n *\n * @param ctx - EvmCoreContext\n * @param params - Stake parameters\n * @returns EvmStake instance\n */\nexport function createEvmStake(\n ctx: EvmCoreContext,\n params: EvmStakeParams,\n): EvmStake {\n return new EvmStake(ctx, params);\n}\n","/**\n * EVM Chain Configuration for Unstake\n *\n * Handles unstaking LBTC to BTC (cross-chain) or BTC.b (same-chain).\n * Routes are derived from ASSET_CATALOG to ensure consistency.\n *\n * @module chains/evm/actions/unstake/config/evm\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport {\n AssetId,\n Chain,\n getEvmAssetChains,\n getEvmChainsWithAllAssets,\n} from '../../../../../core';\nimport {\n bitcoinAddressSchema,\n evmAddressSchema,\n} from '../../../../../shared/validation';\nimport type { ChainConfig } from './types';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog-Derived Chain Lists\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** EVM chains with LBTC deployed (can unstake to BTC) */\nconst LBTC_PROD_CHAINS = getEvmAssetChains(AssetId.LBTC, [Env.prod]);\nconst LBTC_TESTNET_CHAINS = getEvmAssetChains(AssetId.LBTC, [\n Env.testnet,\n Env.stage,\n Env.dev,\n Env.ibc,\n]);\n\n/** EVM chains with BOTH LBTC and BTCb deployed (can unstake to BTCb) */\nconst LBTC_BTCB_PROD_CHAINS = getEvmChainsWithAllAssets(\n [AssetId.LBTC, AssetId.BTCb],\n [Env.prod],\n);\nconst LBTC_BTCB_TESTNET_CHAINS = getEvmChainsWithAllAssets(\n [AssetId.LBTC, AssetId.BTCb],\n [Env.testnet, Env.stage, Env.dev, Env.ibc],\n);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Configuration Objects\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * EVM → BTC configuration (cross-chain unstake)\n *\n * Burns LBTC on EVM, releases BTC on Bitcoin network.\n * Source chains derived from ASSET_CATALOG LBTC deployments.\n */\nexport const evmToBtcConfig: ChainConfig = {\n chainType: 'evm',\n\n routes: [\n // Production: EVM chains with LBTC → Bitcoin Mainnet\n {\n sourceChains: LBTC_PROD_CHAINS,\n destChain: Chain.BITCOIN_MAINNET,\n envs: [Env.prod],\n },\n // Testnet: EVM chains with LBTC → Bitcoin Signet\n {\n sourceChains: LBTC_TESTNET_CHAINS,\n destChain: Chain.BITCOIN_SIGNET,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc],\n },\n ],\n\n recipientSchema: bitcoinAddressSchema,\n};\n\n/**\n * EVM → BTC.b configuration (same-chain wrapped)\n *\n * Burns LBTC on EVM, mints BTC.b on same EVM chain.\n * Only available on chains with BOTH LBTC and BTCb deployed.\n * Routes are generated dynamically from catalog.\n */\nexport const evmToBtcbConfig: ChainConfig = {\n chainType: 'evm',\n\n routes: [\n // Production: Same-chain routes for chains with both LBTC and BTCb\n ...LBTC_BTCB_PROD_CHAINS.map(chain => ({\n sourceChains: [chain],\n destChain: chain,\n envs: [Env.prod] as Env[],\n })),\n // Testnet: Same-chain routes\n ...LBTC_BTCB_TESTNET_CHAINS.map(chain => ({\n sourceChains: [chain],\n destChain: chain,\n envs: [Env.testnet, Env.stage, Env.dev, Env.ibc] as Env[],\n })),\n ],\n\n recipientSchema: evmAddressSchema,\n};\n\n/**\n * Check if unstake to BTC is supported\n */\nexport function isBtcUnstakeSupported(sourceChain: Chain, env: Env): boolean {\n return evmToBtcConfig.routes.some(\n route =>\n route.sourceChains.includes(sourceChain) && route.envs.includes(env),\n );\n}\n\n/**\n * Check if unstake to BTC.b is supported\n */\nexport function isBtcbUnstakeSupported(sourceChain: Chain, env: Env): boolean {\n return evmToBtcbConfig.routes.some(\n route =>\n route.sourceChains.includes(sourceChain) && route.envs.includes(env),\n );\n}\n","/**\n * EVM Unstake Action\n *\n * Burns LBTC on EVM chains and releases BTC (cross-chain) or BTC.b (same-chain).\n *\n * ## Fee Authorization\n *\n * Fee authorization is required when:\n * - Output asset is BTC.b (LBTC → BTC.b conversion)\n * - Source chain is Ethereum/Sepolia (unsubsidized chains)\n *\n * **Flow with fee auth (LBTC → BTC.b on Ethereum/Sepolia):**\n * IDLE → NEEDS_FEE_AUTHORIZATION → READY → COMPLETED\n *\n * **Flow without fee auth (LBTC → BTC, or BTC.b on Base/BSC):**\n * IDLE → READY → COMPLETED\n *\n * @module chains/evm/actions/unstake/EvmUnstake\n */\n\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport type { ChainId } from '../../../../common/chains';\nimport { redeemToken } from '../../../../contract-functions';\nimport { AssetId, parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError } from '../../../../shared/errors';\nimport type { UnstakeEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { Token } from '../../../../tokens/token-addresses';\nimport {\n authorizeFee as authorizeFeeShared,\n checkFeeAuthorization,\n createInitialFeeAuthState,\n type FeeAuthState,\n} from '../../shared/feeAuth';\nimport { evmToBtcbConfig, evmToBtcConfig } from './config';\nimport type {\n EvmUnstakeParams,\n EvmUnstakePrepareParams,\n IEvmUnstake,\n} from './types';\n\nexport class EvmUnstake\n extends BaseAction<UnstakeEventMap, EvmOperationStatus>\n implements IEvmUnstake\n{\n private _amount?: string;\n private _recipient?: string;\n private _txHash?: string;\n private _feeAuth: FeeAuthState = createInitialFeeAuthState();\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmUnstakeParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get recipient(): string | undefined {\n return this._recipient;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n /** Fee authorization state (for UI display) */\n get feeAuth(): FeeAuthState {\n return this._feeAuth;\n }\n\n /** Whether output is BTC.b (requires fee auth on unsubsidized chains) */\n private get isBtcbOutput(): boolean {\n return this.params.assetOut === AssetId.BTCb;\n }\n\n async prepare(params: EvmUnstakePrepareParams): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params, {\n destChain: this.params.destChain,\n });\n this._amount = validated.amount;\n this._recipient = validated.recipient;\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Fee auth is only required for BTC.b output on unsubsidized chains\n if (this.isBtcbOutput) {\n // Get EVM account for fee auth check\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = accounts[0] as `0x${string}`;\n\n // Check fee authorization status (use Token.BTCb for LBTC → BTC.b)\n const feeAuthResult = await checkFeeAuthorization(\n chainId,\n account,\n this.ctx.env,\n Token.BTCb,\n );\n\n // Update fee auth state\n this._feeAuth = {\n requiresAuth: feeAuthResult.requiresAuth,\n isAuthorized: feeAuthResult.hasValidSignature,\n feeInSatoshis: feeAuthResult.feeInSatoshis,\n feeFormatted: feeAuthResult.feeFormatted,\n expirationDate: feeAuthResult.expirationDate,\n };\n\n // If fee auth required and not authorized, transition to NEEDS_FEE_AUTHORIZATION\n // Note: Status is set here (not via act's successStatus) because the\n // fee auth state is only known after the async check completes.\n if (feeAuthResult.requiresAuth && !feeAuthResult.hasValidSignature) {\n this.updateStatus(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION);\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n return;\n }\n }\n\n // No fee auth required or already authorized\n this.updateStatus(EvmOperationStatus.READY);\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n });\n }\n\n /**\n * Authorize the network fee\n *\n * Must be called when status is NEEDS_FEE_AUTHORIZATION.\n * Signs the fee authorization and stores it on the server.\n */\n async authorizeFee(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_FEE_AUTHORIZATION, 'authorizeFee');\n\n if (!this._feeAuth.feeInSatoshis) {\n throw LombardError.missingParameter('feeInSatoshis');\n }\n\n return this.act(async () => {\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = accounts[0] as `0x${string}`;\n\n // Sign and store fee authorization (use Token.BTCb for LBTC → BTC.b)\n await authorizeFeeShared({\n chainId,\n account,\n feeInSatoshis: this._feeAuth.feeInSatoshis!,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n token: Token.BTCb,\n });\n\n // Update state\n this._feeAuth.isAuthorized = true;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.IDLE, releasing: StepStatus.IDLE },\n });\n }, EvmOperationStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n // Get the connected EVM account address from the provider\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const evmAccount = accounts[0] as `0x${string}`;\n if (!evmAccount) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n const isBtcbOutput = this.params.assetOut === AssetId.BTCb;\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { burning: StepStatus.PENDING, releasing: StepStatus.IDLE },\n });\n\n // For BTC output: account = EVM wallet (executing burn), btcAddress = recipient (Bitcoin)\n // For BTCb output: account = recipient (same EVM address receives BTCb)\n const txHash = await redeemToken({\n provider: provider as EIP1193Provider,\n account: isBtcbOutput ? (this._recipient! as `0x${string}`) : evmAccount,\n amount: this._amount!,\n btcAddress: isBtcbOutput ? undefined : this._recipient!,\n chainId,\n env: this.ctx.env,\n tokenIn: Token.LBTC,\n tokenOut: isBtcbOutput ? Token.BTCb : undefined,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: {\n burning: StepStatus.COMPLETE,\n releasing: isBtcbOutput ? StepStatus.COMPLETE : StepStatus.PENDING,\n },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n const config =\n this.params.assetOut === AssetId.BTC ? evmToBtcConfig : evmToBtcbConfig;\n return z.object({\n amount: evmAmountSchema,\n recipient: config.recipientSchema,\n });\n }\n}\n","/**\n * EVM Unstake Factory Functions\n *\n * @module chains/evm/actions/unstake/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmUnstake } from './EvmUnstake';\nimport type { EvmUnstakeParams } from './types';\n\n/**\n * Create EvmUnstake action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const unstake = sdk.chain.evm.unstake({\n * sourceChain: Chain.ETHEREUM,\n * assetOut: AssetId.BTC,\n * });\n * await unstake.prepare({ amount: '0.1', recipient: 'bc1q...' });\n * ```\n */\nexport function evmUnstake(\n config: LombardConfig,\n params: EvmUnstakeParams,\n): EvmUnstake {\n const ctx = createEvmCoreContext(config);\n return new EvmUnstake(ctx, params);\n}\n\n/**\n * Create EvmUnstake action from context\n */\nexport function createEvmUnstake(\n ctx: EvmCoreContext,\n params: EvmUnstakeParams,\n): EvmUnstake {\n return new EvmUnstake(ctx, params);\n}\n","/**\n * EVM Chain Configuration for Withdraw\n *\n * Handles withdrawing vault shares from DeFi protocols.\n *\n * @module chains/evm/actions/withdraw/config/evm\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\n\nimport { Chain, DeployProtocol } from '../../../../../core';\nimport { evmAddressSchema } from '../../../../../shared/validation';\nimport type { WithdrawChainConfig } from './types';\n\n/**\n * EVM withdraw configuration\n *\n * Withdraw support mirrors deploy support:\n * - Veda: Ethereum, Base, BSC, Corn (prod only)\n */\nexport const evmWithdrawConfig: WithdrawChainConfig = {\n chainType: 'evm',\n\n routes: [\n // Veda - Ethereum, Base, BSC, Corn\n {\n sourceChains: [Chain.ETHEREUM, Chain.BASE, Chain.BSC, Chain.CORN],\n protocols: [DeployProtocol.Veda],\n envs: [Env.prod],\n },\n ],\n\n addressSchema: evmAddressSchema,\n};\n\n/**\n * Check if a withdraw route is supported\n */\nexport function isWithdrawSupported(\n chain: Chain,\n protocol: DeployProtocol,\n env: Env,\n): boolean {\n return evmWithdrawConfig.routes.some(\n route =>\n route.sourceChains.includes(chain) &&\n route.protocols.includes(protocol) &&\n route.envs.includes(env),\n );\n}\n","/**\n * EVM Cancel Withdraw Action\n *\n * Cancels a pending vault withdrawal from DeFi protocols (Veda).\n *\n * @module chains/evm/actions/withdraw/EvmCancelWithdraw\n */\n\nimport type { EIP1193Provider } from 'viem';\n\nimport type { ChainId } from '../../../../common/chains';\nimport type { DeployProtocol } from '../../../../core';\nimport { parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError, WithdrawErrorCode } from '../../../../shared/errors';\nimport type { WithdrawEventMap } from '../../../../shared/events';\nimport { isVedaVaultChain, Vault } from '../../../../vaults/lib/config';\nimport { cancelWithdraw } from '../../../../vaults/lib/ops/withdraw';\nimport { evmWithdrawConfig } from './config';\nimport type {\n EvmCancelWithdrawParams,\n IEvmCancelWithdraw,\n} from './types';\n\nexport class EvmCancelWithdraw\n extends BaseAction<WithdrawEventMap, EvmOperationStatus>\n implements IEvmCancelWithdraw\n{\n private _txHash?: string;\n private _account?: `0x${string}`;\n private _chainId?: ChainId;\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmCancelWithdrawParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n this.validateProtocol(this.params.protocol);\n\n // Get provider and account\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.chain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = (accounts as string[])[0] as `0x${string}`;\n if (!account) {\n throw LombardError.providerMissing(this.params.chain, 'evm');\n }\n\n this._account = account;\n this._chainId = parseChainIdentifier(this.params.chain) as ChainId;\n\n // Validate chain supports Veda vault\n if (!isVedaVaultChain(this._chainId)) {\n throw new LombardError(\n WithdrawErrorCode.PROTOCOL_NOT_SUPPORTED,\n `Chain ${this.params.chain} does not support Veda vault withdrawals`,\n { chain: this.params.chain, protocol: this.params.protocol },\n );\n }\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { cancelling: StepStatus.PENDING },\n });\n this.updateStatus(EvmOperationStatus.READY);\n });\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.chain, 'evm');\n }\n\n if (!this._account || !this._chainId) {\n throw LombardError.missingParameter('account or chainId');\n }\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { cancelling: StepStatus.PENDING },\n });\n\n // Execute vault cancel withdraw\n const txHash = await cancelWithdraw({\n vaultKey: Vault.Veda,\n account: this._account,\n chainId: this._chainId,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: { cancelling: StepStatus.COMPLETE },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private validateProtocol(protocol: DeployProtocol): void {\n const isSupported = evmWithdrawConfig.routes.some(\n route =>\n route.protocols.includes(protocol) && route.envs.includes(this.ctx.env),\n );\n if (!isSupported) {\n throw LombardError.invalidParameter(\n 'protocol',\n `Protocol ${protocol} is not supported for withdrawals in ${this.ctx.env} environment`,\n );\n }\n }\n}\n","/**\n * EVM Withdraw Action\n *\n * Queues withdrawal of vault shares from DeFi protocols (Veda).\n *\n * Protocol availability:\n * - Veda: Ethereum, Base, BSC, Corn (prod only)\n *\n * @module chains/evm/actions/withdraw/EvmWithdraw\n */\n\nimport BigNumber from 'bignumber.js';\nimport type { EIP1193Provider } from 'viem';\nimport { z } from 'zod';\n\nimport { makePublicClient } from '../../../../clients/public-client';\nimport { makeWalletClient } from '../../../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP, type ChainId } from '../../../../common/chains';\nimport type { DeployProtocol } from '../../../../core';\nimport { parseChainIdentifier, StepStatus } from '../../../../core';\nimport { BaseAction } from '../../../../shared/actions/BaseAction';\nimport { EvmOperationStatus } from '../../../../shared/constants/statusConstants';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { LombardError, WithdrawErrorCode } from '../../../../shared/errors';\nimport type { WithdrawEventMap } from '../../../../shared/events';\nimport {\n evmAmountSchema,\n validatePrepareParams,\n} from '../../../../shared/validation';\nimport { fromBaseDenomination, toBaseDenomination } from '../../../../tokens/tokens';\nimport toBigInt from '../../../../utils/numbers';\nimport { waitForTransactionReceipt } from '../../../../utils/transaction-executor';\nimport { isVedaVaultChain, Vault, VAULTS, type VedaVaultChain } from '../../../../vaults/lib/config';\nimport { queueWithdraw } from '../../../../vaults/lib/ops/withdraw';\nimport { evmWithdrawConfig } from './config';\nimport type {\n EvmWithdrawParams,\n EvmWithdrawPrepareParams,\n IEvmWithdraw,\n} from './types';\n\nexport class EvmWithdraw\n extends BaseAction<WithdrawEventMap, EvmOperationStatus>\n implements IEvmWithdraw\n{\n private _amount?: string;\n private _protocol?: DeployProtocol;\n private _needsApproval = false;\n private _txHash?: string;\n private _account?: `0x${string}`;\n private _chainId?: ChainId;\n\n constructor(\n private readonly ctx: EvmCoreContext,\n private readonly params: EvmWithdrawParams,\n ) {\n super(EvmOperationStatus.IDLE);\n }\n\n get amount(): string | undefined {\n return this._amount;\n }\n\n get protocol(): DeployProtocol | undefined {\n return this._protocol;\n }\n\n get needsApproval(): boolean {\n return this._needsApproval;\n }\n\n get txHash(): string | undefined {\n return this._txHash;\n }\n\n async prepare(params: EvmWithdrawPrepareParams): Promise<void> {\n this.assertStatus(EvmOperationStatus.IDLE, 'prepare');\n\n return this.act(async () => {\n const validated = validatePrepareParams(this.prepareSchema, params);\n this._amount = validated.amount;\n this._protocol = this.params.protocol;\n\n this.validateProtocol(this.params.protocol);\n\n // Get provider and account\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const accounts = await (provider as EIP1193Provider).request({\n method: 'eth_accounts',\n });\n const account = (accounts as string[])[0] as `0x${string}`;\n if (!account) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n this._account = account;\n this._chainId = parseChainIdentifier(this.params.sourceChain) as ChainId;\n\n // Validate chain supports Veda vault\n if (!isVedaVaultChain(this._chainId)) {\n throw new LombardError(\n WithdrawErrorCode.PROTOCOL_NOT_SUPPORTED,\n `Chain ${this.params.sourceChain} does not support Veda vault withdrawals`,\n { chain: this.params.sourceChain, protocol: this._protocol },\n );\n }\n\n const vault = VAULTS[Vault.Veda];\n const publicClient = makePublicClient({ chainId: this._chainId });\n\n // Check vault balance\n const balanceRaw = await publicClient.readContract({\n address: vault.lensContract.address,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vault.vaultContract.address],\n });\n const balance = fromBaseDenomination(String(balanceRaw), vault.decimals);\n\n const amount = new BigNumber(validated.amount);\n if (amount.isGreaterThan(balance)) {\n throw new LombardError(\n WithdrawErrorCode.INSUFFICIENT_SHARES,\n `Insufficient vault shares. Requested: ${amount.toFixed()}, Available: ${balance.toFixed()}`,\n { requested: amount.toFixed(), available: balance.toFixed() },\n );\n }\n\n // Check allowance for withdraw queue contract\n const allowanceRaw = await publicClient.readContract({\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'allowance',\n args: [account, vault.withdrawQueueContracts[this._chainId].address],\n });\n const allowance = fromBaseDenomination(String(allowanceRaw), vault.decimals);\n\n // Check if approval is needed\n this._needsApproval = amount.isGreaterThan(allowance);\n\n if (this._needsApproval) {\n this.emitProgress({\n status: EvmOperationStatus.NEEDS_APPROVAL,\n steps: { approval: StepStatus.PENDING, queueing: StepStatus.IDLE },\n });\n this.updateStatus(EvmOperationStatus.NEEDS_APPROVAL);\n } else {\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, queueing: StepStatus.PENDING },\n });\n this.updateStatus(EvmOperationStatus.READY);\n }\n });\n }\n\n async approve(): Promise<void> {\n this.assertStatus(EvmOperationStatus.NEEDS_APPROVAL, 'approve');\n\n return this.act(async () => {\n if (!this._account || !this._chainId || !this._amount) {\n throw LombardError.missingParameter('account, chainId, or amount');\n }\n\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n const vault = VAULTS[Vault.Veda];\n const amount = new BigNumber(this._amount);\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const publicClient = makePublicClient({ chainId: this._chainId });\n const walletClient = makeWalletClient({\n provider: provider as EIP1193Provider,\n chainId: this._chainId,\n });\n\n // Chain is validated as VedaVaultChain in prepare()\n const vedaChainId = this._chainId as VedaVaultChain;\n\n const { request } = await publicClient.simulateContract({\n account: this._account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[this._chainId],\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'approve',\n args: [vault.withdrawQueueContracts[vedaChainId].address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n await waitForTransactionReceipt(publicClient, txHash, 'vault share approval');\n\n this._needsApproval = false;\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, queueing: StepStatus.PENDING },\n });\n }, EvmOperationStatus.READY);\n }\n\n async execute(): Promise<{ txHash: string }> {\n this.assertStatus(EvmOperationStatus.READY, 'execute');\n\n return this.act(async () => {\n const provider = await this.ctx.getProvider('evm');\n if (!provider) {\n throw LombardError.providerMissing(this.params.sourceChain, 'evm');\n }\n\n if (!this._account || !this._chainId || !this._amount) {\n throw LombardError.missingParameter('account, chainId, or amount');\n }\n\n this.emitProgress({\n status: EvmOperationStatus.READY,\n steps: { approval: StepStatus.COMPLETE, queueing: StepStatus.PENDING },\n });\n\n // Execute vault queue withdraw (approval already done)\n const txHash = await queueWithdraw({\n amount: this._amount,\n approve: false,\n vaultKey: Vault.Veda,\n account: this._account,\n chainId: this._chainId,\n provider: provider as EIP1193Provider,\n env: this.ctx.env,\n });\n\n this._txHash = txHash;\n\n this.emitProgress({\n status: EvmOperationStatus.COMPLETED,\n steps: { approval: StepStatus.COMPLETE, queueing: StepStatus.COMPLETE },\n });\n\n this.emitCompleted();\n\n return { txHash };\n }, EvmOperationStatus.COMPLETED);\n }\n\n private get prepareSchema() {\n return z.object({\n amount: evmAmountSchema,\n });\n }\n\n private validateProtocol(protocol: DeployProtocol): void {\n const isSupported = evmWithdrawConfig.routes.some(\n route =>\n route.protocols.includes(protocol) && route.envs.includes(this.ctx.env),\n );\n if (!isSupported) {\n throw LombardError.invalidParameter(\n 'protocol',\n `Protocol ${protocol} is not supported for withdrawals in ${this.ctx.env} environment`,\n );\n }\n }\n}\n","/**\n * EVM Withdraw Factory Functions\n *\n * @module chains/evm/actions/withdraw/factory\n */\n\nimport type { LombardConfig } from '../../../../config/types';\nimport type { EvmCoreContext } from '../../../../shared/context';\nimport { createEvmCoreContext } from '../../../../shared/context';\nimport { EvmCancelWithdraw } from './EvmCancelWithdraw';\nimport { EvmWithdraw } from './EvmWithdraw';\nimport type { EvmCancelWithdrawParams, EvmWithdrawParams } from './types';\n\n/**\n * Create EvmWithdraw action from config\n *\n * @internal This factory is for internal use. Use createLombardSDK() instead:\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const withdraw = sdk.chain.evm.withdraw({\n * sourceChain: Chain.ETHEREUM,\n * protocol: DeployProtocol.Veda,\n * recipient: '0x...',\n * });\n * await withdraw.prepare({ amount: '0.1' });\n * if (withdraw.needsApproval) await withdraw.approve();\n * await withdraw.execute();\n * ```\n */\nexport function evmWithdraw(\n config: LombardConfig,\n params: EvmWithdrawParams,\n): EvmWithdraw {\n const ctx = createEvmCoreContext(config);\n return new EvmWithdraw(ctx, params);\n}\n\n/**\n * Create EvmWithdraw action from context\n */\nexport function createEvmWithdraw(\n ctx: EvmCoreContext,\n params: EvmWithdrawParams,\n): EvmWithdraw {\n return new EvmWithdraw(ctx, params);\n}\n\n/**\n * Create EvmCancelWithdraw action from config\n *\n * @example\n * ```typescript\n * const sdk = await createLombardSDK({ env: Env.prod, providers: { evm: () => window.ethereum } });\n * const cancelWithdraw = sdk.chain.evm.cancelWithdraw({\n * chain: Chain.ETHEREUM,\n * protocol: DeployProtocol.Veda,\n * });\n * await cancelWithdraw.prepare();\n * await cancelWithdraw.execute();\n * ```\n */\nexport function evmCancelWithdraw(\n config: LombardConfig,\n params: EvmCancelWithdrawParams,\n): EvmCancelWithdraw {\n const ctx = createEvmCoreContext(config);\n return new EvmCancelWithdraw(ctx, params);\n}\n\n/**\n * Create EvmCancelWithdraw action from context\n */\nexport function createEvmCancelWithdraw(\n ctx: EvmCoreContext,\n params: EvmCancelWithdrawParams,\n): EvmCancelWithdraw {\n return new EvmCancelWithdraw(ctx, params);\n}\n","/**\n * EVM Actions\n *\n * Provides factory methods for EVM chain operations.\n *\n * Operations:\n * - stake: BTC.b → LBTC (stake wrapped BTC to get LBTC)\n * - unstake: LBTC → BTC (cross-chain) or LBTC → BTC.b (same-chain)\n * - deposit: BTCb → LBTC (deposit BTC.b to receive LBTC)\n * - deploy: LBTC/BTC.b → DeFi protocols (Veda, Silo)\n * - withdraw: Queue withdrawal from DeFi protocols\n * - cancelWithdraw: Cancel pending withdrawal from DeFi protocols\n * - redeem: LBTC → BTC.b (same-chain unwrap)\n *\n * @example\n * ```typescript\n * import { createLombardSDK, Chain, Env } from '@lombard.finance/sdk';\n *\n * const sdk = await createLombardSDK({\n * env: Env.prod,\n * providers: { evm: () => window.ethereum },\n * });\n *\n * const unstake = sdk.chain.evm.unstake({\n * sourceChain: Chain.ETHEREUM,\n * assetOut: AssetId.BTC,\n * });\n *\n * await unstake.prepare({ amount: '0.1', recipient: 'bc1q...' });\n * const { txHash } = await unstake.execute();\n * ```\n *\n * @module chains/evm/EvmActions\n */\n\nimport type { LombardConfig } from '../../config/types';\nimport type { EvmCoreContext } from '../../shared/context';\nimport { createEvmCoreContext } from '../../shared/context';\nimport {\n createEvmDeploy,\n type EvmDeployParams,\n type IEvmDeploy,\n} from './actions/deploy';\nimport {\n createEvmDeposit,\n type EvmDepositParams,\n type IEvmDeposit,\n} from './actions/deposit';\nimport {\n createEvmRedeem,\n type EvmRedeemParams,\n type IEvmRedeem,\n} from './actions/redeem';\n// Import action factories\nimport {\n createEvmStake,\n type EvmStakeParams,\n type IEvmStake,\n} from './actions/stake';\nimport {\n createEvmUnstake,\n type EvmUnstakeParams,\n type IEvmUnstake,\n} from './actions/unstake';\nimport {\n createEvmCancelWithdraw,\n createEvmWithdraw,\n type EvmCancelWithdrawParams,\n type EvmWithdrawParams,\n type IEvmCancelWithdraw,\n type IEvmWithdraw,\n} from './actions/withdraw';\n\n/**\n * EVM Actions\n *\n * User-facing class for EVM operations.\n * Created via evmActions(config) factory function.\n */\nexport class EvmActions {\n private readonly ctx: EvmCoreContext;\n\n constructor(config: LombardConfig) {\n this.ctx = createEvmCoreContext(config);\n }\n\n /**\n * Stake BTC.b to receive LBTC\n *\n * Converts wrapped BTC (BTC.b) to LBTC via the Asset Router.\n * Currently supported on Avalanche.\n *\n * @example\n * ```typescript\n * const stake = evm.stake({\n * assetIn: AssetId.BTCb,\n * assetOut: AssetId.LBTC,\n * sourceChain: Chain.AVALANCHE,\n * destChain: Chain.AVALANCHE,\n * });\n * ```\n */\n stake(params: EvmStakeParams): IEvmStake {\n return createEvmStake(this.ctx, params);\n }\n\n /**\n * Unstake LBTC to BTC or BTC.b\n *\n * - LBTC → BTC: Cross-chain to Bitcoin mainnet/signet\n * - LBTC → BTC.b: Same-chain wrapped BTC on EVM\n *\n * @example\n * ```typescript\n * const unstake = evm.unstake({\n * assetIn: AssetId.LBTC,\n * assetOut: AssetId.BTC,\n * sourceChain: Chain.ETHEREUM,\n * destChain: Chain.BITCOIN_MAINNET,\n * });\n * ```\n */\n unstake(params: EvmUnstakeParams): IEvmUnstake {\n return createEvmUnstake(this.ctx, params);\n }\n\n /**\n * Deposit BTCb to get LBTC\n *\n * Deposits BTC.b to receive LBTC via the claim flow.\n *\n * @example\n * ```typescript\n * const deposit = evm.deposit({\n * assetIn: AssetId.BTCb,\n * assetOut: AssetId.LBTC,\n * sourceChain: Chain.ETHEREUM,\n * destChain: Chain.ETHEREUM,\n * });\n * ```\n */\n deposit(params: EvmDepositParams): IEvmDeposit {\n return createEvmDeposit(this.ctx, params);\n }\n\n /**\n * Deploy L-Assets to DeFi protocols\n *\n * Currently supports Veda and Silo protocols.\n *\n * @example\n * ```typescript\n * const deploy = evm.deploy({\n * asset: AssetId.LBTC,\n * sourceChain: Chain.ETHEREUM,\n * protocol: DeployProtocol.Veda,\n * recipient: '0x...',\n * });\n * ```\n */\n deploy(params: EvmDeployParams): IEvmDeploy {\n return createEvmDeploy(this.ctx, params);\n }\n\n /**\n * Withdraw vault shares from DeFi protocols\n *\n * Queues a withdrawal request from DeFi protocols (e.g., Veda vault).\n * After the withdrawal is queued, it will be processed within the\n * protocol's withdrawal window.\n *\n * @example\n * ```typescript\n * const withdraw = evm.withdraw({\n * protocol: DeployProtocol.Veda,\n * sourceChain: Chain.ETHEREUM,\n * recipient: '0x...',\n * });\n * await withdraw.prepare({ amount: '0.1' });\n * if (withdraw.needsApproval) await withdraw.approve();\n * await withdraw.execute();\n * ```\n */\n withdraw(params: EvmWithdrawParams): IEvmWithdraw {\n return createEvmWithdraw(this.ctx, params);\n }\n\n /**\n * Cancel a pending withdrawal from DeFi protocols\n *\n * Cancels a previously queued withdrawal request.\n *\n * @example\n * ```typescript\n * const cancelWithdraw = evm.cancelWithdraw({\n * protocol: DeployProtocol.Veda,\n * chain: Chain.ETHEREUM,\n * });\n * await cancelWithdraw.prepare();\n * await cancelWithdraw.execute();\n * ```\n */\n cancelWithdraw(params: EvmCancelWithdrawParams): IEvmCancelWithdraw {\n return createEvmCancelWithdraw(this.ctx, params);\n }\n\n /**\n * Redeem LBTC to BTC.b (same-chain unwrap)\n *\n * Converts LBTC to BTC.b on the same EVM chain.\n * For cross-chain BTC redemption, use unstake() with destChain set to Bitcoin.\n *\n * @example\n * ```typescript\n * const redeem = evm.redeem({\n * assetIn: AssetId.LBTC,\n * assetOut: AssetId.BTCb,\n * sourceChain: Chain.AVALANCHE,\n * });\n * ```\n */\n redeem(params: EvmRedeemParams): IEvmRedeem {\n return createEvmRedeem(this.ctx, params);\n }\n}\n\n/**\n * Create EVM actions from config\n *\n * Factory function that creates EvmActions for EVM operations.\n *\n * @param config - LombardConfig instance\n * @returns EvmActions instance\n */\nexport function evmActions(config: LombardConfig): EvmActions {\n return new EvmActions(config);\n}\n"],"names":["EvmService","env","chainId","token","getMintingFee","Token","params","result","signNetworkFee","BigNumber","protocol","getStakeAndBakeFee","signStakeAndBake","signLbtcDestinationAddr","evmModule","ctx","evmConfig","AssetId","Chain","DeployProtocol","Env","EvmDeploy","BaseAction","EvmOperationStatus","__publicField","validated","validatePrepareParams","provider","LombardError","account","parseChainIdentifier","vault","VAULTS","Vault","depositToken","getTokenInfo","allowanceRaw","makePublicClient","amount","amountBase","toBaseDenomination","allowance","StepStatus","toBigInt","publicClient","walletClient","makeWalletClient","request","CHAIN_ID_TO_VIEM_CHAIN_MAP","txHash","waitForTransactionReceipt","vaultKey","deposit","z.object","evmAmountSchema","z.string","route","createEvmDeploy","DEPOSIT_PROD_SOURCE_CHAINS","getEvmAssetChains","DEPOSIT_TESTNET_SOURCE_CHAINS","LBTC_PROD_CHAINS","LBTC_TESTNET_CHAINS","evmAddressSchema","EvmDepositStatus","EvmDeposit","data","proofSignature","claimLBTC","createEvmDeposit","BTCB_PROD_CHAINS","BTCB_TESTNET_CHAINS","bitcoinAddressSchema","checkFeeAuthorization","requiresAutoMintFee","tokenInfo","getTokenContractInfo","existingSignature","getNetworkFeeSignature","isExpired","hasValidSignature","feeInSatoshis","feeFormatted","feeInBtc","authorizeFee","signResult","storeNetworkFeeSignature","createInitialFeeAuthState","EvmRedeem","feeAuthResult","authorizeFeeShared","evmAccount","redeemToken","createEvmRedeem","APPROVAL_REQUIRED_CHAINS","ChainId","requiresApproval","EvmStake","adapterInfo","AddressKind","getTokenAllowance","requiredAmount","approveToken","createEvmStake","LBTC_BTCB_PROD_CHAINS","getEvmChainsWithAllAssets","LBTC_BTCB_TESTNET_CHAINS","evmToBtcConfig","evmToBtcbConfig","chain","EvmUnstake","isBtcbOutput","config","createEvmUnstake","evmWithdrawConfig","EvmCancelWithdraw","isVedaVaultChain","WithdrawErrorCode","cancelWithdraw","EvmWithdraw","balanceRaw","balance","fromBaseDenomination","vedaChainId","queueWithdraw","createEvmWithdraw","createEvmCancelWithdraw","EvmActions","createEvmCoreContext","evmActions"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";var N=Object.defineProperty;var B=(r,a,e)=>a in r?N(r,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[a]=e;var c=(r,a,e)=>B(r,typeof a!="symbol"?a+"":a,e);const I=require("bignumber.js"),v=require("./unstakeLBTC-CmoCaGX9.cjs"),m=require("./token-addresses-nzvTOi24.cjs"),S=require("./tokens-BkvA0Gp1.cjs"),t=require("./statusConstants-DlM2oPfW.cjs"),w=require("./storeNetworkFeeSignature-Buk4091C.cjs"),R=require("./fee-requirements-CICSxYYL.cjs"),p=require("./defi-registry-DDNavtO1.cjs"),n=require("./index-BKzxeh1Y.cjs"),L=require("./numbers-3LtmxfD8.cjs"),l=require("./config-DmCmanM_.cjs"),T=require("./withdraw-i0AueZ_C.cjs");class k{constructor(a){this.env=a}async getMintingFee(a,e){return(await v.getMintingFee({token:e||m.Token.LBTC,chainId:a,env:this.env})).toString()}async signNetworkFee(a){const e=await v.signNetworkFee({fee:new I(a.fee),account:a.account,chainId:a.chainId,provider:a.provider,env:this.env,token:a.token??m.Token.LBTC});return{signature:e.signature,typedData:e.typedData}}async getStakeAndBakeFee(a,e){return(await v.getStakeAndBakeFee({chainId:a,protocol:e})).toString()}async signStakeAndBake(a){const e=await v.signStakeAndBake({value:new I(a.value),account:a.account,chainId:a.chainId,provider:a.provider,env:this.env,vaultKey:a.vaultKey,token:a.token});return{signature:e.signature,typedData:e.typedData}}async signLbtcDestination(a){return{signature:await v.signLbtcDestinationAddr({account:a.address,chainId:a.chainId,provider:a.provider})}}}function y(){return{id:"evm",chain:"evm",register(r){return new k(r.env)}}}const M={routes:[{asset:p.AssetId.LBTC,sourceChains:[t.Chain.ETHEREUM],protocols:[p.DefiProtocol.Veda],envs:[n.r.prod]},{asset:p.AssetId.LBTC,sourceChains:[t.Chain.BASE],protocols:[p.DefiProtocol.Veda],envs:[n.r.prod]},{asset:p.AssetId.LBTC,sourceChains:[t.Chain.BSC],protocols:[p.DefiProtocol.Veda],envs:[n.r.prod]},{asset:p.AssetId.LBTC,sourceChains:[t.Chain.CORN],protocols:[p.DefiProtocol.Veda],envs:[n.r.prod]},{asset:p.AssetId.LBTC,sourceChains:[t.Chain.AVALANCHE],protocols:[p.DefiProtocol.Silo],envs:[n.r.prod]}]};class H extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_amount");c(this,"_protocol");c(this,"_needsApproval",!1);c(this,"_txHash");c(this,"_account");c(this,"_chainId");this.ctx=e,this.params=s}get amount(){return this._amount}get protocol(){return this._protocol}get needsApproval(){return this._needsApproval}get txHash(){return this._txHash}async prepare(e){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e);this._amount=s.amount,this._protocol=e.protocol,this.validateProtocol(e.protocol);const i=await this.ctx.getProvider("evm");if(!i)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const u=(await i.request({method:"eth_accounts"}))[0];if(!u)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");this._account=u,this._chainId=t.parseChainIdentifier(this.params.sourceChain);const d=l.VAULTS[l.Vault.Veda],o=await S.getTokenInfo(m.Token.LBTC,this._chainId,this.ctx.env);if(!o)throw t.LombardError.invalidParameter("token","Could not get LBTC token info");const E=await S.makePublicClient({chainId:this._chainId}).readContract({address:o.address,abi:o.abi,functionName:"allowance",args:[u,d.vaultContract.address]}),g=new I(s.amount),_=S.toBaseDenomination(g,o.decimals),f=new I(String(E));this._needsApproval=_.isGreaterThan(f),this._needsApproval?(this.emitProgress({status:t.EvmOperationStatus.NEEDS_APPROVAL,steps:{approval:t.StepStatus.PENDING,deploying:t.StepStatus.IDLE}}),this.updateStatus(t.EvmOperationStatus.NEEDS_APPROVAL)):(this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,deploying:t.StepStatus.PENDING}}),this.updateStatus(t.EvmOperationStatus.READY))})}async approve(){return this.assertStatus(t.EvmOperationStatus.NEEDS_APPROVAL,"approve"),this.act(async()=>{if(!this._account||!this._chainId||!this._amount)throw t.LombardError.missingParameter("account, chainId, or amount");const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=l.VAULTS[l.Vault.Veda],i=await S.getTokenInfo(m.Token.LBTC,this._chainId,this.ctx.env);if(!i)throw t.LombardError.invalidParameter("token","Could not get LBTC token info");const h=new I(this._amount),u=L.toBigInt(S.toBaseDenomination(h,i.decimals)),d=S.makePublicClient({chainId:this._chainId}),o=m.makeWalletClient({provider:e,chainId:this._chainId}),{request:A}=await d.simulateContract({account:this._account,chain:m.CHAIN_ID_TO_VIEM_CHAIN_MAP[this._chainId],address:i.address,abi:i.abi,functionName:"approve",args:[s.vaultContract.address,u]}),E=await o.writeContract(A);await v.waitForTransactionReceipt(d,E,"LBTC vault deposit approval"),this._needsApproval=!1,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,deploying:t.StepStatus.PENDING}})},t.EvmOperationStatus.READY)}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");if(!this._account||!this._chainId)throw t.LombardError.missingParameter("account or chainId");const s=(this._protocol==="veda",l.Vault.Veda);this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,deploying:t.StepStatus.PENDING}});const i=await T.deposit({amount:this._amount,approve:!1,token:m.Token.LBTC,vaultKey:s,account:this._account,chainId:this._chainId,provider:e,env:this.ctx.env});return this._txHash=i,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{approval:t.StepStatus.COMPLETE,deploying:t.StepStatus.COMPLETE}}),this.emitCompleted(),{txHash:i}},t.EvmOperationStatus.COMPLETED)}get prepareSchema(){return t.objectType({amount:t.evmAmountSchema,protocol:t.stringType().min(1,"Protocol is required")})}validateProtocol(e){if(!M.routes.some(i=>i.protocols.includes(e)&&i.envs.includes(this.ctx.env)))throw t.LombardError.invalidParameter("protocol",`Protocol ${e} is not supported in ${this.ctx.env} environment`)}}function V(r,a){return new H(r,a)}const F=t.getEvmAssetChains(p.AssetId.BTCb,[n.r.prod]),q=t.getEvmAssetChains(p.AssetId.BTCb,[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]),Y=t.getEvmAssetChains(p.AssetId.LBTC,[n.r.prod]),G=t.getEvmAssetChains(p.AssetId.LBTC,[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]),U={routes:[{assetsIn:[p.AssetId.BTCb],assetOut:p.AssetId.LBTC,sourceChains:F,destChains:Y,envs:[n.r.prod]},{assetsIn:[p.AssetId.BTCb],assetOut:p.AssetId.LBTC,sourceChains:q,destChains:G,envs:[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]}],addressSchema:t.evmAddressSchema};var C=(r=>(r.IDLE="idle",r.NEEDS_APPROVAL="needs-approval",r.READY="ready",r.BRIDGING="bridging",r.COMPLETED="completed",r))(C||{});class z extends t.BaseAction{constructor(e,s){super(C.IDLE);c(this,"_amount");c(this,"_recipient");c(this,"_needsApproval",!1);c(this,"_txHash");c(this,"_claimData");this.ctx=e,this.params=s}get amount(){return this._amount}get recipient(){return this._recipient}get needsApproval(){return this._needsApproval}get txHash(){return this._txHash}setClaimData(e,s){this._claimData={data:e,proofSignature:s}}async prepare(e){return this.assertStatus(C.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e,{destChain:this.params.destChain});this._amount=s.amount,this._recipient=s.recipient,this._needsApproval=!1,this.emitProgress({status:C.READY,steps:{approval:t.StepStatus.COMPLETE,execution:t.StepStatus.IDLE,bridging:t.StepStatus.IDLE}})},C.READY)}async approve(){return this.assertStatus(C.NEEDS_APPROVAL,"approve"),this.act(async()=>{this._needsApproval=!1},C.READY)}async execute(){if(this.assertStatus(C.READY,"execute"),!this._claimData)throw t.LombardError.missingParameter("claimData");return this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=t.parseChainIdentifier(this.params.destChain);this.emitProgress({status:C.READY,steps:{approval:t.StepStatus.COMPLETE,execution:t.StepStatus.PENDING,bridging:t.StepStatus.IDLE}});const i=await v.claimLBTC({provider:e,account:this._recipient,data:this._claimData.data,proofSignature:this._claimData.proofSignature,chainId:s,env:this.ctx.env});return this._txHash=i,this.emitProgress({status:C.COMPLETED,steps:{approval:t.StepStatus.COMPLETE,execution:t.StepStatus.COMPLETE,bridging:t.StepStatus.IDLE}}),this.emitCompleted(),{txHash:i}},C.COMPLETED)}get prepareSchema(){return t.objectType({amount:t.evmAmountSchema,recipient:U.addressSchema})}}function W(r,a){return new z(r,a)}const $=t.getEvmAssetChains(p.AssetId.BTCb,[n.r.prod]),Z=t.getEvmAssetChains(p.AssetId.BTCb,[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]),j={routes:[{assetIn:p.AssetId.BTCb,assetOut:p.AssetId.BTC,sourceChains:$,destChain:t.Chain.BITCOIN_MAINNET,envs:[n.r.prod]},{assetIn:p.AssetId.BTCb,assetOut:p.AssetId.BTC,sourceChains:Z,destChain:t.Chain.BITCOIN_SIGNET,envs:[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]}],recipientSchema:t.bitcoinAddressSchema};async function P(r,a,e,s){if(!R.requiresAutoMintFee(r))return{requiresAuth:!1,hasValidSignature:!1,feeInSatoshis:null,feeFormatted:null,expirationDate:null};const i=await S.getTokenContractInfo(s,r,e),h=await w.getNetworkFeeSignature({address:a,chainId:r,env:e,tokenAddress:i.address}),u=h.expirationDate?new Date(Number(h.expirationDate)*1e3)<new Date:!1,d=h.hasSignature&&!u;let o=null,A=null;if(!d){const E=await v.getMintingFee({token:s,chainId:r,env:e});o=BigInt(E.times(1e8).toFixed(0)),A=E.toFixed(8)}return{requiresAuth:!0,hasValidSignature:d,feeInSatoshis:o,feeFormatted:A,expirationDate:h.expirationDate??null}}async function D(r){const{chainId:a,account:e,feeInSatoshis:s,provider:i,env:h,token:u}=r,d=await S.getTokenContractInfo(u,a,h),o=await v.signNetworkFee({fee:s,account:e,chainId:a,provider:i,env:h,token:u});return await w.storeNetworkFeeSignature({signature:o.signature,typedData:o.typedData,address:e,env:h,tokenAddress:d.address}),o}function O(){return{requiresAuth:!1,isAuthorized:!1,feeInSatoshis:null,feeFormatted:null,expirationDate:null}}class K extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_amount");c(this,"_recipient");c(this,"_needsApproval",!1);c(this,"_txHash");c(this,"_feeAuth",O());this.ctx=e,this.params=s}get amount(){return this._amount}get recipient(){return this._recipient}get needsApproval(){return this._needsApproval}get txHash(){return this._txHash}get feeAuth(){return this._feeAuth}async prepare(e){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e,{destChain:this.params.destChain});this._amount=s.amount,this._recipient=s.recipient;const i=t.parseChainIdentifier(this.params.sourceChain),h=await this.ctx.getProvider("evm");if(!h)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const d=(await h.request({method:"eth_accounts"}))[0],o=await P(i,d,this.ctx.env,m.Token.BTCb);if(this._feeAuth={requiresAuth:o.requiresAuth,isAuthorized:o.hasValidSignature,feeInSatoshis:o.feeInSatoshis,feeFormatted:o.feeFormatted,expirationDate:o.expirationDate},o.requiresAuth&&!o.hasValidSignature){this.updateStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION),this.emitProgress({status:t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}});return}this._needsApproval=!1,this.updateStatus(t.EvmOperationStatus.READY),this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}})})}async authorizeFee(){if(this.assertStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,"authorizeFee"),!this._feeAuth.feeInSatoshis)throw t.LombardError.missingParameter("feeInSatoshis");return this.act(async()=>{const e=t.parseChainIdentifier(this.params.sourceChain),s=await this.ctx.getProvider("evm");if(!s)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const h=(await s.request({method:"eth_accounts"}))[0];await D({chainId:e,account:h,feeInSatoshis:this._feeAuth.feeInSatoshis,provider:s,env:this.ctx.env,token:m.Token.BTCb}),this._feeAuth.isAuthorized=!0,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}})},t.EvmOperationStatus.READY)}async approve(){return this.assertStatus(t.EvmOperationStatus.NEEDS_APPROVAL,"approve"),this.act(async()=>{this._needsApproval=!1,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}})},t.EvmOperationStatus.READY)}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const i=(await e.request({method:"eth_accounts"}))[0];if(!i)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const h=t.parseChainIdentifier(this.params.sourceChain);this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.PENDING,releasing:t.StepStatus.IDLE}});const u=await v.redeemToken({provider:e,account:i,amount:this._amount,btcAddress:this._recipient,chainId:h,env:this.ctx.env,tokenIn:m.Token.BTCb,tokenOut:void 0});return this._txHash=u,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{burning:t.StepStatus.COMPLETE,releasing:t.StepStatus.PENDING}}),this.emitCompleted(),{txHash:u}},t.EvmOperationStatus.COMPLETED)}get prepareSchema(){return t.objectType({amount:t.evmAmountSchema,recipient:j.recipientSchema})}}function Q(r,a){return new K(r,a)}const J=[m.ChainId.avalanche,m.ChainId.avalancheFuji];function X(r){return J.includes(r)}class tt extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_amount");c(this,"_txHash");c(this,"_feeAuth",O());c(this,"_account");c(this,"_needsApproval",!1);c(this,"_spenderAddress");this.ctx=e,this.params=s}get amount(){return this._amount}get txHash(){return this._txHash}get feeAuth(){return this._feeAuth}get needsApproval(){return this._needsApproval}async prepare(e){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e);this._amount=s.amount;const i=await this.ctx.getProvider("evm");if(!i)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const u=(await i.request({method:"eth_accounts"}))[0];if(!u)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");this._account=u;const d=t.parseChainIdentifier(this.params.sourceChain);if(X(d)){const E=await S.getTokenContractInfo(m.Token.BTCb,d,this.ctx.env,m.AddressKind.Adapter);this._spenderAddress=E.address;const g=await v.getTokenAllowance({token:m.Token.BTCb,owner:u,spender:E.address,chainId:d,env:this.ctx.env}),_=new I(s.amount);if(this._needsApproval=g.isLessThan(_),this._needsApproval){this.emitProgress({status:t.EvmOperationStatus.NEEDS_APPROVAL,steps:{approval:t.StepStatus.PENDING,staking:t.StepStatus.IDLE}}),this.updateStatus(t.EvmOperationStatus.NEEDS_APPROVAL);return}}const o=await P(d,u,this.ctx.env,m.Token.LBTC);this._feeAuth={requiresAuth:o.requiresAuth,isAuthorized:o.hasValidSignature,feeInSatoshis:o.feeInSatoshis,feeFormatted:o.feeFormatted,expirationDate:o.expirationDate},o.requiresAuth&&!o.hasValidSignature?(this.emitProgress({status:t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,steps:{staking:t.StepStatus.IDLE}}),this.updateStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION)):(this.emitProgress({status:t.EvmOperationStatus.READY,steps:{staking:t.StepStatus.PENDING}}),this.updateStatus(t.EvmOperationStatus.READY))})}async approve(){return this.assertStatus(t.EvmOperationStatus.NEEDS_APPROVAL,"approve"),this.act(async()=>{if(!this._account||!this._spenderAddress||!this._amount)throw t.LombardError.missingParameter("account, spenderAddress, or amount");const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=t.parseChainIdentifier(this.params.sourceChain),i=await v.approveToken({account:this._account,token:m.Token.BTCb,spender:this._spenderAddress,amount:this._amount,chainId:s,provider:e,env:this.ctx.env}),h=S.makePublicClient({chainId:s,env:this.ctx.env});await v.waitForTransactionReceipt(h,i,"BTC.b approval"),this._needsApproval=!1,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,staking:t.StepStatus.PENDING}})},t.EvmOperationStatus.READY)}async authorizeFee(){return this.assertStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,"authorizeFee"),this.act(async()=>{if(!this._feeAuth.feeInSatoshis)throw t.LombardError.missingParameter("feeInSatoshis");const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=t.parseChainIdentifier(this.params.sourceChain);await D({chainId:s,account:this._account,feeInSatoshis:this._feeAuth.feeInSatoshis,provider:e,env:this.ctx.env,token:m.Token.LBTC}),this._feeAuth={...this._feeAuth,isAuthorized:!0},this.emitProgress({status:t.EvmOperationStatus.READY,steps:{staking:t.StepStatus.PENDING}})},t.EvmOperationStatus.READY)}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=t.parseChainIdentifier(this.params.sourceChain),h=(await e.request({method:"eth_accounts"}))[0];if(!h)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");this.emitProgress({status:t.EvmOperationStatus.READY,steps:{staking:t.StepStatus.PENDING}});const u=await v.depositToken({amount:this._amount,tokenIn:m.Token.BTCb,tokenOut:m.Token.LBTC,account:h,chainId:s,provider:e,env:this.ctx.env});return this._txHash=u,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{staking:t.StepStatus.COMPLETE}}),this.emitCompleted(),{txHash:u}},t.EvmOperationStatus.COMPLETED)}get prepareSchema(){return t.objectType({amount:t.evmAmountSchema})}}function et(r,a){return new tt(r,a)}const st=t.getEvmAssetChains(p.AssetId.LBTC,[n.r.prod]),at=t.getEvmAssetChains(p.AssetId.LBTC,[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]),rt=t.getEvmChainsWithAllAssets([p.AssetId.LBTC,p.AssetId.BTCb],[n.r.prod]),it=t.getEvmChainsWithAllAssets([p.AssetId.LBTC,p.AssetId.BTCb],[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]),nt={routes:[{sourceChains:st,destChain:t.Chain.BITCOIN_MAINNET,envs:[n.r.prod]},{sourceChains:at,destChain:t.Chain.BITCOIN_SIGNET,envs:[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]}],recipientSchema:t.bitcoinAddressSchema},ot={routes:[...rt.map(r=>({sourceChains:[r],destChain:r,envs:[n.r.prod]})),...it.map(r=>({sourceChains:[r],destChain:r,envs:[n.r.testnet,n.r.stage,n.r.dev,n.r.ibc]}))],recipientSchema:t.evmAddressSchema};class ct extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_amount");c(this,"_recipient");c(this,"_txHash");c(this,"_feeAuth",O());this.ctx=e,this.params=s}get amount(){return this._amount}get recipient(){return this._recipient}get txHash(){return this._txHash}get feeAuth(){return this._feeAuth}get isBtcbOutput(){return this.params.assetOut===p.AssetId.BTCb}async prepare(e){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e,{destChain:this.params.destChain});this._amount=s.amount,this._recipient=s.recipient;const i=t.parseChainIdentifier(this.params.sourceChain);if(this.isBtcbOutput){const h=await this.ctx.getProvider("evm");if(!h)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const d=(await h.request({method:"eth_accounts"}))[0],o=await P(i,d,this.ctx.env,m.Token.BTCb);if(this._feeAuth={requiresAuth:o.requiresAuth,isAuthorized:o.hasValidSignature,feeInSatoshis:o.feeInSatoshis,feeFormatted:o.feeFormatted,expirationDate:o.expirationDate},o.requiresAuth&&!o.hasValidSignature){this.updateStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION),this.emitProgress({status:t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}});return}}this.updateStatus(t.EvmOperationStatus.READY),this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}})})}async authorizeFee(){if(this.assertStatus(t.EvmOperationStatus.NEEDS_FEE_AUTHORIZATION,"authorizeFee"),!this._feeAuth.feeInSatoshis)throw t.LombardError.missingParameter("feeInSatoshis");return this.act(async()=>{const e=t.parseChainIdentifier(this.params.sourceChain),s=await this.ctx.getProvider("evm");if(!s)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const h=(await s.request({method:"eth_accounts"}))[0];await D({chainId:e,account:h,feeInSatoshis:this._feeAuth.feeInSatoshis,provider:s,env:this.ctx.env,token:m.Token.BTCb}),this._feeAuth.isAuthorized=!0,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.IDLE,releasing:t.StepStatus.IDLE}})},t.EvmOperationStatus.READY)}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const i=(await e.request({method:"eth_accounts"}))[0];if(!i)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const h=t.parseChainIdentifier(this.params.sourceChain),u=this.params.assetOut===p.AssetId.BTCb;this.emitProgress({status:t.EvmOperationStatus.READY,steps:{burning:t.StepStatus.PENDING,releasing:t.StepStatus.IDLE}});const d=await v.redeemToken({provider:e,account:u?this._recipient:i,amount:this._amount,btcAddress:u?void 0:this._recipient,chainId:h,env:this.ctx.env,tokenIn:m.Token.LBTC,tokenOut:u?m.Token.BTCb:void 0});return this._txHash=d,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{burning:t.StepStatus.COMPLETE,releasing:u?t.StepStatus.COMPLETE:t.StepStatus.PENDING}}),this.emitCompleted(),{txHash:d}},t.EvmOperationStatus.COMPLETED)}get prepareSchema(){const e=this.params.assetOut===p.AssetId.BTC?nt:ot;return t.objectType({amount:t.evmAmountSchema,recipient:e.recipientSchema})}}function ut(r,a){return new ct(r,a)}const x={routes:[{sourceChains:[t.Chain.ETHEREUM,t.Chain.BASE,t.Chain.BSC,t.Chain.CORN],protocols:[p.DefiProtocol.Veda],envs:[n.r.prod]}]};class ht extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_txHash");c(this,"_account");c(this,"_chainId");this.ctx=e,this.params=s}get txHash(){return this._txHash}async prepare(){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{this.validateProtocol(this.params.protocol);const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.chain,"evm");const i=(await e.request({method:"eth_accounts"}))[0];if(!i)throw t.LombardError.providerMissing(this.params.chain,"evm");if(this._account=i,this._chainId=t.parseChainIdentifier(this.params.chain),!l.isVedaVaultChain(this._chainId))throw new t.LombardError(t.WithdrawErrorCode.PROTOCOL_NOT_SUPPORTED,`Chain ${this.params.chain} does not support Veda vault withdrawals`,{chain:this.params.chain,protocol:this.params.protocol});this.emitProgress({status:t.EvmOperationStatus.READY,steps:{cancelling:t.StepStatus.PENDING}}),this.updateStatus(t.EvmOperationStatus.READY)})}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.chain,"evm");if(!this._account||!this._chainId)throw t.LombardError.missingParameter("account or chainId");this.emitProgress({status:t.EvmOperationStatus.READY,steps:{cancelling:t.StepStatus.PENDING}});const s=await T.cancelWithdraw({vaultKey:l.Vault.Veda,account:this._account,chainId:this._chainId,provider:e,env:this.ctx.env});return this._txHash=s,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{cancelling:t.StepStatus.COMPLETE}}),this.emitCompleted(),{txHash:s}},t.EvmOperationStatus.COMPLETED)}validateProtocol(e){if(!x.routes.some(i=>i.protocols.includes(e)&&i.envs.includes(this.ctx.env)))throw t.LombardError.invalidParameter("protocol",`Protocol ${e} is not supported for withdrawals in ${this.ctx.env} environment`)}}class pt extends t.BaseAction{constructor(e,s){super(t.EvmOperationStatus.IDLE);c(this,"_amount");c(this,"_protocol");c(this,"_needsApproval",!1);c(this,"_txHash");c(this,"_account");c(this,"_chainId");this.ctx=e,this.params=s}get amount(){return this._amount}get protocol(){return this._protocol}get needsApproval(){return this._needsApproval}get txHash(){return this._txHash}async prepare(e){return this.assertStatus(t.EvmOperationStatus.IDLE,"prepare"),this.act(async()=>{const s=t.validatePrepareParams(this.prepareSchema,e);this._amount=s.amount,this._protocol=this.params.protocol,this.validateProtocol(this.params.protocol);const i=await this.ctx.getProvider("evm");if(!i)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const u=(await i.request({method:"eth_accounts"}))[0];if(!u)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");if(this._account=u,this._chainId=t.parseChainIdentifier(this.params.sourceChain),!l.isVedaVaultChain(this._chainId))throw new t.LombardError(t.WithdrawErrorCode.PROTOCOL_NOT_SUPPORTED,`Chain ${this.params.sourceChain} does not support Veda vault withdrawals`,{chain:this.params.sourceChain,protocol:this._protocol});const d=l.VAULTS[l.Vault.Veda],o=S.makePublicClient({chainId:this._chainId}),A=await o.readContract({address:d.lensContract.address,abi:d.lensContract.abi,functionName:"balanceOf",args:[u,d.vaultContract.address]}),E=S.fromBaseDenomination(String(A),d.decimals),g=new I(s.amount);if(g.isGreaterThan(E))throw new t.LombardError(t.WithdrawErrorCode.INSUFFICIENT_SHARES,`Insufficient vault shares. Requested: ${g.toFixed()}, Available: ${E.toFixed()}`,{requested:g.toFixed(),available:E.toFixed()});const _=await o.readContract({address:d.vaultContract.address,abi:d.vaultContract.abi,functionName:"allowance",args:[u,d.withdrawQueueContracts[this._chainId].address]}),f=S.fromBaseDenomination(String(_),d.decimals);this._needsApproval=g.isGreaterThan(f),this._needsApproval?(this.emitProgress({status:t.EvmOperationStatus.NEEDS_APPROVAL,steps:{approval:t.StepStatus.PENDING,queueing:t.StepStatus.IDLE}}),this.updateStatus(t.EvmOperationStatus.NEEDS_APPROVAL)):(this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,queueing:t.StepStatus.PENDING}}),this.updateStatus(t.EvmOperationStatus.READY))})}async approve(){return this.assertStatus(t.EvmOperationStatus.NEEDS_APPROVAL,"approve"),this.act(async()=>{if(!this._account||!this._chainId||!this._amount)throw t.LombardError.missingParameter("account, chainId, or amount");const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");const s=l.VAULTS[l.Vault.Veda],i=new I(this._amount),h=L.toBigInt(S.toBaseDenomination(i,s.decimals)),u=S.makePublicClient({chainId:this._chainId}),d=m.makeWalletClient({provider:e,chainId:this._chainId}),o=this._chainId,{request:A}=await u.simulateContract({account:this._account,chain:m.CHAIN_ID_TO_VIEM_CHAIN_MAP[this._chainId],address:s.vaultContract.address,abi:s.vaultContract.abi,functionName:"approve",args:[s.withdrawQueueContracts[o].address,h]}),E=await d.writeContract(A);await v.waitForTransactionReceipt(u,E,"vault share approval"),this._needsApproval=!1,this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,queueing:t.StepStatus.PENDING}})},t.EvmOperationStatus.READY)}async execute(){return this.assertStatus(t.EvmOperationStatus.READY,"execute"),this.act(async()=>{const e=await this.ctx.getProvider("evm");if(!e)throw t.LombardError.providerMissing(this.params.sourceChain,"evm");if(!this._account||!this._chainId||!this._amount)throw t.LombardError.missingParameter("account, chainId, or amount");this.emitProgress({status:t.EvmOperationStatus.READY,steps:{approval:t.StepStatus.COMPLETE,queueing:t.StepStatus.PENDING}});const s=await T.queueWithdraw({amount:this._amount,approve:!1,vaultKey:l.Vault.Veda,account:this._account,chainId:this._chainId,provider:e,env:this.ctx.env});return this._txHash=s,this.emitProgress({status:t.EvmOperationStatus.COMPLETED,steps:{approval:t.StepStatus.COMPLETE,queueing:t.StepStatus.COMPLETE}}),this.emitCompleted(),{txHash:s}},t.EvmOperationStatus.COMPLETED)}get prepareSchema(){return t.objectType({amount:t.evmAmountSchema})}validateProtocol(e){if(!x.routes.some(i=>i.protocols.includes(e)&&i.envs.includes(this.ctx.env)))throw t.LombardError.invalidParameter("protocol",`Protocol ${e} is not supported for withdrawals in ${this.ctx.env} environment`)}}function dt(r,a){return new pt(r,a)}function mt(r,a){return new ht(r,a)}class b{constructor(a){c(this,"ctx");this.ctx=t.createEvmCoreContext(a)}stake(a){return et(this.ctx,a)}unstake(a){return ut(this.ctx,a)}deposit(a){return W(this.ctx,a)}deploy(a){return V(this.ctx,a)}withdraw(a){return dt(this.ctx,a)}cancelWithdraw(a){return mt(this.ctx,a)}redeem(a){return Q(this.ctx,a)}}function vt(r){return new b(r)}exports.EvmActions=b;exports.EvmDepositStatus=C;exports.evmActions=vt;exports.evmModule=y;
2
+ //# sourceMappingURL=EvmActions-BY_18gTg.cjs.map