@lombard.finance/sdk 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +164 -162
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/sdk/storeStakeAndBakeSignature/storeStakeAndBakeSignature.stories.tsx +79 -37
- package/src/web3Sdk/signStakeAndBake/contracts.ts +13 -0
- package/src/web3Sdk/signStakeAndBake/getTypedData.ts +6 -10
- package/src/web3Sdk/signStakeAndBake/signStakeAndBake.stories.tsx +77 -23
- package/src/web3Sdk/signStakeAndBake/signStakeAndBake.ts +16 -12
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var ne=Object.defineProperty;var ae=(e,t,n)=>t in e?ne(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var S=(e,t,n)=>(ae(e,typeof t!="symbol"?t+"":t,n),n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("axios"),v=require("bignumber.js"),b=require("web3"),T={prod:"prod",testnet:"testnet",stage:"stage"},s={ethereum:1,holesky:17e3,binanceSmartChain:56,binanceSmartChainTestnet:97,sepolia:11155111,base:8453,baseTestnet:84532,berachainBartioTestnet:80084,corn:21e6,swell:1923},H=e=>e===T.prod?s.ethereum:s.holesky,W=e=>e===T.prod?s.binanceSmartChain:s.binanceSmartChainTestnet,$=e=>e===T.prod?s.base:s.baseTestnet,P=T.prod,u="0x0000000000000000000000000000000000000000",se={baseApiUrl:"https://staging.prod.lombard.finance"},ie={baseApiUrl:"https://gastald-testnet.prod.lombard.finance"},re={baseApiUrl:"https://mainnet.prod.lombard.finance"},h=(e=P)=>{switch(e){case T.prod:return re;case T.testnet:return ie;default:return se}};function C(e){return typeof e=="string"?e:(n=>{var a;return((a=n==null?void 0:n.data)==null?void 0:a.message)&&typeof n.data.message=="string"})(e)?e.data.message:e instanceof Error?oe(e):pe(e)}function oe(e){return e.response?e.response.data.message:e.message}function pe(e){return e!=null&&e.message?e.message:"Unknown error"}const A={eth:"DESTINATION_BLOCKCHAIN_ETHEREUM",base:"DESTINATION_BLOCKCHAIN_BASE",bsc:"DESTINATION_BLOCKCHAIN_BSC",mantle:"DESTINATION_BLOCKCHAIN_MANTLE",linea:"DESTINATION_BLOCKCHAIN_LINEA",zcircuit:"DESTINATION_BLOCKCHAIN_ZIRCUIT",scroll:"DESTINATION_BLOCKCHAIN_SCROLL",xlayer:"DESTINATION_BLOCKCHAIN_XLAYER"};function x(e){switch(e){case s.ethereum:case s.holesky:case s.sepolia:return A.eth;case s.base:case s.baseTestnet:return A.base;case s.binanceSmartChain:case s.binanceSmartChainTestnet:return A.bsc;default:throw new Error(`Unknown chain ID: ${e}`)}}const V="sanctioned_address",ue="api/v1/address/generate",ye="destination address is under sanctions";async function de({address:e,chainId:t,signature:n,eip712Data:a,env:i,referrerCode:r,partnerId:o,captchaToken:p}){const{baseApiUrl:d}=h(i),m=x(t),l={to_address:e,to_address_signature:n,to_chain:m,partner_id:o,nonce:0,captcha:p,referrer_code:r,eip_712_data:a};try{const{data:y}=await w.post(ue,l,{baseURL:d});return y.address}catch(y){const f=C(y);if(le(f))return V;throw new Error(f)}}function le(e){return!!e.includes(ye)}const ce="api/v1/address";async function me({address:e,chainId:t,env:n,partnerId:a}){const i=await Z({address:e,chainId:t,env:n,partnerId:a}),r=be(i);if(!r)throw new Error("No address");return r.btc_address}function be(e){if(!e.length)return;const t=e.reduce((n,a)=>n.created_at<a.created_at?a:n,e[0]);return t.deprecated?void 0:t}async function Z({address:e,chainId:t,env:n,partnerId:a}){const{baseApiUrl:i}=h(n),r=x(t),o={to_address:e,to_blockchain:r,limit:1,offset:0,asc:!1,referralId:a},{data:p}=await w.get(ce,{baseURL:i,params:o});return(p==null?void 0:p.addresses)||[]}const Te=8,M=10**Te;function N(e){return+e/M}function fe(e){return Math.floor(+e*M)}function K(e,t=P){switch(e){case A.eth:return H(t);case A.base:return $(t);case A.bsc:return W(t);default:return s.ethereum}}var q=(e=>(e.NOTARIZATION_STATUS_UNSPECIFIED="NOTARIZATION_STATUS_UNSPECIFIED",e.NOTARIZATION_STATUS_PENDING="NOTARIZATION_STATUS_PENDING",e.NOTARIZATION_STATUS_SUBMITTED="NOTARIZATION_STATUS_SUBMITTED",e.NOTARIZATION_STATUS_SESSION_APPROVED="NOTARIZATION_STATUS_SESSION_APPROVED",e.NOTARIZATION_STATUS_FAILED="NOTARIZATION_STATUS_FAILED",e))(q||{}),z=(e=>(e.SESSION_STATE_UNSPECIFIED="SESSION_STATE_UNSPECIFIED",e.SESSION_STATE_PENDING="SESSION_STATE_PENDING",e.SESSION_STATE_COMPLETED="SESSION_STATE_COMPLETED",e.SESSION_STATE_EXPIRED="SESSION_STATE_EXPIRED",e))(z||{});async function ge({address:e,env:t}){const{baseApiUrl:n}=h(t),{data:a}=await w.get(`api/v1/address/outputs-v2/${e}`,{baseURL:n});return((a==null?void 0:a.outputs)??[]).map(he(t))}function he(e){return t=>({txid:t.txid,index:t.index??0,blockHeight:t.block_height?Number(t.block_height):void 0,blockTime:t.block_time?Number(t.block_time):void 0,value:new v(N(t.value)),address:t.address,chainId:K(t.to_chain,e),claimedTxId:t.claim_tx,rawPayload:t.raw_payload,signature:t.proof,isRestricted:!!t.sanctioned,notarizationWaitDur:t.notarization_wait_dur?Number(t.notarization_wait_dur):void 0,payload:t.payload_hash,sessionId:t.session_id,notarizationStatus:t.notarization_status,sessionState:t.session_state})}const we=2e-4;async function Se({env:e,chainId:t=s.ethereum,amount:n=1}){const{baseApiUrl:a}=h(e),i=x(t),{data:r}=await w.get(`api/v1/exchange/rate/${i}`,{baseURL:a,params:{amount:n}}),o=new v(we).multipliedBy(M).toFixed();return{exchangeRate:+r.amount_out,minAmount:+o}}async function Ae({address:e,chainId:t,env:n}){const{baseApiUrl:a}=h(n);try{const{data:i}=await w.get(`${a}/api/v1/claimer/get-user-signature`,{params:{user_destination_address:e,chain_id:t}});return{expirationDate:i==null?void 0:i.expiration_date,hasSignature:i==null?void 0:i.has_signature,isDelayed:i==null?void 0:i.is_delayed}}catch(i){const r=C(i);throw new Error(r)}}async function ve({signature:e,typedData:t,address:n,env:a}){const{baseApiUrl:i}=h(a);try{const{data:r}=await w.post(`${i}/api/v1/claimer/save-user-signature`,null,{params:{typed_data:t,signature:e,user_destination_address:n}});return r.status}catch(r){const o=C(r);throw new Error(o)}}async function Ce({signature:e,typedData:t,env:n}){const{baseApiUrl:a}=h(n);try{const{data:i}=await w.post(`${a}/api/v1/claimer/save-stake-and-bake-signature`,null,{params:{typed_data:t,signature:e}});return i.status}catch(i){const r=C(i);throw new Error(r)}}const D={[s.ethereum]:"https://rpc.ankr.com/eth",[s.holesky]:"https://rpc.ankr.com/eth_holesky",[s.sepolia]:"https://rpc.ankr.com/eth_sepolia",[s.base]:"https://rpc.ankr.com/base",[s.baseTestnet]:"https://rpc.ankr.com/base_sepolia",[s.binanceSmartChain]:"https://rpc.ankr.com/bsc",[s.binanceSmartChainTestnet]:"https://rpc.ankr.com/bsc_testnet_chapel"};async function Ee(e){const n=await(await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_maxPriorityFeePerGas",params:[]})})).json(),a=b.utils.hexToNumber(n==null?void 0:n.result);return new v(Number(a))}const _e=2,Ie=25e3;class O{constructor({chainId:t,rpcUrlConfig:n}){S(this,"chainId");S(this,"rpcConfig");this.chainId=t,this.rpcConfig={...D,...n}}getReadWeb3(){const t=this.getRpcUrl(),n=new b.Web3,a=new b.Web3.providers.HttpProvider(t);return n.setProvider(a),n}getRpcUrl(){var a;const{chainId:t}=this,n=(a=this.rpcConfig)==null?void 0:a[t];if(!n)throw console.error(`You might need to add the rpcConfig for the ${t} chain ID when creating the provider.`),new Error(`RPC URL for chainId ${t} not found`);return n}async getMaxFees(){const t=this.getReadWeb3(),n=this.getRpcUrl(),[a,i]=await Promise.all([t.eth.getBlock("latest"),Ee(n)]);return!(a!=null&&a.baseFeePerGas)&&typeof(a==null?void 0:a.baseFeePerGas)!="bigint"?{}:{maxFeePerGas:+new v(a.baseFeePerGas.toString(10)).multipliedBy(_e).plus(i),maxPriorityFeePerGas:+i}}async getSafeGasPriceWei(){const t=await this.getReadWeb3().eth.getGasPrice();return new v(t.toString(10)).plus(Ie)}createContract(t,n){const a=this.getReadWeb3();return new a.eth.Contract(t,n)}}const Ne=[s.ethereum,s.base,s.binanceSmartChain],j=e=>Ne.includes(e)?T.prod:T.stage;function R(e){return Object.values(s).includes(e)}const De={[s.holesky]:"0xED7bfd5C1790576105Af4649817f6d35A75CD818",[s.ethereum]:u,[s.binanceSmartChainTestnet]:"0x731eFa688F3679688cf60A3993b8658138953ED6",[s.binanceSmartChain]:u,[s.sepolia]:"0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30",[s.base]:u,[s.baseTestnet]:u,[s.berachainBartioTestnet]:"0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30",[s.corn]:u,[s.swell]:u},xe={[s.holesky]:"0x38A13AB20D15ffbE5A7312d2336EF1552580a4E2",[s.ethereum]:u,[s.binanceSmartChainTestnet]:"0x107Fc7d90484534704dD2A9e24c7BD45DB4dD1B5",[s.binanceSmartChain]:u,[s.sepolia]:"0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30",[s.base]:u,[s.baseTestnet]:u,[s.berachainBartioTestnet]:"0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30",[s.corn]:u,[s.swell]:u},Me={[s.ethereum]:"0x8236a87084f8b84306f72007f36f2618a5634494",[s.holesky]:u,[s.sepolia]:u,[s.binanceSmartChainTestnet]:u,[s.binanceSmartChain]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.base]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.baseTestnet]:u,[s.berachainBartioTestnet]:u,[s.corn]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.swell]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1"};function J(e=P){switch(e){case T.prod:return Me;case T.testnet:return xe;default:return De}}const Pe=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],Oe=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint256",name:"dustLimit",type:"uint256"}],name:"AmountBelowDustLimit",type:"error"},{inputs:[{internalType:"uint256",name:"fee",type:"uint256"}],name:"AmountLessThanCommission",type:"error"},{inputs:[],name:"ECDSAInvalidSignature",type:"error"},{inputs:[{internalType:"uint256",name:"length",type:"uint256"}],name:"ECDSAInvalidSignatureLength",type:"error"},{inputs:[{internalType:"bytes32",name:"s",type:"bytes32"}],name:"ECDSAInvalidSignatureS",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"}],name:"ERC2612ExpiredSignature",type:"error"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"address",name:"owner",type:"address"}],name:"ERC2612InvalidSigner",type:"error"},{inputs:[],name:"EnforcedPause",type:"error"},{inputs:[],name:"ExpectedPause",type:"error"},{inputs:[],name:"FeeGreaterThanAmount",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"currentNonce",type:"uint256"}],name:"InvalidAccountNonce",type:"error"},{inputs:[],name:"InvalidDustFeeRate",type:"error"},{inputs:[],name:"InvalidInitialization",type:"error"},{inputs:[],name:"InvalidInputLength",type:"error"},{inputs:[],name:"InvalidUserSignature",type:"error"},{inputs:[],name:"KnownDestination",type:"error"},{inputs:[],name:"NotInitializing",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"OwnableInvalidOwner",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"OwnableUnauthorizedAccount",type:"error"},{inputs:[],name:"PayloadAlreadyUsed",type:"error"},{inputs:[],name:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[],name:"ScriptPubkeyUnsupported",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"UnauthorizedAccount",type:"error"},{inputs:[{internalType:"bytes4",name:"action",type:"bytes4"}],name:"UnexpectedAction",type:"error"},{inputs:[],name:"UnknownDestination",type:"error"},{inputs:[{internalType:"uint256",name:"fromChainId",type:"uint256"},{internalType:"address",name:"fromContract",type:"address"}],name:"UnknownOriginContract",type:"error"},{inputs:[{internalType:"uint256",name:"expiry",type:"uint256"}],name:"UserSignatureExpired",type:"error"},{inputs:[],name:"WithdrawalsDisabled",type:"error"},{inputs:[],name:"WrongChainId",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{inputs:[],name:"ZeroAmount",type:"error"},{inputs:[],name:"ZeroChainId",type:"error"},{inputs:[],name:"ZeroContractHash",type:"error"},{inputs:[],name:"ZeroFee",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"BasculeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"BridgeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint64",name:"prevValue",type:"uint64"},{indexed:!0,internalType:"uint64",name:"newValue",type:"uint64"}],name:"BurnCommissionChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"claimer",type:"address"},{indexed:!1,internalType:"bool",name:"isClaimer",type:"bool"}],name:"ClaimerUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"ConsortiumChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"oldRate",type:"uint256"},{indexed:!0,internalType:"uint256",name:"newRate",type:"uint256"}],name:"DustFeeRateChanged",type:"event"},{anonymous:!1,inputs:[],name:"EIP712DomainChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"oldFee",type:"uint256"},{indexed:!0,internalType:"uint256",name:"newFee",type:"uint256"}],name:"FeeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"fee",type:"uint256"},{indexed:!1,internalType:"bytes",name:"userSignature",type:"bytes"}],name:"FeeCharged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"version",type:"uint64"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"bytes32",name:"payloadHash",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"payload",type:"bytes"}],name:"MintProofConsumed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"minter",type:"address"},{indexed:!1,internalType:"bool",name:"isMinter",type:"bool"}],name:"MinterUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"string",name:"name",type:"string"},{indexed:!1,internalType:"string",name:"symbol",type:"string"}],name:"NameAndSymbolChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousPauser",type:"address"},{indexed:!0,internalType:"address",name:"newPauser",type:"address"}],name:"PauserRoleTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevValue",type:"address"},{indexed:!0,internalType:"address",name:"newValue",type:"address"}],name:"TreasuryAddressChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"fromAddress",type:"address"},{indexed:!1,internalType:"bytes",name:"scriptPubKey",type:"bytes"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"UnstakeRequest",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"",type:"bool"}],name:"WithdrawalsEnabled",type:"event"},{inputs:[],name:"Bascule",outputs:[{internalType:"contract IBascule",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"acceptOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newClaimer",type:"address"}],name:"addClaimer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newMinter",type:"address"}],name:"addMinter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"to",type:"address[]"},{internalType:"uint256[]",name:"amount",type:"uint256[]"}],name:"batchMint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes[]",name:"payload",type:"bytes[]"},{internalType:"bytes[]",name:"proof",type:"bytes[]"}],name:"batchMint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes[]",name:"mintPayload",type:"bytes[]"},{internalType:"bytes[]",name:"proof",type:"bytes[]"},{internalType:"bytes[]",name:"feePayload",type:"bytes[]"},{internalType:"bytes[]",name:"userSignature",type:"bytes[]"}],name:"batchMintWithFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"scriptPubkey",type:"bytes"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"calcUnstakeRequestAmount",outputs:[{internalType:"uint256",name:"amountAfterFee",type:"uint256"},{internalType:"bool",name:"isAboveDust",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newVal",type:"address"}],name:"changeBascule",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newBridge",type:"address"}],name:"changeBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint64",name:"newValue",type:"uint64"}],name:"changeBurnCommission",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newVal",type:"address"}],name:"changeConsortium",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newRate",type:"uint256"}],name:"changeDustFeeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],name:"changeNameAndSymbol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newValue",type:"address"}],name:"changeTreasuryAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"consortium",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"eip712Domain",outputs:[{internalType:"bytes1",name:"fields",type:"bytes1"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"version",type:"string"},{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"address",name:"verifyingContract",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"uint256[]",name:"extensions",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBurnCommission",outputs:[{internalType:"uint64",name:"",type:"uint64"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDustFeeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMintFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTreasury",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"consortium_",type:"address"},{internalType:"uint64",name:"burnCommission_",type:"uint64"},{internalType:"address",name:"owner_",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"claimer",type:"address"}],name:"isClaimer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"}],name:"isMinter",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"mint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"payload",type:"bytes"},{internalType:"bytes",name:"proof",type:"bytes"}],name:"mint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"mintPayload",type:"bytes"},{internalType:"bytes",name:"proof",type:"bytes"},{internalType:"bytes",name:"feePayload",type:"bytes"},{internalType:"bytes",name:"userSignature",type:"bytes"}],name:"mintWithFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"pauser",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"scriptPubkey",type:"bytes"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"redeem",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reinitialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"oldClaimer",type:"address"}],name:"removeClaimer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"oldMinter",type:"address"}],name:"removeMinter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"fee",type:"uint256"}],name:"setMintFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"toggleWithdrawals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newPauser",type:"address"}],name:"transferPauserRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"fromChain",type:"uint256"},{internalType:"address",name:"fromContract",type:"address"},{internalType:"uint256",name:"toChain",type:"uint256"},{internalType:"address",name:"toContract",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint64",name:"amount",type:"uint64"},{internalType:"bytes32",name:"uniqueActionData",type:"bytes32"}],internalType:"struct Actions.DepositBridgeAction",name:"action",type:"tuple"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"bytes",name:"",type:"bytes"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}];function Re(e){switch(e){case"LBTC":return Oe;default:return Pe}}function B(e,t){const n=J(t),{chainId:a}=e;if(!R(a))throw new Error(`This chain ${a} is not supported`);const i=n[a];if(!i)throw new Error(`Token address for chain ${a} is not defined`);const r=Re("LBTC"),o=e.createContract(r,i);return o.options.address||(o.options.address=i),o}function X(e,t){if(!R(e))throw new Error(`This chain ${e} is not supported`);const n=t?{[e]:t}:D;if(!n[e])throw new Error(`RPC URL for chainId ${e} not found`);return n}async function Be({chainId:e,bakeGasEstimate:t=0,rpcUrl:n}){const a=X(e,n),i=new O({chainId:e,rpcUrlConfig:a}),r=j(e),p=await B(i,r).methods.getMintFee().call(),d=new v(N(p.toString(10)));return t?d.plus(N(t)):d}class F extends O{constructor({provider:n,account:a,chainId:i,rpcUrlConfig:r}){super({chainId:i,rpcUrlConfig:r});S(this,"web3");S(this,"account");S(this,"rpcConfig",D);this.web3=new b(n),this.account=a,this.chainId=i,this.rpcConfig={...D,...r}}async signMessage(n){const{account:a}=this,i=`0x${Buffer.from(n,"utf8").toString("hex")}`;return this.web3.currentProvider.request({method:"personal_sign",params:[i,a]})}async sendTransactionAsync(n,a,i){const{chainId:r,web3:o}=this,p=this.getReadWeb3(),{data:d,estimate:m=!1,estimateFee:l=!1,extendedGasLimit:y,gasLimit:f="0",value:E="0",gasLimitMultiplier:te=1}=i;let{nonce:_}=i;_||(_=await p.eth.getTransactionCount(n)),console.log(`Nonce: ${_}`);const c={from:n,to:a,value:b.utils.numberToHex(E),data:d,nonce:_,chainId:b.utils.numberToHex(r)};if(m)try{const g=await p.eth.estimateGas(c),I=Math.round(Number(g)*te);y?c.gas=b.utils.numberToHex(I+y):c.gas=b.utils.numberToHex(I)}catch(g){throw new Error(g.message??"Failed to estimate gas limit for transaction.")}else c.gas=b.utils.numberToHex(f);const{maxFeePerGas:k,maxPriorityFeePerGas:U}=l?await this.getMaxFees().catch(()=>i):i;if(U!==void 0&&(c.maxPriorityFeePerGas=b.utils.numberToHex(U)),k!==void 0&&(c.maxFeePerGas=b.utils.numberToHex(k)),!c.maxFeePerGas&&!c.maxPriorityFeePerGas){const g=await this.getSafeGasPriceWei();c.gasPrice=g.toString(10)}if(!c.maxFeePerGas&&!c.maxPriorityFeePerGas){const g=await this.getSafeGasPriceWei();c.gasPrice=g.toString(10)}return console.log("Sending transaction via Web3: ",c),new Promise((g,I)=>{const L=o.eth.sendTransaction(c);L.once("transactionHash",async G=>{console.log(`Just signed transaction has is: ${G}`),g({receiptPromise:L,transactionHash:G})}).catch(I)})}createContract(n,a){return new this.web3.eth.Contract(n,a)}}async function Fe(e){const t=new F(e),n=`destination chain id is ${e.chainId}`;return t.signMessage(n)}const ke=24*60*60;function Ue({chainId:e,verifyingContract:t,fee:n,expiry:a}){return{domain:{name:"Lombard Staked Bitcoin",version:"1",chainId:e,verifyingContract:t},message:{chainId:e,fee:n,expiry:a},primaryType:"feeApproval",types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],feeApproval:[{name:"chainId",type:"uint256"},{name:"fee",type:"uint256"},{name:"expiry",type:"uint256"}]}}}const Le="Failed to obtain a valid signature. The response is undefined or invalid.",Ge=()=>Math.floor(Date.now()/1e3+ke);async function He({address:e,provider:t,fee:n,chainId:a,env:i,expiry:r=Ge()}){var y,f;const o=new F({provider:t,account:e,chainId:a}),d=B(o,i).options.address,m=JSON.stringify(Ue({chainId:a,verifyingContract:d,fee:n,expiry:r})),l=await((f=(y=o.web3)==null?void 0:y.currentProvider)==null?void 0:f.request({method:"eth_signTypedData_v4",params:[e,m]}));if(typeof l=="string")return{signature:l,typedData:m};if(!(l!=null&&l.result))throw new Error(Le);return{signature:l.result,typedData:m}}async function We({owner:e,rpcUrl:t,chainId:n}){const a=X(n,t),i=new O({chainId:n,rpcUrlConfig:a}),r=j(n),o=B(i,r);try{return(await o.methods.nonces(e).call()).toString()}catch(p){const d=C(p);throw new Error(d)}}async function Y({chainId:e,expiryDate:t,owner:n,spender:a,value:i,env:r,rpcUrl:o}){const d=J(r)[e],m=await We({owner:n,chainId:e,rpcUrl:o});return{domain:{name:"Lombard Staked Bitcoin",version:"1",chainId:e,verifyingContract:d},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},primaryType:"Permit",message:{owner:n,spender:a,value:i,nonce:m,deadline:t.toString()}}}const Q={[s.holesky]:"0x52BD640617eeD47A00dA0da93351092D49208d1d"},ee=e=>{const t=Q[e];if(!t)throw new Error(`No spender address configured for chain ID ${e}`);return t},$e="Failed to obtain a valid signature. The response is undefined or invalid.";async function Ve({address:e,provider:t,chainId:n,value:a,env:i,expiryDate:r,rpcUrl:o}){var f,E;const p=new F({provider:t,account:e,chainId:n}),d=ee(n),m=await Y({chainId:n,expiryDate:r,owner:e,spender:d,value:a,env:i,rpcUrl:o}),l=JSON.stringify(m),y=await((E=(f=p.web3)==null?void 0:f.currentProvider)==null?void 0:E.request({method:"eth_signTypedData_v4",params:[e,l]}));if(typeof y=="string")return{signature:y,typedData:l};if(!(y!=null&&y.result))throw new Error($e);return{signature:y.result,typedData:l}}exports.ENotarizationStatus=q;exports.ESessionState=z;exports.OChainId=s;exports.OEnv=T;exports.SANCTIONED_ADDRESS=V;exports.SATOSHI_SCALE=M;exports.STAKE_AND_BAKE_SPENDER_ADDRESSES=Q;exports.fromSatoshi=N;exports.generateDepositBtcAddress=de;exports.getApiConfig=h;exports.getBaseNetworkByEnv=$;exports.getBscNetworkByEnv=W;exports.getChainIdByName=K;exports.getChainNameById=x;exports.getDepositBtcAddress=me;exports.getDepositBtcAddresses=Z;exports.getDepositsByAddress=ge;exports.getEthNetworkByEnv=H;exports.getLBTCExchangeRate=Se;exports.getLBTCMintingFee=Be;exports.getNetworkFeeSignature=Ae;exports.getStakeAndBakeSpenderAddress=ee;exports.getStakeAndBakeTypedData=Y;exports.isValidChain=R;exports.signLbtcDestionationAddr=Fe;exports.signNetworkFee=He;exports.signStakeAndBake=Ve;exports.storeNetworkFeeSignature=ve;exports.storeStakeAndBakeSignature=Ce;exports.toSatoshi=fe;
|
|
1
|
+
"use strict";var ee=Object.defineProperty;var te=(e,t,n)=>t in e?ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var S=(e,t,n)=>(te(e,typeof t!="symbol"?t+"":t,n),n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("axios"),v=require("bignumber.js"),m=require("web3"),b={prod:"prod",testnet:"testnet",stage:"stage"},s={ethereum:1,holesky:17e3,binanceSmartChain:56,binanceSmartChainTestnet:97,sepolia:11155111,base:8453,baseTestnet:84532,berachainBartioTestnet:80084,corn:21e6,swell:1923},H=e=>e===b.prod?s.ethereum:s.holesky,W=e=>e===b.prod?s.binanceSmartChain:s.binanceSmartChainTestnet,$=e=>e===b.prod?s.base:s.baseTestnet,P=b.prod,u="0x0000000000000000000000000000000000000000",ne={baseApiUrl:"https://staging.prod.lombard.finance"},ae={baseApiUrl:"https://gastald-testnet.prod.lombard.finance"},se={baseApiUrl:"https://mainnet.prod.lombard.finance"},h=(e=P)=>{switch(e){case b.prod:return se;case b.testnet:return ae;default:return ne}};function C(e){return typeof e=="string"?e:(n=>{var a;return((a=n==null?void 0:n.data)==null?void 0:a.message)&&typeof n.data.message=="string"})(e)?e.data.message:e instanceof Error?ie(e):re(e)}function ie(e){return e.response?e.response.data.message:e.message}function re(e){return e!=null&&e.message?e.message:"Unknown error"}const A={eth:"DESTINATION_BLOCKCHAIN_ETHEREUM",base:"DESTINATION_BLOCKCHAIN_BASE",bsc:"DESTINATION_BLOCKCHAIN_BSC",mantle:"DESTINATION_BLOCKCHAIN_MANTLE",linea:"DESTINATION_BLOCKCHAIN_LINEA",zcircuit:"DESTINATION_BLOCKCHAIN_ZIRCUIT",scroll:"DESTINATION_BLOCKCHAIN_SCROLL",xlayer:"DESTINATION_BLOCKCHAIN_XLAYER"};function x(e){switch(e){case s.ethereum:case s.holesky:case s.sepolia:return A.eth;case s.base:case s.baseTestnet:return A.base;case s.binanceSmartChain:case s.binanceSmartChainTestnet:return A.bsc;default:throw new Error(`Unknown chain ID: ${e}`)}}const V="sanctioned_address",oe="api/v1/address/generate",pe="destination address is under sanctions";async function ue({address:e,chainId:t,signature:n,eip712Data:a,env:i,referrerCode:r,partnerId:o,captchaToken:p}){const{baseApiUrl:c}=h(i),T=x(t),d={to_address:e,to_address_signature:n,to_chain:T,partner_id:o,nonce:0,captcha:p,referrer_code:r,eip_712_data:a};try{const{data:y}=await w.post(oe,d,{baseURL:c});return y.address}catch(y){const f=C(y);if(ye(f))return V;throw new Error(f)}}function ye(e){return!!e.includes(pe)}const de="api/v1/address";async function le({address:e,chainId:t,env:n,partnerId:a}){const i=await Z({address:e,chainId:t,env:n,partnerId:a}),r=ce(i);if(!r)throw new Error("No address");return r.btc_address}function ce(e){if(!e.length)return;const t=e.reduce((n,a)=>n.created_at<a.created_at?a:n,e[0]);return t.deprecated?void 0:t}async function Z({address:e,chainId:t,env:n,partnerId:a}){const{baseApiUrl:i}=h(n),r=x(t),o={to_address:e,to_blockchain:r,limit:1,offset:0,asc:!1,referralId:a},{data:p}=await w.get(de,{baseURL:i,params:o});return(p==null?void 0:p.addresses)||[]}const me=8,M=10**me;function N(e){return+e/M}function be(e){return Math.floor(+e*M)}function K(e,t=P){switch(e){case A.eth:return H(t);case A.base:return $(t);case A.bsc:return W(t);default:return s.ethereum}}var q=(e=>(e.NOTARIZATION_STATUS_UNSPECIFIED="NOTARIZATION_STATUS_UNSPECIFIED",e.NOTARIZATION_STATUS_PENDING="NOTARIZATION_STATUS_PENDING",e.NOTARIZATION_STATUS_SUBMITTED="NOTARIZATION_STATUS_SUBMITTED",e.NOTARIZATION_STATUS_SESSION_APPROVED="NOTARIZATION_STATUS_SESSION_APPROVED",e.NOTARIZATION_STATUS_FAILED="NOTARIZATION_STATUS_FAILED",e))(q||{}),z=(e=>(e.SESSION_STATE_UNSPECIFIED="SESSION_STATE_UNSPECIFIED",e.SESSION_STATE_PENDING="SESSION_STATE_PENDING",e.SESSION_STATE_COMPLETED="SESSION_STATE_COMPLETED",e.SESSION_STATE_EXPIRED="SESSION_STATE_EXPIRED",e))(z||{});async function Te({address:e,env:t}){const{baseApiUrl:n}=h(t),{data:a}=await w.get(`api/v1/address/outputs-v2/${e}`,{baseURL:n});return((a==null?void 0:a.outputs)??[]).map(fe(t))}function fe(e){return t=>({txid:t.txid,index:t.index??0,blockHeight:t.block_height?Number(t.block_height):void 0,blockTime:t.block_time?Number(t.block_time):void 0,value:new v(N(t.value)),address:t.address,chainId:K(t.to_chain,e),claimedTxId:t.claim_tx,rawPayload:t.raw_payload,signature:t.proof,isRestricted:!!t.sanctioned,notarizationWaitDur:t.notarization_wait_dur?Number(t.notarization_wait_dur):void 0,payload:t.payload_hash,sessionId:t.session_id,notarizationStatus:t.notarization_status,sessionState:t.session_state})}const ge=2e-4;async function he({env:e,chainId:t=s.ethereum,amount:n=1}){const{baseApiUrl:a}=h(e),i=x(t),{data:r}=await w.get(`api/v1/exchange/rate/${i}`,{baseURL:a,params:{amount:n}}),o=new v(ge).multipliedBy(M).toFixed();return{exchangeRate:+r.amount_out,minAmount:+o}}async function we({address:e,chainId:t,env:n}){const{baseApiUrl:a}=h(n);try{const{data:i}=await w.get(`${a}/api/v1/claimer/get-user-signature`,{params:{user_destination_address:e,chain_id:t}});return{expirationDate:i==null?void 0:i.expiration_date,hasSignature:i==null?void 0:i.has_signature,isDelayed:i==null?void 0:i.is_delayed}}catch(i){const r=C(i);throw new Error(r)}}async function Se({signature:e,typedData:t,address:n,env:a}){const{baseApiUrl:i}=h(a);try{const{data:r}=await w.post(`${i}/api/v1/claimer/save-user-signature`,null,{params:{typed_data:t,signature:e,user_destination_address:n}});return r.status}catch(r){const o=C(r);throw new Error(o)}}async function Ae({signature:e,typedData:t,env:n}){const{baseApiUrl:a}=h(n);try{const{data:i}=await w.post(`${a}/api/v1/claimer/save-stake-and-bake-signature`,null,{params:{typed_data:t,signature:e}});return i.status}catch(i){const r=C(i);throw new Error(r)}}const D={[s.ethereum]:"https://rpc.ankr.com/eth",[s.holesky]:"https://rpc.ankr.com/eth_holesky",[s.sepolia]:"https://rpc.ankr.com/eth_sepolia",[s.base]:"https://rpc.ankr.com/base",[s.baseTestnet]:"https://rpc.ankr.com/base_sepolia",[s.binanceSmartChain]:"https://rpc.ankr.com/bsc",[s.binanceSmartChainTestnet]:"https://rpc.ankr.com/bsc_testnet_chapel"};async function ve(e){const n=await(await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_maxPriorityFeePerGas",params:[]})})).json(),a=m.utils.hexToNumber(n==null?void 0:n.result);return new v(Number(a))}const Ce=2,Ee=25e3;class O{constructor({chainId:t,rpcUrlConfig:n}){S(this,"chainId");S(this,"rpcConfig");this.chainId=t,this.rpcConfig={...D,...n}}getReadWeb3(){const t=this.getRpcUrl(),n=new m.Web3,a=new m.Web3.providers.HttpProvider(t);return n.setProvider(a),n}getRpcUrl(){var a;const{chainId:t}=this,n=(a=this.rpcConfig)==null?void 0:a[t];if(!n)throw console.error(`You might need to add the rpcConfig for the ${t} chain ID when creating the provider.`),new Error(`RPC URL for chainId ${t} not found`);return n}async getMaxFees(){const t=this.getReadWeb3(),n=this.getRpcUrl(),[a,i]=await Promise.all([t.eth.getBlock("latest"),ve(n)]);return!(a!=null&&a.baseFeePerGas)&&typeof(a==null?void 0:a.baseFeePerGas)!="bigint"?{}:{maxFeePerGas:+new v(a.baseFeePerGas.toString(10)).multipliedBy(Ce).plus(i),maxPriorityFeePerGas:+i}}async getSafeGasPriceWei(){const t=await this.getReadWeb3().eth.getGasPrice();return new v(t.toString(10)).plus(Ee)}createContract(t,n){const a=this.getReadWeb3();return new a.eth.Contract(t,n)}}const _e=[s.ethereum,s.base,s.binanceSmartChain],j=e=>_e.includes(e)?b.prod:b.stage;function R(e){return Object.values(s).includes(e)}const Ie={[s.holesky]:"0xED7bfd5C1790576105Af4649817f6d35A75CD818",[s.ethereum]:u,[s.binanceSmartChainTestnet]:"0x731eFa688F3679688cf60A3993b8658138953ED6",[s.binanceSmartChain]:u,[s.sepolia]:"0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30",[s.base]:u,[s.baseTestnet]:u,[s.berachainBartioTestnet]:"0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30",[s.corn]:u,[s.swell]:u},Ne={[s.holesky]:"0x38A13AB20D15ffbE5A7312d2336EF1552580a4E2",[s.ethereum]:u,[s.binanceSmartChainTestnet]:"0x107Fc7d90484534704dD2A9e24c7BD45DB4dD1B5",[s.binanceSmartChain]:u,[s.sepolia]:"0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30",[s.base]:u,[s.baseTestnet]:u,[s.berachainBartioTestnet]:"0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30",[s.corn]:u,[s.swell]:u},De={[s.ethereum]:"0x8236a87084f8b84306f72007f36f2618a5634494",[s.holesky]:u,[s.sepolia]:u,[s.binanceSmartChainTestnet]:u,[s.binanceSmartChain]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.base]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.baseTestnet]:u,[s.berachainBartioTestnet]:u,[s.corn]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1",[s.swell]:"0xecAc9C5F704e954931349Da37F60E39f515c11c1"};function xe(e=P){switch(e){case b.prod:return De;case b.testnet:return Ne;default:return Ie}}const Me=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],Pe=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint256",name:"dustLimit",type:"uint256"}],name:"AmountBelowDustLimit",type:"error"},{inputs:[{internalType:"uint256",name:"fee",type:"uint256"}],name:"AmountLessThanCommission",type:"error"},{inputs:[],name:"ECDSAInvalidSignature",type:"error"},{inputs:[{internalType:"uint256",name:"length",type:"uint256"}],name:"ECDSAInvalidSignatureLength",type:"error"},{inputs:[{internalType:"bytes32",name:"s",type:"bytes32"}],name:"ECDSAInvalidSignatureS",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"}],name:"ERC2612ExpiredSignature",type:"error"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"address",name:"owner",type:"address"}],name:"ERC2612InvalidSigner",type:"error"},{inputs:[],name:"EnforcedPause",type:"error"},{inputs:[],name:"ExpectedPause",type:"error"},{inputs:[],name:"FeeGreaterThanAmount",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"currentNonce",type:"uint256"}],name:"InvalidAccountNonce",type:"error"},{inputs:[],name:"InvalidDustFeeRate",type:"error"},{inputs:[],name:"InvalidInitialization",type:"error"},{inputs:[],name:"InvalidInputLength",type:"error"},{inputs:[],name:"InvalidUserSignature",type:"error"},{inputs:[],name:"KnownDestination",type:"error"},{inputs:[],name:"NotInitializing",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"OwnableInvalidOwner",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"OwnableUnauthorizedAccount",type:"error"},{inputs:[],name:"PayloadAlreadyUsed",type:"error"},{inputs:[],name:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[],name:"ScriptPubkeyUnsupported",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"UnauthorizedAccount",type:"error"},{inputs:[{internalType:"bytes4",name:"action",type:"bytes4"}],name:"UnexpectedAction",type:"error"},{inputs:[],name:"UnknownDestination",type:"error"},{inputs:[{internalType:"uint256",name:"fromChainId",type:"uint256"},{internalType:"address",name:"fromContract",type:"address"}],name:"UnknownOriginContract",type:"error"},{inputs:[{internalType:"uint256",name:"expiry",type:"uint256"}],name:"UserSignatureExpired",type:"error"},{inputs:[],name:"WithdrawalsDisabled",type:"error"},{inputs:[],name:"WrongChainId",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{inputs:[],name:"ZeroAmount",type:"error"},{inputs:[],name:"ZeroChainId",type:"error"},{inputs:[],name:"ZeroContractHash",type:"error"},{inputs:[],name:"ZeroFee",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"BasculeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"BridgeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint64",name:"prevValue",type:"uint64"},{indexed:!0,internalType:"uint64",name:"newValue",type:"uint64"}],name:"BurnCommissionChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"claimer",type:"address"},{indexed:!1,internalType:"bool",name:"isClaimer",type:"bool"}],name:"ClaimerUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevVal",type:"address"},{indexed:!0,internalType:"address",name:"newVal",type:"address"}],name:"ConsortiumChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"oldRate",type:"uint256"},{indexed:!0,internalType:"uint256",name:"newRate",type:"uint256"}],name:"DustFeeRateChanged",type:"event"},{anonymous:!1,inputs:[],name:"EIP712DomainChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"oldFee",type:"uint256"},{indexed:!0,internalType:"uint256",name:"newFee",type:"uint256"}],name:"FeeChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"fee",type:"uint256"},{indexed:!1,internalType:"bytes",name:"userSignature",type:"bytes"}],name:"FeeCharged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"version",type:"uint64"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"bytes32",name:"payloadHash",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"payload",type:"bytes"}],name:"MintProofConsumed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"minter",type:"address"},{indexed:!1,internalType:"bool",name:"isMinter",type:"bool"}],name:"MinterUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"string",name:"name",type:"string"},{indexed:!1,internalType:"string",name:"symbol",type:"string"}],name:"NameAndSymbolChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousPauser",type:"address"},{indexed:!0,internalType:"address",name:"newPauser",type:"address"}],name:"PauserRoleTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"prevValue",type:"address"},{indexed:!0,internalType:"address",name:"newValue",type:"address"}],name:"TreasuryAddressChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"fromAddress",type:"address"},{indexed:!1,internalType:"bytes",name:"scriptPubKey",type:"bytes"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"UnstakeRequest",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"",type:"bool"}],name:"WithdrawalsEnabled",type:"event"},{inputs:[],name:"Bascule",outputs:[{internalType:"contract IBascule",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"acceptOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newClaimer",type:"address"}],name:"addClaimer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newMinter",type:"address"}],name:"addMinter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"to",type:"address[]"},{internalType:"uint256[]",name:"amount",type:"uint256[]"}],name:"batchMint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes[]",name:"payload",type:"bytes[]"},{internalType:"bytes[]",name:"proof",type:"bytes[]"}],name:"batchMint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes[]",name:"mintPayload",type:"bytes[]"},{internalType:"bytes[]",name:"proof",type:"bytes[]"},{internalType:"bytes[]",name:"feePayload",type:"bytes[]"},{internalType:"bytes[]",name:"userSignature",type:"bytes[]"}],name:"batchMintWithFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"scriptPubkey",type:"bytes"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"calcUnstakeRequestAmount",outputs:[{internalType:"uint256",name:"amountAfterFee",type:"uint256"},{internalType:"bool",name:"isAboveDust",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newVal",type:"address"}],name:"changeBascule",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newBridge",type:"address"}],name:"changeBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint64",name:"newValue",type:"uint64"}],name:"changeBurnCommission",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newVal",type:"address"}],name:"changeConsortium",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newRate",type:"uint256"}],name:"changeDustFeeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],name:"changeNameAndSymbol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newValue",type:"address"}],name:"changeTreasuryAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"consortium",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"eip712Domain",outputs:[{internalType:"bytes1",name:"fields",type:"bytes1"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"version",type:"string"},{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"address",name:"verifyingContract",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"uint256[]",name:"extensions",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBurnCommission",outputs:[{internalType:"uint64",name:"",type:"uint64"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDustFeeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMintFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTreasury",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"consortium_",type:"address"},{internalType:"uint64",name:"burnCommission_",type:"uint64"},{internalType:"address",name:"owner_",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"claimer",type:"address"}],name:"isClaimer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"}],name:"isMinter",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"mint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"payload",type:"bytes"},{internalType:"bytes",name:"proof",type:"bytes"}],name:"mint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"mintPayload",type:"bytes"},{internalType:"bytes",name:"proof",type:"bytes"},{internalType:"bytes",name:"feePayload",type:"bytes"},{internalType:"bytes",name:"userSignature",type:"bytes"}],name:"mintWithFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"pauser",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"scriptPubkey",type:"bytes"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"redeem",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reinitialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"oldClaimer",type:"address"}],name:"removeClaimer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"oldMinter",type:"address"}],name:"removeMinter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"fee",type:"uint256"}],name:"setMintFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"toggleWithdrawals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newPauser",type:"address"}],name:"transferPauserRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"fromChain",type:"uint256"},{internalType:"address",name:"fromContract",type:"address"},{internalType:"uint256",name:"toChain",type:"uint256"},{internalType:"address",name:"toContract",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint64",name:"amount",type:"uint64"},{internalType:"bytes32",name:"uniqueActionData",type:"bytes32"}],internalType:"struct Actions.DepositBridgeAction",name:"action",type:"tuple"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"bytes",name:"",type:"bytes"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}];function Oe(e){switch(e){case"LBTC":return Pe;default:return Me}}function B(e,t){const n=xe(t),{chainId:a}=e;if(!R(a))throw new Error(`This chain ${a} is not supported`);const i=n[a];if(!i)throw new Error(`Token address for chain ${a} is not defined`);const r=Oe("LBTC"),o=e.createContract(r,i);return o.options.address||(o.options.address=i),o}function J(e,t){if(!R(e))throw new Error(`This chain ${e} is not supported`);const n=t?{[e]:t}:D;if(!n[e])throw new Error(`RPC URL for chainId ${e} not found`);return n}async function Re({chainId:e,bakeGasEstimate:t=0,rpcUrl:n}){const a=J(e,n),i=new O({chainId:e,rpcUrlConfig:a}),r=j(e),p=await B(i,r).methods.getMintFee().call(),c=new v(N(p.toString(10)));return t?c.plus(N(t)):c}class F extends O{constructor({provider:n,account:a,chainId:i,rpcUrlConfig:r}){super({chainId:i,rpcUrlConfig:r});S(this,"web3");S(this,"account");S(this,"rpcConfig",D);this.web3=new m(n),this.account=a,this.chainId=i,this.rpcConfig={...D,...r}}async signMessage(n){const{account:a}=this,i=`0x${Buffer.from(n,"utf8").toString("hex")}`;return this.web3.currentProvider.request({method:"personal_sign",params:[i,a]})}async sendTransactionAsync(n,a,i){const{chainId:r,web3:o}=this,p=this.getReadWeb3(),{data:c,estimate:T=!1,estimateFee:d=!1,extendedGasLimit:y,gasLimit:f="0",value:E="0",gasLimitMultiplier:Q=1}=i;let{nonce:_}=i;_||(_=await p.eth.getTransactionCount(n)),console.log(`Nonce: ${_}`);const l={from:n,to:a,value:m.utils.numberToHex(E),data:c,nonce:_,chainId:m.utils.numberToHex(r)};if(T)try{const g=await p.eth.estimateGas(l),I=Math.round(Number(g)*Q);y?l.gas=m.utils.numberToHex(I+y):l.gas=m.utils.numberToHex(I)}catch(g){throw new Error(g.message??"Failed to estimate gas limit for transaction.")}else l.gas=m.utils.numberToHex(f);const{maxFeePerGas:k,maxPriorityFeePerGas:U}=d?await this.getMaxFees().catch(()=>i):i;if(U!==void 0&&(l.maxPriorityFeePerGas=m.utils.numberToHex(U)),k!==void 0&&(l.maxFeePerGas=m.utils.numberToHex(k)),!l.maxFeePerGas&&!l.maxPriorityFeePerGas){const g=await this.getSafeGasPriceWei();l.gasPrice=g.toString(10)}if(!l.maxFeePerGas&&!l.maxPriorityFeePerGas){const g=await this.getSafeGasPriceWei();l.gasPrice=g.toString(10)}return console.log("Sending transaction via Web3: ",l),new Promise((g,I)=>{const L=o.eth.sendTransaction(l);L.once("transactionHash",async G=>{console.log(`Just signed transaction has is: ${G}`),g({receiptPromise:L,transactionHash:G})}).catch(I)})}createContract(n,a){return new this.web3.eth.Contract(n,a)}}async function Be(e){const t=new F(e),n=`destination chain id is ${e.chainId}`;return t.signMessage(n)}const Fe=24*60*60;function ke({chainId:e,verifyingContract:t,fee:n,expiry:a}){return{domain:{name:"Lombard Staked Bitcoin",version:"1",chainId:e,verifyingContract:t},message:{chainId:e,fee:n,expiry:a},primaryType:"feeApproval",types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],feeApproval:[{name:"chainId",type:"uint256"},{name:"fee",type:"uint256"},{name:"expiry",type:"uint256"}]}}}const Ue="Failed to obtain a valid signature. The response is undefined or invalid.",Le=()=>Math.floor(Date.now()/1e3+Fe);async function Ge({address:e,provider:t,fee:n,chainId:a,env:i,expiry:r=Le()}){var y,f;const o=new F({provider:t,account:e,chainId:a}),c=B(o,i).options.address,T=JSON.stringify(ke({chainId:a,verifyingContract:c,fee:n,expiry:r})),d=await((f=(y=o.web3)==null?void 0:y.currentProvider)==null?void 0:f.request({method:"eth_signTypedData_v4",params:[e,T]}));if(typeof d=="string")return{signature:d,typedData:T};if(!(d!=null&&d.result))throw new Error(Ue);return{signature:d.result,typedData:T}}async function He({owner:e,rpcUrl:t,chainId:n}){const a=J(n,t),i=new O({chainId:n,rpcUrlConfig:a}),r=j(n),o=B(i,r);try{return(await o.methods.nonces(e).call()).toString()}catch(p){const c=C(p);throw new Error(c)}}async function X({chainId:e,expiry:t,owner:n,spender:a,value:i,rpcUrl:r,verifyingContract:o}){const p=await He({owner:n,chainId:e,rpcUrl:r});return{domain:{name:"Lombard Staked Bitcoin",version:"1",chainId:e,verifyingContract:o},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},primaryType:"Permit",message:{owner:n,spender:a,value:i,nonce:p,deadline:t.toString()}}}const We="Failed to obtain a valid signature. The response is undefined or invalid.";async function $e({address:e,provider:t,chainId:n,value:a,expiry:i,rpcUrl:r,spender:o,verifyingContract:p}){var f,E;const c=new F({provider:t,account:e,chainId:n}),T=await X({chainId:n,expiry:i,owner:e,spender:o,value:a,rpcUrl:r,verifyingContract:p}),d=JSON.stringify(T),y=await((E=(f=c.web3)==null?void 0:f.currentProvider)==null?void 0:E.request({method:"eth_signTypedData_v4",params:[e,d]}));if(typeof y=="string")return{signature:y,typedData:d};if(!(y!=null&&y.result))throw new Error(We);return{signature:y.result,typedData:d}}const Y={[s.holesky]:"0x52BD640617eeD47A00dA0da93351092D49208d1d"},Ve=e=>{const t=Y[e];if(!t)throw new Error(`No spender address configured for chain ID ${e}`);return t};exports.ENotarizationStatus=q;exports.ESessionState=z;exports.OChainId=s;exports.OEnv=b;exports.SANCTIONED_ADDRESS=V;exports.SATOSHI_SCALE=M;exports.STAKE_AND_BAKE_SPENDER_ADDRESSES=Y;exports.fromSatoshi=N;exports.generateDepositBtcAddress=ue;exports.getApiConfig=h;exports.getBaseNetworkByEnv=$;exports.getBscNetworkByEnv=W;exports.getChainIdByName=K;exports.getChainNameById=x;exports.getDepositBtcAddress=le;exports.getDepositBtcAddresses=Z;exports.getDepositsByAddress=Te;exports.getEthNetworkByEnv=H;exports.getLBTCExchangeRate=he;exports.getLBTCMintingFee=Re;exports.getNetworkFeeSignature=we;exports.getStakeAndBakeSpenderAddress=Ve;exports.getStakeAndBakeTypedData=X;exports.isValidChain=R;exports.signLbtcDestionationAddr=Be;exports.signNetworkFee=Ge;exports.signStakeAndBake=$e;exports.storeNetworkFeeSignature=Se;exports.storeStakeAndBakeSignature=Ae;exports.toSatoshi=be;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/common/types/types.ts","../src/common/const.ts","../src/sdk/apiConfig.ts","../src/common/utils/getErrorMessage.ts","../src/sdk/internalTypes.ts","../src/sdk/utils/getChainNameById.ts","../src/sdk/generateDepositBtcAddress/generateDepositBtcAddress.ts","../src/sdk/getDepositBtcAddress/getDepositBtcAddress.ts","../src/common/utils/convertSatoshi.ts","../src/sdk/utils/getChainIdByName.ts","../src/sdk/getDepositsByAddress/getDepositsByAddress.ts","../src/sdk/const.ts","../src/sdk/getLBTCExchangeRate/getLBTCExchangeRate.ts","../src/sdk/getNetworkFeeSignature/getNetworkFeeSignature.ts","../src/sdk/storeNetworkFeeSignature/storeNetworkFeeSignature.ts","../src/sdk/storeStakeAndBakeSignature/storeStakeAndBakeSignature.ts","../src/provider/rpcUrlConfig.ts","../src/provider/utils/getMaxPriorityFeePerGas.ts","../src/provider/ReadProvider.ts","../src/web3Sdk/utils/chainIdToEnv.ts","../src/common/utils/isValidChain.ts","../src/web3Sdk/lbtcAddressConfig.ts","../src/web3Sdk/utils/getTokenABI.ts","../src/web3Sdk/utils/getLbtcTokenContract.ts","../src/web3Sdk/utils/getRpcUrlConfigFromChain.ts","../src/web3Sdk/getLBTCMintingFee/getLBTCMintingFee.tsx","../src/provider/Provider.ts","../src/web3Sdk/signLbtcDestionationAddr/signLbtcDestionationAddr.ts","../src/web3Sdk/const.ts","../src/web3Sdk/signNetworkFee/getTypedData.ts","../src/web3Sdk/signNetworkFee/signNetworkFee.ts","../src/web3Sdk/getPermitNonce/getPermitNonce.ts","../src/web3Sdk/signStakeAndBake/getTypedData.ts","../src/web3Sdk/signStakeAndBake/config.ts","../src/web3Sdk/signStakeAndBake/signStakeAndBake.ts"],"sourcesContent":["export const OEnv = {\n prod: 'prod',\n testnet: 'testnet',\n stage: 'stage',\n} as const;\n\nexport type TEnv = (typeof OEnv)[keyof typeof OEnv];\n\nexport const OChainId = {\n ethereum: 1,\n holesky: 17000,\n binanceSmartChain: 56,\n binanceSmartChainTestnet: 97,\n sepolia: 11155111,\n base: 8453,\n baseTestnet: 84532,\n berachainBartioTestnet: 80084,\n\n corn: 21000000,\n swell: 1923,\n} as const;\n\nexport type TChainId = (typeof OChainId)[keyof typeof OChainId];\n\nexport type TOFTChainId =\n | (typeof OChainId)['berachainBartioTestnet']\n | (typeof OChainId)['sepolia']\n | (typeof OChainId)['corn']\n | (typeof OChainId)['ethereum']\n | (typeof OChainId)['swell'];\n\n/**\n * Abstract EIP-1193 provider\n */\nexport interface IEIP1193Provider {\n request: (args: any) => Promise<any>;\n}\n\nexport const getEthNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod ? OChainId.ethereum : OChainId.holesky;\n\nexport const getBscNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod\n ? OChainId.binanceSmartChain\n : OChainId.binanceSmartChainTestnet;\n\nexport const getBaseNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod ? OChainId.base : OChainId.baseTestnet;\n","import { OEnv, TEnv } from './types/types';\n\nexport const defaultEnv: TEnv = OEnv.prod;\n\n/**\n * Address of the zero account.\n * Can also be used as a placeholder for unknown addresses.\n */\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n","import { defaultEnv } from '../common/const';\nimport { OEnv, TEnv } from '../common/types/types';\n\ninterface IApiConfig {\n baseApiUrl: string;\n}\n\nconst stageConfig: IApiConfig = {\n baseApiUrl: 'https://staging.prod.lombard.finance',\n};\n\nconst testnetConfig: IApiConfig = {\n baseApiUrl: 'https://gastald-testnet.prod.lombard.finance',\n};\n\nconst prodConfig: IApiConfig = {\n baseApiUrl: 'https://mainnet.prod.lombard.finance',\n};\n\nexport const getApiConfig = (env: TEnv = defaultEnv): IApiConfig => {\n switch (env) {\n case OEnv.prod:\n return prodConfig;\n case OEnv.testnet:\n return testnetConfig;\n default:\n return stageConfig;\n }\n};\n","import { AxiosError } from 'axios';\n\n/**\n * Retrieves the error message from the given error object.\n *\n * @param error - The error object.\n * @returns The error message as a string.\n */\nexport function getErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n const hasDataMessage = (err: any): err is { data: { message: string } } =>\n err?.data?.message && typeof err.data.message === 'string';\n\n if (hasDataMessage(error)) {\n return error.data.message;\n }\n\n if (error instanceof Error) {\n return getAxiosErrorMessage(error as AxiosError);\n }\n\n return getErrorMessageFromObject(error);\n}\n\nfunction getAxiosErrorMessage(error: AxiosError): string {\n if (error.response) {\n return (error.response.data as { message: string }).message;\n }\n\n return error.message;\n}\n\nfunction getErrorMessageFromObject(error: any): string {\n if (error?.message) {\n return error.message;\n }\n\n return 'Unknown error';\n}\n","export const OChainName = {\n eth: 'DESTINATION_BLOCKCHAIN_ETHEREUM',\n base: 'DESTINATION_BLOCKCHAIN_BASE',\n bsc: 'DESTINATION_BLOCKCHAIN_BSC',\n mantle: 'DESTINATION_BLOCKCHAIN_MANTLE',\n linea: 'DESTINATION_BLOCKCHAIN_LINEA',\n zcircuit: 'DESTINATION_BLOCKCHAIN_ZIRCUIT',\n scroll: 'DESTINATION_BLOCKCHAIN_SCROLL',\n xlayer: 'DESTINATION_BLOCKCHAIN_XLAYER',\n} as const;\n\nexport type TChainName = (typeof OChainName)[keyof typeof OChainName];\n","import { OChainId, TChainId } from '../../common/types/types';\nimport { OChainName, TChainName } from '../internalTypes';\n\n/**\n * @param chainId the chain ID\n *\n * @returns the chain name\n */\nexport function getChainNameById(chainId: TChainId): TChainName {\n switch (chainId) {\n case OChainId.ethereum:\n case OChainId.holesky:\n case OChainId.sepolia:\n return OChainName.eth;\n case OChainId.base:\n case OChainId.baseTestnet:\n return OChainName.base;\n case OChainId.binanceSmartChain:\n case OChainId.binanceSmartChainTestnet:\n return OChainName.bsc;\n default:\n throw new Error(`Unknown chain ID: ${chainId}`);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\nimport { getChainNameById } from '../utils/getChainNameById';\n\n/**\n * The address wich will be returned if the provided EVM address is sanctioned.\n */\nexport const SANCTIONED_ADDRESS = 'sanctioned_address';\nconst ADDRESS_URL = 'api/v1/address/generate';\nconst SANCTIONS_MESSAGE = 'destination address is under sanctions';\n\ninterface IGenerateNewAddressResponse {\n address: string;\n}\n\nexport interface IGenerateDepositBtcAddressParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The destination chain ID where LBTC will be claimed.\n */\n chainId: TChainId;\n /**\n * The signature of the address. The signature is generated by signing the address using EVM wallet.\n */\n signature: string;\n /**\n * The typed data object used to generate the signature if using a network fee authorization signature.\n */\n eip712Data?: string;\n /**\n * The captcha token.\n */\n captchaToken?: string;\n /**\n * The referrer code.\n */\n referrerCode?: string;\n /**\n * The referral ID.\n */\n partnerId?: string;\n}\n\n/**\n * Generates a BTC deposit address.\n *\n * If the provided EVM address is sanctioned, the function will return the `SANCTIONED_ADDRESS`.\n *\n * @param {IGenerateDepositBtcAddressParams} params - The parameters for generating the deposit address.\n * @returns {Promise<string>} The generated deposit address.\n */\nexport async function generateDepositBtcAddress({\n address,\n chainId,\n signature,\n eip712Data,\n env,\n referrerCode,\n partnerId,\n captchaToken,\n}: IGenerateDepositBtcAddressParams): Promise<string> {\n const { baseApiUrl } = getApiConfig(env);\n const toChain = getChainNameById(chainId);\n\n const requestParams = {\n to_address: address,\n to_address_signature: signature,\n to_chain: toChain,\n partner_id: partnerId,\n nonce: 0,\n captcha: captchaToken,\n referrer_code: referrerCode,\n eip_712_data: eip712Data,\n };\n\n try {\n const { data } = await axios.post<IGenerateNewAddressResponse>(\n ADDRESS_URL,\n requestParams,\n { baseURL: baseApiUrl },\n );\n\n return data.address;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n if (isSanctioned(errorMsg)) {\n return SANCTIONED_ADDRESS;\n } else {\n throw new Error(errorMsg);\n }\n }\n}\n\nfunction isSanctioned(errorMsg: string): boolean {\n return !!errorMsg.includes(SANCTIONS_MESSAGE);\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { getApiConfig } from '../apiConfig';\nimport { TChainName } from '../internalTypes';\nimport { getChainNameById } from '../utils/getChainNameById';\n\nconst ADDRESS_URL = 'api/v1/address';\n\ntype TPartnerId = 'lombard' | string;\n\ninterface IDepositAddress {\n btc_address: string;\n created_at: string;\n deprecated?: boolean;\n type: string;\n used?: boolean;\n deposit_metadata: {\n referral: TPartnerId;\n partner_id: TPartnerId;\n to_address: string;\n to_blockchain: TChainName;\n };\n}\n\ninterface IDepositAddressesResponse {\n addresses: IDepositAddress[];\n has_more?: boolean;\n}\n\nexport interface IGetDepositBtcAddressParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The destination chain ID where LBTC will be claimed.\n */\n chainId: TChainId;\n /**\n * The referral ID.\n */\n partnerId: TPartnerId;\n}\n\n/**\n * Returns the address for depositing BTC.\n *\n * @param {IGetDepositBtcAddressParams} params - function parameters\n *\n * @returns {Promise<string>} the address for depositing BTC\n */\nexport async function getDepositBtcAddress({\n address,\n chainId,\n env,\n partnerId,\n}: IGetDepositBtcAddressParams): Promise<string> {\n const addresses = await getDepositBtcAddresses({\n address,\n chainId,\n env,\n partnerId,\n });\n\n const addressData = getActualAddress(addresses);\n\n if (!addressData) {\n throw new Error('No address');\n }\n\n return addressData.btc_address;\n}\n\n/**\n * Retrieves the actual deposit address from a list of deposit addresses.\n *\n * @param addresses - The list of deposit addresses.\n * @returns The actual deposit address or undefined if the last created address is deprecated.\n */\nfunction getActualAddress(\n addresses: IDepositAddress[],\n): IDepositAddress | undefined {\n if (!addresses.length) {\n return undefined;\n }\n\n const actualAddress = addresses.reduce((acc, address) => {\n if (acc.created_at < address.created_at) {\n return address;\n }\n return acc;\n }, addresses[0]);\n\n return actualAddress.deprecated ? undefined : actualAddress;\n}\n\n/**\n * Returns the addresses for depositing BTC.\n *\n * @param {IGetDepositBtcAddressParams} params - function parameters\n *\n * @returns {Promise<IDepositAddress[]>} the deposit addresses\n */\nexport async function getDepositBtcAddresses({\n address,\n chainId,\n env,\n partnerId,\n}: IGetDepositBtcAddressParams): Promise<IDepositAddress[]> {\n const { baseApiUrl } = getApiConfig(env);\n const toBlockchain = getChainNameById(chainId);\n\n const requestrParams = {\n to_address: address,\n to_blockchain: toBlockchain,\n limit: 1,\n offset: 0,\n asc: false,\n referralId: partnerId,\n };\n\n const { data } = await axios.get<IDepositAddressesResponse>(ADDRESS_URL, {\n baseURL: baseApiUrl,\n params: requestrParams,\n });\n\n return data?.addresses || [];\n}\n","const BTC_DECIMALS = 8;\nexport const SATOSHI_SCALE = 10 ** BTC_DECIMALS;\n\n/**\n * Convert Satoshi to BTC\n * @param amount - Satoshi amount\n * @returns BTC amount\n */\nexport function fromSatoshi(amount: number | string) {\n return +amount / SATOSHI_SCALE;\n}\n\n/**\n * Convert BTC to Satoshi\n *\n * @param amount - BTC amount\n * @returns Satoshi amount\n */\nexport function toSatoshi(amount: number | string) {\n return Math.floor(+amount * SATOSHI_SCALE);\n}\n","import { defaultEnv } from '../../common/const';\nimport {\n getBaseNetworkByEnv,\n getBscNetworkByEnv,\n getEthNetworkByEnv,\n OChainId,\n TChainId,\n TEnv,\n} from '../../common/types/types';\nimport { OChainName, TChainName } from '../internalTypes';\n\n/**\n * @param chainId the chain ID\n *\n * @returns the chain name\n */\nexport function getChainIdByName(\n chain: string,\n env: TEnv = defaultEnv,\n): TChainId {\n switch (chain as TChainName) {\n case OChainName.eth:\n return getEthNetworkByEnv(env);\n case OChainName.base:\n return getBaseNetworkByEnv(env);\n case OChainName.bsc:\n return getBscNetworkByEnv(env);\n\n default:\n return OChainId.ethereum;\n }\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId, TEnv } from '../../common/types/types';\nimport { fromSatoshi } from '../../common/utils/convertSatoshi';\nimport { getApiConfig } from '../apiConfig';\nimport { getChainIdByName } from '../utils/getChainIdByName';\n\ntype Address = string;\ntype Seconds = number;\n\nexport enum ENotarizationStatus {\n NOTARIZATION_STATUS_UNSPECIFIED = 'NOTARIZATION_STATUS_UNSPECIFIED',\n // actually initial status for a deposit tx\n NOTARIZATION_STATUS_PENDING = 'NOTARIZATION_STATUS_PENDING',\n // the deposit was sent to the notarization\n NOTARIZATION_STATUS_SUBMITTED = 'NOTARIZATION_STATUS_SUBMITTED',\n // notarization was approved\n NOTARIZATION_STATUS_SESSION_APPROVED = 'NOTARIZATION_STATUS_SESSION_APPROVED',\n // notarization was failed\n NOTARIZATION_STATUS_FAILED = 'NOTARIZATION_STATUS_FAILED',\n}\n\nexport enum ESessionState {\n SESSION_STATE_UNSPECIFIED = 'SESSION_STATE_UNSPECIFIED',\n SESSION_STATE_PENDING = 'SESSION_STATE_PENDING',\n SESSION_STATE_COMPLETED = 'SESSION_STATE_COMPLETED',\n SESSION_STATE_EXPIRED = 'SESSION_STATE_EXPIRED',\n}\n\ninterface IDepositResponse {\n txid: string;\n value: number;\n address: Address;\n to_chain: string;\n notarization_wait_dur?: string | number;\n index?: number;\n raw_payload?: string;\n payload_hash?: string;\n proof?: string;\n claim_tx?: string; // tx on the destination chain\n block_height?: string;\n block_time?: string;\n sanctioned?: boolean;\n\n session_id: number;\n notarization_status: ENotarizationStatus;\n session_state: ESessionState;\n}\n\ninterface IDepositsByAddressResponse {\n outputs: IDepositResponse[];\n}\n\nexport interface IDeposit {\n txid: string;\n index?: number;\n blockHeight?: number;\n blockTime?: number;\n value: BigNumber;\n address: Address;\n chainId: TChainId;\n isClaimed?: boolean;\n claimedTxId?: string;\n rawPayload?: string;\n signature?: string;\n isRestricted?: boolean;\n notarizationWaitDur?: Seconds;\n // bascule hash id\n payload?: string;\n\n sessionId: number;\n notarizationStatus: ENotarizationStatus;\n sessionState: ESessionState;\n fromChainId?: TChainId;\n toChainId?: TChainId;\n status?: string;\n}\n\nexport interface IGetDepositsByAddressParams extends IEnvParam {\n /**\n * The EVM address to get deposits for\n */\n address: Address;\n}\n\n/**\n * Returns all deposits for a given address\n *\n * @param {IGetDepositsByAddressParams} params\n *\n * @returns {Promise<IDeposit[]>} a list of deposits\n */\nexport async function getDepositsByAddress({\n address,\n env,\n}: IGetDepositsByAddressParams): Promise<IDeposit[]> {\n const { baseApiUrl } = getApiConfig(env);\n\n const { data } = await axios.get<IDepositsByAddressResponse | undefined>(\n `api/v1/address/outputs-v2/${address}`,\n { baseURL: baseApiUrl },\n );\n\n const outputs = data?.outputs ?? [];\n\n return outputs.map(mapResponse(env));\n}\n\nfunction mapResponse(env?: TEnv) {\n return (data: IDepositResponse): IDeposit => ({\n txid: data.txid,\n index: data.index ?? 0,\n blockHeight: data.block_height ? Number(data.block_height) : undefined,\n blockTime: data.block_time ? Number(data.block_time) : undefined,\n value: new BigNumber(fromSatoshi(data.value)),\n address: data.address,\n chainId: getChainIdByName(data.to_chain, env),\n claimedTxId: data.claim_tx,\n rawPayload: data.raw_payload,\n signature: data.proof,\n isRestricted: !!data.sanctioned,\n notarizationWaitDur: data.notarization_wait_dur\n ? Number(data.notarization_wait_dur)\n : undefined,\n payload: data.payload_hash,\n sessionId: data.session_id,\n notarizationStatus: data.notarization_status,\n sessionState: data.session_state,\n });\n}\n","export const MIN_STAKE_AMOUNT_BTC = 0.0002;\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { OChainId, TChainId } from '../../common/types/types';\nimport { SATOSHI_SCALE } from '../../common/utils/convertSatoshi';\nimport { getApiConfig } from '../apiConfig';\nimport { MIN_STAKE_AMOUNT_BTC } from '../const';\nimport { getChainNameById } from '../utils/getChainNameById';\n\ntype ExchangeRateResponse = {\n amount_out: string;\n};\n\nexport interface IgetLBTCExchangeRateParams extends IEnvParam {\n /**\n * The chain id of the asset to get the exchange rate for. Exchange rate is the same for all chains so this param is optional.\n *\n * @default OChainId.ethereum\n */\n chainId?: TChainId;\n /**\n * The amount of the asset to get the exchange rate for. If not provided, the exchange rate will be returned for 1 BTC.\n *\n * @default 1\n */\n amount?: number;\n}\n\nexport interface IgetLBTCExchangeRateResponse {\n /**\n * The exchange rate for LBTC:BTC\n */\n exchangeRate: number;\n /**\n * The minimum amount of the asset to stake\n */\n minAmount: number;\n}\n\n/**\n * Retrieves the exchange rate for LBTC.\n *\n * @param {IgetLBTCExchangeRateParams} params\n *\n * @returns {Promise<IgetLBTCExchangeRateResponse>} - The exchange rate.\n */\nexport async function getLBTCExchangeRate({\n env,\n chainId = OChainId.ethereum,\n amount = 1,\n}: IgetLBTCExchangeRateParams): Promise<IgetLBTCExchangeRateResponse> {\n const { baseApiUrl } = getApiConfig(env);\n const chainIdName = getChainNameById(chainId);\n\n const { data } = await axios.get<ExchangeRateResponse>(\n `api/v1/exchange/rate/${chainIdName}`,\n { baseURL: baseApiUrl, params: { amount } },\n );\n\n const minAmount = new BigNumber(MIN_STAKE_AMOUNT_BTC)\n .multipliedBy(SATOSHI_SCALE)\n .toFixed();\n\n return { exchangeRate: +data.amount_out, minAmount: +minAmount };\n}\n","import axios from 'axios';\n\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport interface IGetNetworkFeeSignatureParams extends IEnvParam {\n /**\n * Chain ID of the network to interact with\n */\n chainId: number;\n /**\n * Destination address\n */\n address: string;\n}\n\ninterface IGetNetworkFeeSignatureResponse {\n /**\n * Expiration date of signature\n */\n expiration_date: string;\n /**\n * The flag signature exists\n */\n has_signature: boolean;\n /**\n * The auto mint is delayed\n */\n is_delayed: boolean;\n}\n\nexport interface IGetNetworkFeeSignatureMappedResponse {\n /**\n * Expiration date of signature\n */\n expirationDate: string;\n /**\n * The flag signature exists\n */\n hasSignature: boolean;\n /**\n * The auto mint is delayed\n */\n isDelayed: boolean;\n}\n\n/**\n * Returns the expiration date and the flag signature exists\n *\n * @returns {Promise<IGetNetworkFeeSignatureResponse>} authorize network fee sign promise\n */\nexport async function getNetworkFeeSignature({\n address,\n chainId,\n env,\n}: IGetNetworkFeeSignatureParams): Promise<IGetNetworkFeeSignatureMappedResponse> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.get<IGetNetworkFeeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/get-user-signature`,\n {\n params: {\n user_destination_address: address,\n chain_id: chainId,\n },\n },\n );\n\n return {\n expirationDate: data?.expiration_date,\n hasSignature: data?.has_signature,\n isDelayed: data?.is_delayed,\n };\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n\n throw new Error(errorMessage);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport type IStoreNetworkFeeSignatureStatus = 'success';\n\ninterface IStoreNetworkFeeSignatureResponse {\n status: IStoreNetworkFeeSignatureStatus;\n}\n\nexport interface IStoreNetworkFeeSignatureParams extends IEnvParam {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n /**\n * Destination address\n */\n address: string;\n}\n\n/**\n * Authorize network fee\n *\n * @param {IStoreNetworkFeeSignatureParams} params - The parameters for network fee authorization\n *\n * @returns {Promise<IStoreNetworkFeeSignatureResponse>} Response promise with statuses\n *\n */\nexport async function storeNetworkFeeSignature({\n signature,\n typedData,\n address,\n env,\n}: IStoreNetworkFeeSignatureParams): Promise<IStoreNetworkFeeSignatureStatus> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.post<IStoreNetworkFeeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/save-user-signature`,\n null,\n {\n params: {\n typed_data: typedData,\n signature,\n user_destination_address: address,\n },\n },\n );\n\n return data.status;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n throw new Error(errorMsg);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport type IStoreStakeAndBakeSignatureStatus = 'success';\n\ninterface IStoreStakeAndBakeSignatureResponse {\n status: IStoreStakeAndBakeSignatureStatus;\n}\n\nexport interface IStoreStakeAndBakeSignatureParams extends IEnvParam {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n}\n\n/**\n * Store stake and bake signature\n *\n * @param {IStoreStakeAndBakeSignatureParams} params - The parameters for storing stake and bake signature\n *\n * @returns {Promise<IStoreStakeAndBakeSignatureStatus>} Response promise with status\n *\n */\nexport async function storeStakeAndBakeSignature({\n signature,\n typedData,\n env,\n}: IStoreStakeAndBakeSignatureParams): Promise<IStoreStakeAndBakeSignatureStatus> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.post<IStoreStakeAndBakeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/save-stake-and-bake-signature`,\n null,\n {\n params: {\n typed_data: typedData,\n signature,\n },\n },\n );\n\n return data.status;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n throw new Error(errorMsg);\n }\n}","import { OChainId } from '../common/types/types';\n\nexport type TRpcUrlConfig = Record<number, string>;\n\nexport const rpcUrlConfig: TRpcUrlConfig = {\n [OChainId.ethereum]: 'https://rpc.ankr.com/eth',\n [OChainId.holesky]: 'https://rpc.ankr.com/eth_holesky',\n [OChainId.sepolia]: 'https://rpc.ankr.com/eth_sepolia',\n [OChainId.base]: 'https://rpc.ankr.com/base',\n [OChainId.baseTestnet]: 'https://rpc.ankr.com/base_sepolia',\n [OChainId.binanceSmartChain]: 'https://rpc.ankr.com/bsc',\n [OChainId.binanceSmartChainTestnet]:\n 'https://rpc.ankr.com/bsc_testnet_chapel',\n};\n","import BigNumber from 'bignumber.js';\nimport Web3 from 'web3';\n\nexport async function getMaxPriorityFeePerGas(\n rpcUrl: string,\n): Promise<BigNumber> {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_maxPriorityFeePerGas',\n params: [],\n }),\n });\n\n const data = await response.json();\n\n const convertedHexValue = Web3.utils.hexToNumber(data?.result);\n\n return new BigNumber(Number(convertedHexValue));\n}\n","import BigNumber from 'bignumber.js';\nimport { Web3, Contract, ContractAbi } from 'web3';\nimport {\n TRpcUrlConfig,\n rpcUrlConfig as defaultRpcUrlConfig,\n} from './rpcUrlConfig';\nimport { IGetMaxFeesResult } from './types';\nimport { getMaxPriorityFeePerGas } from './utils/getMaxPriorityFeePerGas';\n\nconst FEE_MULTIPLIER = 2;\nconst ADDITIONAL_SAFE_GAS_PRICE_WEI = 25_000;\n\nexport interface IReadProviderParams {\n /**\n * Chain ID of the network to interact with.\n */\n chainId: number;\n /**\n * The RPC URL configuration. If not provided, the default configuration will be used.\n */\n rpcUrlConfig?: TRpcUrlConfig;\n}\n\nexport class ReadProvider {\n chainId: number;\n rpcConfig: TRpcUrlConfig;\n\n constructor({ chainId, rpcUrlConfig }: IReadProviderParams) {\n this.chainId = chainId;\n this.rpcConfig = { ...defaultRpcUrlConfig, ...rpcUrlConfig };\n }\n\n /**\n * Returns web3 instance for read operations.\n *\n * @public\n * @returns {Web3} Web3 instance.\n */\n public getReadWeb3(): Web3 {\n const rpcUrl = this.getRpcUrl();\n const readWeb3 = new Web3();\n const provider = new Web3.providers.HttpProvider(rpcUrl);\n readWeb3.setProvider(provider);\n return readWeb3;\n }\n\n /**\n * Retrieves the RPC URL based on the current chain ID.\n * @returns The RPC URL for the current chain ID.\n * @throws Error if the RPC URL for the current chain ID is not found.\n */\n getRpcUrl(): string {\n const { chainId } = this;\n const rpcUrl = this.rpcConfig?.[chainId];\n\n if (!rpcUrl) {\n console.error(\n `You might need to add the rpcConfig for the ${chainId} chain ID when creating the provider.`,\n );\n throw new Error(`RPC URL for chainId ${chainId} not found`);\n }\n\n return rpcUrl;\n }\n\n /**\n * Calculates max fees for transaction. Thess values are available for networks\n * with EIP-1559 support.\n *\n * @public\n * @note If current network is Binance Smart Chain, will return default values.\n * @returns {Promise<IGetMaxFeesResult>} Max fees for transaction.\n */\n public async getMaxFees(): Promise<IGetMaxFeesResult> {\n const web3 = this.getReadWeb3();\n const rpcUrl = this.getRpcUrl();\n\n const [block, maxPriorityFeePerGas] = await Promise.all([\n web3.eth.getBlock('latest'),\n getMaxPriorityFeePerGas(rpcUrl),\n ]);\n\n if (!block?.baseFeePerGas && typeof block?.baseFeePerGas !== 'bigint') {\n return {};\n }\n\n const maxFeePerGas = new BigNumber(block.baseFeePerGas.toString(10))\n .multipliedBy(FEE_MULTIPLIER)\n .plus(maxPriorityFeePerGas);\n\n return {\n maxFeePerGas: +maxFeePerGas,\n maxPriorityFeePerGas: +maxPriorityFeePerGas,\n };\n }\n\n /**\n * Returns safe gas price for transaction.\n *\n * @public\n * @returns {Promise<BigNumber>} Safe gas price.\n */\n public async getSafeGasPriceWei(): Promise<BigNumber> {\n const pureGasPriceWei = await this.getReadWeb3().eth.getGasPrice();\n\n return new BigNumber(pureGasPriceWei.toString(10)).plus(\n ADDITIONAL_SAFE_GAS_PRICE_WEI,\n );\n }\n\n /**\n * Creates a contract instance with the given ABI and address.\n *\n * @template AbiType - The type of the contract ABI.\n * @param {any} abi - The ABI of the contract.\n * @param {string} address - The address of the contract.\n * @returns {Contract<AbiType>} The contract instance.\n */\n public createContract<AbiType extends ContractAbi>(\n abi: any,\n address: string,\n ): Contract<AbiType> {\n const web3 = this.getReadWeb3();\n return new web3.eth.Contract<AbiType>(abi, address);\n }\n}\n","import { OChainId, OEnv, TChainId, TEnv } from '../../common/types/types';\n\nconst PROD_NATIVE_MINT_CHAINS = [\n OChainId.ethereum,\n OChainId.base,\n OChainId.binanceSmartChain,\n] as TChainId[];\n\nexport const chainIdToEnv = (chainId: TChainId): TEnv => {\n return PROD_NATIVE_MINT_CHAINS.includes(chainId) ? OEnv.prod : OEnv.stage;\n};\n","import { OChainId, TChainId } from '../types/types';\n\nexport function isValidChain(chainId: number): chainId is TChainId {\n return Object.values(OChainId).includes(chainId as TChainId);\n}\n","import {\n defaultEnv,\n ZERO_ADDRESS as PLACEHOLDER_ADDRESS,\n} from '../common/const';\nimport { OChainId, OEnv, TChainId, TEnv } from '../common/types/types';\n\ntype LbtcTokenConfig = Record<TChainId, string>;\n\nconst stageConfig: LbtcTokenConfig = {\n [OChainId.holesky]: '0xED7bfd5C1790576105Af4649817f6d35A75CD818',\n [OChainId.ethereum]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]:\n '0x731eFa688F3679688cf60A3993b8658138953ED6',\n [OChainId.binanceSmartChain]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: '0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30',\n\n [OChainId.base]: PLACEHOLDER_ADDRESS,\n // TODO: Add baseTestnet address\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.berachainBartioTestnet]:\n '0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30',\n\n [OChainId.corn]: PLACEHOLDER_ADDRESS,\n [OChainId.swell]: PLACEHOLDER_ADDRESS,\n};\n\nconst testnetConfig: LbtcTokenConfig = {\n [OChainId.holesky]: '0x38A13AB20D15ffbE5A7312d2336EF1552580a4E2',\n [OChainId.ethereum]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]:\n '0x107Fc7d90484534704dD2A9e24c7BD45DB4dD1B5',\n [OChainId.binanceSmartChain]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: '0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30',\n\n [OChainId.base]: PLACEHOLDER_ADDRESS,\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.berachainBartioTestnet]:\n '0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30',\n\n [OChainId.corn]: PLACEHOLDER_ADDRESS,\n [OChainId.swell]: PLACEHOLDER_ADDRESS,\n};\n\nconst prodConfig: LbtcTokenConfig = {\n [OChainId.ethereum]: '0x8236a87084f8b84306f72007f36f2618a5634494',\n [OChainId.holesky]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.binanceSmartChain]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n\n [OChainId.base]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n\n [OChainId.berachainBartioTestnet]: PLACEHOLDER_ADDRESS,\n\n [OChainId.corn]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n [OChainId.swell]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n};\n\nexport function getLbtcAddressConfig(env: TEnv = defaultEnv): LbtcTokenConfig {\n switch (env) {\n case OEnv.prod:\n return prodConfig;\n case OEnv.testnet:\n return testnetConfig;\n default:\n return stageConfig;\n }\n}\n","import { IERC20, LBTCABI } from '../abi';\n\ntype Token = 'LBTC' | 'ERC20';\n\nexport function getTokenABI(token: Token) {\n switch (token) {\n case 'LBTC':\n return LBTCABI;\n default:\n return IERC20;\n }\n}\n","import { ReadProvider } from '../../provider/ReadProvider';\nimport { TEnv } from '../../common/types/types';\nimport { isValidChain } from '../../common/utils/isValidChain';\nimport { Provider } from '../../provider';\nimport { getLbtcAddressConfig } from '../lbtcAddressConfig';\nimport { getTokenABI } from './getTokenABI';\n\nexport function getLbtcTokenContract(provider: Provider | ReadProvider, env?: TEnv) {\n const lbtcAddressConfig = getLbtcAddressConfig(env);\n const { chainId } = provider;\n\n if (!isValidChain(chainId)) {\n throw new Error(`This chain ${chainId} is not supported`);\n }\n\n const tokenAddress = lbtcAddressConfig[chainId];\n\n if (!tokenAddress) {\n throw new Error(`Token address for chain ${chainId} is not defined`);\n }\n\n const abi = getTokenABI('LBTC');\n\n const contract = provider.createContract(abi, tokenAddress);\n\n if (!contract.options.address) {\n contract.options.address = tokenAddress;\n }\n\n return contract as typeof contract & {\n options: typeof contract.options & { address: string };\n };\n}\n","import { TChainId } from '../../common/types/types';\nimport { isValidChain } from '../../common/utils/isValidChain';\nimport {\n rpcUrlConfig as defaultRpcUrlConfig,\n TRpcUrlConfig,\n} from '../../provider/rpcUrlConfig';\n\n/**\n * Get RPC URL configuration for a specific chain.\n * Validates chain support and RPC URL availability.\n *\n * @param {TChainId} chainId - Chain ID to get RPC config for\n * @param {string} [rpcUrl] - Optional custom RPC URL\n * @returns {TRpcUrlConfig} RPC URL configuration for the chain\n * @throws {Error} If chain is not supported or RPC URL is not found\n */\nexport function getRpcUrlConfigFromChain(\n chainId: TChainId,\n rpcUrl?: string,\n): TRpcUrlConfig {\n if (!isValidChain(chainId)) {\n throw new Error(`This chain ${chainId} is not supported`);\n }\n\n const rpcUrlConfig: TRpcUrlConfig = rpcUrl\n ? { [chainId]: rpcUrl }\n : defaultRpcUrlConfig;\n\n if (!rpcUrlConfig[chainId]) {\n throw new Error(`RPC URL for chainId ${chainId} not found`);\n }\n\n return rpcUrlConfig;\n}\n","import BigNumber from 'bignumber.js';\nimport { TChainId } from '../../common/types/types';\nimport { fromSatoshi } from '../../common/utils/convertSatoshi';\nimport { ReadProvider } from '../../provider/ReadProvider';\nimport { chainIdToEnv } from '../utils/chainIdToEnv';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getRpcUrlConfigFromChain } from '../utils/getRpcUrlConfigFromChain';\n\nexport interface IGetLBTCMintingFeeParams {\n /**\n * Chain ID\n */\n chainId: TChainId;\n /**\n * Bake gas estimate\n */\n bakeGasEstimate?: number;\n /**\n * RPC URL\n */\n rpcUrl?: string;\n}\n\n/**\n * Get LBTC minting fee.\n *\n * @param chainId - Chain ID\n * @param bakeGasEstimate - Bake gas estimate\n * @param rpcUrl - RPC URL\n *\n * @returns LBTC minting fee\n */\nexport async function getLBTCMintingFee({\n chainId,\n bakeGasEstimate = 0,\n rpcUrl,\n}: IGetLBTCMintingFeeParams): Promise<BigNumber> {\n const rpcUrlConfig = getRpcUrlConfigFromChain(chainId, rpcUrl);\n const provider = new ReadProvider({ chainId, rpcUrlConfig });\n const env = chainIdToEnv(chainId);\n const tokenContract = getLbtcTokenContract(provider, env);\n\n const fee: bigint = await tokenContract.methods.getMintFee().call();\n const feeBtc = new BigNumber(fromSatoshi(fee.toString(10)));\n if (bakeGasEstimate) {\n const total = feeBtc.plus(fromSatoshi(bakeGasEstimate));\n return total;\n }\n\n return feeBtc;\n}\n","import Web3, { Contract, ContractAbi, Transaction, utils } from 'web3';\nimport { IEIP1193Provider } from '../common/types/types';\nimport { IReadProviderParams, ReadProvider } from './ReadProvider';\nimport {\n TRpcUrlConfig,\n rpcUrlConfig as defaultRpcUrlConfig,\n} from './rpcUrlConfig';\nimport { ISendOptions, IWeb3SendResult } from './types';\n\nexport interface IProviderParams extends IReadProviderParams {\n /**\n * The EIP-1193 provider instance.\n */\n provider: IEIP1193Provider;\n /**\n * The сurrent account address.\n */\n account: string;\n}\n\n/**\n * Provider for interacting with a blockchain network.\n */\nexport class Provider extends ReadProvider {\n web3: Web3;\n account: string;\n rpcConfig: TRpcUrlConfig = defaultRpcUrlConfig;\n\n constructor({ provider, account, chainId, rpcUrlConfig }: IProviderParams) {\n super({ chainId, rpcUrlConfig });\n this.web3 = new Web3(provider);\n this.account = account;\n this.chainId = chainId;\n this.rpcConfig = { ...defaultRpcUrlConfig, ...rpcUrlConfig };\n }\n\n /**\n * Signs a message using the current provider and account.\n * @public\n * @param message - The message to be signed.\n * @returns A promise that resolves to the signed message as a string.\n */\n public async signMessage(message: string): Promise<string> {\n const { account } = this;\n\n const messageHex = `0x${Buffer.from(message, 'utf8').toString('hex')}`;\n\n const ethereum = this.web3.currentProvider as any;\n\n return ethereum.request({\n method: 'personal_sign',\n params: [messageHex, account],\n });\n }\n\n /**\n * Custom replacement for web3js [send](https://docs.web3js.org/libdocs/Contract#send).\n *\n * @public\n * @param {string} from - Address of the sender.\n * @param {string} to - Address of the recipient.\n * @param {ISendOptions} sendOptions - Options for sending transaction.\n * @returns {Promise<IWeb3SendResult>} Promise with transaction hash and receipt promise.\n */\n public async sendTransactionAsync(\n from: string,\n to: string,\n sendOptions: ISendOptions,\n ): Promise<IWeb3SendResult> {\n const { chainId, web3: web3Write } = this;\n const web3Read = this.getReadWeb3();\n\n const {\n data,\n estimate = false,\n estimateFee = false,\n extendedGasLimit,\n gasLimit = '0',\n value = '0',\n gasLimitMultiplier = 1,\n } = sendOptions;\n let { nonce } = sendOptions;\n\n if (!nonce) {\n nonce = await web3Read.eth.getTransactionCount(from);\n }\n\n console.log(`Nonce: ${nonce}`);\n\n const tx: Transaction = {\n from,\n to,\n value: utils.numberToHex(value),\n data,\n nonce,\n chainId: utils.numberToHex(chainId),\n };\n\n if (estimate) {\n try {\n const estimatedGas = await web3Read.eth.estimateGas(tx);\n const multipliedGasLimit = Math.round(\n Number(estimatedGas) * gasLimitMultiplier,\n );\n\n if (extendedGasLimit) {\n tx.gas = utils.numberToHex(multipliedGasLimit + extendedGasLimit);\n } else {\n tx.gas = utils.numberToHex(multipliedGasLimit);\n }\n } catch (e) {\n throw new Error(\n (e as Partial<Error>).message ??\n 'Failed to estimate gas limit for transaction.',\n );\n }\n } else {\n tx.gas = utils.numberToHex(gasLimit);\n }\n\n const { maxFeePerGas, maxPriorityFeePerGas } = estimateFee\n ? await this.getMaxFees().catch(() => sendOptions)\n : sendOptions;\n\n if (maxPriorityFeePerGas !== undefined) {\n tx.maxPriorityFeePerGas = utils.numberToHex(maxPriorityFeePerGas);\n }\n\n if (maxFeePerGas !== undefined) {\n tx.maxFeePerGas = utils.numberToHex(maxFeePerGas);\n }\n\n if (!tx.maxFeePerGas && !tx.maxPriorityFeePerGas) {\n const safeGasPrice = await this.getSafeGasPriceWei();\n tx.gasPrice = safeGasPrice.toString(10);\n }\n\n if (!tx.maxFeePerGas && !tx.maxPriorityFeePerGas) {\n const safeGasPrice = await this.getSafeGasPriceWei();\n tx.gasPrice = safeGasPrice.toString(10);\n }\n\n console.log('Sending transaction via Web3: ', tx);\n\n return new Promise((resolve, reject) => {\n const promise = web3Write.eth.sendTransaction(tx);\n\n promise\n .once('transactionHash', async (transactionHash: string) => {\n console.log(`Just signed transaction has is: ${transactionHash}`);\n\n resolve({\n receiptPromise: promise,\n transactionHash,\n });\n })\n .catch(reject);\n });\n }\n\n public createContract<AbiType extends ContractAbi>(\n abi: any,\n address: string,\n ): Contract<AbiType> {\n return new this.web3.eth.Contract<AbiType>(abi, address);\n }\n}\n","import { Provider } from '../../provider';\nimport { IProviderBasedParams } from '../types';\n\nexport type SignLbtcDestionationAddrParams = IProviderBasedParams;\n\n/**\n * Signs the destination address for the LBTC in active chain\n * in the current account. Signing is necessary for the\n * generation of the deposit address.\n *\n * @param {SignLbtcDestionationAddrParams} params\n *\n * @returns {Promise<string>} The signature of the message.\n */\nexport async function signLbtcDestionationAddr(\n params: SignLbtcDestionationAddrParams,\n): Promise<string> {\n const provider = new Provider(params);\n\n const message = `destination chain id is ${params.chainId}`;\n\n return provider.signMessage(message);\n}\n","export const SECONDS_PER_DAY = 24 * 60 * 60;\nexport const MS_PER_DAY = SECONDS_PER_DAY * 1000;\n","interface IGetTypedData {\n chainId: number;\n verifyingContract: string;\n fee: string;\n expiry: number;\n}\n\nexport function getTypedData({\n chainId,\n verifyingContract,\n fee,\n expiry,\n}: IGetTypedData) {\n return {\n domain: {\n name: 'Lombard Staked Bitcoin',\n version: '1',\n chainId,\n verifyingContract,\n },\n message: {\n chainId,\n fee,\n expiry,\n },\n primaryType: 'feeApproval',\n types: {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n feeApproval: [\n { name: 'chainId', type: 'uint256' },\n { name: 'fee', type: 'uint256' },\n { name: 'expiry', type: 'uint256' },\n ],\n },\n };\n}\n","import { IEnvParam } from '../../common/types/internalTypes';\nimport { Provider } from '../../provider';\nimport { SECONDS_PER_DAY } from '../const';\nimport { IProviderBasedParams } from '../types';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getTypedData } from './getTypedData';\n\nconst NO_SIGNATURE_ERROR =\n 'Failed to obtain a valid signature. The response is undefined or invalid.';\n\nexport interface ISignNetworkFeeParams\n extends Pick<IProviderBasedParams, 'provider' | 'chainId'>,\n IEnvParam {\n /**\n * User address\n */\n address: string;\n /**\n * Authorization fee\n */\n fee: string;\n /**\n * Expiration time\n */\n expiry: number;\n}\n\nexport interface ISignNetworkFeeResponse {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n}\n\nconst getDefaultExpiryUnix = () => {\n return Math.floor(Date.now() / 1000 + SECONDS_PER_DAY);\n};\n\n/**\n * Signs the network fee transaction in the current account.\n * Signing is necessary for the auto-mint.\n *\n * @param {ISignNetworkFeeParams} params - The parameters for signing network fee\n * @returns {Promise<ISignNetworkFeeResponse>} A promise that resolves to the signature and typed data\n */\nexport async function signNetworkFee({\n address,\n provider,\n fee,\n chainId,\n env,\n expiry = getDefaultExpiryUnix(),\n}: ISignNetworkFeeParams): Promise<ISignNetworkFeeResponse> {\n const providerInstance = new Provider({\n provider,\n account: address,\n chainId,\n });\n\n const tokenContract = getLbtcTokenContract(providerInstance, env);\n const verifyingContract = tokenContract.options.address;\n const typedData = JSON.stringify(\n getTypedData({\n chainId,\n verifyingContract,\n fee,\n expiry,\n }),\n );\n\n const signature = await providerInstance.web3?.currentProvider?.request<\n 'eth_signTypedData_v4',\n string\n >({\n method: 'eth_signTypedData_v4',\n params: [address, typedData],\n });\n\n if (typeof signature === 'string') {\n return { signature, typedData: typedData };\n }\n\n if (!signature?.result) {\n throw new Error(NO_SIGNATURE_ERROR);\n }\n\n return { signature: signature.result, typedData: typedData };\n}\n","import { TChainId } from '../../common/types/types';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { ReadProvider } from '../../provider/ReadProvider';\nimport { chainIdToEnv } from '../utils/chainIdToEnv';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getRpcUrlConfigFromChain } from '../utils/getRpcUrlConfigFromChain';\n\nexport interface IGetPermitNonceParams {\n /**\n * Owner address to check permit nonce for\n */\n owner: string;\n /**\n * Chain ID of the network\n */\n chainId: TChainId;\n /**\n * RPC URL for the network (optional)\n */\n rpcUrl?: string;\n}\n\n/**\n * Get permit nonce for a specific owner address from LBTC contract.\n * This nonce is used in EIP-2612 permit operations.\n *\n * @param {IGetPermitNonceParams} params - Parameters for getting permit nonce\n * @returns {Promise<string>} Promise that resolves to the permit nonce value\n */\nexport async function getPermitNonce({\n owner,\n rpcUrl,\n chainId,\n}: IGetPermitNonceParams): Promise<string> {\n const rpcUrlConfig = getRpcUrlConfigFromChain(chainId, rpcUrl);\n const provider = new ReadProvider({ chainId, rpcUrlConfig });\n const env = chainIdToEnv(chainId);\n const tokenContract = getLbtcTokenContract(provider, env);\n\n try {\n const nonce: bigint = await tokenContract.methods.nonces(owner).call();\n return nonce.toString();\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n throw new Error(errorMessage);\n }\n}\n","import { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { getPermitNonce } from '../getPermitNonce';\nimport { getLbtcAddressConfig } from '../lbtcAddressConfig';\n\nexport interface IStakeAndBakeTypedData extends IEnvParam {\n chainId: TChainId;\n expiryDate: number;\n owner: string;\n spender: string;\n value: string;\n rpcUrl?: string;\n}\n\n/**\n * Generates EIP-712 typed data for stake and bake signature\n *\n * @param {IStakeAndBakeTypedData} params - Parameters for generating typed data\n * @returns {object} The typed data object conforming to EIP-712\n */\nexport async function getStakeAndBakeTypedData({\n chainId,\n expiryDate,\n owner,\n spender,\n value,\n env,\n rpcUrl,\n}: IStakeAndBakeTypedData) {\n const lbtcAddresses = getLbtcAddressConfig(env);\n const verifyingContract = lbtcAddresses[chainId];\n\n const nonce = await getPermitNonce({\n owner,\n chainId,\n rpcUrl,\n });\n\n return {\n domain: {\n name: 'Lombard Staked Bitcoin',\n version: '1',\n chainId,\n verifyingContract,\n },\n types: {\n EIP712Domain: [\n {\n name: 'name',\n type: 'string',\n },\n {\n name: 'version',\n type: 'string',\n },\n {\n name: 'chainId',\n type: 'uint256',\n },\n {\n name: 'verifyingContract',\n type: 'address',\n },\n ],\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n primaryType: 'Permit',\n message: {\n owner,\n spender,\n value,\n nonce,\n deadline: expiryDate.toString(),\n },\n };\n}\n","import { OChainId, TChainId } from '../../common/types/types';\n\nexport const STAKE_AND_BAKE_SPENDER_ADDRESSES: Record<number, string> = {\n [OChainId.holesky]: '0x52BD640617eeD47A00dA0da93351092D49208d1d',\n};\n\nexport const getStakeAndBakeSpenderAddress = (chainId: TChainId): string => {\n const address = STAKE_AND_BAKE_SPENDER_ADDRESSES[chainId];\n if (!address) {\n throw new Error(`No spender address configured for chain ID ${chainId}`);\n }\n return address;\n};\n","import { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { Provider } from '../../provider';\nimport { IProviderBasedParams } from '../types';\nimport { getStakeAndBakeSpenderAddress } from './config';\nimport { getStakeAndBakeTypedData } from './getTypedData';\n\nconst NO_SIGNATURE_ERROR =\n 'Failed to obtain a valid signature. The response is undefined or invalid.';\n\nexport interface ISignStakeAndBakeParams\n extends Pick<IProviderBasedParams, 'provider'>,\n IEnvParam {\n /**\n * The address to sign with (owner)\n */\n address: string;\n /**\n * Chain ID for the signature\n */\n chainId: TChainId;\n /**\n * The value to approve\n */\n value: string;\n /**\n * Expiry date in seconds\n */\n expiryDate: number;\n /**\n * Optional RPC URL for the network\n */\n rpcUrl?: string;\n}\n\nexport interface ISignStakeAndBakeResult {\n /**\n * The signature\n */\n signature: string;\n /**\n * The typed data used to generate the signature\n */\n typedData: string;\n}\n\n/**\n * Signs stake and bake authorization with EIP-712\n *\n * @param {ISignStakeAndBakeParams} params - Parameters for signing\n * @returns {Promise<ISignStakeAndBakeResult>} The signature and typed data\n */\nexport async function signStakeAndBake({\n address,\n provider,\n chainId,\n value,\n env,\n expiryDate,\n rpcUrl,\n}: ISignStakeAndBakeParams): Promise<ISignStakeAndBakeResult> {\n const providerInstance = new Provider({\n provider,\n account: address,\n chainId,\n });\n\n const spender = getStakeAndBakeSpenderAddress(chainId);\n\n const typedDataObject = await getStakeAndBakeTypedData({\n chainId,\n expiryDate,\n owner: address,\n spender,\n value,\n env,\n rpcUrl,\n });\n\n const typedData = JSON.stringify(typedDataObject);\n\n const signature = await providerInstance.web3?.currentProvider?.request<\n 'eth_signTypedData_v4',\n string\n >({\n method: 'eth_signTypedData_v4',\n params: [address, typedData],\n });\n\n if (typeof signature === 'string') {\n return { signature, typedData };\n }\n\n if (!signature?.result) {\n throw new Error(NO_SIGNATURE_ERROR);\n }\n\n return { signature: signature.result, typedData };\n}\n"],"names":["OEnv","OChainId","getEthNetworkByEnv","env","getBscNetworkByEnv","getBaseNetworkByEnv","defaultEnv","ZERO_ADDRESS","stageConfig","testnetConfig","prodConfig","getApiConfig","getErrorMessage","error","err","_a","getAxiosErrorMessage","getErrorMessageFromObject","OChainName","getChainNameById","chainId","SANCTIONED_ADDRESS","ADDRESS_URL","SANCTIONS_MESSAGE","generateDepositBtcAddress","address","signature","eip712Data","referrerCode","partnerId","captchaToken","baseApiUrl","toChain","requestParams","data","axios","errorMsg","isSanctioned","getDepositBtcAddress","addresses","getDepositBtcAddresses","addressData","getActualAddress","actualAddress","acc","toBlockchain","requestrParams","BTC_DECIMALS","SATOSHI_SCALE","fromSatoshi","amount","toSatoshi","getChainIdByName","chain","ENotarizationStatus","ESessionState","getDepositsByAddress","mapResponse","BigNumber","MIN_STAKE_AMOUNT_BTC","getLBTCExchangeRate","chainIdName","minAmount","getNetworkFeeSignature","errorMessage","storeNetworkFeeSignature","typedData","storeStakeAndBakeSignature","rpcUrlConfig","getMaxPriorityFeePerGas","rpcUrl","convertedHexValue","Web3","FEE_MULTIPLIER","ADDITIONAL_SAFE_GAS_PRICE_WEI","ReadProvider","__publicField","defaultRpcUrlConfig","readWeb3","provider","web3","block","maxPriorityFeePerGas","pureGasPriceWei","abi","PROD_NATIVE_MINT_CHAINS","chainIdToEnv","isValidChain","PLACEHOLDER_ADDRESS","getLbtcAddressConfig","getTokenABI","token","LBTCABI","IERC20","getLbtcTokenContract","lbtcAddressConfig","tokenAddress","contract","getRpcUrlConfigFromChain","getLBTCMintingFee","bakeGasEstimate","fee","feeBtc","Provider","account","message","messageHex","from","to","sendOptions","web3Write","web3Read","estimate","estimateFee","extendedGasLimit","gasLimit","value","gasLimitMultiplier","nonce","tx","utils","estimatedGas","multipliedGasLimit","e","maxFeePerGas","safeGasPrice","resolve","reject","promise","transactionHash","signLbtcDestionationAddr","params","SECONDS_PER_DAY","getTypedData","verifyingContract","expiry","NO_SIGNATURE_ERROR","getDefaultExpiryUnix","signNetworkFee","providerInstance","_b","getPermitNonce","owner","tokenContract","getStakeAndBakeTypedData","expiryDate","spender","STAKE_AND_BAKE_SPENDER_ADDRESSES","getStakeAndBakeSpenderAddress","signStakeAndBake","typedDataObject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/common/types/types.ts","../src/common/const.ts","../src/sdk/apiConfig.ts","../src/common/utils/getErrorMessage.ts","../src/sdk/internalTypes.ts","../src/sdk/utils/getChainNameById.ts","../src/sdk/generateDepositBtcAddress/generateDepositBtcAddress.ts","../src/sdk/getDepositBtcAddress/getDepositBtcAddress.ts","../src/common/utils/convertSatoshi.ts","../src/sdk/utils/getChainIdByName.ts","../src/sdk/getDepositsByAddress/getDepositsByAddress.ts","../src/sdk/const.ts","../src/sdk/getLBTCExchangeRate/getLBTCExchangeRate.ts","../src/sdk/getNetworkFeeSignature/getNetworkFeeSignature.ts","../src/sdk/storeNetworkFeeSignature/storeNetworkFeeSignature.ts","../src/sdk/storeStakeAndBakeSignature/storeStakeAndBakeSignature.ts","../src/provider/rpcUrlConfig.ts","../src/provider/utils/getMaxPriorityFeePerGas.ts","../src/provider/ReadProvider.ts","../src/web3Sdk/utils/chainIdToEnv.ts","../src/common/utils/isValidChain.ts","../src/web3Sdk/lbtcAddressConfig.ts","../src/web3Sdk/utils/getTokenABI.ts","../src/web3Sdk/utils/getLbtcTokenContract.ts","../src/web3Sdk/utils/getRpcUrlConfigFromChain.ts","../src/web3Sdk/getLBTCMintingFee/getLBTCMintingFee.tsx","../src/provider/Provider.ts","../src/web3Sdk/signLbtcDestionationAddr/signLbtcDestionationAddr.ts","../src/web3Sdk/const.ts","../src/web3Sdk/signNetworkFee/getTypedData.ts","../src/web3Sdk/signNetworkFee/signNetworkFee.ts","../src/web3Sdk/getPermitNonce/getPermitNonce.ts","../src/web3Sdk/signStakeAndBake/getTypedData.ts","../src/web3Sdk/signStakeAndBake/signStakeAndBake.ts","../src/web3Sdk/signStakeAndBake/config.ts"],"sourcesContent":["export const OEnv = {\n prod: 'prod',\n testnet: 'testnet',\n stage: 'stage',\n} as const;\n\nexport type TEnv = (typeof OEnv)[keyof typeof OEnv];\n\nexport const OChainId = {\n ethereum: 1,\n holesky: 17000,\n binanceSmartChain: 56,\n binanceSmartChainTestnet: 97,\n sepolia: 11155111,\n base: 8453,\n baseTestnet: 84532,\n berachainBartioTestnet: 80084,\n\n corn: 21000000,\n swell: 1923,\n} as const;\n\nexport type TChainId = (typeof OChainId)[keyof typeof OChainId];\n\nexport type TOFTChainId =\n | (typeof OChainId)['berachainBartioTestnet']\n | (typeof OChainId)['sepolia']\n | (typeof OChainId)['corn']\n | (typeof OChainId)['ethereum']\n | (typeof OChainId)['swell'];\n\n/**\n * Abstract EIP-1193 provider\n */\nexport interface IEIP1193Provider {\n request: (args: any) => Promise<any>;\n}\n\nexport const getEthNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod ? OChainId.ethereum : OChainId.holesky;\n\nexport const getBscNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod\n ? OChainId.binanceSmartChain\n : OChainId.binanceSmartChainTestnet;\n\nexport const getBaseNetworkByEnv = (env: TEnv) =>\n env === OEnv.prod ? OChainId.base : OChainId.baseTestnet;\n","import { OEnv, TEnv } from './types/types';\n\nexport const defaultEnv: TEnv = OEnv.prod;\n\n/**\n * Address of the zero account.\n * Can also be used as a placeholder for unknown addresses.\n */\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n","import { defaultEnv } from '../common/const';\nimport { OEnv, TEnv } from '../common/types/types';\n\ninterface IApiConfig {\n baseApiUrl: string;\n}\n\nconst stageConfig: IApiConfig = {\n baseApiUrl: 'https://staging.prod.lombard.finance',\n};\n\nconst testnetConfig: IApiConfig = {\n baseApiUrl: 'https://gastald-testnet.prod.lombard.finance',\n};\n\nconst prodConfig: IApiConfig = {\n baseApiUrl: 'https://mainnet.prod.lombard.finance',\n};\n\nexport const getApiConfig = (env: TEnv = defaultEnv): IApiConfig => {\n switch (env) {\n case OEnv.prod:\n return prodConfig;\n case OEnv.testnet:\n return testnetConfig;\n default:\n return stageConfig;\n }\n};\n","import { AxiosError } from 'axios';\n\n/**\n * Retrieves the error message from the given error object.\n *\n * @param error - The error object.\n * @returns The error message as a string.\n */\nexport function getErrorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n const hasDataMessage = (err: any): err is { data: { message: string } } =>\n err?.data?.message && typeof err.data.message === 'string';\n\n if (hasDataMessage(error)) {\n return error.data.message;\n }\n\n if (error instanceof Error) {\n return getAxiosErrorMessage(error as AxiosError);\n }\n\n return getErrorMessageFromObject(error);\n}\n\nfunction getAxiosErrorMessage(error: AxiosError): string {\n if (error.response) {\n return (error.response.data as { message: string }).message;\n }\n\n return error.message;\n}\n\nfunction getErrorMessageFromObject(error: any): string {\n if (error?.message) {\n return error.message;\n }\n\n return 'Unknown error';\n}\n","export const OChainName = {\n eth: 'DESTINATION_BLOCKCHAIN_ETHEREUM',\n base: 'DESTINATION_BLOCKCHAIN_BASE',\n bsc: 'DESTINATION_BLOCKCHAIN_BSC',\n mantle: 'DESTINATION_BLOCKCHAIN_MANTLE',\n linea: 'DESTINATION_BLOCKCHAIN_LINEA',\n zcircuit: 'DESTINATION_BLOCKCHAIN_ZIRCUIT',\n scroll: 'DESTINATION_BLOCKCHAIN_SCROLL',\n xlayer: 'DESTINATION_BLOCKCHAIN_XLAYER',\n} as const;\n\nexport type TChainName = (typeof OChainName)[keyof typeof OChainName];\n","import { OChainId, TChainId } from '../../common/types/types';\nimport { OChainName, TChainName } from '../internalTypes';\n\n/**\n * @param chainId the chain ID\n *\n * @returns the chain name\n */\nexport function getChainNameById(chainId: TChainId): TChainName {\n switch (chainId) {\n case OChainId.ethereum:\n case OChainId.holesky:\n case OChainId.sepolia:\n return OChainName.eth;\n case OChainId.base:\n case OChainId.baseTestnet:\n return OChainName.base;\n case OChainId.binanceSmartChain:\n case OChainId.binanceSmartChainTestnet:\n return OChainName.bsc;\n default:\n throw new Error(`Unknown chain ID: ${chainId}`);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\nimport { getChainNameById } from '../utils/getChainNameById';\n\n/**\n * The address wich will be returned if the provided EVM address is sanctioned.\n */\nexport const SANCTIONED_ADDRESS = 'sanctioned_address';\nconst ADDRESS_URL = 'api/v1/address/generate';\nconst SANCTIONS_MESSAGE = 'destination address is under sanctions';\n\ninterface IGenerateNewAddressResponse {\n address: string;\n}\n\nexport interface IGenerateDepositBtcAddressParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The destination chain ID where LBTC will be claimed.\n */\n chainId: TChainId;\n /**\n * The signature of the address. The signature is generated by signing the address using EVM wallet.\n */\n signature: string;\n /**\n * The typed data object used to generate the signature if using a network fee authorization signature.\n */\n eip712Data?: string;\n /**\n * The captcha token.\n */\n captchaToken?: string;\n /**\n * The referrer code.\n */\n referrerCode?: string;\n /**\n * The referral ID.\n */\n partnerId?: string;\n}\n\n/**\n * Generates a BTC deposit address.\n *\n * If the provided EVM address is sanctioned, the function will return the `SANCTIONED_ADDRESS`.\n *\n * @param {IGenerateDepositBtcAddressParams} params - The parameters for generating the deposit address.\n * @returns {Promise<string>} The generated deposit address.\n */\nexport async function generateDepositBtcAddress({\n address,\n chainId,\n signature,\n eip712Data,\n env,\n referrerCode,\n partnerId,\n captchaToken,\n}: IGenerateDepositBtcAddressParams): Promise<string> {\n const { baseApiUrl } = getApiConfig(env);\n const toChain = getChainNameById(chainId);\n\n const requestParams = {\n to_address: address,\n to_address_signature: signature,\n to_chain: toChain,\n partner_id: partnerId,\n nonce: 0,\n captcha: captchaToken,\n referrer_code: referrerCode,\n eip_712_data: eip712Data,\n };\n\n try {\n const { data } = await axios.post<IGenerateNewAddressResponse>(\n ADDRESS_URL,\n requestParams,\n { baseURL: baseApiUrl },\n );\n\n return data.address;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n if (isSanctioned(errorMsg)) {\n return SANCTIONED_ADDRESS;\n } else {\n throw new Error(errorMsg);\n }\n }\n}\n\nfunction isSanctioned(errorMsg: string): boolean {\n return !!errorMsg.includes(SANCTIONS_MESSAGE);\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId } from '../../common/types/types';\nimport { getApiConfig } from '../apiConfig';\nimport { TChainName } from '../internalTypes';\nimport { getChainNameById } from '../utils/getChainNameById';\n\nconst ADDRESS_URL = 'api/v1/address';\n\ntype TPartnerId = 'lombard' | string;\n\ninterface IDepositAddress {\n btc_address: string;\n created_at: string;\n deprecated?: boolean;\n type: string;\n used?: boolean;\n deposit_metadata: {\n referral: TPartnerId;\n partner_id: TPartnerId;\n to_address: string;\n to_blockchain: TChainName;\n };\n}\n\ninterface IDepositAddressesResponse {\n addresses: IDepositAddress[];\n has_more?: boolean;\n}\n\nexport interface IGetDepositBtcAddressParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The destination chain ID where LBTC will be claimed.\n */\n chainId: TChainId;\n /**\n * The referral ID.\n */\n partnerId: TPartnerId;\n}\n\n/**\n * Returns the address for depositing BTC.\n *\n * @param {IGetDepositBtcAddressParams} params - function parameters\n *\n * @returns {Promise<string>} the address for depositing BTC\n */\nexport async function getDepositBtcAddress({\n address,\n chainId,\n env,\n partnerId,\n}: IGetDepositBtcAddressParams): Promise<string> {\n const addresses = await getDepositBtcAddresses({\n address,\n chainId,\n env,\n partnerId,\n });\n\n const addressData = getActualAddress(addresses);\n\n if (!addressData) {\n throw new Error('No address');\n }\n\n return addressData.btc_address;\n}\n\n/**\n * Retrieves the actual deposit address from a list of deposit addresses.\n *\n * @param addresses - The list of deposit addresses.\n * @returns The actual deposit address or undefined if the last created address is deprecated.\n */\nfunction getActualAddress(\n addresses: IDepositAddress[],\n): IDepositAddress | undefined {\n if (!addresses.length) {\n return undefined;\n }\n\n const actualAddress = addresses.reduce((acc, address) => {\n if (acc.created_at < address.created_at) {\n return address;\n }\n return acc;\n }, addresses[0]);\n\n return actualAddress.deprecated ? undefined : actualAddress;\n}\n\n/**\n * Returns the addresses for depositing BTC.\n *\n * @param {IGetDepositBtcAddressParams} params - function parameters\n *\n * @returns {Promise<IDepositAddress[]>} the deposit addresses\n */\nexport async function getDepositBtcAddresses({\n address,\n chainId,\n env,\n partnerId,\n}: IGetDepositBtcAddressParams): Promise<IDepositAddress[]> {\n const { baseApiUrl } = getApiConfig(env);\n const toBlockchain = getChainNameById(chainId);\n\n const requestrParams = {\n to_address: address,\n to_blockchain: toBlockchain,\n limit: 1,\n offset: 0,\n asc: false,\n referralId: partnerId,\n };\n\n const { data } = await axios.get<IDepositAddressesResponse>(ADDRESS_URL, {\n baseURL: baseApiUrl,\n params: requestrParams,\n });\n\n return data?.addresses || [];\n}\n","const BTC_DECIMALS = 8;\nexport const SATOSHI_SCALE = 10 ** BTC_DECIMALS;\n\n/**\n * Convert Satoshi to BTC\n * @param amount - Satoshi amount\n * @returns BTC amount\n */\nexport function fromSatoshi(amount: number | string) {\n return +amount / SATOSHI_SCALE;\n}\n\n/**\n * Convert BTC to Satoshi\n *\n * @param amount - BTC amount\n * @returns Satoshi amount\n */\nexport function toSatoshi(amount: number | string) {\n return Math.floor(+amount * SATOSHI_SCALE);\n}\n","import { defaultEnv } from '../../common/const';\nimport {\n getBaseNetworkByEnv,\n getBscNetworkByEnv,\n getEthNetworkByEnv,\n OChainId,\n TChainId,\n TEnv,\n} from '../../common/types/types';\nimport { OChainName, TChainName } from '../internalTypes';\n\n/**\n * @param chainId the chain ID\n *\n * @returns the chain name\n */\nexport function getChainIdByName(\n chain: string,\n env: TEnv = defaultEnv,\n): TChainId {\n switch (chain as TChainName) {\n case OChainName.eth:\n return getEthNetworkByEnv(env);\n case OChainName.base:\n return getBaseNetworkByEnv(env);\n case OChainName.bsc:\n return getBscNetworkByEnv(env);\n\n default:\n return OChainId.ethereum;\n }\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { TChainId, TEnv } from '../../common/types/types';\nimport { fromSatoshi } from '../../common/utils/convertSatoshi';\nimport { getApiConfig } from '../apiConfig';\nimport { getChainIdByName } from '../utils/getChainIdByName';\n\ntype Address = string;\ntype Seconds = number;\n\nexport enum ENotarizationStatus {\n NOTARIZATION_STATUS_UNSPECIFIED = 'NOTARIZATION_STATUS_UNSPECIFIED',\n // actually initial status for a deposit tx\n NOTARIZATION_STATUS_PENDING = 'NOTARIZATION_STATUS_PENDING',\n // the deposit was sent to the notarization\n NOTARIZATION_STATUS_SUBMITTED = 'NOTARIZATION_STATUS_SUBMITTED',\n // notarization was approved\n NOTARIZATION_STATUS_SESSION_APPROVED = 'NOTARIZATION_STATUS_SESSION_APPROVED',\n // notarization was failed\n NOTARIZATION_STATUS_FAILED = 'NOTARIZATION_STATUS_FAILED',\n}\n\nexport enum ESessionState {\n SESSION_STATE_UNSPECIFIED = 'SESSION_STATE_UNSPECIFIED',\n SESSION_STATE_PENDING = 'SESSION_STATE_PENDING',\n SESSION_STATE_COMPLETED = 'SESSION_STATE_COMPLETED',\n SESSION_STATE_EXPIRED = 'SESSION_STATE_EXPIRED',\n}\n\ninterface IDepositResponse {\n txid: string;\n value: number;\n address: Address;\n to_chain: string;\n notarization_wait_dur?: string | number;\n index?: number;\n raw_payload?: string;\n payload_hash?: string;\n proof?: string;\n claim_tx?: string; // tx on the destination chain\n block_height?: string;\n block_time?: string;\n sanctioned?: boolean;\n\n session_id: number;\n notarization_status: ENotarizationStatus;\n session_state: ESessionState;\n}\n\ninterface IDepositsByAddressResponse {\n outputs: IDepositResponse[];\n}\n\nexport interface IDeposit {\n txid: string;\n index?: number;\n blockHeight?: number;\n blockTime?: number;\n value: BigNumber;\n address: Address;\n chainId: TChainId;\n isClaimed?: boolean;\n claimedTxId?: string;\n rawPayload?: string;\n signature?: string;\n isRestricted?: boolean;\n notarizationWaitDur?: Seconds;\n // bascule hash id\n payload?: string;\n\n sessionId: number;\n notarizationStatus: ENotarizationStatus;\n sessionState: ESessionState;\n fromChainId?: TChainId;\n toChainId?: TChainId;\n status?: string;\n}\n\nexport interface IGetDepositsByAddressParams extends IEnvParam {\n /**\n * The EVM address to get deposits for\n */\n address: Address;\n}\n\n/**\n * Returns all deposits for a given address\n *\n * @param {IGetDepositsByAddressParams} params\n *\n * @returns {Promise<IDeposit[]>} a list of deposits\n */\nexport async function getDepositsByAddress({\n address,\n env,\n}: IGetDepositsByAddressParams): Promise<IDeposit[]> {\n const { baseApiUrl } = getApiConfig(env);\n\n const { data } = await axios.get<IDepositsByAddressResponse | undefined>(\n `api/v1/address/outputs-v2/${address}`,\n { baseURL: baseApiUrl },\n );\n\n const outputs = data?.outputs ?? [];\n\n return outputs.map(mapResponse(env));\n}\n\nfunction mapResponse(env?: TEnv) {\n return (data: IDepositResponse): IDeposit => ({\n txid: data.txid,\n index: data.index ?? 0,\n blockHeight: data.block_height ? Number(data.block_height) : undefined,\n blockTime: data.block_time ? Number(data.block_time) : undefined,\n value: new BigNumber(fromSatoshi(data.value)),\n address: data.address,\n chainId: getChainIdByName(data.to_chain, env),\n claimedTxId: data.claim_tx,\n rawPayload: data.raw_payload,\n signature: data.proof,\n isRestricted: !!data.sanctioned,\n notarizationWaitDur: data.notarization_wait_dur\n ? Number(data.notarization_wait_dur)\n : undefined,\n payload: data.payload_hash,\n sessionId: data.session_id,\n notarizationStatus: data.notarization_status,\n sessionState: data.session_state,\n });\n}\n","export const MIN_STAKE_AMOUNT_BTC = 0.0002;\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { OChainId, TChainId } from '../../common/types/types';\nimport { SATOSHI_SCALE } from '../../common/utils/convertSatoshi';\nimport { getApiConfig } from '../apiConfig';\nimport { MIN_STAKE_AMOUNT_BTC } from '../const';\nimport { getChainNameById } from '../utils/getChainNameById';\n\ntype ExchangeRateResponse = {\n amount_out: string;\n};\n\nexport interface IgetLBTCExchangeRateParams extends IEnvParam {\n /**\n * The chain id of the asset to get the exchange rate for. Exchange rate is the same for all chains so this param is optional.\n *\n * @default OChainId.ethereum\n */\n chainId?: TChainId;\n /**\n * The amount of the asset to get the exchange rate for. If not provided, the exchange rate will be returned for 1 BTC.\n *\n * @default 1\n */\n amount?: number;\n}\n\nexport interface IgetLBTCExchangeRateResponse {\n /**\n * The exchange rate for LBTC:BTC\n */\n exchangeRate: number;\n /**\n * The minimum amount of the asset to stake\n */\n minAmount: number;\n}\n\n/**\n * Retrieves the exchange rate for LBTC.\n *\n * @param {IgetLBTCExchangeRateParams} params\n *\n * @returns {Promise<IgetLBTCExchangeRateResponse>} - The exchange rate.\n */\nexport async function getLBTCExchangeRate({\n env,\n chainId = OChainId.ethereum,\n amount = 1,\n}: IgetLBTCExchangeRateParams): Promise<IgetLBTCExchangeRateResponse> {\n const { baseApiUrl } = getApiConfig(env);\n const chainIdName = getChainNameById(chainId);\n\n const { data } = await axios.get<ExchangeRateResponse>(\n `api/v1/exchange/rate/${chainIdName}`,\n { baseURL: baseApiUrl, params: { amount } },\n );\n\n const minAmount = new BigNumber(MIN_STAKE_AMOUNT_BTC)\n .multipliedBy(SATOSHI_SCALE)\n .toFixed();\n\n return { exchangeRate: +data.amount_out, minAmount: +minAmount };\n}\n","import axios from 'axios';\n\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport interface IGetNetworkFeeSignatureParams extends IEnvParam {\n /**\n * Chain ID of the network to interact with\n */\n chainId: number;\n /**\n * Destination address\n */\n address: string;\n}\n\ninterface IGetNetworkFeeSignatureResponse {\n /**\n * Expiration date of signature\n */\n expiration_date: string;\n /**\n * The flag signature exists\n */\n has_signature: boolean;\n /**\n * The auto mint is delayed\n */\n is_delayed: boolean;\n}\n\nexport interface IGetNetworkFeeSignatureMappedResponse {\n /**\n * Expiration date of signature\n */\n expirationDate: string;\n /**\n * The flag signature exists\n */\n hasSignature: boolean;\n /**\n * The auto mint is delayed\n */\n isDelayed: boolean;\n}\n\n/**\n * Returns the expiration date and the flag signature exists\n *\n * @returns {Promise<IGetNetworkFeeSignatureResponse>} authorize network fee sign promise\n */\nexport async function getNetworkFeeSignature({\n address,\n chainId,\n env,\n}: IGetNetworkFeeSignatureParams): Promise<IGetNetworkFeeSignatureMappedResponse> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.get<IGetNetworkFeeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/get-user-signature`,\n {\n params: {\n user_destination_address: address,\n chain_id: chainId,\n },\n },\n );\n\n return {\n expirationDate: data?.expiration_date,\n hasSignature: data?.has_signature,\n isDelayed: data?.is_delayed,\n };\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n\n throw new Error(errorMessage);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport type IStoreNetworkFeeSignatureStatus = 'success';\n\ninterface IStoreNetworkFeeSignatureResponse {\n status: IStoreNetworkFeeSignatureStatus;\n}\n\nexport interface IStoreNetworkFeeSignatureParams extends IEnvParam {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n /**\n * Destination address\n */\n address: string;\n}\n\n/**\n * Authorize network fee\n *\n * @param {IStoreNetworkFeeSignatureParams} params - The parameters for network fee authorization\n *\n * @returns {Promise<IStoreNetworkFeeSignatureResponse>} Response promise with statuses\n *\n */\nexport async function storeNetworkFeeSignature({\n signature,\n typedData,\n address,\n env,\n}: IStoreNetworkFeeSignatureParams): Promise<IStoreNetworkFeeSignatureStatus> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.post<IStoreNetworkFeeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/save-user-signature`,\n null,\n {\n params: {\n typed_data: typedData,\n signature,\n user_destination_address: address,\n },\n },\n );\n\n return data.status;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n throw new Error(errorMsg);\n }\n}\n","import axios from 'axios';\nimport { IEnvParam } from '../../common/types/internalTypes';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { getApiConfig } from '../apiConfig';\n\nexport type IStoreStakeAndBakeSignatureStatus = 'success';\n\ninterface IStoreStakeAndBakeSignatureResponse {\n status: IStoreStakeAndBakeSignatureStatus;\n}\n\nexport interface IStoreStakeAndBakeSignatureParams extends IEnvParam {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n}\n\n/**\n * Store stake and bake signature\n *\n * @param {IStoreStakeAndBakeSignatureParams} params - The parameters for storing stake and bake signature\n *\n * @returns {Promise<IStoreStakeAndBakeSignatureStatus>} Response promise with status\n *\n */\nexport async function storeStakeAndBakeSignature({\n signature,\n typedData,\n env,\n}: IStoreStakeAndBakeSignatureParams): Promise<IStoreStakeAndBakeSignatureStatus> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.post<IStoreStakeAndBakeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/save-stake-and-bake-signature`,\n null,\n {\n params: {\n typed_data: typedData,\n signature,\n },\n },\n );\n\n return data.status;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n throw new Error(errorMsg);\n }\n}","import { OChainId } from '../common/types/types';\n\nexport type TRpcUrlConfig = Record<number, string>;\n\nexport const rpcUrlConfig: TRpcUrlConfig = {\n [OChainId.ethereum]: 'https://rpc.ankr.com/eth',\n [OChainId.holesky]: 'https://rpc.ankr.com/eth_holesky',\n [OChainId.sepolia]: 'https://rpc.ankr.com/eth_sepolia',\n [OChainId.base]: 'https://rpc.ankr.com/base',\n [OChainId.baseTestnet]: 'https://rpc.ankr.com/base_sepolia',\n [OChainId.binanceSmartChain]: 'https://rpc.ankr.com/bsc',\n [OChainId.binanceSmartChainTestnet]:\n 'https://rpc.ankr.com/bsc_testnet_chapel',\n};\n","import BigNumber from 'bignumber.js';\nimport Web3 from 'web3';\n\nexport async function getMaxPriorityFeePerGas(\n rpcUrl: string,\n): Promise<BigNumber> {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_maxPriorityFeePerGas',\n params: [],\n }),\n });\n\n const data = await response.json();\n\n const convertedHexValue = Web3.utils.hexToNumber(data?.result);\n\n return new BigNumber(Number(convertedHexValue));\n}\n","import BigNumber from 'bignumber.js';\nimport { Web3, Contract, ContractAbi } from 'web3';\nimport {\n TRpcUrlConfig,\n rpcUrlConfig as defaultRpcUrlConfig,\n} from './rpcUrlConfig';\nimport { IGetMaxFeesResult } from './types';\nimport { getMaxPriorityFeePerGas } from './utils/getMaxPriorityFeePerGas';\n\nconst FEE_MULTIPLIER = 2;\nconst ADDITIONAL_SAFE_GAS_PRICE_WEI = 25_000;\n\nexport interface IReadProviderParams {\n /**\n * Chain ID of the network to interact with.\n */\n chainId: number;\n /**\n * The RPC URL configuration. If not provided, the default configuration will be used.\n */\n rpcUrlConfig?: TRpcUrlConfig;\n}\n\nexport class ReadProvider {\n chainId: number;\n rpcConfig: TRpcUrlConfig;\n\n constructor({ chainId, rpcUrlConfig }: IReadProviderParams) {\n this.chainId = chainId;\n this.rpcConfig = { ...defaultRpcUrlConfig, ...rpcUrlConfig };\n }\n\n /**\n * Returns web3 instance for read operations.\n *\n * @public\n * @returns {Web3} Web3 instance.\n */\n public getReadWeb3(): Web3 {\n const rpcUrl = this.getRpcUrl();\n const readWeb3 = new Web3();\n const provider = new Web3.providers.HttpProvider(rpcUrl);\n readWeb3.setProvider(provider);\n return readWeb3;\n }\n\n /**\n * Retrieves the RPC URL based on the current chain ID.\n * @returns The RPC URL for the current chain ID.\n * @throws Error if the RPC URL for the current chain ID is not found.\n */\n getRpcUrl(): string {\n const { chainId } = this;\n const rpcUrl = this.rpcConfig?.[chainId];\n\n if (!rpcUrl) {\n console.error(\n `You might need to add the rpcConfig for the ${chainId} chain ID when creating the provider.`,\n );\n throw new Error(`RPC URL for chainId ${chainId} not found`);\n }\n\n return rpcUrl;\n }\n\n /**\n * Calculates max fees for transaction. Thess values are available for networks\n * with EIP-1559 support.\n *\n * @public\n * @note If current network is Binance Smart Chain, will return default values.\n * @returns {Promise<IGetMaxFeesResult>} Max fees for transaction.\n */\n public async getMaxFees(): Promise<IGetMaxFeesResult> {\n const web3 = this.getReadWeb3();\n const rpcUrl = this.getRpcUrl();\n\n const [block, maxPriorityFeePerGas] = await Promise.all([\n web3.eth.getBlock('latest'),\n getMaxPriorityFeePerGas(rpcUrl),\n ]);\n\n if (!block?.baseFeePerGas && typeof block?.baseFeePerGas !== 'bigint') {\n return {};\n }\n\n const maxFeePerGas = new BigNumber(block.baseFeePerGas.toString(10))\n .multipliedBy(FEE_MULTIPLIER)\n .plus(maxPriorityFeePerGas);\n\n return {\n maxFeePerGas: +maxFeePerGas,\n maxPriorityFeePerGas: +maxPriorityFeePerGas,\n };\n }\n\n /**\n * Returns safe gas price for transaction.\n *\n * @public\n * @returns {Promise<BigNumber>} Safe gas price.\n */\n public async getSafeGasPriceWei(): Promise<BigNumber> {\n const pureGasPriceWei = await this.getReadWeb3().eth.getGasPrice();\n\n return new BigNumber(pureGasPriceWei.toString(10)).plus(\n ADDITIONAL_SAFE_GAS_PRICE_WEI,\n );\n }\n\n /**\n * Creates a contract instance with the given ABI and address.\n *\n * @template AbiType - The type of the contract ABI.\n * @param {any} abi - The ABI of the contract.\n * @param {string} address - The address of the contract.\n * @returns {Contract<AbiType>} The contract instance.\n */\n public createContract<AbiType extends ContractAbi>(\n abi: any,\n address: string,\n ): Contract<AbiType> {\n const web3 = this.getReadWeb3();\n return new web3.eth.Contract<AbiType>(abi, address);\n }\n}\n","import { OChainId, OEnv, TChainId, TEnv } from '../../common/types/types';\n\nconst PROD_NATIVE_MINT_CHAINS = [\n OChainId.ethereum,\n OChainId.base,\n OChainId.binanceSmartChain,\n] as TChainId[];\n\nexport const chainIdToEnv = (chainId: TChainId): TEnv => {\n return PROD_NATIVE_MINT_CHAINS.includes(chainId) ? OEnv.prod : OEnv.stage;\n};\n","import { OChainId, TChainId } from '../types/types';\n\nexport function isValidChain(chainId: number): chainId is TChainId {\n return Object.values(OChainId).includes(chainId as TChainId);\n}\n","import {\n defaultEnv,\n ZERO_ADDRESS as PLACEHOLDER_ADDRESS,\n} from '../common/const';\nimport { OChainId, OEnv, TChainId, TEnv } from '../common/types/types';\n\ntype LbtcTokenConfig = Record<TChainId, string>;\n\nconst stageConfig: LbtcTokenConfig = {\n [OChainId.holesky]: '0xED7bfd5C1790576105Af4649817f6d35A75CD818',\n [OChainId.ethereum]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]:\n '0x731eFa688F3679688cf60A3993b8658138953ED6',\n [OChainId.binanceSmartChain]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: '0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30',\n\n [OChainId.base]: PLACEHOLDER_ADDRESS,\n // TODO: Add baseTestnet address\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.berachainBartioTestnet]:\n '0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30',\n\n [OChainId.corn]: PLACEHOLDER_ADDRESS,\n [OChainId.swell]: PLACEHOLDER_ADDRESS,\n};\n\nconst testnetConfig: LbtcTokenConfig = {\n [OChainId.holesky]: '0x38A13AB20D15ffbE5A7312d2336EF1552580a4E2',\n [OChainId.ethereum]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]:\n '0x107Fc7d90484534704dD2A9e24c7BD45DB4dD1B5',\n [OChainId.binanceSmartChain]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: '0xc47e4b3124597fdf8dd07843d4a7052f2ee80c30',\n\n [OChainId.base]: PLACEHOLDER_ADDRESS,\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.berachainBartioTestnet]:\n '0xc47e4b3124597FDF8DD07843D4a7052F2eE80C30',\n\n [OChainId.corn]: PLACEHOLDER_ADDRESS,\n [OChainId.swell]: PLACEHOLDER_ADDRESS,\n};\n\nconst prodConfig: LbtcTokenConfig = {\n [OChainId.ethereum]: '0x8236a87084f8b84306f72007f36f2618a5634494',\n [OChainId.holesky]: PLACEHOLDER_ADDRESS,\n [OChainId.sepolia]: PLACEHOLDER_ADDRESS,\n\n [OChainId.binanceSmartChainTestnet]: PLACEHOLDER_ADDRESS,\n [OChainId.binanceSmartChain]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n\n [OChainId.base]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n [OChainId.baseTestnet]: PLACEHOLDER_ADDRESS,\n\n [OChainId.berachainBartioTestnet]: PLACEHOLDER_ADDRESS,\n\n [OChainId.corn]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n [OChainId.swell]: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',\n};\n\nexport function getLbtcAddressConfig(env: TEnv = defaultEnv): LbtcTokenConfig {\n switch (env) {\n case OEnv.prod:\n return prodConfig;\n case OEnv.testnet:\n return testnetConfig;\n default:\n return stageConfig;\n }\n}\n","import { IERC20, LBTCABI } from '../abi';\n\ntype Token = 'LBTC' | 'ERC20';\n\nexport function getTokenABI(token: Token) {\n switch (token) {\n case 'LBTC':\n return LBTCABI;\n default:\n return IERC20;\n }\n}\n","import { ReadProvider } from '../../provider/ReadProvider';\nimport { TEnv } from '../../common/types/types';\nimport { isValidChain } from '../../common/utils/isValidChain';\nimport { Provider } from '../../provider';\nimport { getLbtcAddressConfig } from '../lbtcAddressConfig';\nimport { getTokenABI } from './getTokenABI';\n\nexport function getLbtcTokenContract(provider: Provider | ReadProvider, env?: TEnv) {\n const lbtcAddressConfig = getLbtcAddressConfig(env);\n const { chainId } = provider;\n\n if (!isValidChain(chainId)) {\n throw new Error(`This chain ${chainId} is not supported`);\n }\n\n const tokenAddress = lbtcAddressConfig[chainId];\n\n if (!tokenAddress) {\n throw new Error(`Token address for chain ${chainId} is not defined`);\n }\n\n const abi = getTokenABI('LBTC');\n\n const contract = provider.createContract(abi, tokenAddress);\n\n if (!contract.options.address) {\n contract.options.address = tokenAddress;\n }\n\n return contract as typeof contract & {\n options: typeof contract.options & { address: string };\n };\n}\n","import { TChainId } from '../../common/types/types';\nimport { isValidChain } from '../../common/utils/isValidChain';\nimport {\n rpcUrlConfig as defaultRpcUrlConfig,\n TRpcUrlConfig,\n} from '../../provider/rpcUrlConfig';\n\n/**\n * Get RPC URL configuration for a specific chain.\n * Validates chain support and RPC URL availability.\n *\n * @param {TChainId} chainId - Chain ID to get RPC config for\n * @param {string} [rpcUrl] - Optional custom RPC URL\n * @returns {TRpcUrlConfig} RPC URL configuration for the chain\n * @throws {Error} If chain is not supported or RPC URL is not found\n */\nexport function getRpcUrlConfigFromChain(\n chainId: TChainId,\n rpcUrl?: string,\n): TRpcUrlConfig {\n if (!isValidChain(chainId)) {\n throw new Error(`This chain ${chainId} is not supported`);\n }\n\n const rpcUrlConfig: TRpcUrlConfig = rpcUrl\n ? { [chainId]: rpcUrl }\n : defaultRpcUrlConfig;\n\n if (!rpcUrlConfig[chainId]) {\n throw new Error(`RPC URL for chainId ${chainId} not found`);\n }\n\n return rpcUrlConfig;\n}\n","import BigNumber from 'bignumber.js';\nimport { TChainId } from '../../common/types/types';\nimport { fromSatoshi } from '../../common/utils/convertSatoshi';\nimport { ReadProvider } from '../../provider/ReadProvider';\nimport { chainIdToEnv } from '../utils/chainIdToEnv';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getRpcUrlConfigFromChain } from '../utils/getRpcUrlConfigFromChain';\n\nexport interface IGetLBTCMintingFeeParams {\n /**\n * Chain ID\n */\n chainId: TChainId;\n /**\n * Bake gas estimate\n */\n bakeGasEstimate?: number;\n /**\n * RPC URL\n */\n rpcUrl?: string;\n}\n\n/**\n * Get LBTC minting fee.\n *\n * @param chainId - Chain ID\n * @param bakeGasEstimate - Bake gas estimate\n * @param rpcUrl - RPC URL\n *\n * @returns LBTC minting fee\n */\nexport async function getLBTCMintingFee({\n chainId,\n bakeGasEstimate = 0,\n rpcUrl,\n}: IGetLBTCMintingFeeParams): Promise<BigNumber> {\n const rpcUrlConfig = getRpcUrlConfigFromChain(chainId, rpcUrl);\n const provider = new ReadProvider({ chainId, rpcUrlConfig });\n const env = chainIdToEnv(chainId);\n const tokenContract = getLbtcTokenContract(provider, env);\n\n const fee: bigint = await tokenContract.methods.getMintFee().call();\n const feeBtc = new BigNumber(fromSatoshi(fee.toString(10)));\n if (bakeGasEstimate) {\n const total = feeBtc.plus(fromSatoshi(bakeGasEstimate));\n return total;\n }\n\n return feeBtc;\n}\n","import Web3, { Contract, ContractAbi, Transaction, utils } from 'web3';\nimport { IEIP1193Provider } from '../common/types/types';\nimport { IReadProviderParams, ReadProvider } from './ReadProvider';\nimport {\n TRpcUrlConfig,\n rpcUrlConfig as defaultRpcUrlConfig,\n} from './rpcUrlConfig';\nimport { ISendOptions, IWeb3SendResult } from './types';\n\nexport interface IProviderParams extends IReadProviderParams {\n /**\n * The EIP-1193 provider instance.\n */\n provider: IEIP1193Provider;\n /**\n * The сurrent account address.\n */\n account: string;\n}\n\n/**\n * Provider for interacting with a blockchain network.\n */\nexport class Provider extends ReadProvider {\n web3: Web3;\n account: string;\n rpcConfig: TRpcUrlConfig = defaultRpcUrlConfig;\n\n constructor({ provider, account, chainId, rpcUrlConfig }: IProviderParams) {\n super({ chainId, rpcUrlConfig });\n this.web3 = new Web3(provider);\n this.account = account;\n this.chainId = chainId;\n this.rpcConfig = { ...defaultRpcUrlConfig, ...rpcUrlConfig };\n }\n\n /**\n * Signs a message using the current provider and account.\n * @public\n * @param message - The message to be signed.\n * @returns A promise that resolves to the signed message as a string.\n */\n public async signMessage(message: string): Promise<string> {\n const { account } = this;\n\n const messageHex = `0x${Buffer.from(message, 'utf8').toString('hex')}`;\n\n const ethereum = this.web3.currentProvider as any;\n\n return ethereum.request({\n method: 'personal_sign',\n params: [messageHex, account],\n });\n }\n\n /**\n * Custom replacement for web3js [send](https://docs.web3js.org/libdocs/Contract#send).\n *\n * @public\n * @param {string} from - Address of the sender.\n * @param {string} to - Address of the recipient.\n * @param {ISendOptions} sendOptions - Options for sending transaction.\n * @returns {Promise<IWeb3SendResult>} Promise with transaction hash and receipt promise.\n */\n public async sendTransactionAsync(\n from: string,\n to: string,\n sendOptions: ISendOptions,\n ): Promise<IWeb3SendResult> {\n const { chainId, web3: web3Write } = this;\n const web3Read = this.getReadWeb3();\n\n const {\n data,\n estimate = false,\n estimateFee = false,\n extendedGasLimit,\n gasLimit = '0',\n value = '0',\n gasLimitMultiplier = 1,\n } = sendOptions;\n let { nonce } = sendOptions;\n\n if (!nonce) {\n nonce = await web3Read.eth.getTransactionCount(from);\n }\n\n console.log(`Nonce: ${nonce}`);\n\n const tx: Transaction = {\n from,\n to,\n value: utils.numberToHex(value),\n data,\n nonce,\n chainId: utils.numberToHex(chainId),\n };\n\n if (estimate) {\n try {\n const estimatedGas = await web3Read.eth.estimateGas(tx);\n const multipliedGasLimit = Math.round(\n Number(estimatedGas) * gasLimitMultiplier,\n );\n\n if (extendedGasLimit) {\n tx.gas = utils.numberToHex(multipliedGasLimit + extendedGasLimit);\n } else {\n tx.gas = utils.numberToHex(multipliedGasLimit);\n }\n } catch (e) {\n throw new Error(\n (e as Partial<Error>).message ??\n 'Failed to estimate gas limit for transaction.',\n );\n }\n } else {\n tx.gas = utils.numberToHex(gasLimit);\n }\n\n const { maxFeePerGas, maxPriorityFeePerGas } = estimateFee\n ? await this.getMaxFees().catch(() => sendOptions)\n : sendOptions;\n\n if (maxPriorityFeePerGas !== undefined) {\n tx.maxPriorityFeePerGas = utils.numberToHex(maxPriorityFeePerGas);\n }\n\n if (maxFeePerGas !== undefined) {\n tx.maxFeePerGas = utils.numberToHex(maxFeePerGas);\n }\n\n if (!tx.maxFeePerGas && !tx.maxPriorityFeePerGas) {\n const safeGasPrice = await this.getSafeGasPriceWei();\n tx.gasPrice = safeGasPrice.toString(10);\n }\n\n if (!tx.maxFeePerGas && !tx.maxPriorityFeePerGas) {\n const safeGasPrice = await this.getSafeGasPriceWei();\n tx.gasPrice = safeGasPrice.toString(10);\n }\n\n console.log('Sending transaction via Web3: ', tx);\n\n return new Promise((resolve, reject) => {\n const promise = web3Write.eth.sendTransaction(tx);\n\n promise\n .once('transactionHash', async (transactionHash: string) => {\n console.log(`Just signed transaction has is: ${transactionHash}`);\n\n resolve({\n receiptPromise: promise,\n transactionHash,\n });\n })\n .catch(reject);\n });\n }\n\n public createContract<AbiType extends ContractAbi>(\n abi: any,\n address: string,\n ): Contract<AbiType> {\n return new this.web3.eth.Contract<AbiType>(abi, address);\n }\n}\n","import { Provider } from '../../provider';\nimport { IProviderBasedParams } from '../types';\n\nexport type SignLbtcDestionationAddrParams = IProviderBasedParams;\n\n/**\n * Signs the destination address for the LBTC in active chain\n * in the current account. Signing is necessary for the\n * generation of the deposit address.\n *\n * @param {SignLbtcDestionationAddrParams} params\n *\n * @returns {Promise<string>} The signature of the message.\n */\nexport async function signLbtcDestionationAddr(\n params: SignLbtcDestionationAddrParams,\n): Promise<string> {\n const provider = new Provider(params);\n\n const message = `destination chain id is ${params.chainId}`;\n\n return provider.signMessage(message);\n}\n","export const SECONDS_PER_DAY = 24 * 60 * 60;\nexport const MS_PER_DAY = SECONDS_PER_DAY * 1000;\n","interface IGetTypedData {\n chainId: number;\n verifyingContract: string;\n fee: string;\n expiry: number;\n}\n\nexport function getTypedData({\n chainId,\n verifyingContract,\n fee,\n expiry,\n}: IGetTypedData) {\n return {\n domain: {\n name: 'Lombard Staked Bitcoin',\n version: '1',\n chainId,\n verifyingContract,\n },\n message: {\n chainId,\n fee,\n expiry,\n },\n primaryType: 'feeApproval',\n types: {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n feeApproval: [\n { name: 'chainId', type: 'uint256' },\n { name: 'fee', type: 'uint256' },\n { name: 'expiry', type: 'uint256' },\n ],\n },\n };\n}\n","import { IEnvParam } from '../../common/types/internalTypes';\nimport { Provider } from '../../provider';\nimport { SECONDS_PER_DAY } from '../const';\nimport { IProviderBasedParams } from '../types';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getTypedData } from './getTypedData';\n\nconst NO_SIGNATURE_ERROR =\n 'Failed to obtain a valid signature. The response is undefined or invalid.';\n\nexport interface ISignNetworkFeeParams\n extends Pick<IProviderBasedParams, 'provider' | 'chainId'>,\n IEnvParam {\n /**\n * User address\n */\n address: string;\n /**\n * Authorization fee\n */\n fee: string;\n /**\n * Expiration time\n */\n expiry: number;\n}\n\nexport interface ISignNetworkFeeResponse {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n}\n\nconst getDefaultExpiryUnix = () => {\n return Math.floor(Date.now() / 1000 + SECONDS_PER_DAY);\n};\n\n/**\n * Signs the network fee transaction in the current account.\n * Signing is necessary for the auto-mint.\n *\n * @param {ISignNetworkFeeParams} params - The parameters for signing network fee\n * @returns {Promise<ISignNetworkFeeResponse>} A promise that resolves to the signature and typed data\n */\nexport async function signNetworkFee({\n address,\n provider,\n fee,\n chainId,\n env,\n expiry = getDefaultExpiryUnix(),\n}: ISignNetworkFeeParams): Promise<ISignNetworkFeeResponse> {\n const providerInstance = new Provider({\n provider,\n account: address,\n chainId,\n });\n\n const tokenContract = getLbtcTokenContract(providerInstance, env);\n const verifyingContract = tokenContract.options.address;\n const typedData = JSON.stringify(\n getTypedData({\n chainId,\n verifyingContract,\n fee,\n expiry,\n }),\n );\n\n const signature = await providerInstance.web3?.currentProvider?.request<\n 'eth_signTypedData_v4',\n string\n >({\n method: 'eth_signTypedData_v4',\n params: [address, typedData],\n });\n\n if (typeof signature === 'string') {\n return { signature, typedData: typedData };\n }\n\n if (!signature?.result) {\n throw new Error(NO_SIGNATURE_ERROR);\n }\n\n return { signature: signature.result, typedData: typedData };\n}\n","import { TChainId } from '../../common/types/types';\nimport { getErrorMessage } from '../../common/utils/getErrorMessage';\nimport { ReadProvider } from '../../provider/ReadProvider';\nimport { chainIdToEnv } from '../utils/chainIdToEnv';\nimport { getLbtcTokenContract } from '../utils/getLbtcTokenContract';\nimport { getRpcUrlConfigFromChain } from '../utils/getRpcUrlConfigFromChain';\n\nexport interface IGetPermitNonceParams {\n /**\n * Owner address to check permit nonce for\n */\n owner: string;\n /**\n * Chain ID of the network\n */\n chainId: TChainId;\n /**\n * RPC URL for the network (optional)\n */\n rpcUrl?: string;\n}\n\n/**\n * Get permit nonce for a specific owner address from LBTC contract.\n * This nonce is used in EIP-2612 permit operations.\n *\n * @param {IGetPermitNonceParams} params - Parameters for getting permit nonce\n * @returns {Promise<string>} Promise that resolves to the permit nonce value\n */\nexport async function getPermitNonce({\n owner,\n rpcUrl,\n chainId,\n}: IGetPermitNonceParams): Promise<string> {\n const rpcUrlConfig = getRpcUrlConfigFromChain(chainId, rpcUrl);\n const provider = new ReadProvider({ chainId, rpcUrlConfig });\n const env = chainIdToEnv(chainId);\n const tokenContract = getLbtcTokenContract(provider, env);\n\n try {\n const nonce: bigint = await tokenContract.methods.nonces(owner).call();\n return nonce.toString();\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n throw new Error(errorMessage);\n }\n}\n","import { TChainId } from '../../common/types/types';\nimport { getPermitNonce } from '../getPermitNonce';\n\nexport interface IStakeAndBakeTypedData {\n chainId: TChainId;\n expiry: number;\n owner: string;\n spender: string;\n value: string;\n rpcUrl?: string;\n verifyingContract: string;\n}\n\n/**\n * Generates EIP-712 typed data for stake and bake signature\n *\n * @param {IStakeAndBakeTypedData} params - Parameters for generating typed data\n * @returns {object} The typed data object conforming to EIP-712\n */\nexport async function getStakeAndBakeTypedData({\n chainId,\n expiry,\n owner,\n spender,\n value,\n rpcUrl,\n verifyingContract,\n}: IStakeAndBakeTypedData) {\n const nonce = await getPermitNonce({\n owner,\n chainId,\n rpcUrl,\n });\n\n return {\n domain: {\n name: 'Lombard Staked Bitcoin',\n version: '1',\n chainId,\n verifyingContract,\n },\n types: {\n EIP712Domain: [\n {\n name: 'name',\n type: 'string',\n },\n {\n name: 'version',\n type: 'string',\n },\n {\n name: 'chainId',\n type: 'uint256',\n },\n {\n name: 'verifyingContract',\n type: 'address',\n },\n ],\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n primaryType: 'Permit',\n message: {\n owner,\n spender,\n value,\n nonce,\n deadline: expiry.toString(),\n },\n };\n}\n","import { TChainId } from '../../common/types/types';\nimport { Provider } from '../../provider';\nimport { IProviderBasedParams } from '../types';\nimport { getStakeAndBakeTypedData } from './getTypedData';\n\nconst NO_SIGNATURE_ERROR =\n 'Failed to obtain a valid signature. The response is undefined or invalid.';\n\nexport interface ISignStakeAndBakeParams\n extends Pick<IProviderBasedParams, 'provider'> {\n /**\n * The address to sign with (owner)\n */\n address: string;\n /**\n * Chain ID for the signature\n */\n chainId: TChainId;\n /**\n * The value to approve\n */\n value: string;\n /**\n * Expiry date as a unix timestamp\n */\n expiry: number;\n /**\n * Optional RPC URL for the network\n */\n rpcUrl?: string;\n /**\n * The spender address that will be authorized to spend tokens\n */\n spender: string;\n /**\n * The contract address that will verify the signature\n */\n verifyingContract: string;\n}\n\nexport interface ISignStakeAndBakeResult {\n /**\n * The signature\n */\n signature: string;\n /**\n * The typed data used to generate the signature\n */\n typedData: string;\n}\n\n/**\n * Signs stake and bake authorization with EIP-712\n *\n * @param {ISignStakeAndBakeParams} params - Parameters for signing\n * @returns {Promise<ISignStakeAndBakeResult>} The signature and typed data\n */\nexport async function signStakeAndBake({\n address,\n provider,\n chainId,\n value,\n expiry,\n rpcUrl,\n spender,\n verifyingContract,\n}: ISignStakeAndBakeParams): Promise<ISignStakeAndBakeResult> {\n const providerInstance = new Provider({\n provider,\n account: address,\n chainId,\n });\n\n const typedDataObject = await getStakeAndBakeTypedData({\n chainId,\n expiry,\n owner: address,\n spender,\n value,\n rpcUrl,\n verifyingContract,\n });\n\n const typedData = JSON.stringify(typedDataObject);\n\n const signature = await providerInstance.web3?.currentProvider?.request<\n 'eth_signTypedData_v4',\n string\n >({\n method: 'eth_signTypedData_v4',\n params: [address, typedData],\n });\n\n if (typeof signature === 'string') {\n return { signature, typedData };\n }\n\n if (!signature?.result) {\n throw new Error(NO_SIGNATURE_ERROR);\n }\n\n return { signature: signature.result, typedData };\n}\n","import { OChainId, TChainId } from '../../common/types/types';\n\nexport const STAKE_AND_BAKE_SPENDER_ADDRESSES: Record<number, string> = {\n [OChainId.holesky]: '0x52BD640617eeD47A00dA0da93351092D49208d1d',\n};\n\nexport const getStakeAndBakeSpenderAddress = (chainId: TChainId): string => {\n const address = STAKE_AND_BAKE_SPENDER_ADDRESSES[chainId];\n if (!address) {\n throw new Error(`No spender address configured for chain ID ${chainId}`);\n }\n return address;\n};\n"],"names":["OEnv","OChainId","getEthNetworkByEnv","env","getBscNetworkByEnv","getBaseNetworkByEnv","defaultEnv","ZERO_ADDRESS","stageConfig","testnetConfig","prodConfig","getApiConfig","getErrorMessage","error","err","_a","getAxiosErrorMessage","getErrorMessageFromObject","OChainName","getChainNameById","chainId","SANCTIONED_ADDRESS","ADDRESS_URL","SANCTIONS_MESSAGE","generateDepositBtcAddress","address","signature","eip712Data","referrerCode","partnerId","captchaToken","baseApiUrl","toChain","requestParams","data","axios","errorMsg","isSanctioned","getDepositBtcAddress","addresses","getDepositBtcAddresses","addressData","getActualAddress","actualAddress","acc","toBlockchain","requestrParams","BTC_DECIMALS","SATOSHI_SCALE","fromSatoshi","amount","toSatoshi","getChainIdByName","chain","ENotarizationStatus","ESessionState","getDepositsByAddress","mapResponse","BigNumber","MIN_STAKE_AMOUNT_BTC","getLBTCExchangeRate","chainIdName","minAmount","getNetworkFeeSignature","errorMessage","storeNetworkFeeSignature","typedData","storeStakeAndBakeSignature","rpcUrlConfig","getMaxPriorityFeePerGas","rpcUrl","convertedHexValue","Web3","FEE_MULTIPLIER","ADDITIONAL_SAFE_GAS_PRICE_WEI","ReadProvider","__publicField","defaultRpcUrlConfig","readWeb3","provider","web3","block","maxPriorityFeePerGas","pureGasPriceWei","abi","PROD_NATIVE_MINT_CHAINS","chainIdToEnv","isValidChain","PLACEHOLDER_ADDRESS","getLbtcAddressConfig","getTokenABI","token","LBTCABI","IERC20","getLbtcTokenContract","lbtcAddressConfig","tokenAddress","contract","getRpcUrlConfigFromChain","getLBTCMintingFee","bakeGasEstimate","fee","feeBtc","Provider","account","message","messageHex","from","to","sendOptions","web3Write","web3Read","estimate","estimateFee","extendedGasLimit","gasLimit","value","gasLimitMultiplier","nonce","tx","utils","estimatedGas","multipliedGasLimit","e","maxFeePerGas","safeGasPrice","resolve","reject","promise","transactionHash","signLbtcDestionationAddr","params","SECONDS_PER_DAY","getTypedData","verifyingContract","expiry","NO_SIGNATURE_ERROR","getDefaultExpiryUnix","signNetworkFee","providerInstance","_b","getPermitNonce","owner","tokenContract","getStakeAndBakeTypedData","spender","signStakeAndBake","typedDataObject","STAKE_AND_BAKE_SPENDER_ADDRESSES","getStakeAndBakeSpenderAddress"],"mappings":"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"}
|