@allbridge/bridge-core-sdk 3.22.1-alpha.1 → 3.22.1-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +4 -4
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +3 -3
- package/dist/src/services/bridge/index.js +3 -2
- package/dist/src/services/bridge/index.js.map +1 -1
- package/dist/src/services/bridge/utils.js +3 -3
- package/dist/src/services/bridge/utils.js.map +1 -1
- package/dist/src/services/liquidity-pool/index.js +3 -2
- package/dist/src/services/liquidity-pool/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/trx/index.d.ts +3 -2
- package/dist/src/services/liquidity-pool/trx/index.js +107 -77
- package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/ascii/structs.d.ts +2 -2
- package/dist/src/services/models/sui/_dependencies/source/0x1/bit-vector/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/fixed-point32/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/string/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/type-name/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/uq32-32/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x1/uq64-64/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb/burn-message/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb/handle-receive-message/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb/message-transmitter-authenticator/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb/state/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917/mint-allowance/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917/treasury/structs.d.ts +4 -4
- package/dist/src/services/models/sui/_dependencies/source/0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5/message/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5/state/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes20/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed-vaas/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/emitter/structs.d.ts +2 -2
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external-address/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/fee-collector/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/guardian/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/guardian-set/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/publish-message/structs.d.ts +2 -2
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set/structs.d.ts +2 -2
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/state/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_dependencies/source/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/vaa/structs.d.ts +1 -1
- package/dist/src/services/models/sui/_framework/util.d.ts +3 -30
- package/dist/src/services/models/sui/_framework/vector.d.ts +2 -2
- package/dist/src/services/models/sui/bridge/another-bridge/functions.d.ts +9 -9
- package/dist/src/services/models/sui/bridge/another-bridge/structs.d.ts +1 -1
- package/dist/src/services/models/sui/bridge/bridge/functions.d.ts +31 -31
- package/dist/src/services/models/sui/bridge/bridge/structs.d.ts +4 -4
- package/dist/src/services/models/sui/bridge/bridge-interface/functions.d.ts +54 -54
- package/dist/src/services/models/sui/bridge/events/functions.d.ts +9 -9
- package/dist/src/services/models/sui/bridge/events/structs.d.ts +9 -9
- package/dist/src/services/models/sui/bridge/pool/functions.d.ts +26 -26
- package/dist/src/services/models/sui/bridge/pool/structs.d.ts +3 -3
- package/dist/src/services/models/sui/bridge/pool-rewards/functions.d.ts +10 -10
- package/dist/src/services/models/sui/bridge/pool-rewards/structs.d.ts +1 -1
- package/dist/src/services/models/sui/bridge/pool-state/functions.d.ts +21 -21
- package/dist/src/services/models/sui/bridge/pool-state/structs.d.ts +1 -1
- package/dist/src/services/models/sui/bridge/user-deposit/functions.d.ts +7 -7
- package/dist/src/services/models/sui/bridge/user-deposit/structs.d.ts +1 -1
- package/dist/src/services/models/sui/cctp-bridge/cctp-bridge/functions.d.ts +19 -19
- package/dist/src/services/models/sui/cctp-bridge/cctp-bridge/structs.d.ts +3 -3
- package/dist/src/services/models/sui/cctp-bridge/cctp-bridge-interface/functions.d.ts +15 -15
- package/dist/src/services/models/sui/cctp-bridge/events/functions.d.ts +4 -4
- package/dist/src/services/models/sui/cctp-bridge/events/structs.d.ts +4 -4
- package/dist/src/services/models/sui/cctp-bridge/message-transmitter-authenticator/functions.d.ts +1 -1
- package/dist/src/services/models/sui/cctp-bridge/message-transmitter-authenticator/structs.d.ts +1 -1
- package/dist/src/services/models/sui/gas-oracle/gas-oracle/functions.d.ts +16 -16
- package/dist/src/services/models/sui/gas-oracle/gas-oracle/structs.d.ts +3 -3
- package/dist/src/services/models/sui/gas-oracle/gas-oracle-interface/functions.d.ts +13 -13
- package/dist/src/services/models/sui/messenger/events/functions.d.ts +2 -2
- package/dist/src/services/models/sui/messenger/events/structs.d.ts +2 -2
- package/dist/src/services/models/sui/messenger/messenger/functions.d.ts +18 -18
- package/dist/src/services/models/sui/messenger/messenger/structs.d.ts +2 -2
- package/dist/src/services/models/sui/messenger/messenger-interface/functions.d.ts +15 -15
- package/dist/src/services/models/sui/sui/address/functions.d.ts +10 -10
- package/dist/src/services/models/sui/sui/authenticator-state/functions.d.ts +13 -13
- package/dist/src/services/models/sui/sui/authenticator-state/structs.d.ts +5 -5
- package/dist/src/services/models/sui/sui/bag/functions.d.ts +10 -10
- package/dist/src/services/models/sui/sui/bag/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/balance/functions.d.ts +13 -13
- package/dist/src/services/models/sui/sui/balance/structs.d.ts +2 -2
- package/dist/src/services/models/sui/sui/bcs/functions.d.ts +29 -29
- package/dist/src/services/models/sui/sui/bcs/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/bls12381/functions.d.ts +43 -43
- package/dist/src/services/models/sui/sui/bls12381/structs.d.ts +5 -5
- package/dist/src/services/models/sui/sui/borrow/functions.d.ts +4 -4
- package/dist/src/services/models/sui/sui/clock/functions.d.ts +3 -3
- package/dist/src/services/models/sui/sui/clock/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/coin/functions.d.ts +45 -45
- package/dist/src/services/models/sui/sui/coin/structs.d.ts +7 -7
- package/dist/src/services/models/sui/sui/config/functions.d.ts +11 -11
- package/dist/src/services/models/sui/sui/deny-list/functions.d.ts +21 -21
- package/dist/src/services/models/sui/sui/deny-list/structs.d.ts +7 -7
- package/dist/src/services/models/sui/sui/display/functions.d.ts +13 -13
- package/dist/src/services/models/sui/sui/display/structs.d.ts +3 -3
- package/dist/src/services/models/sui/sui/dynamic-field/functions.d.ts +16 -16
- package/dist/src/services/models/sui/sui/dynamic-object-field/functions.d.ts +12 -12
- package/dist/src/services/models/sui/sui/ecdsa-k1/functions.d.ts +3 -3
- package/dist/src/services/models/sui/sui/ecdsa-r1/functions.d.ts +2 -2
- package/dist/src/services/models/sui/sui/ecvrf/functions.d.ts +1 -1
- package/dist/src/services/models/sui/sui/ed25519/functions.d.ts +1 -1
- package/dist/src/services/models/sui/sui/event/functions.d.ts +1 -1
- package/dist/src/services/models/sui/sui/groth16/functions.d.ts +10 -10
- package/dist/src/services/models/sui/sui/groth16/structs.d.ts +4 -4
- package/dist/src/services/models/sui/sui/group-ops/functions.d.ts +23 -23
- package/dist/src/services/models/sui/sui/group-ops/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/hash/functions.d.ts +2 -2
- package/dist/src/services/models/sui/sui/hex/functions.d.ts +3 -3
- package/dist/src/services/models/sui/sui/hmac/functions.d.ts +1 -1
- package/dist/src/services/models/sui/sui/kiosk/functions.d.ts +41 -41
- package/dist/src/services/models/sui/sui/kiosk/structs.d.ts +10 -10
- package/dist/src/services/models/sui/sui/kiosk-extension/functions.d.ts +14 -14
- package/dist/src/services/models/sui/sui/kiosk-extension/structs.d.ts +2 -2
- package/dist/src/services/models/sui/sui/linked-table/functions.d.ts +17 -17
- package/dist/src/services/models/sui/sui/math/functions.d.ts +7 -7
- package/dist/src/services/models/sui/sui/object/functions.d.ts +24 -24
- package/dist/src/services/models/sui/sui/object/structs.d.ts +2 -2
- package/dist/src/services/models/sui/sui/object-bag/functions.d.ts +11 -11
- package/dist/src/services/models/sui/sui/object-bag/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/object-table/functions.d.ts +10 -10
- package/dist/src/services/models/sui/sui/object-table/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/package/functions.d.ts +24 -24
- package/dist/src/services/models/sui/sui/package/structs.d.ts +4 -4
- package/dist/src/services/models/sui/sui/pay/functions.d.ts +8 -8
- package/dist/src/services/models/sui/sui/poseidon/functions.d.ts +2 -2
- package/dist/src/services/models/sui/sui/priority-queue/functions.d.ts +8 -8
- package/dist/src/services/models/sui/sui/random/functions.d.ts +23 -23
- package/dist/src/services/models/sui/sui/random/structs.d.ts +3 -3
- package/dist/src/services/models/sui/sui/sui/functions.d.ts +2 -2
- package/dist/src/services/models/sui/sui/sui/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/table/functions.d.ts +10 -10
- package/dist/src/services/models/sui/sui/table/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/table-vec/functions.d.ts +12 -12
- package/dist/src/services/models/sui/sui/table-vec/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/token/functions.d.ts +45 -45
- package/dist/src/services/models/sui/sui/token/structs.d.ts +6 -6
- package/dist/src/services/models/sui/sui/transfer/functions.d.ts +13 -13
- package/dist/src/services/models/sui/sui/transfer/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/transfer-policy/functions.d.ts +18 -18
- package/dist/src/services/models/sui/sui/transfer-policy/structs.d.ts +6 -6
- package/dist/src/services/models/sui/sui/tx-context/functions.d.ts +7 -7
- package/dist/src/services/models/sui/sui/tx-context/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/types/functions.d.ts +1 -1
- package/dist/src/services/models/sui/sui/url/functions.d.ts +4 -4
- package/dist/src/services/models/sui/sui/url/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/vdf/functions.d.ts +4 -4
- package/dist/src/services/models/sui/sui/vec-map/functions.d.ts +19 -19
- package/dist/src/services/models/sui/sui/vec-set/functions.d.ts +12 -12
- package/dist/src/services/models/sui/sui/versioned/functions.d.ts +7 -7
- package/dist/src/services/models/sui/sui/versioned/structs.d.ts +2 -2
- package/dist/src/services/models/sui/sui/zklogin-verified-id/functions.d.ts +9 -9
- package/dist/src/services/models/sui/sui/zklogin-verified-id/structs.d.ts +1 -1
- package/dist/src/services/models/sui/sui/zklogin-verified-issuer/functions.d.ts +6 -6
- package/dist/src/services/models/sui/sui/zklogin-verified-issuer/structs.d.ts +1 -1
- package/dist/src/services/models/sui/utils/bytes32/functions.d.ts +14 -14
- package/dist/src/services/models/sui/utils/bytes32/structs.d.ts +1 -1
- package/dist/src/services/models/sui/utils/fee-collector/functions.d.ts +5 -5
- package/dist/src/services/models/sui/utils/fee-collector/structs.d.ts +1 -1
- package/dist/src/services/models/sui/utils/message/functions.d.ts +9 -9
- package/dist/src/services/models/sui/utils/message/structs.d.ts +1 -1
- package/dist/src/services/models/sui/utils/messenger-protocol/functions.d.ts +3 -3
- package/dist/src/services/models/sui/utils/messenger-protocol/structs.d.ts +1 -1
- package/dist/src/services/models/sui/utils/set/functions.d.ts +5 -5
- package/dist/src/services/models/sui/utils/set/structs.d.ts +2 -2
- package/dist/src/services/models/sui/utils/version/functions.d.ts +3 -3
- package/dist/src/services/models/sui/utils/version/structs.d.ts +1 -1
- package/dist/src/services/models/sui/wormhole-messenger/events/functions.d.ts +2 -2
- package/dist/src/services/models/sui/wormhole-messenger/events/structs.d.ts +2 -2
- package/dist/src/services/models/sui/wormhole-messenger/wh-messenger-interface/functions.d.ts +15 -15
- package/dist/src/services/models/sui/wormhole-messenger/wormhole-messenger/functions.d.ts +20 -20
- package/dist/src/services/models/sui/wormhole-messenger/wormhole-messenger/structs.d.ts +2 -2
- package/dist/src/services/token/index.js +3 -2
- package/dist/src/services/token/index.js.map +1 -1
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.d.ts +1 -1
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js +2 -2
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +8 -8
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var mi=Object.create;var Ur=Object.defineProperty;var ui=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var di=Object.getPrototypeOf,pi=Object.prototype.hasOwnProperty;var gi=(s,a)=>()=>(s&&(a=s(s=0)),a);var tr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var fi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of li(a))!pi.call(s,o)&&o!==r&&Ur(s,o,{get:()=>a[o],enumerable:!(i=ui(a,o))||i.enumerable});return s};var Pe=(s,a,r)=>(r=s!=null?mi(di(s)):{},fi(a||!s||!s.__esModule?Ur(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as oe}from"@mysten/sui/bcs";function ns(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function ee(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[a,r]=["<",">"],i=s.indexOf(a),o=Array.from(s).reverse().indexOf(r);if(i===-1&&o===-1)return{typeName:s,typeArgs:[]};if(i===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let A=s.slice(0,i),c=ns(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function va(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function C(s,a){return va(a)?a:s.object(a)}function ye(s,a,r){if(va(a))return C(s,a);function i(l){let{typeName:d,typeArgs:p}=ee(l);switch(d){case"bool":return oe.Bool;case"u8":return oe.U8;case"u16":return oe.U16;case"u32":return oe.U32;case"u64":return oe.U64;case"u128":return oe.U128;case"u256":return oe.U256;case"address":return oe.Address;case"0x1::string::String":case"0x1::ascii::String":return oe.String;case"0x2::object::ID":return oe.Address;case"0x1::option::Option":return oe.option(i(p[0]));case"vector":return oe.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=ee(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[ye(s,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return s.pure(oe.vector(oe.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function rs(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=ee(s);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${P(r[0])}>`;default:{let i=a.split("::");i[0]=rs(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function M(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var H=gi(()=>{"use strict"});var qe=tr(($m,ka)=>{"use strict";H();var Tr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},as=new Tr;ka.exports=as});var wr=tr((Xm,Da)=>{"use strict";H();var Pr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},is=new Pr;Da.exports=is});var Ir=tr((Qm,Ua)=>{"use strict";H();var Br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},ss=new Br;Ua.exports=ss});var Kt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},fo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},yo={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};import{Big as Ae}from"big.js";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},y=class extends J{constructor(a){super("SdkError",a)}},$e=class extends J{constructor(a){super("InvalidAmountError",a)}},dt=class extends J{constructor(a){super("AmountNotEnoughError",a)}},_e=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},Q=class extends J{constructor(a){super("JupiterError",a)}},vt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Er=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},kt=class extends J{constructor(a){super("VerifyTxError",a)}},pt=class extends J{constructor(a){super("InvalidTxError",a)}},Ht=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},Qt=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Ft=class extends J{constructor(a){super("TimeoutError",a)}},zt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},ne=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},qt=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},yi=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(yi||{});var fe=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g.SUI="SUI",g))(fe||{}),Z=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(Z||{});var hi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Ti={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},N=(()=>{let s={...Ti};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new y(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return hi[a]}}})();import Bi from"axios";var Vr="3.22.1-alpha.1";import{Big as b}from"big.js";import nr from"bn.js";function rr(s,a){return b(100).minus(b(100).times(a).div(s)).toNumber()}function it(s,a){return Ne(s,a,3).round(0,b.roundDown)}function ue(s,a){return Ne(s,3,a)}function Ne(s,a,r){let i=b(r).minus(a).toNumber();return b(s).times(xt(i))}function xt(s){return b(10).pow(s)}function D(s,a){return b(s).times(xt(a))}function x(s,a){let r=b(s);return r.eq(0)?b(0):b(r).div(xt(a))}function re(s){return x(b(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function We(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=it(c,r),u=b(i.tokenBalance).plus(m),l=De(u,i.aValue,i.dValue);return b(i.vUsdBalance).minus(l).round(0,b.roundDown).toFixed()}function Mt(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return b(0).toFixed();let A=o.plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(b(i.tokenBalance).minus(c),r),u=b(m).times(a);return b(m).minus(u).round(0,b.roundDown).toFixed()}function Zr(s,a){let r=b(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=De(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function jr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(i.vUsdBalance).minus(s);if(o.lte(0))throw new _e;let A=De(o,i.aValue,i.dValue),c=b(A).minus(i.tokenBalance),m=ue(c,r),u=b(a).div(b(1).minus(a)),l=b(m).times(u).round(0,b.roundUp);return b(m).plus(l).round(0,b.roundDown)}function $r(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(a).div(b(1).minus(a)),A=b(s).times(o).round(0,b.roundUp),c=b(s).plus(A),m=it(c,r),u=b(i.tokenBalance).minus(m);if(u.lte(0))throw new _e;let l=De(u,i.aValue,i.dValue);return b(l).minus(i.vUsdBalance).round(0,b.roundDown)}function De(s,a,r){let i=b(4).times(a).times(b(r).minus(s)).minus(r),o=b(r).pow(3),A=i.pow(2),c=b(s).times(b(s).times(A).plus(b(4).times(a).times(o))).sqrt().round(0,b.roundDown),m=b(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,b.roundDown);return u.eq(0)?b(0):u.plus(1)}function _r(s,a,r,i){let o=new nr(s),A=new nr(r),c=new nr(a);return o.mul(A).shrn(i).sub(c).toString()}function Jr(s){return b(s).gt(0)?`${Number(b(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Lr(s,a,r){let i=b(a).times(r),o=b(a).plus(r),A=b(8).times(s).times(i).times(o),c=i.times(b(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=b(l).sqrt(),p=b(Math.cbrt(+A.plus(d).toFixed())),f=b(Math.cbrt(+A.minus(d).toFixed()));return p.plus(f).toFixed()}var ar=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(ar||{});var Ge=(o=>(o[o.ALLBRIDGE=1]="ALLBRIDGE",o[o.WORMHOLE=2]="WORMHOLE",o[o.CCTP=3]="CCTP",o[o.CCTP_V2=4]="CCTP_V2",o))(Ge||{});function Xr(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=Ci(i,o);return A&&(a[i]=A),a},{})}function Yr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=gt({chainSymbol:o,poolAddress:A.poolAddress}),m=re(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function bi(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function Si(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4}}function Pi(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=wi(i),a),{})}function wi(s){return Object.entries(s).reduce((a,[r,i])=>{let o=Si(r);return o&&(a[o]=i),a},{})}function Ci(s,a){let r=N.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,transferTime:Pi(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>bi(i,o))}}function gt(s){return s.chainSymbol+"_"+s.poolAddress}function Kr(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function Hr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=re(c),a[gt({chainSymbol:o,poolAddress:A})]=c}return a}var en=class{api;constructor(a){this.api=Bi.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Vr},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Xr(a),poolInfoMap:Yr(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,r){let{data:i}=await this.api.get(`/check/${a}/${r}`);return i}async getTransferStatus(a,r){let{data:i}=await this.api.get(`/chain/${a}/${r}`);return i}async getReceiveTransactionCost(a){let{data:r}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}async getPoolInfoMap(a){let r=a instanceof Array?a:[a],{data:i}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return Hr(i)}};import tn from"timed-cache";var ir=20*1e3,Ii=55*1e3,nn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new tn({defaultTtl:Ii}),this.receivedTransactionCache=new tn({defaultTtl:ir}),this.pendingInfoCache=new tn({defaultTtl:ir}),this.gasBalanceCache=new tn({defaultTtl:ir})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}`,i=this.receivedTransactionCache.get(r);if(i)return i;let o=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(a,r){return this.apiClient.getTransferStatus(a,r)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var rn=class{constructor(a){this.apiClient=a}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let a=await this.getChainDetailsMap();return Object.values(a).flatMap(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,r){return this.apiClient.getGasBalance(a,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,r){return await this.apiClient.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var an=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:Qr(A.tokens,a,this.isStaging)})}return i}async tokens(a){return Qr(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getTransferStatus(a,r){return await this.client.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,r){return this.client.cachePut(a,r)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Qr(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ri)}function Ri(s){let{flags:a,...r}=s;return r}import vi from"timed-cache";var ki=55*1e3,sn=class{constructor(a){this.client=a;this.poolInfoCache=new sr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,r){return this.client.getTransferStatus(a,r)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(a);if(r)return r;{let i=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(i);let o=i[gt(a)];if(o)return o;throw new y("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(Kr(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(gt(a),r)}},sr=class{cache;constructor(){this.cache=new vi({defaultTtl:ki})}putAll(a){for(let[r,i]of Object.entries(a))this.cache.put(r,i)}putAllIfNotExists(a){for(let[r,i]of Object.entries(a))this.cache.get(r)||this.cache.put(r,i)}put(a,r){this.cache.put(a,r)}get(a){let r=gt(a);return this.cache.get(r)}};import{Web3 as hs}from"web3";var or;async function we(){return or||(or=(await import("tronweb")).default),or}import{Big as zr}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(zr(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=zr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new Qt(s,A.length,r)}async function on(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Ft(a)),r)})])}async function Ar(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await on(s(),a,i)}catch{if(++o>=r)throw new Ft(a)}}async function qr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(g=>setTimeout(g,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let f=await s(p);A.push(f),o&&a(f)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Zi}from"big.js";var Fi={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",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:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ea=Fi;var xi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{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:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ta=xi;import*as un from"@project-serum/anchor";import{PublicKey as pa}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ae}from"@solana/web3.js";async function Ce(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function He(s){let[a]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function na(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ot(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function ft(s){let a=await He(s),[r]=await ae.findProgramAddress([a.toBuffer()],s);return r}async function ra(s,a){let[r]=await ae.findProgramAddress([s.toBuffer()],a);return r}async function yt(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function aa(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function cr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function mr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function ia(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function ur(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function sa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function oa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function Aa(s,a){let[r]=ae.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function ca(s,a,r,i){let o=st("message_transmitter",r),A=st("token_messenger",i),c=st("__event_authority",i),m=st("token_minter",i),u=st("local_token",i,[a]),l=st("remote_token_messenger",i,[s.toString()]),d=st("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function st(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ae.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Mi}from"@project-serum/anchor";import{Connection as Oi,PublicKey as Ni}from"@solana/web3.js";function Qe(s,a){let r=new Oi(s,"confirmed"),i=new Ni(a);return new Mi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Wi}from"@solana/web3.js";import{Address as Di}from"@stellar/stellar-sdk";import{Big as Je}from"big.js";import ua from"randombytes";async function Le(s,a,r){let i;switch(a){case"EVM":{i=ma(s);break}case"SOLANA":{i=new Wi(s).toBuffer();break}case"TRX":{i=await Gi(s);break}case"SRB":{i=new Di(s).toBuffer();break}case"SUI":{i=ma(s);break}}switch(r){case"EVM":return"0x"+i.toString("hex");case"SOLANA":return Array.from(i);case"TRX":return i;case"SRB":return i.toJSON().data;case"SUI":return"0x"+i.toString("hex")}}function Be(s){return s.replace(/^0x/i,"")}function la(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ma(s){let r=la(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}async function Gi(s){let a=await An(s),r=la(a);return Ui(r,32)}async function An(s){let a=await we(),r=a.utils.crypto.decodeBase58Address(s);return r?a.utils.bytes.byteArray2hexStr(r).replace(/^41/,"0x"):""}function Ui(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function cn(){return ua(32)}function Ue(){let s=ua(32).readBigInt64BE();return s<0?s*-1n:s}async function Ee(s,a){let r={},i=a.sourceToken;if(r.amount=D(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new y("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=await Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new y("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=await Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?D(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function Ie(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=N.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else i.fromTokenAddress=a.sourceToken.tokenAddress;i.toChainId=a.destinationToken.allbridgeChainId,i.toTokenAddress=a.destinationToken.tokenAddress,a.gasFeePaymentMethod==="stablecoin"?i.gasFeePaymentMethod="stablecoin":i.gasFeePaymentMethod="native";let A=a.sourceToken;if(a.messenger===3){if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress}else if(a.messenger===4){if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new ne("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address}else i.contractAddress=A.bridgeAddress;i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=D(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await lr(i.fromChainId,a.sourceToken.chainType,i.toChainId,A.decimals,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new vt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=D(c,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=D(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){if(l=="float")switch(i.gasFeePaymentMethod){case"native":i.extraGas=D(u,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.extraGas=D(u,A.decimals).toFixed(0);break}else i.extraGas=u;await Vi(i.extraGas,i.gasFeePaymentMethod,A,a.destinationToken,r)}return s!=="SUI"&&(i.fromTokenAddress=await Le(i.fromTokenAddress,s,s)),i.toAccountAddress=await Le(a.toAccountAddress,o,s),i.toTokenAddress=await Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Ei(i.amount,A.decimals,i.fee,i.extraGas),i}function Ei(s,a,r,i){let o=Je(s).minus(r).minus(i??0);if(o.lte(0))throw new dt(`Amount not enough to pay fee, ${x(Je(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function lr(s,a,r,i,o,A){let c=await A.getReceiveTransactionCost({sourceChainId:s,destinationChainId:r,messenger:o}),m={native:{int:c.fee,float:x(c.fee,N.getChainDecimalsByType(a)).toFixed()}};if(c.sourceNativeTokenPrice){let u=Ne(new Je(c.fee).mul(c.sourceNativeTokenPrice),N.getChainDecimalsByType(a),i).toFixed(0,Je.roundUp);m.stablecoin={int:u,float:x(u,i).toFixed()}}return m}async function Vi(s,a,r,i,o){let c=(await dr(r,i,o)).extraGasMax[a];if(!c)throw new vt(`Impossible to pay extra gas by '${a}' payment method`);let m=c.int;if(Je(s).gt(m))throw new Ht(`Extra gas ${s} in int format, exceeded limit ${m} for '${a}' payment method`)}async function dr(s,a,r){let i={},o=await r.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:1}),A=a.txCostAmount.maxAmount,c=x(A,N.getChainDecimalsByType(a.chainType)).toFixed(),m=Je(c).div(o.exchangeRate).toFixed(N.getChainDecimalsByType(s.chainType),Je.roundDown),u=D(m,N.getChainDecimalsByType(s.chainType)).toFixed(0);if(i.native={int:u,float:m},o.sourceNativeTokenPrice){let l=Je(m).mul(o.sourceNativeTokenPrice).toFixed(s.decimals,Je.roundDown);i.stablecoin={int:D(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:i,destinationChain:{gasAmountMax:{int:A,float:c},swap:{int:a.txCostAmount.swap,float:x(a.txCostAmount.swap,N.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:x(a.txCostAmount.transfer,N.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function da(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function ln(s,a,r,i){let o,A=new pa(a),c=new pa(r),m=await Ce(A,c),u=Qe(i,a);un.setProvider(u);let l=await un.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=await Le(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=await Le(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new y("First token account or its public key is undefined");o=await Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new y("Associated account has wrong owner")}return o}var le=class{};var Nt=class extends le{constructor(r,i,o){super();this.web3=r;this.api=i;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let i=await this.buildRawTransactionSend(r);return this.sendRawTransaction(i)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:f,gasFeePaymentMethod:g,extraGas:h}=i,S="0x"+cn().toString("hex"),T,w,I=f;if(h&&(I=Zi(I).plus(h).toFixed()),p===3||p===4){let F=await this.buildRawTransactionCctpSend(r,i,I);T=F.sendMethod,w=F.value}else{let F=this.getBridgeContract(A);g==="stablecoin"?(T=F.methods.swapAndBridge(m,o,l,u,d,S,p,I),w="0"):(T=F.methods.swapAndBridge(m,o,l,u,d,S,p,0),w=I)}return Promise.resolve({from:c,to:A,value:w,data:T.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,f;if(r.destinationToken.chainType==="SOLANA"){let g=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,g,u,m,o),f="0"):(p=d.methods.bridgeWithWalletAddress(A,g,u,m,0),f=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),f="0"):(p=d.methods.bridge(A,u,m,0),f=o);return{sendMethod:p,value:f}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(ea.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(ta.abi,r)}};var dn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),da(a)?(await pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSend(a):(await pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSwap(a)}};import{BN as bt,Program as fr,Spl as Qi,web3 as ze}from"@project-serum/anchor";import{Keypair as Ia,PublicKey as V,SystemProgram as zi}from"@solana/web3.js";import{Big as Re}from"big.js";var Dt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var ga={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as ji}from"@project-serum/anchor";import $i from"big.js";import{Web3 as gn}from"web3";async function ht(s,a){return await ji.token(a).account.token.fetch(s)}async function fa(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=$i(i.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return We(s,{decimals:o,feeShare:A},c)}function ya(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=gn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new y("message cannot be undefined");let d=gn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let f=gn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!f)throw new pt("messageWithSigner cannot be undefined");let g=gn.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(g.replace("0x",""),"hex");return h[0]=p[0],h[1]=p[1],h}import{ComputeBudgetInstruction as Ta,ComputeBudgetProgram as fn,Connection as ba,TransactionMessage as _i}from"@solana/web3.js";import{Big as Ji}from"big.js";import{AddressLookupTableAccount as ha}from"@solana/web3.js";async function At(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ha({key:r.accountKey,state:ha.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new y("Cannot get AccountInfo");return i.data}))})))}var pr="AUTO";async function Tt(s,a,r){let i=new ba(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Pa(s.instructions,o,a,i)}async function Sa(s,a,r){let i=new ba(r,"confirmed"),o=await At(s,i),A=_i.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new qt;await Pa(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Pa(s,a,r,i){if(a>0){let o=Li(a,s);if(r?.solana){let A=r.solana;if(A===pr)await gr(s,i);else if("pricePerUnitInMicroLamports"in A)await gr(s,i,A.pricePerUnitInMicroLamports);else{let c=Ji(A.extraFeeInLamports).div(o).mul(xt(6)).toFixed(0);await gr(s,i,c)}}}}function Li(s,a){let r=a.findIndex(A=>A.programId.equals(fn.programId)&&Ta.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=fn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function gr(s,a,r){let i=s.findIndex(c=>c.programId.equals(fn.programId)&&Ta.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Xi(a)),A=fn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Xi(s){let a=await s.getRecentPrioritizationFees(),r=0;for(let i of a)r+=i.prioritizationFee;return(r/a.length).toFixed(0)}import{NATIVE_MINT as Yi}from"@solana/spl-token";import{Connection as Ki,TransactionMessage as wa,VersionedTransaction as Hi}from"@solana/web3.js";import Ca,{AxiosError as Ba}from"axios";var yn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new Ki(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",f=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Yi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(f+=`&maxAccounts=${this.maxAccounts}`),A=await Ca.get(f,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new Q("Cannot get inAmount");let m;try{m=await Ca.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new Q("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=Hi.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await At(a,this.connection),o=await At(r,this.connection),A=wa.decompile(a.message,{addressLookupTableAccounts:i}),c=wa.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new y("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new Q(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new Q("Some error occurred during creation final swap and bridge transaction")}}};var yr=1e6,Ra=1.1,hn=class extends le{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new yn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:f}=r,g=c,h=u,S=l,T=d,w=o,I=p,F=new V(g),X=Qe(this.solanaRpcUrl,F.toString()),G=new fr(Dt,h,X),O=await ft(G.programId),ce=await He(G.programId),L=new V(S),Fe=await yt(L,G.programId),xe=new V(i),je=await Ce(F,L),Te=new V(I),se=new V(T),ge=await yt(se,G.programId),be=new V(w),me=await Ce(Te,se),Me=[ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr})];try{await ht(me,X)}catch{let ci=await Qi.associatedToken(X).methods.create().accounts({mint:se,owner:Te,associatedAccount:me}).instruction();Me.push(ci)}let Oe=await G.methods.swap(new bt(m),new bt(f||0)).accounts({payer:F,config:ce,bridgeAuthority:O,user:F,sendBridgeToken:Fe,sendMint:L,sendPool:xe,sendUserToken:je,receiveBridgeToken:ge,receiveMint:se,receivePool:be,receiveUserToken:me}).preInstructions(Me).transaction(),Se=X.connection;return Oe.recentBlockhash=(await Se.getLatestBlockhash()).blockhash,Oe.feePayer=F,await Tt(Oe,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Oe,Se)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new Q(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}}if(A){if(!c)throw new Q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await Sa(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken.decimals,r),u=o?Re(A):Re(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ra));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new Q("Cannot get inAmount");p=Re(r.amount).minus(Re(d).mul(Ra)).toFixed(0)}else p=Re(r.amount).minus(u).toFixed(0);if(Re(p).lte(0))throw new dt(`Amount not enough to pay fee, ${x(Re(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger})).sourceNativeTokenPrice,A=Re(i.fee).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0),c;return i.extraGas&&(c=Re(i.extraGas).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0)),{fee:A,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return ze.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:f}=r,g=m,h=c,S=u,T=d,w=l,I=o,F=A,X=Qe(this.solanaRpcUrl,h),G=new fr(Dt,I,X),O=Array.from(cn()),ce=new V(p),L=await fa(i,G,ce),Fe=await na(O,G.programId),xe=await ft(G.programId),je=await Ce(new V(h),new V(g)),Te=await yt(new V(g),G.programId),se=await cr(S,G.programId),ge=await aa(S,Buffer.from(T),G.programId),be=await He(G.programId),me=await G.account.config.fetch(be),Me=await Ot(S,me.gasOracleProgramId),Oe=await Ot(F,me.gasOracleProgramId),Se=ya({amount:L,recipient:Buffer.from(w),nonce:Buffer.from(O),receiveToken:Buffer.from(T),destinationChainId:S,sourceChainId:F,chainBridge:(await ft(G.programId)).toBuffer()}),W={};return W.bridge=G,W.amount=new bt(i),W.vusdAmount=new bt(L),W.nonce=O,W.recipient=Array.from(w),W.receiveToken=Array.from(T),W.poolAccount=ce,W.lockAccount=Fe,W.bridgeAuthority=xe,W.userToken=je,W.bridgeTokenAccount=Te,W.chainBridgeAccount=se,W.otherBridgeTokenAccount=ge,W.userAccount=new V(h),W.destinationChainId=S,W.mint=new V(g),W.config=be,W.configAccountInfo=me,W.gasPrice=Me,W.thisGasPrice=Oe,W.message=Se,f&&(W.extraGasInstruction=this.getExtraGasInstruction(f,W.userAccount,be)),W}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:w,config:I,configAccountInfo:F,gasPrice:X,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=F.allbridgeMessengerProgramId,Fe=await mr(T,L),xe=await He(L),je=await ia(O,L),Te=[];ce&&Te.push(ce);let se=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts({mint:w,user:S,config:I,lock:l,pool:u,gasPrice:X,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,messenger:L,messengerGasUsage:Fe,messengerConfig:xe,sentMessageAccount:je,otherBridgeToken:h}).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr})]).postInstructions(Te).transaction(),ge=Qe(this.solanaRpcUrl,S.toString()).connection;return se.recentBlockhash=(await ge.getLatestBlockhash()).blockhash,se.feePayer=S,await this.convertToVersionedTransaction(se,ge)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new V(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new y("Cannot find allbridgeLookupTableAccount");let A=new ze.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new ze.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:w,config:I,configAccountInfo:F,gasPrice:X,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=this.params.wormholeMessengerProgramId,[Fe]=V.findProgramAddressSync([Buffer.from("Bridge")],new V(L)),[xe]=V.findProgramAddressSync([Buffer.from("fee_collector")],new V(L)),[je]=V.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new V(L)),Te=await mr(T,F.wormholeMessengerProgramId),se=await He(F.wormholeMessengerProgramId),ge=Ia.generate(),be=Qe(this.solanaRpcUrl,S.toString()),me=await be.connection.getAccountInfo(Fe);if(me==null)throw new y("Cannot fetch wormhole bridge account info");let Me=new bt(me.data.slice(16,24),"le").toString(),Oe=zi.transfer({fromPubkey:S,toPubkey:xe,lamports:+Me}),Se=[];ce&&Se.push(ce);let W={mint:w,user:S,config:I,lock:l,pool:u,gasPrice:X,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,otherBridgeToken:h,messengerGasUsage:Te,wormholeProgram:L,bridge:Fe,message:ge.publicKey,wormholeMessenger:F.wormholeMessengerProgramId,sequence:je,feeCollector:xe,wormholeMessengerConfig:se,clock:ze.SYSVAR_CLOCK_PUBKEY},Yt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts(W).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr}),Oe]).postInstructions(Se).signers([ge]).transaction();return Yt.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,Yt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Yt,be.connection),messageAccount:ge}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new ne("Such route does not support CCTP protocol");let f=4,g=A,h=l,S=u,T=Qe(this.solanaRpcUrl,g),w=new fr(ga,p,T),I=new V(c),F=await sa(I,w.programId),X=new V(g),G=await w.account.cctpBridge.fetch(F),O={};return O.cctpBridge=w,O.cctpBridgeAccount=F,O.cctpAddressAccount=new V(p),O.amount=new bt(o),O.recipient=Array.from(S),O.receiveToken=Array.from(h),O.userToken=await Ce(X,I),O.bridgeAuthority=await ra(F,w.programId),O.bridgeTokenAccount=await oa(I,w.programId),O.chainBridgeAccount=await cr(m,w.programId),O.userAccount=X,O.destinationChainId=m,O.mint=I,O.gasPrice=await Ot(m,G.gasOracleProgramId),O.thisGasPrice=await Ot(f,G.gasOracleProgramId),O.provider=T,d&&(O.extraGasInstruction=this.getExtraGasInstruction(d,O.userAccount,F)),O}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:f,userAccount:g,destinationChainId:h,mint:S,gasPrice:T,thisGasPrice:w,extraGasInstruction:I,provider:F}=i,X=this.params.cctpParams.cctpDomains[r],G=this.params.cctpParams.cctpTransmitterProgramId,O=this.params.cctpParams.cctpTokenMessengerMinter;if(X==null||!G||!O)throw new y("CCTP is not configured");let ce=new V(G),L=new V(O),{messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMessengerEventAuthority:je,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be}=ca(X,S,ce,L),me=[];I&&me.push(I);let Me=Ia.generate(),Oe=Aa(o.programId,Me.publicKey),Se=await o.methods.bridge({amount:c,destinationChainId:h,recipient:m,receiveToken:u}).accounts({mint:S,user:g,cctpBridge:A,messageSentEventData:Me.publicKey,lock:Oe,cctpMessenger:L,messageTransmitterProgram:ce,messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be,eventAuthority:je,bridgeToken:p,gasPrice:T,thisGasPrice:w,chainBridge:f,userToken:d,bridgeAuthority:l}).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(me).transaction(),W=F.connection;return Se.recentBlockhash=(await W.getLatestBlockhash()).blockhash,Se.feePayer=g,{transaction:await this.convertToVersionedTransaction(Se,W),messageSentEventDataKeypair:Me}}send(r){throw new Y}};import{Address as hr,contract as Sb}from"@stellar/stellar-sdk";import{Big as ts}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var qi=n.Spec,es=n.Client;var Gt=class extends es{constructor(r){super(new qi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Tn=class extends le{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=ts(g).plus(f).toFixed());let h=this.getContract(Gt,o,A),S;return p==="stablecoin"?S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(0),fee_token_amount:BigInt(g)}):S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(g),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(Gt,o,A).swap({sender:A,amount:BigInt(i),token:hr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new Y}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as ps}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Bn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ja}from"@mysten/sui/utils";import{Big as Fr}from"big.js";var xr=Pe(qe());var Xe=Pe(qe());H();function Fa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[C(s,r.bridge),C(s,r.coin),ye(s,r.receiveAmountMin,"u64")]})}function xa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),C(s,r.coin)]})}function Ma(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),ye(s,r.amountLp,"u64")]})}function Oa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit)]})}function Na(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function br(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.wormholeState),C(s,r.theClock),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),ye(s,r.destinationChainId,"u8"),C(s,r.receiveToken),ye(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}function Wa(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Sr(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),ye(s,r.destinationChainId,"u8"),C(s,r.receiveToken),ye(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}var $a=Pe(wr());var Ga=Pe(wr());H();function Cr(s,a,r){return s.moveCall({target:`${Ga.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[C(s,r.cctpBridge),C(s,r.gasOracle),C(s,r.tokenMessengerMinterState),C(s,r.messageTransmitterState),C(s,r.treasury),C(s,r.denyList),C(s,r.amount),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin),ye(s,r.destinationChainId,"u8"),C(s,r.recipient),C(s,r.recipientWalletAddress)]})}var _a=Pe(Ir());var Za=Pe(Ir());H();import{bcs as et}from"@mysten/sui/bcs";import{fromHEX as As,toHEX as cs}from"@mysten/sui/utils";import{bcs as os}from"@mysten/sui/bcs";H();var Rr=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=M(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(Ut(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([B(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return os.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>R(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Ut(a)).parse(r))}toJSONField(){return this.elements.map(a=>ct(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new(r.map(i=>v(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function St(s){return Rr.r(s)}function j(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ms=et.bytes(32).transform({input:s=>As(s),output:s=>cs(s)});function Ut(s){switch(s){case"bool":return et.bool();case"u8":return et.u8();case"u16":return et.u16();case"u32":return et.u32();case"u64":return et.u64();case"u128":return et.u128();case"u256":return et.u256();case"address":return ms;default:return s.bcs}}function B(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(s.kind==="VectorClassReified")return s.fromFields(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::option::Option":return a.vec.length===0?null:s.fromFields(a).vec[0];default:return s.fromFields(a)}}function R(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:R(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function ve(s,a,r){if(r.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${a.length}))`);for(let i=0;i<a.length;i++)if(P(a[i])!==P(B(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${B(r[i])}, got ${a[i]}))`)}function Ve(s,a){let{typeArgs:r}=ee(s.type);ve(s.type,r,a)}function ct(s,a){let{typeName:r,typeArgs:i}=ee(s);switch(r){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(o=>ct(i[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:ct(i[0],a);default:return a.toJSONField()}}function v(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromJSONField(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:v(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}H();var bn="0x1";import{bcs as Ru}from"@mysten/sui/bcs";import{fromB64 as ku}from"@mysten/sui/utils";H();import{bcs as vr}from"@mysten/sui/bcs";import{fromB64 as us}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${bn}::string::String`}var Pn=class s{__StructClass=!0;static get $typeName(){return`${bn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return vr.struct("String",{bytes:vr.vector(vr.u8())})}static fromFields(a){return s.reified().new({bytes:k(St("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a String type");return s.reified().new({bytes:R(St("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:ct("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:v(St("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(us(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};H();H();var tt="0x2";import{bcs as kr}from"@mysten/sui/bcs";import{fromB64 as Va,fromHEX as ls,toHEX as ds}from"@mysten/sui/utils";function wn(s){return s=P(s),s===`${tt}::object::ID`}var mt=class s{__StructClass=!0;static get $typeName(){return`${tt}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("ID",{bytes:kr.bytes(32).transform({input:a=>ls(a),output:a=>ds(a)})})}static fromFields(a){return s.reified().new({bytes:k("address",a.bytes)})}static fromFieldsWithTypes(a){if(!wn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:R("address",a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:v("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!wn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Cn(s){return s=P(s),s===`${tt}::object::UID`}var he=class s{__StructClass=!0;static get $typeName(){return`${tt}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("UID",{id:mt.bcs})}static fromFields(a){return s.reified().new({id:k(mt.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Cn(a.type))throw new Error("not a UID type");return s.reified().new({id:R(mt.reified(),a.fields.id)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({id:v(mt.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Cn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Cn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Cn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function ke(s,a){return s.moveCall({target:`${Za.PUBLISHED_AT}::bytes32::from_hex`,arguments:[ye(s,a,`${Pn.$typeName}`)]})}async function Ze(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?Ze(s,i.nextCursor,o):o}var In=class extends le{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ps({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new y("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");(0,xr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new Bn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Fa(l,[c,m],d),f=await Ze(g=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:g}));return f.length===0||!f[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(f[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new y("SUI token must contain 'suiAddresses'");switch((0,xr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,_a.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A)}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Sr(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Sr(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};br(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};br(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=i;(0,$a.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;h.setSender(c);let S=ke(h,Be(l)),T;if(r.destinationToken.chainType==="SOLANA"){let w=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ke(h,Be(w))}else T=S;if(p==="stablecoin"){let w=BigInt(A)-BigInt(g),I={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:w,type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Cr(h,m,I)}else{let w=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),I={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:w};Cr(h,m,I)}return await h.toJSON({client:this.client})}};import{Big as ys}from"big.js";import gs from"bn.js";function Rn(s){return"0x"+new gs(s).toString("hex")}function Ja(s){return new Promise(a=>setTimeout(()=>a(),s))}async function vn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new pt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await fs(s,o),{txId:o}}async function fs(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new kt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Ja(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new kt(`Transaction status is ${o.receipt.result}`)}}var Et=class extends le{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await Ie(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(i);return await vn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:d,fee:p,gasFeePaymentMethod:f,extraGas:g}=r,h=p;g&&(h=ys(h).plus(g).toFixed());let S=Ue().toString(),T,w,I;return d==3||d==4?(f==="stablecoin"?(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:h}],w="0"):(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],w=h),I="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:h}],w="0"):(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:0}],w=h),I="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,I,T,w,A)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var kn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new dn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Wt(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),(await pn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a)).send(r)}};function Wt(s,a){if(a&&a==3){if(s.cctpAddress)return s.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else if(a&&a==4){if(s.cctpV2Address)return s.cctpV2Address;throw new ne("Such route does not support CCTP V2 protocol")}else return s.bridgeAddress}async function pn(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Nt(o,a,r);{let A=r.getNodeRpcUrl(s);return new Nt(new hs(A),a,r)}}case"TRX":if(o){let A=await we();return new Et(o,a)}else{let A=r.getNodeRpcUrl(s);return new Et(new(await we())({fullHost:A,solidityNode:A,eventServer:A}),a)}case"SOLANA":return new hn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new Tn(r,i,a);case"SUI":return new In(r,a)}}import{Big as Ws}from"big.js";import Ds from"timed-cache";import{FMT_BYTES as Gs,FMT_NUMBER as Us,Web3 as Es}from"web3";import{Big as Ye}from"big.js";function La(s,a,r,i,o){let A=D(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let f=c.div(2);l=Ye(i).plus(f),d=Ye(o).plus(f)}else l=Ye(i).plus(c.mul(i).div(u)),d=Ye(o).plus(c.mul(o).div(u));return Ye(Lr(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function Xa(s){let a=D(s,3);return Ye(a).round().toFixed()}import{Web3 as nt}from"web3";var Ts={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{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:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",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:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",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:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",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:"amount",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:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",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:"amount",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:"amount",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:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Pt=Ts;var ie=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return x(this.lpAmount,3).toFixed()}earned(a,r){let i=_r(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?x(i,r).toFixed():i}};var de=class{};var Vt=class extends de{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await on(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await Ar(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await on(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await Ar(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new ie({lpAmount:nt.utils.toBigInt(l.result).toString(),rewardDebt:nt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new ie({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,f,g,h,S,T]=await i.execute();if(p&&f&&g&&h&&S&&T&&!p.error&&!f.error&&!g.error&&!h.error&&!S.error&&!T.error){let w=nt.utils.toBigInt(g.result).toString(),I=nt.utils.toBigInt(h.result).toString(),F=re({tokenBalance:w,vUsdBalance:I});return{aValue:nt.utils.toBigInt(p.result).toString(),dValue:nt.utils.toBigInt(f.result).toString(),tokenBalance:w,vUsdBalance:I,totalLpAmount:nt.utils.toBigInt(S.result).toString(),accRewardPerShareP:nt.utils.toBigInt(T.result).toString(),p:this.P,imbalance:F}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=re({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Pt.abi,r)}};var Fn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,a.token.decimals).toFixed(),(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,3).toFixed(),(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as bs,BN as Ya,Program as Ss,Spl as Ps,web3 as ws}from"@project-serum/anchor";import{Connection as Cs,PublicKey as rt}from"@solana/web3.js";var xn=class extends de{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),A=this.getBridge(i.bridgeAddress,o),c=new rt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await ur(new rt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new ie({lpAmount:l.toString(),rewardDebt:d.toString()})}catch{return new ie({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=re({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new Ss(Dt,r,i)}buildAnchorProvider(r){let i=new Cs(this.solanaRpcUrl,"confirmed"),o=new rt(r);return new bs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new rt(o),m=await He(r.programId),u=await ft(r.programId),l=new rt(i),p=(await r.account.pool.fetch(l)).mint,f=await Ce(c,p),g=await yt(p,r.programId),h=await ur(c,p,r.programId),S=[ws.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ht(f,A)}catch{let F=await Ps.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:f}).instruction();S.push(F)}try{await r.account.userDeposit.fetch(h)}catch{let I=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:h}).instruction();S.push(I)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:h,userToken:f,bridgeToken:g},preInstructions:S}}};import{contract as Pb}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var Bs=t.Spec,Is=t.Client;var Mn=class extends Is{constructor(r){super(new Bs(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};import{contract as tp,rpc as Rs}from"@stellar/stellar-sdk";var Ka=Rs.Api;function Ct(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Ka.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Bt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Ka.isSimulationError(a)}var On=class extends de{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Bt(A))throw new y;let c=Ct(A);if(!c)throw new y;let m=c.unwrap();return new ie({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Bt(o))throw new y;let A=Ct(o);if(!A)throw new y;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:re({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Mn(o)}};import{SuiClient as Ns}from"@mysten/sui/client";import{Transaction as jn}from"@mysten/sui/transactions";var Rt=Pe(qe());H();H();import{bcs as Ha}from"@mysten/sui/bcs";import{fromB64 as vs}from"@mysten/sui/utils";function Nn(s){return s=P(s),s.startsWith(`${tt}::balance::Balance<`)}var te=class s{__StructClass=!0;static get $typeName(){return`${tt}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ha.struct("Balance",{value:Ha.u64()})}static fromFields(a,r){return s.reified(a).new({value:k("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Nn(r.type))throw new Error("not a Balance type");return Ve(r,[a]),s.reified(a).new({value:R("u64",r.fields.value)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({value:v("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Nn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Nn(r.bcs.type))throw new Error("object at is not a Balance object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,vs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Nn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Nr=Pe(qe());H();var Mr=Pe(qe());import{bcs as Wn}from"@mysten/sui/bcs";import{fromB64 as ks}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool_rewards::PoolRewards<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Wn.struct("PoolRewards",{acc_reward_per_share_p:Wn.u128(),admin_fee_share_bp:Wn.u64(),admin_fee:te.bcs,rewards:te.bcs,lp_supply:Wn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:k("u128",r.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.admin_fee_share_bp),adminFee:k(te.reified(a),r.admin_fee),rewards:k(te.reified(a),r.rewards),lpSupply:k("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a PoolRewards type");return Ve(r,[a]),s.reified(a).new({accRewardPerShareP:R("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:R("u64",r.fields.admin_fee_share_bp),adminFee:R(te.reified(a),r.fields.admin_fee),rewards:R(te.reified(a),r.fields.rewards),lpSupply:R("u64",r.fields.lp_supply)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({accRewardPerShareP:v("u128",r.accRewardPerShareP),adminFeeShareBp:v("u64",r.adminFeeShareBp),adminFee:v(te.reified(a),r.adminFee),rewards:v(te.reified(a),r.rewards),lpSupply:v("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,ks(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};H();var Or=Pe(qe());import{bcs as It}from"@mysten/sui/bcs";import{fromB64 as Fs}from"@mysten/sui/utils";function Gn(s){return s=P(s),s.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var lt=class s{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return It.struct("PoolState",{token_balance:It.u64(),vusd_balance:It.u64(),d:It.u64(),a:It.u64(),balance_ratio_min_bp:It.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:k("u64",r.token_balance),vusdBalance:k("u64",r.vusd_balance),d:k("u64",r.d),a:k("u64",r.a),balanceRatioMinBp:k("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Gn(r.type))throw new Error("not a PoolState type");return Ve(r,[a]),s.reified(a).new({tokenBalance:R("u64",r.fields.token_balance),vusdBalance:R("u64",r.fields.vusd_balance),d:R("u64",r.fields.d),a:R("u64",r.fields.a),balanceRatioMinBp:R("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({tokenBalance:v("u64",r.tokenBalance),vusdBalance:v("u64",r.vusdBalance),d:v("u64",r.d),a:v("u64",r.a),balanceRatioMinBp:v("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Gn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Gn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Fs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Gn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Zt}from"@mysten/sui/bcs";import{fromB64 as xs}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Nr.PKG_V1}::pool::Pool<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Zt.struct("Pool",{id:he.bcs,state:lt.bcs,rewards:ut.bcs,fee_share_bp:Zt.u64(),can_deposit:Zt.bool(),can_withdraw:Zt.bool(),decimals:Zt.u8(),balance:te.bcs})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),state:k(lt.reified(a),r.state),rewards:k(ut.reified(a),r.rewards),feeShareBp:k("u64",r.fee_share_bp),canDeposit:k("bool",r.can_deposit),canWithdraw:k("bool",r.can_withdraw),decimals:k("u8",r.decimals),balance:k(te.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Pool type");return Ve(r,[a]),s.reified(a).new({id:R(he.reified(),r.fields.id),state:R(lt.reified(a),r.fields.state),rewards:R(ut.reified(a),r.fields.rewards),feeShareBp:R("u64",r.fields.fee_share_bp),canDeposit:R("bool",r.fields.can_deposit),canWithdraw:R("bool",r.fields.can_withdraw),decimals:R("u8",r.fields.decimals),balance:R(te.reified(a),r.fields.balance)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:v(he.reified(),r.id),state:v(lt.reified(a),r.state),rewards:v(ut.reified(a),r.rewards),feeShareBp:v("u64",r.feeShareBp),canDeposit:v("bool",r.canDeposit),canWithdraw:v("bool",r.canWithdraw),decimals:v("u8",r.decimals),balance:v(te.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a Pool object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,xs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};H();var Dr=Pe(qe());import{bcs as Wr}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Vn(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::user_deposit::UserDeposit<`)}var Zn=class s{__StructClass=!0;static get $typeName(){return`${Dr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Wr.struct("UserDeposit",{id:he.bcs,lp_amount:Wr.u64(),reward_debt:Wr.u64()})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),lpAmount:k("u64",r.lp_amount),rewardDebt:k("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a UserDeposit type");return Ve(r,[a]),s.reified(a).new({id:R(he.reified(),r.fields.id),lpAmount:R("u64",r.fields.lp_amount),rewardDebt:R("u64",r.fields.reward_debt)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:v(he.reified(),r.id),lpAmount:v("u64",r.lpAmount),rewardDebt:v("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Vn(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Vn(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Ms(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function za(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Qa(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Qa(r,i,c,s):[]}function Qa(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Os="0x0000000000000000000000000000000000000000000000000000000000000000";async function qa(s,a,r){let i=await s.devInspectTransactionBlock({sender:Os,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():Ut(r).parse(Uint8Array.from(A))}var $n=class extends de{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Ns({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new y("SUI token must contain 'suiAddresses'");(0,Rt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new y("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new ie({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Zn.phantom(j(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=48,A=new jn;Na(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await qa(this.client,A,En.reified(j(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=re({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=await Ze(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new jn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=za([r.amount],o,c);if(!l)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let d=xa(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=j(i).phantomType;return{depositObj:Wa(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new y("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=j(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Ma(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await Ze(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new y("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=j(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Oa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await Ze(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Ke}from"web3";var jt=class extends de{constructor(r,i,o){super();this.tronWeb=r;this.api=i;o&&(this.web3=new Ke(o))}chainType="TRX";P=52;web3;async getUserBalanceInfo(r,i){let o;if(this.web3)try{o=await this.getUserBalanceInfoByBatch(this.web3,r,i)}catch{o=await this.getUserBalanceInfoPerProperty(r,i)}else o=await this.getUserBalanceInfoPerProperty(r,i);return o}async getUserBalanceInfoByBatch(r,i,o){let A=new r.BatchRequest,c=new r.eth.Contract(Pt.abi,await An(o.poolAddress)),m=c.methods.userRewardDebt(i).encodeABI(),u=c.methods.balanceOf(i).encodeABI();A.add({method:"eth_call",params:[{to:o.poolAddress,data:m},"latest"]}),A.add({method:"eth_call",params:[{to:o.poolAddress,data:u},"latest"]});let[l,d]=await A.execute();if(l&&d&&!l.error&&!d.error)return new ie({lpAmount:Ke.utils.toBigInt(d.result).toString(),rewardDebt:Ke.utils.toBigInt(l.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new ie({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.web3)try{i=await this.getPoolInfoByBatch(this.web3,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=new r.BatchRequest,A=new r.eth.Contract(Pt.abi,await An(i.poolAddress),this.web3),c=A.methods.a().encodeABI(),m=A.methods.d().encodeABI(),u=A.methods.tokenBalance().encodeABI(),l=A.methods.vUsdBalance().encodeABI(),d=A.methods.totalSupply().encodeABI(),p=A.methods.accRewardPerShareP().encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:u},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:p},"latest"]});let[f,g,h,S,T,w]=await o.execute();if(f&&g&&h&&S&&T&&w&&!f.error&&!g.error&&!h.error&&!S.error&&!T.error&&!w.error){let I=Ke.utils.toBigInt(h.result).toString(),F=Ke.utils.toBigInt(S.result).toString(),X=re({tokenBalance:I,vUsdBalance:F});return{aValue:Ke.utils.toBigInt(f.result).toString(),dValue:Ke.utils.toBigInt(g.result).toString(),tokenBalance:I,vUsdBalance:F,totalLpAmount:Ke.utils.toBigInt(T.result).toString(),accRewardPerShareP:Ke.utils.toBigInt(w.result).toString(),p:this.P,imbalance:X}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,l]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),d=c.toString(),p=m.toString(),f=re({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Pt.abi,r)}};var _n=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Fn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Ds({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=La(a,m,u,c,A);return x(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=Xa(a),m=ue(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=Ws(m).plus(l).toFixed();return x(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return(await wt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i)).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await(await wt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};async function wt(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Vt(o,a);{let A=r.getNodeRpcUrl(s),c=new Es(A);return c.defaultReturnFormat={number:Us.STR,bytes:Gs.HEX},new Vt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o){let m=await we();return new jt(o,a,c)}else{let m=new(await we())({fullHost:A});return new jt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new xn(A,a)}case"SRB":return new On(r,i,a);case"SUI":return new $n(r.getNodeRpcUrl(s),a)}}import{Big as _}from"big.js";function ni(s,a,r){let i=Vs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Zs(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ri(s,a,r){let i=js(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=$s(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Vs(s,{feeShare:a,decimals:r},i){let o=_(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ei(it(c,r),i),amountExcludingCommissionInSystemPrecision:ei(it(o,r),i)}}function ei(s,a){if(s.eq(0))return"0";let r=_(a.tokenBalance).plus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(a.vUsdBalance).minus(i).round().toFixed()}function Zs(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=_(s).plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(_(i.tokenBalance).minus(c),r),u=_(m).times(a),l=_(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function js(s,{feeShare:a,decimals:r},i){let o=_(a).div(_(1).minus(a)),A=_(s).times(o),c=_(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ti(it(c,r),i),amountExcludingCommissionInSystemPrecision:ti(it(s,r),i)}}function ti(s,a){let r=_(a.tokenBalance).minus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(i).minus(a.vUsdBalance).round().toFixed()}function $s(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=_(i.vUsdBalance).minus(s),A=De(o.toFixed(),i.aValue,i.dValue),c=_(A).minus(i.tokenBalance),m=ue(c.toFixed(),r),u=_(a).div(_(1).minus(a)),l=_(m).times(u),d=_(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as at}from"big.js";function ai(s,a,r,i,o){let A=We(s,a,r),c=ue(A,a.decimals),m=Mt(A,i,o),u=at(s).times(a.feeShare),l=at(m).div(at(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:x(u,a.decimals).neg().round(a.decimals,at.roundUp).toFixed(),swap:x(at(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,at.roundUp).toFixed()},destLPSwap:{fee:x(l,i.decimals).neg().round(i.decimals,at.roundUp).toFixed(),swap:x(ue(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,at.roundUp).toFixed()}}}import{Connection as _s,PublicKey as Js,TransactionMessage as Ls}from"@solana/web3.js";var Jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new y("InvalidArgumentException memo cannot be more than 28 characters");let i=new _s(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await At(a,i),A=Ls.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new y("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Js(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as Ks,BASE_FEE as Hs,contract as wb,Horizon as ii,Operation as Qs,Operation as zs,rpc as _t,TimeoutInfinite as qs,TransactionBuilder as Gr,TransactionBuilder as si}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Xs=e.Spec,Ys=e.Client;var $t=class extends Ys{constructor(r){super(new Xs(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var eo=100,to=180,Ln=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract($t,a.tokenAddress).name();if(Bt(A))throw new y;let c=Ct(A);if(!c)throw new y;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new y("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Ks(m,u),d=zs.changeTrust({asset:l,limit:a.limit});return new si(i,{fee:eo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(to).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract($t,r).name();if(Bt(o))throw new y;let A=Ct(o);if(!A)throw new y;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ii.Server(u).loadAccount(a)).balances.find(f=>(f.asset_type==="credit_alphanum4"||f.asset_type==="credit_alphanum12")&&f.asset_code==c&&f.asset_issuer==m)}async submitTransactionStellar(a){let r=new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=si.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if(_t.Api.isSimulationRestore(c))return new Gr(o,{fee:(+Hs+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Qs.restoreFootprint({})).setTimeout(qs).build().toXDR()}async sendTransactionSoroban(a){let r=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await qr(()=>i.getTransaction(a),c=>c.status===_t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new y("No transaction responses found.");let A=o[o.length-1];if(!A)throw new y("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Xn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new Ln(a,r),this.sol=new Jn(a,r)}srb;sol};var ot=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(ot||{}),mn=(r=>(r.INT="int",r.FLOAT="float",r))(mn||{});import{Big as uo}from"big.js";import{Web3 as lo}from"web3";var no={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{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:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{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:"amount",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:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",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:"amount",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:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Yn=no;import{Big as oi}from"big.js";var pe=class{async checkAllowance(a){let r=await this.getAllowance(a);return oi(r).gte(oi(a.amount))}};var ro="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",ao="0xdac17f958d2ee523a2206206994597c13d831ec7",io=1e5,Jt=class extends pe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===ao}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?ro:Rn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=io:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Yn.abi,r)}};import{AnchorProvider as so}from"@project-serum/anchor";import{Connection as oo,PublicKey as Kn}from"@solana/web3.js";var Hn=class extends pe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}buildAnchorProvider(r){let i=new oo(this.solanaRpcUrl,"confirmed"),o=new Kn(r);return new so(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new Y}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await Ce(new Kn(i),new Kn(o.tokenAddress));return(await ht(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Kn(r.account))).toString()}};import{Horizon as Wh,NotFoundError as Ao}from"@stellar/stellar-sdk";var Qn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new Wh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof Ao)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?D(u.balance,N.getChainDecimalsByType(N.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new Wh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?D(c.balance,N.getChainDecimalsByType(N.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Y}buildRawTransactionApprove(){throw new Y}};import{SuiClient as co}from"@mysten/sui/client";var zn=class extends pe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new co({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}getAllowance(r){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await Ze(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var mo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Lt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:i},owner:o}=r;return(await(await this.getContract(i)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let i=await this.buildRawTransactionApprove(r);return await vn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?mo:Rn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Yn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var qn=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).getAllowance(a);return x(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),(await this.getChainTokenService(r.token.chainSymbol,r.owner,a)).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.account,r)).getTokenBalance(a);return a.token.decimals?x(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await(await this.getChainTokenService(a.chainSymbol,a.account,r)).getNativeTokenBalance(a);return{int:i,float:x(i,N.getChainDecimalsByType(N.getChainProperty(a.chainSymbol).chainType)).toFixed()}}async getChainTokenService(a,r,i){switch(N.getChainProperty(a).chainType){case"EVM":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Jt(new lo(o),this.api)}}case"TRX":if(i){let o=await we();return new Lt(i,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new(await we())({fullHost:o});return A.setAddress(r),new Lt(A,this.api)}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Hn(o,this.api)}case"SRB":return new Qn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new zn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:D(a.amount,a.token.decimals)}}prepareApproveParams(a){return{tokenAddress:a.token.tokenAddress,owner:a.owner,spender:a.spender,chainSymbol:a.token.chainSymbol,amount:a.amount==null?void 0:uo(a.amount).toFixed()}}};var Xt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new zt(a)}},er=class{api;tokenService;params;bridge;pool;constructor(a,r=Kt){N.addChainsProperties(r.additionalChainsProperties);let i=new en(r),o=new nn(i),A=new rn(o),c=new sn(A);this.api=new an(c,r),this.tokenService=new qn(this.api,a,r),this.bridge=new kn(this.api,a,r,this.tokenService),this.pool=new _n(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a;let c=We(A,i,await K(this.api,i)),m=await K(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let f=d[o.chainSymbol];if(!f)throw new y("Cannot find pending info for "+o.chainSymbol);l=f[p]}if(l){let p=Zr(l.totalSentAmount,m),f=this.getAmountFromVUsdFormatted(c,o,p),g;return Ae(f.int).gt(u.int)?g={min:u,max:f}:g={min:f,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:Ne(l.totalSentAmount,3,o.decimals).toFixed(0),float:x(l.totalSentAmount,3).toFixed()},estimatedAmount:g}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=D(a,r.decimals);if(i.eq(0))return 0;let o=We(i,r,await K(this.api,r)),A=ue(o,r.decimals);return rr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=D(a,r.decimals);if(o.eq(0))return 0;let A=We(o,r,await K(this.api,r)),c=Mt(A,i,await K(this.api,i)),m=ue(A,i.decimals);return rr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:Ae(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Ae(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){let A=await K(this.api,r),c=await K(this.api,i);return this.getAmountToBeReceivedFromPools(a,r,i,A,c,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToBeReceivedFromPools(a,r,i,m,u,o)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){U(a),E("amountToSendFloat",a,r.decimals);let m=D(a,r.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return x(d,i.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let l=m.mul(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return x(d,i.decimals).toFixed()}let u=We(m,r,o);return this.getAmountFromVUsdFormatted(u,i,A).float}async getAmountToSend(a,r,i,o){let A=await K(this.api,r),c=await K(this.api,i);return this.getAmountToSendFromPools(a,r,i,A,c,o)}async getAmountToSendFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToSendFromPools(a,r,i,m,u,o)}getAmountToSendFromPools(a,r,i,o,A,c){U(a),E("amountToBeReceivedFloat",a,i.decimals);let m=D(a,i.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return x(p,r.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let d=m.div(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return x(p,r.decimals).toFixed()}let u=$r(m,i,A),l=jr(u,r,o);if(Ae(l).lte(0))throw new _e;return x(l,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return lr(a.allbridgeChainId,a.chainType,r.allbridgeChainId,a.decimals,i,this.api)}getAverageTransferTime(a,r,i){return a.transferTime?.[r.chainSymbol]?.[i]??null}async getPoolInfoByToken(a){return await this.api.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}async refreshPoolInfo(a){if(a){let i=(a instanceof Array?a:[a]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(i)}return this.api.refreshPoolInfo()}aprInPercents(a){return Jr(a)}async getExtraGasMaxLimits(a,r){return await dr(a,r,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=D(a,i.decimals).toFixed()):o=a;let A=We(o,i,await K(this.api,i));return{int:A,float:x(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await K(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=Mt(a,r,i);if(Ae(o).lt(0))throw new _e;return{int:o,float:x(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ni(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ri(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ae(A).lt(0))throw new _e;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a,ai(A,i,await K(this.api,i),o,await K(this.api,o))}};function po(s){return"solanaRpcUrl"in s}var Ai=class{params;bridge;pool;utils;service;constructor(a,r=Kt){let i;po(a)?i=new Xt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Xt(a),this.service=new er(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Xn(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromPools(a,r,i,o,A,c)}async getAmountToSend(a,r,i,o){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c){return this.service.getAmountToSendFromPools(a,r,i,o,A,c)}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,i)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,r){return this.service.getExtraGasMaxLimits(a,r)}async getVUsdFromAmount(a,r,i){return this.service.getVUsdFromAmount(a,r,i)}async getAmountFromVUsd(a,r){return this.service.getAmountFromVUsd(a,r)}async swapAndBridgeFeeCalculation(a,r,i){return this.service.swapAndBridgeFeeCalculation(a,r,i)}async swapAndBridgeFeeCalculationReverse(a,r,i){return this.service.swapAndBridgeFeeCalculationReverse(a,r,i)}async getSendAmountDetails(a,r,i,o){return this.service.getSendAmountDetails(a,r,i,o)}};export{ar as AddressStatus,Ai as AllbridgeCoreSdk,mn as AmountFormat,dt as AmountNotEnoughError,Qt as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,fe as ChainSymbol,Z as ChainType,yi as ErrorCode,Ht as ExtraGasMaxLimitExceededError,ot as FeePaymentMethod,_e as InsufficientPoolLiquidityError,$e as InvalidAmountError,vt as InvalidGasFeePaymentOptionError,Er as InvalidMessengerOptionError,pt as InvalidTxError,Q as JupiterError,Ge as Messenger,Y as MethodNotSupportedError,zt as NodeRpcUrlNotInitializedError,y as SdkError,J as SdkRootError,pr as SolanaAutoTxFee,Ft as TimeoutError,qt as TxTooLargeError,kt as VerifyTxError,Kt as mainnet,yo as nodeRpcUrlsDefault,fo as nodeUrlsDefault};
|
|
1
|
+
var mi=Object.create;var Ur=Object.defineProperty;var ui=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var di=Object.getPrototypeOf,pi=Object.prototype.hasOwnProperty;var gi=(s,a)=>()=>(s&&(a=s(s=0)),a);var tr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var fi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of li(a))!pi.call(s,o)&&o!==r&&Ur(s,o,{get:()=>a[o],enumerable:!(i=ui(a,o))||i.enumerable});return s};var Pe=(s,a,r)=>(r=s!=null?mi(di(s)):{},fi(a||!s||!s.__esModule?Ur(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as oe}from"@mysten/sui/bcs";function ns(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function ee(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[a,r]=["<",">"],i=s.indexOf(a),o=Array.from(s).reverse().indexOf(r);if(i===-1&&o===-1)return{typeName:s,typeArgs:[]};if(i===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let A=s.slice(0,i),c=ns(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function va(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function w(s,a){return va(a)?a:s.object(a)}function ye(s,a,r){if(va(a))return w(s,a);function i(l){let{typeName:d,typeArgs:p}=ee(l);switch(d){case"bool":return oe.Bool;case"u8":return oe.U8;case"u16":return oe.U16;case"u32":return oe.U32;case"u64":return oe.U64;case"u128":return oe.U128;case"u256":return oe.U256;case"address":return oe.Address;case"0x1::string::String":case"0x1::ascii::String":return oe.String;case"0x2::object::ID":return oe.Address;case"0x1::option::Option":return oe.option(i(p[0]));case"vector":return oe.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=ee(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[ye(s,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return s.pure(oe.vector(oe.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function rs(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=ee(s);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${P(r[0])}>`;default:{let i=a.split("::");i[0]=rs(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function x(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var K=gi(()=>{"use strict"});var ze=tr((_m,ka)=>{"use strict";K();var Tr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},as=new Tr;ka.exports=as});var wr=tr((Ym,Da)=>{"use strict";K();var Pr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},is=new Pr;Da.exports=is});var Ir=tr((zm,Ua)=>{"use strict";K();var Br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},ss=new Br;Ua.exports=ss});var Kt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},yo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},ho={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};import{Big as Ae}from"big.js";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},y=class extends J{constructor(a){super("SdkError",a)}},$e=class extends J{constructor(a){super("InvalidAmountError",a)}},lt=class extends J{constructor(a){super("AmountNotEnoughError",a)}},_e=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},Q=class extends J{constructor(a){super("JupiterError",a)}},It=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Er=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},X=class extends J{constructor(a){super("MethodNotSupportedError",a)}},Rt=class extends J{constructor(a){super("VerifyTxError",a)}},dt=class extends J{constructor(a){super("InvalidTxError",a)}},Ht=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},Qt=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},vt=class extends J{constructor(a){super("TimeoutError",a)}},zt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},ne=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},qt=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},yi=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(yi||{});var fe=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g.SUI="SUI",g))(fe||{}),j=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(j||{});var hi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Ti={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},N=(()=>{let s={...Ti};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new y(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return hi[a]}}})();import Bi from"axios";var Vr="3.22.1-alpha.2";import{Big as b}from"big.js";import nr from"bn.js";function rr(s,a){return b(100).minus(b(100).times(a).div(s)).toNumber()}function at(s,a){return Ne(s,a,3).round(0,b.roundDown)}function ue(s,a){return Ne(s,3,a)}function Ne(s,a,r){let i=b(r).minus(a).toNumber();return b(s).times(kt(i))}function kt(s){return b(10).pow(s)}function D(s,a){return b(s).times(kt(a))}function F(s,a){let r=b(s);return r.eq(0)?b(0):b(r).div(kt(a))}function re(s){return F(b(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function We(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=at(c,r),u=b(i.tokenBalance).plus(m),l=De(u,i.aValue,i.dValue);return b(i.vUsdBalance).minus(l).round(0,b.roundDown).toFixed()}function Ft(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return b(0).toFixed();let A=o.plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(b(i.tokenBalance).minus(c),r),u=b(m).times(a);return b(m).minus(u).round(0,b.roundDown).toFixed()}function jr(s,a){let r=b(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=De(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function Zr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(i.vUsdBalance).minus(s);if(o.lte(0))throw new _e;let A=De(o,i.aValue,i.dValue),c=b(A).minus(i.tokenBalance),m=ue(c,r),u=b(a).div(b(1).minus(a)),l=b(m).times(u).round(0,b.roundUp);return b(m).plus(l).round(0,b.roundDown)}function $r(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(a).div(b(1).minus(a)),A=b(s).times(o).round(0,b.roundUp),c=b(s).plus(A),m=at(c,r),u=b(i.tokenBalance).minus(m);if(u.lte(0))throw new _e;let l=De(u,i.aValue,i.dValue);return b(l).minus(i.vUsdBalance).round(0,b.roundDown)}function De(s,a,r){let i=b(4).times(a).times(b(r).minus(s)).minus(r),o=b(r).pow(3),A=i.pow(2),c=b(s).times(b(s).times(A).plus(b(4).times(a).times(o))).sqrt().round(0,b.roundDown),m=b(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,b.roundDown);return u.eq(0)?b(0):u.plus(1)}function _r(s,a,r,i){let o=new nr(s),A=new nr(r),c=new nr(a);return o.mul(A).shrn(i).sub(c).toString()}function Jr(s){return b(s).gt(0)?`${Number(b(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Lr(s,a,r){let i=b(a).times(r),o=b(a).plus(r),A=b(8).times(s).times(i).times(o),c=i.times(b(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=b(l).sqrt(),p=b(Math.cbrt(+A.plus(d).toFixed())),f=b(Math.cbrt(+A.minus(d).toFixed()));return p.plus(f).toFixed()}var ar=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(ar||{});var Ge=(o=>(o[o.ALLBRIDGE=1]="ALLBRIDGE",o[o.WORMHOLE=2]="WORMHOLE",o[o.CCTP=3]="CCTP",o[o.CCTP_V2=4]="CCTP_V2",o))(Ge||{});function Xr(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=Ci(i,o);return A&&(a[i]=A),a},{})}function Yr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=pt({chainSymbol:o,poolAddress:A.poolAddress}),m=re(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function bi(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function Si(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4}}function Pi(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=wi(i),a),{})}function wi(s){return Object.entries(s).reduce((a,[r,i])=>{let o=Si(r);return o&&(a[o]=i),a},{})}function Ci(s,a){let r=N.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,transferTime:Pi(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>bi(i,o))}}function pt(s){return s.chainSymbol+"_"+s.poolAddress}function Kr(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function Hr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=re(c),a[pt({chainSymbol:o,poolAddress:A})]=c}return a}var en=class{api;constructor(a){this.api=Bi.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Vr},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Xr(a),poolInfoMap:Yr(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,r){let{data:i}=await this.api.get(`/check/${a}/${r}`);return i}async getTransferStatus(a,r){let{data:i}=await this.api.get(`/chain/${a}/${r}`);return i}async getReceiveTransactionCost(a){let{data:r}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}async getPoolInfoMap(a){let r=a instanceof Array?a:[a],{data:i}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return Hr(i)}};import tn from"timed-cache";var ir=20*1e3,Ii=55*1e3,nn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new tn({defaultTtl:Ii}),this.receivedTransactionCache=new tn({defaultTtl:ir}),this.pendingInfoCache=new tn({defaultTtl:ir}),this.gasBalanceCache=new tn({defaultTtl:ir})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}`,i=this.receivedTransactionCache.get(r);if(i)return i;let o=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(a,r){return this.apiClient.getTransferStatus(a,r)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var rn=class{constructor(a){this.apiClient=a}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let a=await this.getChainDetailsMap();return Object.values(a).flatMap(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,r){return this.apiClient.getGasBalance(a,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,r){return await this.apiClient.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var an=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:Qr(A.tokens,a,this.isStaging)})}return i}async tokens(a){return Qr(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getTransferStatus(a,r){return await this.client.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,r){return this.client.cachePut(a,r)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Qr(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ri)}function Ri(s){let{flags:a,...r}=s;return r}import vi from"timed-cache";var ki=55*1e3,sn=class{constructor(a){this.client=a;this.poolInfoCache=new sr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,r){return this.client.getTransferStatus(a,r)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(a);if(r)return r;{let i=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(i);let o=i[pt(a)];if(o)return o;throw new y("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(Kr(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(pt(a),r)}},sr=class{cache;constructor(){this.cache=new vi({defaultTtl:ki})}putAll(a){for(let[r,i]of Object.entries(a))this.cache.put(r,i)}putAllIfNotExists(a){for(let[r,i]of Object.entries(a))this.cache.get(r)||this.cache.put(r,i)}put(a,r){this.cache.put(a,r)}get(a){let r=pt(a);return this.cache.get(r)}};import{Web3 as hs}from"web3";var or;async function we(){return or||(or=(await import("tronweb")).default),or}import{Big as zr}from"big.js";async function Y(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(zr(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=zr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new Qt(s,A.length,r)}async function on(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new vt(a)),r)})])}async function Ar(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await on(s(),a,i)}catch{if(++o>=r)throw new vt(a)}}async function qr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(g=>setTimeout(g,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let f=await s(p);A.push(f),o&&a(f)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as ji}from"big.js";var Fi={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",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:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ea=Fi;var xi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{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:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ta=xi;import*as mn from"@project-serum/anchor";import{PublicKey as pa}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ae}from"@solana/web3.js";async function Ce(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function na(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function xt(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function gt(s){let a=await Ke(s),[r]=await ae.findProgramAddress([a.toBuffer()],s);return r}async function ra(s,a){let[r]=await ae.findProgramAddress([s.toBuffer()],a);return r}async function ft(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function aa(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function cr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function mr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function ia(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function ur(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function sa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function oa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function Aa(s,a){let[r]=ae.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function ca(s,a,r,i){let o=it("message_transmitter",r),A=it("token_messenger",i),c=it("__event_authority",i),m=it("token_minter",i),u=it("local_token",i,[a]),l=it("remote_token_messenger",i,[s.toString()]),d=it("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function it(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ae.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Mi}from"@project-serum/anchor";import{Connection as Oi,PublicKey as Ni}from"@solana/web3.js";function He(s,a){let r=new Oi(s,"confirmed"),i=new Ni(a);return new Mi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Wi}from"@solana/web3.js";import{Address as Di}from"@stellar/stellar-sdk";import{Big as Je}from"big.js";import ua from"randombytes";async function Le(s,a,r){let i;switch(a){case"EVM":{i=ma(s);break}case"SOLANA":{i=new Wi(s).toBuffer();break}case"TRX":{i=await Gi(s);break}case"SRB":{i=new Di(s).toBuffer();break}case"SUI":{i=ma(s);break}}switch(r){case"EVM":return"0x"+i.toString("hex");case"SOLANA":return Array.from(i);case"TRX":return i;case"SRB":return i.toJSON().data;case"SUI":return"0x"+i.toString("hex")}}function Be(s){return s.replace(/^0x/i,"")}function la(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ma(s){let r=la(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}async function Gi(s){let a=await Mt(s),r=la(a);return Ui(r,32)}async function Mt(s){let{utils:a}=await we(),r=a.crypto.decodeBase58Address(s);return r?a.bytes.byteArray2hexStr(r).replace(/^41/,"0x"):""}function Ui(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function An(){return ua(32)}function Ue(){let s=ua(32).readBigInt64BE();return s<0?s*-1n:s}async function Ee(s,a){let r={},i=a.sourceToken;if(r.amount=D(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new y("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=await Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new y("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=await Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?D(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function Ie(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=N.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else i.fromTokenAddress=a.sourceToken.tokenAddress;i.toChainId=a.destinationToken.allbridgeChainId,i.toTokenAddress=a.destinationToken.tokenAddress,a.gasFeePaymentMethod==="stablecoin"?i.gasFeePaymentMethod="stablecoin":i.gasFeePaymentMethod="native";let A=a.sourceToken;if(a.messenger===3){if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress}else if(a.messenger===4){if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new ne("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address}else i.contractAddress=A.bridgeAddress;i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=D(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await lr(i.fromChainId,a.sourceToken.chainType,i.toChainId,A.decimals,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new It;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=D(c,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=D(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){if(l=="float")switch(i.gasFeePaymentMethod){case"native":i.extraGas=D(u,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.extraGas=D(u,A.decimals).toFixed(0);break}else i.extraGas=u;await Vi(i.extraGas,i.gasFeePaymentMethod,A,a.destinationToken,r)}return s!=="SUI"&&(i.fromTokenAddress=await Le(i.fromTokenAddress,s,s)),i.toAccountAddress=await Le(a.toAccountAddress,o,s),i.toTokenAddress=await Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Ei(i.amount,A.decimals,i.fee,i.extraGas),i}function Ei(s,a,r,i){let o=Je(s).minus(r).minus(i??0);if(o.lte(0))throw new lt(`Amount not enough to pay fee, ${F(Je(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function lr(s,a,r,i,o,A){let c=await A.getReceiveTransactionCost({sourceChainId:s,destinationChainId:r,messenger:o}),m={native:{int:c.fee,float:F(c.fee,N.getChainDecimalsByType(a)).toFixed()}};if(c.sourceNativeTokenPrice){let u=Ne(new Je(c.fee).mul(c.sourceNativeTokenPrice),N.getChainDecimalsByType(a),i).toFixed(0,Je.roundUp);m.stablecoin={int:u,float:F(u,i).toFixed()}}return m}async function Vi(s,a,r,i,o){let c=(await dr(r,i,o)).extraGasMax[a];if(!c)throw new It(`Impossible to pay extra gas by '${a}' payment method`);let m=c.int;if(Je(s).gt(m))throw new Ht(`Extra gas ${s} in int format, exceeded limit ${m} for '${a}' payment method`)}async function dr(s,a,r){let i={},o=await r.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:1}),A=a.txCostAmount.maxAmount,c=F(A,N.getChainDecimalsByType(a.chainType)).toFixed(),m=Je(c).div(o.exchangeRate).toFixed(N.getChainDecimalsByType(s.chainType),Je.roundDown),u=D(m,N.getChainDecimalsByType(s.chainType)).toFixed(0);if(i.native={int:u,float:m},o.sourceNativeTokenPrice){let l=Je(m).mul(o.sourceNativeTokenPrice).toFixed(s.decimals,Je.roundDown);i.stablecoin={int:D(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:i,destinationChain:{gasAmountMax:{int:A,float:c},swap:{int:a.txCostAmount.swap,float:F(a.txCostAmount.swap,N.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:F(a.txCostAmount.transfer,N.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function da(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function un(s,a,r,i){let o,A=new pa(a),c=new pa(r),m=await Ce(A,c),u=He(i,a);mn.setProvider(u);let l=await mn.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=await Le(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=await Le(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new y("First token account or its public key is undefined");o=await Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new y("Associated account has wrong owner")}return o}var le=class{};var Ot=class extends le{constructor(r,i,o){super();this.web3=r;this.api=i;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let i=await this.buildRawTransactionSend(r);return this.sendRawTransaction(i)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:f,gasFeePaymentMethod:g,extraGas:h}=i,S="0x"+An().toString("hex"),T,B,v=f;if(h&&(v=ji(v).plus(h).toFixed()),p===3||p===4){let M=await this.buildRawTransactionCctpSend(r,i,v);T=M.sendMethod,B=M.value}else{let M=this.getBridgeContract(A);g==="stablecoin"?(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,v),B="0"):(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,0),B=v)}return Promise.resolve({from:c,to:A,value:B,data:T.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,f;if(r.destinationToken.chainType==="SOLANA"){let g=await un(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,g,u,m,o),f="0"):(p=d.methods.bridgeWithWalletAddress(A,g,u,m,0),f=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),f="0"):(p=d.methods.bridge(A,u,m,0),f=o);return{sendMethod:p,value:f}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(ea.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(ta.abi,r)}};var ln=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Nt(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),da(a)?(await dn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSend(a):(await dn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSwap(a)}};import{BN as Tt,Program as fr,Spl as Qi,web3 as Qe}from"@project-serum/anchor";import{Keypair as Ia,PublicKey as V,SystemProgram as zi}from"@solana/web3.js";import{Big as Re}from"big.js";var Wt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var ga={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as Zi}from"@project-serum/anchor";import $i from"big.js";import{Web3 as pn}from"web3";async function yt(s,a){return await Zi.token(a).account.token.fetch(s)}async function fa(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=$i(i.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return We(s,{decimals:o,feeShare:A},c)}function ya(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=pn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new y("message cannot be undefined");let d=pn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let f=pn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!f)throw new dt("messageWithSigner cannot be undefined");let g=pn.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(g.replace("0x",""),"hex");return h[0]=p[0],h[1]=p[1],h}import{ComputeBudgetInstruction as Ta,ComputeBudgetProgram as gn,Connection as ba,TransactionMessage as _i}from"@solana/web3.js";import{Big as Ji}from"big.js";import{AddressLookupTableAccount as ha}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ha({key:r.accountKey,state:ha.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new y("Cannot get AccountInfo");return i.data}))})))}var pr="AUTO";async function ht(s,a,r){let i=new ba(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Pa(s.instructions,o,a,i)}async function Sa(s,a,r){let i=new ba(r,"confirmed"),o=await ot(s,i),A=_i.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new qt;await Pa(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Pa(s,a,r,i){if(a>0){let o=Li(a,s);if(r?.solana){let A=r.solana;if(A===pr)await gr(s,i);else if("pricePerUnitInMicroLamports"in A)await gr(s,i,A.pricePerUnitInMicroLamports);else{let c=Ji(A.extraFeeInLamports).div(o).mul(kt(6)).toFixed(0);await gr(s,i,c)}}}}function Li(s,a){let r=a.findIndex(A=>A.programId.equals(gn.programId)&&Ta.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=gn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function gr(s,a,r){let i=s.findIndex(c=>c.programId.equals(gn.programId)&&Ta.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Xi(a)),A=gn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Xi(s){let a=await s.getRecentPrioritizationFees(),r=0;for(let i of a)r+=i.prioritizationFee;return(r/a.length).toFixed(0)}import{NATIVE_MINT as Yi}from"@solana/spl-token";import{Connection as Ki,TransactionMessage as wa,VersionedTransaction as Hi}from"@solana/web3.js";import Ca,{AxiosError as Ba}from"axios";var fn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new Ki(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",f=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Yi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(f+=`&maxAccounts=${this.maxAccounts}`),A=await Ca.get(f,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new Q("Cannot get inAmount");let m;try{m=await Ca.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new Q("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=Hi.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),A=wa.decompile(a.message,{addressLookupTableAccounts:i}),c=wa.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new y("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new Q(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new Q("Some error occurred during creation final swap and bridge transaction")}}};var yr=1e6,Ra=1.1,yn=class extends le{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new fn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:f}=r,g=c,h=u,S=l,T=d,B=o,v=p,M=new V(g),H=He(this.solanaRpcUrl,M.toString()),G=new fr(Wt,h,H),O=await gt(G.programId),ce=await Ke(G.programId),L=new V(S),Fe=await ft(L,G.programId),xe=new V(i),Ze=await Ce(M,L),Te=new V(v),se=new V(T),ge=await ft(se,G.programId),be=new V(B),me=await Ce(Te,se),Me=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})];try{await yt(me,H)}catch{let ci=await Qi.associatedToken(H).methods.create().accounts({mint:se,owner:Te,associatedAccount:me}).instruction();Me.push(ci)}let Oe=await G.methods.swap(new Tt(m),new Tt(f||0)).accounts({payer:M,config:ce,bridgeAuthority:O,user:M,sendBridgeToken:Fe,sendMint:L,sendPool:xe,sendUserToken:Ze,receiveBridgeToken:ge,receiveMint:se,receivePool:be,receiveUserToken:me}).preInstructions(Me).transaction(),Se=H.connection;return Oe.recentBlockhash=(await Se.getLatestBlockhash()).blockhash,Oe.feePayer=M,await ht(Oe,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Oe,Se)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new Q(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}}if(A){if(!c)throw new Q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await Sa(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken.decimals,r),u=o?Re(A):Re(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ra));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new Q("Cannot get inAmount");p=Re(r.amount).minus(Re(d).mul(Ra)).toFixed(0)}else p=Re(r.amount).minus(u).toFixed(0);if(Re(p).lte(0))throw new lt(`Amount not enough to pay fee, ${F(Re(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger})).sourceNativeTokenPrice,A=Re(i.fee).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0),c;return i.extraGas&&(c=Re(i.extraGas).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0)),{fee:A,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return Qe.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:f}=r,g=m,h=c,S=u,T=d,B=l,v=o,M=A,H=He(this.solanaRpcUrl,h),G=new fr(Wt,v,H),O=Array.from(An()),ce=new V(p),L=await fa(i,G,ce),Fe=await na(O,G.programId),xe=await gt(G.programId),Ze=await Ce(new V(h),new V(g)),Te=await ft(new V(g),G.programId),se=await cr(S,G.programId),ge=await aa(S,Buffer.from(T),G.programId),be=await Ke(G.programId),me=await G.account.config.fetch(be),Me=await xt(S,me.gasOracleProgramId),Oe=await xt(M,me.gasOracleProgramId),Se=ya({amount:L,recipient:Buffer.from(B),nonce:Buffer.from(O),receiveToken:Buffer.from(T),destinationChainId:S,sourceChainId:M,chainBridge:(await gt(G.programId)).toBuffer()}),W={};return W.bridge=G,W.amount=new Tt(i),W.vusdAmount=new Tt(L),W.nonce=O,W.recipient=Array.from(B),W.receiveToken=Array.from(T),W.poolAccount=ce,W.lockAccount=Fe,W.bridgeAuthority=xe,W.userToken=Ze,W.bridgeTokenAccount=Te,W.chainBridgeAccount=se,W.otherBridgeTokenAccount=ge,W.userAccount=new V(h),W.destinationChainId=S,W.mint=new V(g),W.config=be,W.configAccountInfo=me,W.gasPrice=Me,W.thisGasPrice=Oe,W.message=Se,f&&(W.extraGasInstruction=this.getExtraGasInstruction(f,W.userAccount,be)),W}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=M.allbridgeMessengerProgramId,Fe=await mr(T,L),xe=await Ke(L),Ze=await ia(O,L),Te=[];ce&&Te.push(ce);let se=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts({mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,messenger:L,messengerGasUsage:Fe,messengerConfig:xe,sentMessageAccount:Ze,otherBridgeToken:h}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})]).postInstructions(Te).transaction(),ge=He(this.solanaRpcUrl,S.toString()).connection;return se.recentBlockhash=(await ge.getLatestBlockhash()).blockhash,se.feePayer=S,await this.convertToVersionedTransaction(se,ge)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new V(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new y("Cannot find allbridgeLookupTableAccount");let A=new Qe.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new Qe.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=this.params.wormholeMessengerProgramId,[Fe]=V.findProgramAddressSync([Buffer.from("Bridge")],new V(L)),[xe]=V.findProgramAddressSync([Buffer.from("fee_collector")],new V(L)),[Ze]=V.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new V(L)),Te=await mr(T,M.wormholeMessengerProgramId),se=await Ke(M.wormholeMessengerProgramId),ge=Ia.generate(),be=He(this.solanaRpcUrl,S.toString()),me=await be.connection.getAccountInfo(Fe);if(me==null)throw new y("Cannot fetch wormhole bridge account info");let Me=new Tt(me.data.slice(16,24),"le").toString(),Oe=zi.transfer({fromPubkey:S,toPubkey:xe,lamports:+Me}),Se=[];ce&&Se.push(ce);let W={mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,otherBridgeToken:h,messengerGasUsage:Te,wormholeProgram:L,bridge:Fe,message:ge.publicKey,wormholeMessenger:M.wormholeMessengerProgramId,sequence:Ze,feeCollector:xe,wormholeMessengerConfig:se,clock:Qe.SYSVAR_CLOCK_PUBKEY},Yt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts(W).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr}),Oe]).postInstructions(Se).signers([ge]).transaction();return Yt.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,Yt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Yt,be.connection),messageAccount:ge}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new ne("Such route does not support CCTP protocol");let f=4,g=A,h=l,S=u,T=He(this.solanaRpcUrl,g),B=new fr(ga,p,T),v=new V(c),M=await sa(v,B.programId),H=new V(g),G=await B.account.cctpBridge.fetch(M),O={};return O.cctpBridge=B,O.cctpBridgeAccount=M,O.cctpAddressAccount=new V(p),O.amount=new Tt(o),O.recipient=Array.from(S),O.receiveToken=Array.from(h),O.userToken=await Ce(H,v),O.bridgeAuthority=await ra(M,B.programId),O.bridgeTokenAccount=await oa(v,B.programId),O.chainBridgeAccount=await cr(m,B.programId),O.userAccount=H,O.destinationChainId=m,O.mint=v,O.gasPrice=await xt(m,G.gasOracleProgramId),O.thisGasPrice=await xt(f,G.gasOracleProgramId),O.provider=T,d&&(O.extraGasInstruction=this.getExtraGasInstruction(d,O.userAccount,M)),O}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:f,userAccount:g,destinationChainId:h,mint:S,gasPrice:T,thisGasPrice:B,extraGasInstruction:v,provider:M}=i,H=this.params.cctpParams.cctpDomains[r],G=this.params.cctpParams.cctpTransmitterProgramId,O=this.params.cctpParams.cctpTokenMessengerMinter;if(H==null||!G||!O)throw new y("CCTP is not configured");let ce=new V(G),L=new V(O),{messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMessengerEventAuthority:Ze,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be}=ca(H,S,ce,L),me=[];v&&me.push(v);let Me=Ia.generate(),Oe=Aa(o.programId,Me.publicKey),Se=await o.methods.bridge({amount:c,destinationChainId:h,recipient:m,receiveToken:u}).accounts({mint:S,user:g,cctpBridge:A,messageSentEventData:Me.publicKey,lock:Oe,cctpMessenger:L,messageTransmitterProgram:ce,messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be,eventAuthority:Ze,bridgeToken:p,gasPrice:T,thisGasPrice:B,chainBridge:f,userToken:d,bridgeAuthority:l}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(me).transaction(),W=M.connection;return Se.recentBlockhash=(await W.getLatestBlockhash()).blockhash,Se.feePayer=g,{transaction:await this.convertToVersionedTransaction(Se,W),messageSentEventDataKeypair:Me}}send(r){throw new X}};import{Address as hr,contract as Cb}from"@stellar/stellar-sdk";import{Big as ts}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var qi=n.Spec,es=n.Client;var Dt=class extends es{constructor(r){super(new qi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var hn=class extends le{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=ts(g).plus(f).toFixed());let h=this.getContract(Dt,o,A),S;return p==="stablecoin"?S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(0),fee_token_amount:BigInt(g)}):S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(g),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(Dt,o,A).swap({sender:A,amount:BigInt(i),token:hr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new X}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as ps}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Cn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Za}from"@mysten/sui/utils";import{Big as Fr}from"big.js";var xr=Pe(ze());var Xe=Pe(ze());K();function Fa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[w(s,r.bridge),w(s,r.coin),ye(s,r.receiveAmountMin,"u64")]})}function xa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),w(s,r.coin)]})}function Ma(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),ye(s,r.amountLp,"u64")]})}function Oa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit)]})}function Na(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[w(s,r)]})}function br(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.wormholeState),w(s,r.theClock),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}function Wa(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Sr(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}var $a=Pe(wr());var Ga=Pe(wr());K();function Cr(s,a,r){return s.moveCall({target:`${Ga.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[w(s,r.cctpBridge),w(s,r.gasOracle),w(s,r.tokenMessengerMinterState),w(s,r.messageTransmitterState),w(s,r.treasury),w(s,r.denyList),w(s,r.amount),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin),ye(s,r.destinationChainId,"u8"),w(s,r.recipient),w(s,r.recipientWalletAddress)]})}var _a=Pe(Ir());var ja=Pe(Ir());K();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as As,toHEX as cs}from"@mysten/sui/utils";import{bcs as os}from"@mysten/sui/bcs";K();var Rr=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=x(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(Gt(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([C(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return os.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>I(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Gt(a)).parse(r))}toJSONField(){return this.elements.map(a=>At(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new(r.map(i=>R(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function bt(s){return Rr.r(s)}function Z(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ms=qe.bytes(32).transform({input:s=>As(s),output:s=>cs(s)});function Gt(s){switch(s){case"bool":return qe.bool();case"u8":return qe.u8();case"u16":return qe.u16();case"u32":return qe.u32();case"u64":return qe.u64();case"u128":return qe.u128();case"u256":return qe.u256();case"address":return ms;default:return s.bcs}}function C(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(s.kind==="VectorClassReified")return s.fromFields(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::option::Option":return a.vec.length===0?null:s.fromFields(a).vec[0];default:return s.fromFields(a)}}function I(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:I(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function ve(s,a,r){if(r.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${a.length}))`);for(let i=0;i<a.length;i++)if(P(a[i])!==P(C(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${C(r[i])}, got ${a[i]}))`)}function Ve(s,a){let{typeArgs:r}=ee(s.type);ve(s.type,r,a)}function At(s,a){let{typeName:r,typeArgs:i}=ee(s);switch(r){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(o=>At(i[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:At(i[0],a);default:return a.toJSONField()}}function R(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromJSONField(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:R(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}K();var Tn="0x1";import{bcs as vu}from"@mysten/sui/bcs";import{fromB64 as Fu}from"@mysten/sui/utils";K();import{bcs as vr}from"@mysten/sui/bcs";import{fromB64 as us}from"@mysten/sui/utils";function bn(s){return s=P(s),s===`${Tn}::string::String`}var Sn=class s{__StructClass=!0;static get $typeName(){return`${Tn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return vr.struct("String",{bytes:vr.vector(vr.u8())})}static fromFields(a){return s.reified().new({bytes:k(bt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!bn(a.type))throw new Error("not a String type");return s.reified().new({bytes:I(bt("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:At("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R(bt("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!bn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!bn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(us(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!bn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};K();K();var et="0x2";import{bcs as kr}from"@mysten/sui/bcs";import{fromB64 as Va,fromHEX as ls,toHEX as ds}from"@mysten/sui/utils";function Pn(s){return s=P(s),s===`${et}::object::ID`}var ct=class s{__StructClass=!0;static get $typeName(){return`${et}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("ID",{bytes:kr.bytes(32).transform({input:a=>ls(a),output:a=>ds(a)})})}static fromFields(a){return s.reified().new({bytes:k("address",a.bytes)})}static fromFieldsWithTypes(a){if(!Pn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:I("address",a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Pn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Pn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Pn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function wn(s){return s=P(s),s===`${et}::object::UID`}var he=class s{__StructClass=!0;static get $typeName(){return`${et}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("UID",{id:ct.bcs})}static fromFields(a){return s.reified().new({id:k(ct.reified(),a.id)})}static fromFieldsWithTypes(a){if(!wn(a.type))throw new Error("not a UID type");return s.reified().new({id:I(ct.reified(),a.fields.id)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({id:R(ct.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!wn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function ke(s,a){return s.moveCall({target:`${ja.PUBLISHED_AT}::bytes32::from_hex`,arguments:[ye(s,a,`${Sn.$typeName}`)]})}async function je(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?je(s,i.nextCursor,o):o}var Bn=class extends le{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ps({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new y("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");(0,xr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new Cn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Fa(l,[c,m],d),f=await je(g=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:g}));return f.length===0||!f[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(f[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new y("SUI token must contain 'suiAddresses'");switch((0,xr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,_a.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A)}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Cn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Sr(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Sr(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Cn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Za,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};br(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Za,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};br(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=i;(0,$a.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Cn;h.setSender(c);let S=ke(h,Be(l)),T;if(r.destinationToken.chainType==="SOLANA"){let B=await un(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ke(h,Be(B))}else T=S;if(p==="stablecoin"){let B=BigInt(A)-BigInt(g),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:B,type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Cr(h,m,v)}else{let B=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:B};Cr(h,m,v)}return await h.toJSON({client:this.client})}};import{Big as ys}from"big.js";import gs from"bn.js";function In(s){return"0x"+new gs(s).toString("hex")}function Ja(s){return new Promise(a=>setTimeout(()=>a(),s))}async function Rn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new dt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await fs(s,o),{txId:o}}async function fs(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Rt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Ja(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Rt(`Transaction status is ${o.receipt.result}`)}}var Ut=class extends le{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await Ie(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(i);return await Rn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:d,fee:p,gasFeePaymentMethod:f,extraGas:g}=r,h=p;g&&(h=ys(h).plus(g).toFixed());let S=Ue().toString(),T,B,v;return d==3||d==4?(f==="stablecoin"?(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:h}],B="0"):(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],B=h),v="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:h}],B="0"):(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:0}],B=h),v="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,v,T,B,A)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var vn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new ln(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Nt(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Nt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Nt(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),(await dn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a)).send(r)}};function Nt(s,a){if(a&&a==3){if(s.cctpAddress)return s.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else if(a&&a==4){if(s.cctpV2Address)return s.cctpV2Address;throw new ne("Such route does not support CCTP V2 protocol")}else return s.bridgeAddress}async function dn(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Ot(o,a,r);{let A=r.getNodeRpcUrl(s);return new Ot(new hs(A),a,r)}}case"TRX":if(o){let{TronWeb:A}=await we();return new Ut(o,a)}else{let A=r.getNodeRpcUrl(s),{TronWeb:c}=await we();return new Ut(new c({fullHost:A,solidityNode:A,eventServer:A}),a)}case"SOLANA":return new yn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new hn(r,i,a);case"SUI":return new Bn(r,a)}}import{Big as Ds}from"big.js";import Gs from"timed-cache";import{FMT_BYTES as Us,FMT_NUMBER as Es,Web3 as Vs}from"web3";import{Big as Ye}from"big.js";function La(s,a,r,i,o){let A=D(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let f=c.div(2);l=Ye(i).plus(f),d=Ye(o).plus(f)}else l=Ye(i).plus(c.mul(i).div(u)),d=Ye(o).plus(c.mul(o).div(u));return Ye(Lr(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function Xa(s){let a=D(s,3);return Ye(a).round().toFixed()}import{Web3 as tt}from"web3";var Ts={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{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:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",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:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",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:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",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:"amount",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:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",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:"amount",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:"amount",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:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Et=Ts;var ie=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return F(this.lpAmount,3).toFixed()}earned(a,r){let i=_r(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?F(i,r).toFixed():i}};var de=class{};var Vt=class extends de{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await on(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await Ar(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await on(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await Ar(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new ie({lpAmount:tt.utils.toBigInt(l.result).toString(),rewardDebt:tt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new ie({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,f,g,h,S,T]=await i.execute();if(p&&f&&g&&h&&S&&T&&!p.error&&!f.error&&!g.error&&!h.error&&!S.error&&!T.error){let B=tt.utils.toBigInt(g.result).toString(),v=tt.utils.toBigInt(h.result).toString(),M=re({tokenBalance:B,vUsdBalance:v});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(f.result).toString(),tokenBalance:B,vUsdBalance:v,totalLpAmount:tt.utils.toBigInt(S.result).toString(),accRewardPerShareP:tt.utils.toBigInt(T.result).toString(),p:this.P,imbalance:M}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=re({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Et.abi,r)}};var kn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,a.token.decimals).toFixed(),(await St(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,3).toFixed(),(await St(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return(await St(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as bs,BN as Ya,Program as Ss,Spl as Ps,web3 as ws}from"@project-serum/anchor";import{Connection as Cs,PublicKey as nt}from"@solana/web3.js";var Fn=class extends de{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),A=this.getBridge(i.bridgeAddress,o),c=new nt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await ur(new nt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new ie({lpAmount:l.toString(),rewardDebt:d.toString()})}catch{return new ie({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=re({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await ht(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await ht(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await ht(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new Ss(Wt,r,i)}buildAnchorProvider(r){let i=new Cs(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new bs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new nt(o),m=await Ke(r.programId),u=await gt(r.programId),l=new nt(i),p=(await r.account.pool.fetch(l)).mint,f=await Ce(c,p),g=await ft(p,r.programId),h=await ur(c,p,r.programId),S=[ws.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await yt(f,A)}catch{let M=await Ps.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:f}).instruction();S.push(M)}try{await r.account.userDeposit.fetch(h)}catch{let v=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:h}).instruction();S.push(v)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:h,userToken:f,bridgeToken:g},preInstructions:S}}};import{contract as Bb}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var Bs=t.Spec,Is=t.Client;var xn=class extends Is{constructor(r){super(new Bs(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};import{contract as np,rpc as Rs}from"@stellar/stellar-sdk";var Ka=Rs.Api;function Pt(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Ka.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function wt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Ka.isSimulationError(a)}var Mn=class extends de{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(wt(A))throw new y;let c=Pt(A);if(!c)throw new y;let m=c.unwrap();return new ie({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(wt(o))throw new y;let A=Pt(o);if(!A)throw new y;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:re({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new xn(o)}};import{SuiClient as Ns}from"@mysten/sui/client";import{Transaction as jn}from"@mysten/sui/transactions";var Bt=Pe(ze());K();K();import{bcs as Ha}from"@mysten/sui/bcs";import{fromB64 as vs}from"@mysten/sui/utils";function On(s){return s=P(s),s.startsWith(`${et}::balance::Balance<`)}var te=class s{__StructClass=!0;static get $typeName(){return`${et}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ha.struct("Balance",{value:Ha.u64()})}static fromFields(a,r){return s.reified(a).new({value:k("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!On(r.type))throw new Error("not a Balance type");return Ve(r,[a]),s.reified(a).new({value:I("u64",r.fields.value)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({value:R("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!On(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!On(r.bcs.type))throw new Error("object at is not a Balance object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,vs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!On(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Nr=Pe(ze());K();var Mr=Pe(ze());import{bcs as Nn}from"@mysten/sui/bcs";import{fromB64 as ks}from"@mysten/sui/utils";function Wn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Nn.struct("PoolRewards",{acc_reward_per_share_p:Nn.u128(),admin_fee_share_bp:Nn.u64(),admin_fee:te.bcs,rewards:te.bcs,lp_supply:Nn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:k("u128",r.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.admin_fee_share_bp),adminFee:k(te.reified(a),r.admin_fee),rewards:k(te.reified(a),r.rewards),lpSupply:k("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Wn(r.type))throw new Error("not a PoolRewards type");return Ve(r,[a]),s.reified(a).new({accRewardPerShareP:I("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:I("u64",r.fields.admin_fee_share_bp),adminFee:I(te.reified(a),r.fields.admin_fee),rewards:I(te.reified(a),r.fields.rewards),lpSupply:I("u64",r.fields.lp_supply)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({accRewardPerShareP:R("u128",r.accRewardPerShareP),adminFeeShareBp:R("u64",r.adminFeeShareBp),adminFee:R(te.reified(a),r.adminFee),rewards:R(te.reified(a),r.rewards),lpSupply:R("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Wn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Wn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,ks(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Wn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};K();var Or=Pe(ze());import{bcs as Ct}from"@mysten/sui/bcs";import{fromB64 as Fs}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ct.struct("PoolState",{token_balance:Ct.u64(),vusd_balance:Ct.u64(),d:Ct.u64(),a:Ct.u64(),balance_ratio_min_bp:Ct.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:k("u64",r.token_balance),vusdBalance:k("u64",r.vusd_balance),d:k("u64",r.d),a:k("u64",r.a),balanceRatioMinBp:k("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a PoolState type");return Ve(r,[a]),s.reified(a).new({tokenBalance:I("u64",r.fields.token_balance),vusdBalance:I("u64",r.fields.vusd_balance),d:I("u64",r.fields.d),a:I("u64",r.fields.a),balanceRatioMinBp:I("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({tokenBalance:R("u64",r.tokenBalance),vusdBalance:R("u64",r.vusdBalance),d:R("u64",r.d),a:R("u64",r.a),balanceRatioMinBp:R("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Fs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as jt}from"@mysten/sui/bcs";import{fromB64 as xs}from"@mysten/sui/utils";function Gn(s){return s=P(s),s.startsWith(`${Nr.PKG_V1}::pool::Pool<`)}var Un=class s{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return jt.struct("Pool",{id:he.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:jt.u64(),can_deposit:jt.bool(),can_withdraw:jt.bool(),decimals:jt.u8(),balance:te.bcs})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),state:k(ut.reified(a),r.state),rewards:k(mt.reified(a),r.rewards),feeShareBp:k("u64",r.fee_share_bp),canDeposit:k("bool",r.can_deposit),canWithdraw:k("bool",r.can_withdraw),decimals:k("u8",r.decimals),balance:k(te.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Gn(r.type))throw new Error("not a Pool type");return Ve(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),state:I(ut.reified(a),r.fields.state),rewards:I(mt.reified(a),r.fields.rewards),feeShareBp:I("u64",r.fields.fee_share_bp),canDeposit:I("bool",r.fields.can_deposit),canWithdraw:I("bool",r.fields.can_withdraw),decimals:I("u8",r.fields.decimals),balance:I(te.reified(a),r.fields.balance)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),state:R(ut.reified(a),r.state),rewards:R(mt.reified(a),r.rewards),feeShareBp:R("u64",r.feeShareBp),canDeposit:R("bool",r.canDeposit),canWithdraw:R("bool",r.canWithdraw),decimals:R("u8",r.decimals),balance:R(te.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Gn(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Gn(r.bcs.type))throw new Error("object at is not a Pool object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,xs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Gn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};K();var Dr=Pe(ze());import{bcs as Wr}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function En(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::user_deposit::UserDeposit<`)}var Vn=class s{__StructClass=!0;static get $typeName(){return`${Dr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Wr.struct("UserDeposit",{id:he.bcs,lp_amount:Wr.u64(),reward_debt:Wr.u64()})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),lpAmount:k("u64",r.lp_amount),rewardDebt:k("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!En(r.type))throw new Error("not a UserDeposit type");return Ve(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),lpAmount:I("u64",r.fields.lp_amount),rewardDebt:I("u64",r.fields.reward_debt)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),lpAmount:R("u64",r.lpAmount),rewardDebt:R("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!En(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!En(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Ms(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!En(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function za(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Qa(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Qa(r,i,c,s):[]}function Qa(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Os="0x0000000000000000000000000000000000000000000000000000000000000000";async function qa(s,a,r){let i=await s.devInspectTransactionBlock({sender:Os,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():Gt(r).parse(Uint8Array.from(A))}var Zn=class extends de{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Ns({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new y("SUI token must contain 'suiAddresses'");(0,Bt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new y("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new ie({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await je(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Vn.phantom(Z(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Bt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=48,A=new jn;Na(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await qa(this.client,A,Un.reified(Z(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=re({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Bt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=await je(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new jn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=za([r.amount],o,c);if(!l)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let d=xa(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=Z(i).phantomType;return{depositObj:Wa(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new y("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Bt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Ma(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new y("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Bt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Oa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as $n}from"web3";import{encodeFunctionCall as Ws}from"web3-eth-abi";var Zt=class extends de{constructor(r,i,o){super();this.tronWeb=r;this.api=i;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(r,i){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,r,i)}catch{o=await this.getUserBalanceInfoPerProperty(r,i)}else o=await this.getUserBalanceInfoPerProperty(r,i);return o}async getUserBalanceInfoByBatch(r,i,o){let A=await Mt(o.poolAddress),c=await Mt(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(l)&&l.length===2){let d=p=>{let f=l.find(g=>g.id===p);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${p}`);return $n.utils.toBigInt(f.result).toString()};return new ie({lpAmount:$n.utils.toBigInt(d(2)).toString(),rewardDebt:$n.utils.toBigInt(d(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new ie({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.tronJsonRpc)try{i=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=await Mt(i.poolAddress),A=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],m=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).json();if(Array.isArray(m)&&m.length===6){let u=f=>{let g=m.find(h=>h.id===f);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${f}`);return $n.utils.toBigInt(g.result).toString()},l=u(3),d=u(4),p=re({tokenBalance:l,vUsdBalance:d});return{aValue:u(1),dValue:u(2),tokenBalance:l,vUsdBalance:d,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,l]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),d=c.toString(),p=m.toString(),f=re({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Et.abi,r)}getFunctionAbi(r,...i){let o=Et.abi.find(A=>A.type==="function"&&"name"in A&&A.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Ws(o,i)}};var _n=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new kn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Gs({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=La(a,m,u,c,A);return F(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=Xa(a),m=ue(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=Ds(m).plus(l).toFixed();return F(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return(await St(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i)).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await(await St(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};async function St(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Vt(o,a);{let A=r.getNodeRpcUrl(s),c=new Vs(A);return c.defaultReturnFormat={number:Es.STR,bytes:Us.HEX},new Vt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o){let{TronWeb:m}=await we();return new Zt(o,a,c)}else{let{TronWeb:m}=await we(),u=new m({fullHost:A});return new Zt(u,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new Fn(A,a)}case"SRB":return new Mn(r,i,a);case"SUI":return new Zn(r.getNodeRpcUrl(s),a)}}import{Big as _}from"big.js";function ni(s,a,r){let i=js(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Zs(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ri(s,a,r){let i=$s(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=_s(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function js(s,{feeShare:a,decimals:r},i){let o=_(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ei(at(c,r),i),amountExcludingCommissionInSystemPrecision:ei(at(o,r),i)}}function ei(s,a){if(s.eq(0))return"0";let r=_(a.tokenBalance).plus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(a.vUsdBalance).minus(i).round().toFixed()}function Zs(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=_(s).plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(_(i.tokenBalance).minus(c),r),u=_(m).times(a),l=_(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function $s(s,{feeShare:a,decimals:r},i){let o=_(a).div(_(1).minus(a)),A=_(s).times(o),c=_(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ti(at(c,r),i),amountExcludingCommissionInSystemPrecision:ti(at(s,r),i)}}function ti(s,a){let r=_(a.tokenBalance).minus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(i).minus(a.vUsdBalance).round().toFixed()}function _s(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=_(i.vUsdBalance).minus(s),A=De(o.toFixed(),i.aValue,i.dValue),c=_(A).minus(i.tokenBalance),m=ue(c.toFixed(),r),u=_(a).div(_(1).minus(a)),l=_(m).times(u),d=_(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function ai(s,a,r,i,o){let A=We(s,a,r),c=ue(A,a.decimals),m=Ft(A,i,o),u=rt(s).times(a.feeShare),l=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:F(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:F(rt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:F(l,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:F(ue(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import{Connection as Js,PublicKey as Ls,TransactionMessage as Xs}from"@solana/web3.js";var Jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new y("InvalidArgumentException memo cannot be more than 28 characters");let i=new Js(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),A=Xs.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new y("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Ls(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as Hs,BASE_FEE as Qs,contract as Ib,Horizon as ii,Operation as zs,Operation as qs,rpc as _t,TimeoutInfinite as eo,TransactionBuilder as Gr,TransactionBuilder as si}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Ys=e.Spec,Ks=e.Client;var $t=class extends Ks{constructor(r){super(new Ys(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var to=100,no=180,Ln=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract($t,a.tokenAddress).name();if(wt(A))throw new y;let c=Pt(A);if(!c)throw new y;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new y("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Hs(m,u),d=qs.changeTrust({asset:l,limit:a.limit});return new si(i,{fee:to.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(no).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract($t,r).name();if(wt(o))throw new y;let A=Pt(o);if(!A)throw new y;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ii.Server(u).loadAccount(a)).balances.find(f=>(f.asset_type==="credit_alphanum4"||f.asset_type==="credit_alphanum12")&&f.asset_code==c&&f.asset_issuer==m)}async submitTransactionStellar(a){let r=new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=si.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if(_t.Api.isSimulationRestore(c))return new Gr(o,{fee:(+Qs+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(zs.restoreFootprint({})).setTimeout(eo).build().toXDR()}async sendTransactionSoroban(a){let r=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await qr(()=>i.getTransaction(a),c=>c.status===_t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new y("No transaction responses found.");let A=o[o.length-1];if(!A)throw new y("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Xn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new Ln(a,r),this.sol=new Jn(a,r)}srb;sol};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),cn=(r=>(r.INT="int",r.FLOAT="float",r))(cn||{});import{Big as lo}from"big.js";import{Web3 as po}from"web3";var ro={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{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:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{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:"amount",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:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",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:"amount",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:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Yn=ro;import{Big as oi}from"big.js";var pe=class{async checkAllowance(a){let r=await this.getAllowance(a);return oi(r).gte(oi(a.amount))}};var ao="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",io="0xdac17f958d2ee523a2206206994597c13d831ec7",so=1e5,Jt=class extends pe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===io}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?ao:In(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=so:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Yn.abi,r)}};import{AnchorProvider as oo}from"@project-serum/anchor";import{Connection as Ao,PublicKey as Kn}from"@solana/web3.js";var Hn=class extends pe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new X}buildRawTransactionApprove(r){throw new X}buildAnchorProvider(r){let i=new Ao(this.solanaRpcUrl,"confirmed"),o=new Kn(r);return new oo(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new X}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await Ce(new Kn(i),new Kn(o.tokenAddress));return(await yt(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Kn(r.account))).toString()}};import{Horizon as Uh,NotFoundError as co}from"@stellar/stellar-sdk";var Qn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new Uh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof co)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?D(u.balance,N.getChainDecimalsByType(N.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new Uh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?D(c.balance,N.getChainDecimalsByType(N.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new X}buildRawTransactionApprove(){throw new X}};import{SuiClient as mo}from"@mysten/sui/client";var zn=class extends pe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new mo({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new X}buildRawTransactionApprove(r){throw new X}getAllowance(r){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await je(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var uo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Lt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:i},owner:o}=r;return(await(await this.getContract(i)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let i=await this.buildRawTransactionApprove(r);return await Rn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?uo:In(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Yn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var qn=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).getAllowance(a);return F(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),(await this.getChainTokenService(r.token.chainSymbol,r.owner,a)).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.account,r)).getTokenBalance(a);return a.token.decimals?F(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await(await this.getChainTokenService(a.chainSymbol,a.account,r)).getNativeTokenBalance(a);return{int:i,float:F(i,N.getChainDecimalsByType(N.getChainProperty(a.chainSymbol).chainType)).toFixed()}}async getChainTokenService(a,r,i){switch(N.getChainProperty(a).chainType){case"EVM":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Jt(new po(o),this.api)}}case"TRX":if(i){let{TronWeb:o}=await we();return new Lt(i,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),{TronWeb:A}=await we(),c=new A({fullHost:o});return c.setAddress(r),new Lt(c,this.api)}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Hn(o,this.api)}case"SRB":return new Qn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new zn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:D(a.amount,a.token.decimals)}}prepareApproveParams(a){return{tokenAddress:a.token.tokenAddress,owner:a.owner,spender:a.spender,chainSymbol:a.token.chainSymbol,amount:a.amount==null?void 0:lo(a.amount).toFixed()}}};var Xt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new zt(a)}},er=class{api;tokenService;params;bridge;pool;constructor(a,r=Kt){N.addChainsProperties(r.additionalChainsProperties);let i=new en(r),o=new nn(i),A=new rn(o),c=new sn(A);this.api=new an(c,r),this.tokenService=new qn(this.api,a,r),this.bridge=new vn(this.api,a,r,this.tokenService),this.pool=new _n(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a;let c=We(A,i,await Y(this.api,i)),m=await Y(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let f=d[o.chainSymbol];if(!f)throw new y("Cannot find pending info for "+o.chainSymbol);l=f[p]}if(l){let p=jr(l.totalSentAmount,m),f=this.getAmountFromVUsdFormatted(c,o,p),g;return Ae(f.int).gt(u.int)?g={min:u,max:f}:g={min:f,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:Ne(l.totalSentAmount,3,o.decimals).toFixed(0),float:F(l.totalSentAmount,3).toFixed()},estimatedAmount:g}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=D(a,r.decimals);if(i.eq(0))return 0;let o=We(i,r,await Y(this.api,r)),A=ue(o,r.decimals);return rr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=D(a,r.decimals);if(o.eq(0))return 0;let A=We(o,r,await Y(this.api,r)),c=Ft(A,i,await Y(this.api,i)),m=ue(A,i.decimals);return rr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:Ae(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Ae(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToBeReceivedFromPools(a,r,i,A,c,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToBeReceivedFromPools(a,r,i,m,u,o)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){U(a),E("amountToSendFloat",a,r.decimals);let m=D(a,r.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let l=m.mul(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}let u=We(m,r,o);return this.getAmountFromVUsdFormatted(u,i,A).float}async getAmountToSend(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToSendFromPools(a,r,i,A,c,o)}async getAmountToSendFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToSendFromPools(a,r,i,m,u,o)}getAmountToSendFromPools(a,r,i,o,A,c){U(a),E("amountToBeReceivedFloat",a,i.decimals);let m=D(a,i.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let d=m.div(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}let u=$r(m,i,A),l=Zr(u,r,o);if(Ae(l).lte(0))throw new _e;return F(l,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return lr(a.allbridgeChainId,a.chainType,r.allbridgeChainId,a.decimals,i,this.api)}getAverageTransferTime(a,r,i){return a.transferTime?.[r.chainSymbol]?.[i]??null}async getPoolInfoByToken(a){return await this.api.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}async refreshPoolInfo(a){if(a){let i=(a instanceof Array?a:[a]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(i)}return this.api.refreshPoolInfo()}aprInPercents(a){return Jr(a)}async getExtraGasMaxLimits(a,r){return await dr(a,r,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=D(a,i.decimals).toFixed()):o=a;let A=We(o,i,await Y(this.api,i));return{int:A,float:F(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await Y(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=Ft(a,r,i);if(Ae(o).lt(0))throw new _e;return{int:o,float:F(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ni(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ri(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ae(A).lt(0))throw new _e;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a,ai(A,i,await Y(this.api,i),o,await Y(this.api,o))}};function go(s){return"solanaRpcUrl"in s}var Ai=class{params;bridge;pool;utils;service;constructor(a,r=Kt){let i;go(a)?i=new Xt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Xt(a),this.service=new er(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Xn(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromPools(a,r,i,o,A,c)}async getAmountToSend(a,r,i,o){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c){return this.service.getAmountToSendFromPools(a,r,i,o,A,c)}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,i)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,r){return this.service.getExtraGasMaxLimits(a,r)}async getVUsdFromAmount(a,r,i){return this.service.getVUsdFromAmount(a,r,i)}async getAmountFromVUsd(a,r){return this.service.getAmountFromVUsd(a,r)}async swapAndBridgeFeeCalculation(a,r,i){return this.service.swapAndBridgeFeeCalculation(a,r,i)}async swapAndBridgeFeeCalculationReverse(a,r,i){return this.service.swapAndBridgeFeeCalculationReverse(a,r,i)}async getSendAmountDetails(a,r,i,o){return this.service.getSendAmountDetails(a,r,i,o)}};export{ar as AddressStatus,Ai as AllbridgeCoreSdk,cn as AmountFormat,lt as AmountNotEnoughError,Qt as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,fe as ChainSymbol,j as ChainType,yi as ErrorCode,Ht as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,_e as InsufficientPoolLiquidityError,$e as InvalidAmountError,It as InvalidGasFeePaymentOptionError,Er as InvalidMessengerOptionError,dt as InvalidTxError,Q as JupiterError,Ge as Messenger,X as MethodNotSupportedError,zt as NodeRpcUrlNotInitializedError,y as SdkError,J as SdkRootError,pr as SolanaAutoTxFee,vt as TimeoutError,qt as TxTooLargeError,Rt as VerifyTxError,Kt as mainnet,ho as nodeRpcUrlsDefault,yo as nodeUrlsDefault};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|