@allbridge/bridge-core-sdk 3.22.1-alpha.2 → 3.23.0-beta.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/README.md +8 -8
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +4 -4
- package/dist/cjs/index.js +1 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +4 -4
- package/dist/src/chains/chain.enums.d.ts +5 -1
- package/dist/src/chains/chain.enums.js +4 -0
- package/dist/src/chains/chain.enums.js.map +1 -1
- package/dist/src/chains/index.js +6 -0
- package/dist/src/chains/index.js.map +1 -1
- package/dist/src/client/core-api/api-client-caching.js +1 -1
- package/dist/src/client/core-api/api-client-caching.js.map +1 -1
- package/dist/src/client/core-api/api-client.js +6 -0
- package/dist/src/client/core-api/api-client.js.map +1 -1
- package/dist/src/client/core-api/core-api-mapper.js +3 -0
- package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
- package/dist/src/client/core-api/core-api.model.d.ts +8 -2
- package/dist/src/client/core-api/core-api.model.js +2 -0
- package/dist/src/client/core-api/core-api.model.js.map +1 -1
- package/dist/src/exceptions/exceptions.d.ts +4 -0
- package/dist/src/exceptions/exceptions.js +8 -1
- package/dist/src/exceptions/exceptions.js.map +1 -1
- package/dist/src/index.d.ts +10 -17
- package/dist/src/index.js +34 -26
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/index.d.ts +1 -0
- package/dist/src/models/index.js.map +1 -1
- package/dist/src/services/bridge/evm/index.d.ts +3 -1
- package/dist/src/services/bridge/evm/index.js +47 -15
- package/dist/src/services/bridge/evm/index.js.map +1 -1
- package/dist/src/services/bridge/get-cctp-sol-token-recipient-address.js +3 -3
- package/dist/src/services/bridge/get-cctp-sol-token-recipient-address.js.map +1 -1
- package/dist/src/services/bridge/index.d.ts +1 -1
- package/dist/src/services/bridge/index.js +30 -26
- package/dist/src/services/bridge/index.js.map +1 -1
- package/dist/src/services/bridge/models/bridge.model.d.ts +4 -0
- package/dist/src/services/bridge/models/bridge.model.js.map +1 -1
- package/dist/src/services/bridge/raw-bridge-transaction-builder.js +2 -2
- package/dist/src/services/bridge/raw-bridge-transaction-builder.js.map +1 -1
- package/dist/src/services/bridge/sol/index.d.ts +2 -2
- package/dist/src/services/bridge/sol/index.js +8 -5
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/srb/index.js +1 -1
- package/dist/src/services/bridge/srb/index.js.map +1 -1
- package/dist/src/services/bridge/sui/index.js +3 -1
- package/dist/src/services/bridge/sui/index.js.map +1 -1
- package/dist/src/services/bridge/trx/index.d.ts +1 -1
- package/dist/src/services/bridge/trx/index.js +85 -54
- package/dist/src/services/bridge/trx/index.js.map +1 -1
- package/dist/src/services/bridge/utils.d.ts +12 -12
- package/dist/src/services/bridge/utils.js +78 -51
- package/dist/src/services/bridge/utils.js.map +1 -1
- package/dist/src/services/index.d.ts +13 -7
- package/dist/src/services/index.js +129 -48
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/index.d.ts +1 -1
- package/dist/src/services/liquidity-pool/index.js +5 -8
- package/dist/src/services/liquidity-pool/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/raw-pool-transaction-builder.js +3 -3
- package/dist/src/services/liquidity-pool/raw-pool-transaction-builder.js.map +1 -1
- package/dist/src/services/liquidity-pool/trx/index.js +3 -3
- package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
- package/dist/src/services/models/abi/OftBridge.d.ts +386 -0
- package/dist/src/services/models/abi/OftBridge.js +500 -0
- package/dist/src/services/models/abi/OftBridge.js.map +1 -0
- 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 +30 -3
- 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 +9 -12
- package/dist/src/services/token/index.js.map +1 -1
- package/dist/src/tokens-info/tokens-info.model.d.ts +14 -0
- package/dist/src/tokens-info/tokens-info.model.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 +14 -13
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.d.ts +0 -1
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js +0 -35
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js.map +0 -1
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 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};
|
|
1
|
+
var ui=Object.create;var Ur=Object.defineProperty;var di=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var pi=Object.getPrototypeOf,gi=Object.prototype.hasOwnProperty;var fi=(s,a)=>()=>(s&&(a=s(s=0)),a);var nr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var yi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of li(a))!gi.call(s,o)&&o!==r&&Ur(s,o,{get:()=>a[o],enumerable:!(i=di(a,o))||i.enumerable});return s};var Ie=(s,a,r)=>(r=s!=null?ui(pi(s)):{},yi(a||!s||!s.__esModule?Ur(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as ce}from"@mysten/sui/bcs";function Yi(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 te(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=Yi(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function wa(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 wa(a)?a:s.object(a)}function Se(s,a,r){if(wa(a))return C(s,a);function i(d){let{typeName:l,typeArgs:p}=te(d);switch(l){case"bool":return ce.Bool;case"u8":return ce.U8;case"u16":return ce.U16;case"u32":return ce.U32;case"u64":return ce.U64;case"u128":return ce.U128;case"u256":return ce.U256;case"address":return ce.Address;case"0x1::string::String":case"0x1::ascii::String":return ce.String;case"0x2::object::ID":return ce.Address;case"0x1::option::Option":return ce.option(i(p[0]));case"vector":return ce.vector(i(p[0]));default:throw new Error(`invalid primitive type ${d}`)}}function o(d){for(let l of d){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function A(d){for(let l of d){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(l)}return!0}function c(d){for(let l of d){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(l)}return!1}let{typeName:m,typeArgs:u}=te(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:[Se(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(ce.vector(ce.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 Ki(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}=te(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]=Ki(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function D(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var Q=fi(()=>{"use strict"});var ze=nr((Im,Ca)=>{"use strict";Q();var yr=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}},Hi=new yr;Ca.exports=Hi});var Sr=nr((Fm,xa)=>{"use strict";Q();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}},Qi=new br;xa.exports=Qi});var Cr=nr((Dm,Oa)=>{"use strict";Q();var wr=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}},zi=new wr;Oa.exports=zi});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},Po={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},wo={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{TronWeb as ms}from"tronweb";import{Web3 as us}from"web3";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},h=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)}},Je=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},z=class extends J{constructor(a){super("JupiterError",a)}},It=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Ht=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},Rt=class extends J{constructor(a){super("VerifyTxError",a)}},lt=class extends J{constructor(a){super("InvalidTxError",a)}},Qt=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},zt=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)}},qt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},re=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},ae=class extends J{constructor(a){super("OFTDoesNotSupportedError",a)}},en=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")}},hi=(b=>(b.SDK_ERROR="SdkError",b.INVALID_AMOUNT_ERROR="InvalidAmountError",b.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",b.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",b.JUPITER_ERROR="JupiterError",b.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",b.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",b.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",b.VERIFY_TX_ERROR="VerifyTxError",b.INVALID_TX_ERROR="InvalidTxError",b.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",b.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",b.TIMEOUT_ERROR="TimeoutError",b.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",b.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",b.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",b.TX_TOO_LARGE="TxTooLargeError",b))(hi||{});var he=(y=>(y.BSC="BSC",y.ETH="ETH",y.BAS="BAS",y.SOL="SOL",y.TRX="TRX",y.POL="POL",y.ARB="ARB",y.CEL="CEL",y.AVA="AVA",y.SRB="SRB",y.STLR="STLR",y.OPT="OPT",y.SUI="SUI",y.SNC="SNC",y))(he||{}),Z=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(Z||{});var Ti={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},bi={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"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",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"}},M=(()=>{let s={...bi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new h(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return Ti[a]}}})();var rr=(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))(rr||{});var Te=(A=>(A[A.ALLBRIDGE=1]="ALLBRIDGE",A[A.WORMHOLE=2]="WORMHOLE",A[A.CCTP=3]="CCTP",A[A.CCTP_V2=4]="CCTP_V2",A[A.OFT=5]="OFT",A))(Te||{});import{Big as Er}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Er(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=Er(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new zt(s,A.length,r)}async function tn(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 tn(s(),a,i)}catch{if(++o>=r)throw new vt(a)}}async function Vr(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(),d=1e3,l=d;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${d}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${r*1e3}ms)`),await new Promise(f=>setTimeout(f,d)),d=d*i,new Date(Date.now()+d).valueOf()>u&&(d=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${d}ms`)),l=d+l;let g=await s(p);A.push(g),o&&a(g)&&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 Oi}from"big.js";var Si={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"}]},jr=Si;var Pi={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"}]},Zr=Pi;var wi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",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:[{internalType:"contract IERC20",name:"token_",type:"address"}],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"}]},_r=wi;import*as an from"@project-serum/anchor";import{PublicKey as ca}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ie}from"@solana/web3.js";async function Re(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function $r(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function kt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function pt(s){let a=await Ke(s),[r]=await ie.findProgramAddress([a.toBuffer()],s);return r}async function Jr(s,a){let[r]=await ie.findProgramAddress([s.toBuffer()],a);return r}async function gt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function Lr(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function ir(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function sr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function Xr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function or(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function Yr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function Kr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function Hr(s,a){let[r]=ie.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function Qr(s,a,r,i){let o=at("message_transmitter",r),A=at("token_messenger",i),c=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),d=at("remote_token_messenger",i,[s.toString()]),l=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:d,authorityPda:l}}function at(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 ie.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Ci}from"@project-serum/anchor";import{Connection as Bi,PublicKey as Ii}from"@solana/web3.js";function He(s,a){let r=new Bi(s,"confirmed"),i=new Ii(a);return new Ci(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ri}from"@solana/web3.js";import{Address as vi}from"@stellar/stellar-sdk";import{Big as le}from"big.js";import sa from"randombytes";import{utils as aa}from"tronweb";import{Big as T}from"big.js";import Ar from"bn.js";function cr(s,a){return T(100).minus(T(100).times(a).div(s)).toNumber()}function it(s,a){return be(s,a,3).round(0,T.roundDown)}function de(s,a){return be(s,3,a)}function be(s,a,r){let i=T(r).minus(a).toNumber();return T(s).times(Ft(i))}function Ft(s){return T(10).pow(s)}function O(s,a){return T(s).times(Ft(a))}function v(s,a){let r=T(s);return r.eq(0)?T(0):T(r).div(Ft(a))}function se(s){return v(T(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ge(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=it(c,r),u=T(i.tokenBalance).plus(m),d=Ue(u,i.aValue,i.dValue);return T(i.vUsdBalance).minus(d).round(0,T.roundDown).toFixed()}function xt(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return T(0).toFixed();let A=o.plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=de(T(i.tokenBalance).minus(c),r),u=T(m).times(a);return T(m).minus(u).round(0,T.roundDown).toFixed()}function zr(s,a){let r=T(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=Ue(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function qr(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(i.vUsdBalance).minus(s);if(o.lte(0))throw new Je;let A=Ue(o,i.aValue,i.dValue),c=T(A).minus(i.tokenBalance),m=de(c,r),u=T(a).div(T(1).minus(a)),d=T(m).times(u).round(0,T.roundUp);return T(m).plus(d).round(0,T.roundDown)}function ea(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(a).div(T(1).minus(a)),A=T(s).times(o).round(0,T.roundUp),c=T(s).plus(A),m=it(c,r),u=T(i.tokenBalance).minus(m);if(u.lte(0))throw new Je;let d=Ue(u,i.aValue,i.dValue);return T(d).minus(i.vUsdBalance).round(0,T.roundDown)}function Ue(s,a,r){let i=T(4).times(a).times(T(r).minus(s)).minus(r),o=T(r).pow(3),A=i.pow(2),c=T(s).times(T(s).times(A).plus(T(4).times(a).times(o))).sqrt().round(0,T.roundDown),m=T(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,T.roundDown);return u.eq(0)?T(0):u.plus(1)}function ta(s,a,r,i){let o=new Ar(s),A=new Ar(r),c=new Ar(a);return o.mul(A).shrn(i).sub(c).toString()}function na(s){return T(s).gt(0)?`${Number(T(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ra(s,a,r){let i=T(a).times(r),o=T(a).plus(r),A=T(8).times(s).times(i).times(o),c=i.times(T(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),d=m.plus(u),l=T(d).sqrt(),p=T(Math.cbrt(+A.plus(l).toFixed())),g=T(Math.cbrt(+A.minus(l).toFixed()));return p.plus(g).toFixed()}function Le(s,a,r){let i;switch(a){case"EVM":{i=ia(s);break}case"SOLANA":{i=new Ri(s).toBuffer();break}case"TRX":{i=ki(s);break}case"SRB":{i=new vi(s).toBuffer();break}case"SUI":{i=ia(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 ve(s){return s.replace(/^0x/i,"")}function oa(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ia(s){let r=oa(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function ki(s){let a=Mt(s),r=oa(a);return Fi(r,32)}function Mt(s){let a=aa.crypto.decodeBase58Address(s);return a?aa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Fi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function nn(){return sa(32)}function Ee(){let s=sa(32).readBigInt64BE();return s<0?s*-1n:s}function Ve(s,a){let r={},i=a.sourceToken;if(r.amount=O(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?O(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function ke(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=M.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new h("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;switch(a.messenger){case 3:if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress;break;case 4:if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new re("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address;break;case 5:if(!A.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||A.oftId!==a.destinationToken.oftId)throw new ae("Such route does not support OFT protocol");i.contractAddress=A.oftBridgeAddress;break;case 1:case 2:i.contractAddress=A.bridgeAddress;break}i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=O(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await mr(a.sourceToken,i.toChainId,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=O(c,M.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=O(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:d}=a;if(u&&+u>0){let l=await ur(A,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=M.getChainDecimalsByType(A.chainType),g=le(l.exchangeRate);break;case"stablecoin":p=A.decimals,g=le(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(d??"int"){case"float":{i.extraGas=O(u,p).toFixed(0);let f=g.mul(u);i.extraGasDest=O(f,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}case"int":{i.extraGas=u;let f=v(i.extraGas,M.getChainDecimalsByType(A.chainType)),y=g.mul(f);i.extraGasDest=O(y,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}}Mi(i.extraGas,i.gasFeePaymentMethod,l)}return s!=="SUI"&&(i.fromTokenAddress=Le(i.fromTokenAddress,s,s)),i.toAccountAddress=Le(a.toAccountAddress,o,s),i.toTokenAddress=Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&xi(i.amount,A.decimals,i.fee,i.extraGas),i}function xi(s,a,r,i){let o=le(s).minus(r).minus(i??0);if(o.lte(0))throw new dt(`Amount not enough to pay fee, ${v(le(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function mr(s,a,r,i){let o=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a,messenger:r,sourceToken:s.tokenAddress}),A={native:{int:o.fee,float:v(o.fee,M.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let c=be(new le(o.fee).mul(o.sourceNativeTokenPrice),M.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,le.roundUp);A.stablecoin={int:c,float:v(c,s.decimals).toFixed()}}return A}function Mi(s,a,r){let i=r.extraGasMax[a];if(!i)throw new It(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(le(s).gt(o))throw new Qt(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function ur(s,a,r,i){let o={},A=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),c=a.txCostAmount.maxAmount,m=v(c,M.getChainDecimalsByType(a.chainType)).toFixed(),u=le(m).div(A.exchangeRate).toFixed(M.getChainDecimalsByType(s.chainType),le.roundDown),d=O(u,M.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:d,float:u},A.sourceNativeTokenPrice){let l=le(u).mul(A.sourceNativeTokenPrice).toFixed(s.decimals,le.roundDown);o.stablecoin={int:O(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:c,float:m},swap:{int:a.txCostAmount.swap,float:v(a.txCostAmount.swap,M.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:v(a.txCostAmount.transfer,M.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:A.exchangeRate,sourceNativeTokenPrice:A.sourceNativeTokenPrice}}function Aa(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function sn(s,a,r,i){let o,A=new ca(a),c=new ca(r),m=await Re(A,c),u=He(i,a);an.setProvider(u);let d=await an.Spl.token(u).account.token.fetchNullable(m);if(d?.authority.equals(A))o=Le(m.toBase58(),"SOLANA",s);else{let l=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(l.value.length===0&&!d)o=Le(m.toBase58(),"SOLANA",s);else if(l.value.length>0){let p=l.value[0];if(!p?.pubkey)throw new h("First token account or its public key is undefined");o=Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new h("Associated account has wrong owner")}return o}var pe=class{};var Ot=class extends pe{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=Ve(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:d}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,d);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w="0x"+nn().toString("hex"),b,R,I=g;switch(y&&(I=Oi(I).plus(y).toFixed()),p){case 3:case 4:{let N=await this.buildRawTransactionCctpSend(r,i,I);b=N.sendMethod,R=N.value;break}case 5:{let N=this.buildRawTransactionOftSend(r,i,I,S);b=N.sendMethod,R=N.value;break}case 1:case 2:{let N=this.getBridgeContract(A);f==="stablecoin"?(b=N.methods.swapAndBridge(m,o,d,u,l,w,p,I),R="0"):(b=N.methods.swapAndBridge(m,o,d,u,l,w,p,0),R=I)}break}return Promise.resolve({from:c,to:A,value:R,data:b.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:d}=i,l=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let f=await sn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));d==="stablecoin"?(p=l.methods.bridgeWithWalletAddress(A,f,u,m,o),g="0"):(p=l.methods.bridgeWithWalletAddress(A,f,u,m,0),g=o)}else d==="stablecoin"?(p=l.methods.bridge(A,u,m,o),g="0"):(p=l.methods.bridge(A,u,m,0),g=o);return{sendMethod:p,value:g}}buildRawTransactionOftSend(r,i,o,A){let{amount:c,contractAddress:m,toChainId:u,toAccountAddress:d,gasFeePaymentMethod:l}=i,p=this.getOftBridgeContract(m),g,f;return l==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,c,d,u,o,A??"0","10"),f="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,c,d,u,0,A??"0","10"),f=o),{sendMethod:g,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(jr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(Zr.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(_r.abi,r)}};var on=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=Dt(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),Aa(a)?An(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):An(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as pr,Spl as _i,web3 as Qe}from"@project-serum/anchor";import{Keypair as Sa,PublicKey as j,SystemProgram as $i}from"@solana/web3.js";import{Big as Fe}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 ma={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 Di}from"@project-serum/anchor";import Wi from"big.js";import{Web3 as cn}from"web3";async function ft(s,a){return await Di.token(a).account.token.fetch(s)}async function ua(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Wi(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 Ge(s,{decimals:o,feeShare:A},c)}function da(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"),d=cn.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(!d)throw new h("message cannot be undefined");let l=cn.utils.keccak256(Buffer.from(d.replace("0x",""),"hex")),p=Buffer.from(l.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=cn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new lt("messageWithSigner cannot be undefined");let f=cn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),y=Buffer.from(f.replace("0x",""),"hex");return y[0]=p[0],y[1]=p[1],y}import{ComputeBudgetInstruction as pa,ComputeBudgetProgram as mn,Connection as ga,TransactionMessage as Ni}from"@solana/web3.js";import{Big as Gi}from"big.js";import{AddressLookupTableAccount as la}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new la({key:r.accountKey,state:la.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var dr="AUTO";async function yt(s,a,r){let i=new ga(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await ya(s.instructions,o,a,i)}async function fa(s,a,r){let i=new ga(r,"confirmed"),o=await ot(s,i),A=Ni.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new en;await ya(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function ya(s,a,r,i){if(a>0){let o=Ui(a,s);if(r?.solana){let A=r.solana;if(A===dr)await lr(s,i);else if("pricePerUnitInMicroLamports"in A)await lr(s,i,A.pricePerUnitInMicroLamports);else{let c=Gi(A.extraFeeInLamports).div(o).mul(Ft(6)).toFixed(0);await lr(s,i,c)}}}}function Ui(s,a){let r=a.findIndex(A=>A.programId.equals(mn.programId)&&pa.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=mn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function lr(s,a,r){let i=s.findIndex(c=>c.programId.equals(mn.programId)&&pa.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Ei(a)),A=mn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Ei(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 Vi}from"@solana/spl-token";import{Connection as ji,TransactionMessage as ha,VersionedTransaction as Zi}from"@solana/web3.js";import Ta,{AxiosError as ba}from"axios";var un=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new ji(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",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Vi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await Ta.get(g,{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 z(p.response.data.error):new z("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new z("Cannot get inAmount");let m;try{m=await Ta.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 z(p.response.data.error):new z("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new z("Cannot get swap transaction");let d=Buffer.from(u,"base64"),l=Zi.deserialize(d);return o?{tx:l,amountIn:c}:{tx:l}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),A=ha.decompile(a.message,{addressLookupTableAccounts:i}),c=ha.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 h("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new z(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new z("Some error occurred during creation final swap and bridge transaction")}}};var gr=1e6,Pa=1.1,dn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new un(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ve(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:d,toTokenAddress:l,toAccountAddress:p,minimumReceiveAmount:g}=r,f=c,y=u,S=d,w=l,b=o,R=p,I=new j(f),N=He(this.solanaRpcUrl,I.toString()),V=new pr(Wt,y,N),W=await pt(V.programId),me=await Ke(V.programId),X=new j(S),Oe=await gt(X,V.programId),De=new j(i),_e=await Re(I,X),we=new j(R),Ae=new j(w),ye=await gt(Ae,V.programId),Ce=new j(b),ue=await Re(we,Ae),We=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr})];try{await ft(ue,N)}catch{let mi=await _i.associatedToken(N).methods.create().accounts({mint:Ae,owner:we,associatedAccount:ue}).instruction();We.push(mi)}let Ne=await V.methods.swap(new ht(m),new ht(g||0)).accounts({payer:I,config:me,bridgeAuthority:W,user:I,sendBridgeToken:Oe,sendMint:X,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:Ae,receivePool:Ce,receiveUserToken:ue}).preInstructions(We).transaction(),Be=N.connection;return Ne.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,Ne.feePayer=I,await yt(Ne,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ne,Be)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:d,solTxSendUpdatedParams:l}=await this.processJup(o,r,!0);c=d,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=l,o={...o,...p}}catch(l){throw l instanceof J?l:l instanceof Error&&l.message?new z(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new z("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(d);m=l,u=p;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,d);m=l,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(A){if(!c)throw new z("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await fa(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,r),u=o?Fe(A):Fe(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Pa));let{tx:d,amountIn:l}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!l)throw new z("Cannot get inAmount");p=Fe(r.amount).minus(Fe(l).mul(Pa)).toFixed(0)}else p=Fe(r.amount).minus(u).toFixed(0);if(Fe(p).lte(0))throw new dt(`Amount not enough to pay fee, ${v(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:d,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,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,A=Fe(i.fee).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),c;return i.extraGas&&(c=Fe(i.extraGas).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).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:d,toTokenAddress:l,poolAddress:p,extraGas:g}=r,f=m,y=c,S=u,w=l,b=d,R=o,I=A,N=He(this.solanaRpcUrl,y),V=new pr(Wt,R,N),W=Array.from(nn()),me=new j(p),X=await ua(i,V,me),Oe=await $r(W,V.programId),De=await pt(V.programId),_e=await Re(new j(y),new j(f)),we=await gt(new j(f),V.programId),Ae=await ir(S,V.programId),ye=await Lr(S,Buffer.from(w),V.programId),Ce=await Ke(V.programId),ue=await V.account.config.fetch(Ce),We=await kt(S,ue.gasOracleProgramId),Ne=await kt(I,ue.gasOracleProgramId),Be=da({amount:X,recipient:Buffer.from(b),nonce:Buffer.from(W),receiveToken:Buffer.from(w),destinationChainId:S,sourceChainId:I,chainBridge:(await pt(V.programId)).toBuffer()}),G={};return G.bridge=V,G.amount=new ht(i),G.vusdAmount=new ht(X),G.nonce=W,G.recipient=Array.from(b),G.receiveToken=Array.from(w),G.poolAccount=me,G.lockAccount=Oe,G.bridgeAuthority=De,G.userToken=_e,G.bridgeTokenAccount=we,G.chainBridgeAccount=Ae,G.otherBridgeTokenAccount=ye,G.userAccount=new j(y),G.destinationChainId=S,G.mint=new j(f),G.config=Ce,G.configAccountInfo=ue,G.gasPrice=We,G.thisGasPrice=Ne,G.message=Be,g&&(G.extraGasInstruction=this.getExtraGasInstruction(g,G.userAccount,Ce)),G}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:N,thisGasPrice:V,message:W,extraGasInstruction:me}=r,X=I.allbridgeMessengerProgramId,Oe=await sr(w,X),De=await Ke(X),_e=await Xr(W,X),we=[];me&&we.push(me);let Ae=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts({mint:b,user:S,config:R,lock:d,pool:u,gasPrice:N,thisGasPrice:V,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:f,messenger:X,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:y}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr})]).postInstructions(we).transaction(),ye=He(this.solanaRpcUrl,S.toString()).connection;return Ae.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,Ae.feePayer=S,await this.convertToVersionedTransaction(Ae,ye)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new j(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new h("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:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:N,thisGasPrice:V,message:W,extraGasInstruction:me}=r,X=this.params.wormholeMessengerProgramId,[Oe]=j.findProgramAddressSync([Buffer.from("Bridge")],new j(X)),[De]=j.findProgramAddressSync([Buffer.from("fee_collector")],new j(X)),[_e]=j.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new j(X)),we=await sr(w,I.wormholeMessengerProgramId),Ae=await Ke(I.wormholeMessengerProgramId),ye=Sa.generate(),Ce=He(this.solanaRpcUrl,S.toString()),ue=await Ce.connection.getAccountInfo(Oe);if(ue==null)throw new h("Cannot fetch wormhole bridge account info");let We=new ht(ue.data.slice(16,24),"le").toString(),Ne=$i.transfer({fromPubkey:S,toPubkey:De,lamports:+We}),Be=[];me&&Be.push(me);let G={mint:b,user:S,config:R,lock:d,pool:u,gasPrice:N,thisGasPrice:V,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:we,wormholeProgram:X,bridge:Oe,message:ye.publicKey,wormholeMessenger:I.wormholeMessengerProgramId,sequence:_e,feeCollector:De,wormholeMessengerConfig:Ae,clock:Qe.SYSVAR_CLOCK_PUBKEY},Yt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts(G).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr}),Ne]).postInstructions(Be).signers([ye]).transaction();return Yt.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,Yt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Yt,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:d,extraGas:l}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,f=A,y=d,S=u,w=He(this.solanaRpcUrl,f),b=new pr(ma,p,w),R=new j(c),I=await Yr(R,b.programId),N=new j(f),V=await b.account.cctpBridge.fetch(I),W={};return W.cctpBridge=b,W.cctpBridgeAccount=I,W.cctpAddressAccount=new j(p),W.amount=new ht(o),W.recipient=Array.from(S),W.receiveToken=Array.from(y),W.userToken=await Re(N,R),W.bridgeAuthority=await Jr(I,b.programId),W.bridgeTokenAccount=await Kr(R,b.programId),W.chainBridgeAccount=await ir(m,b.programId),W.userAccount=N,W.destinationChainId=m,W.mint=R,W.gasPrice=await kt(m,V.gasOracleProgramId),W.thisGasPrice=await kt(g,V.gasOracleProgramId),W.provider=w,l&&(W.extraGasInstruction=this.getExtraGasInstruction(l,W.userAccount,I)),W}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:d,userToken:l,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:S,gasPrice:w,thisGasPrice:b,extraGasInstruction:R,provider:I}=i,N=this.params.cctpParams.cctpDomains[r],V=this.params.cctpParams.cctpTransmitterProgramId,W=this.params.cctpParams.cctpTokenMessengerMinter;if(N==null||!V||!W)throw new h("CCTP is not configured");let me=new j(V),X=new j(W),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce}=Qr(N,S,me,X),ue=[];R&&ue.push(R);let We=Sa.generate(),Ne=Hr(o.programId,We.publicKey),Be=await o.methods.bridge({amount:c,destinationChainId:y,recipient:m,receiveToken:u}).accounts({mint:S,user:f,cctpBridge:A,messageSentEventData:We.publicKey,lock:Ne,cctpMessenger:X,messageTransmitterProgram:me,messageTransmitterAccount:Oe,tokenMessenger:De,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce,eventAuthority:_e,bridgeToken:p,gasPrice:w,thisGasPrice:b,chainBridge:g,userToken:l,bridgeAuthority:d}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ue).transaction(),G=I.connection;return Be.recentBlockhash=(await G.getLatestBlockhash()).blockhash,Be.feePayer=f,{transaction:await this.convertToVersionedTransaction(Be,G),messageSentEventDataKeypair:We}}send(r){throw new Y}};import{Address as fr,contract as sS}from"@stellar/stellar-sdk";import{Big as Xi}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var Ji=n.Spec,Li=n.Client;var Nt=class extends Li{constructor(r){super(new Ji(["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 ln=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await ke(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:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=Xi(f).plus(g).toFixed());let y=this.getContract(Nt,o,A),S;return p==="stablecoin"?S=await y.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):S=await y.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(f),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=Ve(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:d}=r;return(await this.getContract(Nt,o,A).swap({sender:A,amount:BigInt(i),token:fr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(d)})).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 ss}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Tn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Ga}from"@mysten/sui/utils";import{Big as vr}from"big.js";var kr=Ie(ze());var Xe=Ie(ze());Q();function Ba(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[C(s,r.bridge),C(s,r.coin),Se(s,r.receiveAmountMin,"u64")]})}function Ia(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 Ra(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),Se(s,r.amountLp,"u64")]})}function va(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 ka(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function hr(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),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}function Fa(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Tr(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),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}var Ua=Ie(Sr());var Ma=Ie(Sr());Q();function Pr(s,a,r){return s.moveCall({target:`${Ma.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),Se(s,r.destinationChainId,"u8"),C(s,r.recipient),C(s,r.recipientWalletAddress)]})}var Ea=Ie(Cr());var Na=Ie(Cr());Q();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as es,toHEX as ts}from"@mysten/sui/utils";import{bcs as qi}from"@mysten/sui/bcs";Q();var Br=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=D(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:D(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(Gt(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 qi.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>x(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>k(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=>F(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 Tt(s){return Br.r(s)}function _(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ns=qe.bytes(32).transform({input:s=>es(s),output:s=>ts(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 ns;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 x(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 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 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:k(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function xe(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 je(s,a){let{typeArgs:r}=te(s.type);xe(s.type,r,a)}function At(s,a){let{typeName:r,typeArgs:i}=te(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 F(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:F(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}Q();var pn="0x1";import{bcs as mu}from"@mysten/sui/bcs";import{fromB64 as du}from"@mysten/sui/utils";Q();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as rs}from"@mysten/sui/utils";function gn(s){return s=P(s),s===`${pn}::string::String`}var fn=class s{__StructClass=!0;static get $typeName(){return`${pn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(a){return s.reified().new({bytes:x(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!gn(a.type))throw new Error("not a String type");return s.reified().new({bytes:k(Tt("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:F(Tt("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(!gn(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"||!gn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(rs(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"||!gn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};Q();Q();var et="0x2";import{bcs as Rr}from"@mysten/sui/bcs";import{fromB64 as Wa,fromHEX as as,toHEX as is}from"@mysten/sui/utils";function yn(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=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("ID",{bytes:Rr.bytes(32).transform({input:a=>as(a),output:a=>is(a)})})}static fromFields(a){return s.reified().new({bytes:x("address",a.bytes)})}static fromFieldsWithTypes(a){if(!yn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:k("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:F("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(!yn(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"||!yn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Wa(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"||!yn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function hn(s){return s=P(s),s===`${et}::object::UID`}var Pe=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=D(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("UID",{id:ct.bcs})}static fromFields(a){return s.reified().new({id:x(ct.reified(),a.id)})}static fromFieldsWithTypes(a){if(!hn(a.type))throw new Error("not a UID type");return s.reified().new({id:k(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:F(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(!hn(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"||!hn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Wa(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"||!hn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function Me(s,a){return s.moveCall({target:`${Na.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${fn.$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 bn=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ss({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,kr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=Ve(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,d=new Tn;d.setSender(A);let l={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Ba(d,[c,m],l),g=await Ze(f=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:f}));return g.length===0||!g[0]?d.transferObjects([p],r.toAccountAddress):d.mergeCoins(g[0].coinObjectId,[p]),await d.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new h("SUI token must contain 'suiAddresses'");switch((0,kr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,Ea.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);case 5:throw new ae("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Tr(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Tr(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ga,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};hr(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ga,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};hr(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=i;(0,Ua.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;y.setSender(c);let S=Me(y,ve(d)),w;if(r.destinationToken.chainType==="SOLANA"){let b=await sn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=Me(y,ve(b))}else w=S;if(p==="stablecoin"){let b=BigInt(A)-BigInt(f),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:b,type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Pr(y,m,R)}else{let b=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:b};Pr(y,m,R)}return await y.toJSON({client:this.client})}};import{Big as cs}from"big.js";import os from"bn.js";function Sn(s){return"0x"+new os(s).toString("hex")}function Va(s){return new Promise(a=>setTimeout(()=>a(),s))}async function Pn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new lt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await As(s,o),{txId:o}}async function As(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 Va(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Rt(`Transaction status is ${o.receipt.result}`)}}var Ut=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await ke(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(r,i);return await Pn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=Ve(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:d}=r,l=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:d}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",A)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(r,i){let{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w=g;y&&(w=cs(w).plus(y).toFixed());let b=Ee().toString(),R,I,N;switch(p){case 3:case 4:f==="stablecoin"?(R=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:w}],I="0"):(R=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0}],I=w),N="bridge(uint256,bytes32,uint256,uint256)";break;case 5:f==="stablecoin"?(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:w},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I="0"):(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I=w),N="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:f==="stablecoin"?(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:w}],I="0"):(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:0}],I=w),N="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(A,N,R,I,c)}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 h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var wn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new on(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Dt(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=Dt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Dt(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),An(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Dt(s,a=1){switch(a){case 3:if(s.cctpAddress)return s.cctpAddress;throw new re("Such route does not support CCTP protocol");case 4:if(s.cctpV2Address)return s.cctpV2Address;throw new re("Such route does not support CCTP V2 protocol");case 5:if(s.oftBridgeAddress)return s.oftBridgeAddress;throw new ae("Such route does not support OFT protocol");case 1:case 2:return s.bridgeAddress}}function An(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Ot(o,a,r);{let A=r.getNodeRpcUrl(s);return new Ot(new us(A),a,r)}}case"TRX":{if(o)return new Ut(o,a);{let A=r.getNodeRpcUrl(s);return new Ut(new ms({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new dn(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 ln(r,i,a);case"SUI":return new bn(r,a)}}import{Big as ks}from"big.js";import Fs from"timed-cache";import{TronWeb as xs}from"tronweb";import{FMT_BYTES as Ms,FMT_NUMBER as Os,Web3 as Ds}from"web3";import{Big as Ye}from"big.js";function ja(s,a,r,i,o){let A=O(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),d,l;if(m.eq(0)||u.eq(0)){let g=c.div(2);d=Ye(i).plus(g),l=Ye(o).plus(g)}else d=Ye(i).plus(c.mul(i).div(u)),l=Ye(o).plus(c.mul(o).div(u));return Ye(ra(a,d.toFixed(),l.toFixed())).minus(m).toFixed()}function Za(s){let a=O(s,3);return Ye(a).round().toFixed()}import{Web3 as tt}from"web3";var ds={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=ds;var oe=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return v(this.lpAmount,3).toFixed()}earned(a,r){let i=ta(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?v(i,r).toFixed():i}};var ge=class{};var Vt=class extends ge{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await tn(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 tn(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,d]=await o.execute();if(u&&d&&!u.error&&!d.error)return new oe({lpAmount:tt.utils.toBigInt(d.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 oe({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(),d=o.methods.totalSupply().encodeABI(),l=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:d},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[p,g,f,y,S,w]=await i.execute();if(p&&g&&f&&y&&S&&w&&!p.error&&!g.error&&!f.error&&!y.error&&!S.error&&!w.error){let b=tt.utils.toBigInt(f.result).toString(),R=tt.utils.toBigInt(y.result).toString(),I=se({tokenBalance:b,vUsdBalance:R});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(g.result).toString(),tokenBalance:b,vUsdBalance:R,totalLpAmount:tt.utils.toBigInt(S.result).toString(),accRewardPerShareP:tt.utils.toBigInt(w.result).toString(),p:this.P,imbalance:I}}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(),d=(await i.methods.accRewardPerShareP().call()).toString(),l=se({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:d,p:this.P,imbalance:l}}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 Cn=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=O(a.amount,a.token.decimals).toFixed(),bt(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=O(a.amount,3).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as ls,BN as _a,Program as ps,Spl as gs,web3 as fs}from"@project-serum/anchor";import{Connection as ys,PublicKey as nt}from"@solana/web3.js";var Bn=class extends ge{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 or(new nt(r),m.mint,A.programId),{lpAmount:d,rewardDebt:l}=await A.account.userDeposit.fetch(u);return new oe({lpAmount:d.toString(),rewardDebt:l.toString()})}catch{return new oe({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=se({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 _a(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 yt(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 _a(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 yt(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 yt(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 ps(Wt,r,i)}buildAnchorProvider(r){let i=new ys(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new ls(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 pt(r.programId),d=new nt(i),p=(await r.account.pool.fetch(d)).mint,g=await Re(c,p),f=await gt(p,r.programId),y=await or(c,p,r.programId),S=[fs.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let I=await gs.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:g}).instruction();S.push(I)}try{await r.account.userDeposit.fetch(y)}catch{let R=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:y}).instruction();S.push(R)}return{accounts:{mint:p,user:c,config:m,pool:d,bridgeAuthority:u,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:S}}};import{contract as oS}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var hs=t.Spec,Ts=t.Client;var In=class extends Ts{constructor(r){super(new hs(["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 Ul,rpc as bs}from"@stellar/stellar-sdk";var $a=bs.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if($a.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Pt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return $a.isSimulationError(a)}var Rn=class extends ge{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(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let m=c.unwrap();return new oe({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;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:se({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 In(o)}};import{SuiClient as Rs}from"@mysten/sui/client";import{Transaction as Nn}from"@mysten/sui/transactions";var Ct=Ie(ze());Q();Q();import{bcs as Ja}from"@mysten/sui/bcs";import{fromB64 as Ss}from"@mysten/sui/utils";function vn(s){return s=P(s),s.startsWith(`${et}::balance::Balance<`)}var ne=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=D(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ja.struct("Balance",{value:Ja.u64()})}static fromFields(a,r){return s.reified(a).new({value:x("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!vn(r.type))throw new Error("not a Balance type");return je(r,[a]),s.reified(a).new({value:k("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:F("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(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 Balance 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 Balance object");let i=te(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,Ss(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"||!vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Mr=Ie(ze());Q();var Fr=Ie(ze());import{bcs as kn}from"@mysten/sui/bcs";import{fromB64 as Ps}from"@mysten/sui/utils";function Fn(s){return s=P(s),s.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${Fr.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=D(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:D(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 _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return kn.struct("PoolRewards",{acc_reward_per_share_p:kn.u128(),admin_fee_share_bp:kn.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:kn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:x("u128",r.acc_reward_per_share_p),adminFeeShareBp:x("u64",r.admin_fee_share_bp),adminFee:x(ne.reified(a),r.admin_fee),rewards:x(ne.reified(a),r.rewards),lpSupply:x("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Fn(r.type))throw new Error("not a PoolRewards type");return je(r,[a]),s.reified(a).new({accRewardPerShareP:k("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.fields.admin_fee_share_bp),adminFee:k(ne.reified(a),r.fields.admin_fee),rewards:k(ne.reified(a),r.fields.rewards),lpSupply:k("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:F("u128",r.accRewardPerShareP),adminFeeShareBp:F("u64",r.adminFeeShareBp),adminFee:F(ne.reified(a),r.adminFee),rewards:F(ne.reified(a),r.rewards),lpSupply:F("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(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(!Fn(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"||!Fn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=te(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,Ps(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"||!Fn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};Q();var xr=Ie(ze());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as ws}from"@mysten/sui/utils";function xn(s){return s=P(s),s.startsWith(`${xr.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${xr.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=D(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:D(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 _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return wt.struct("PoolState",{token_balance:wt.u64(),vusd_balance:wt.u64(),d:wt.u64(),a:wt.u64(),balance_ratio_min_bp:wt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:x("u64",r.token_balance),vusdBalance:x("u64",r.vusd_balance),d:x("u64",r.d),a:x("u64",r.a),balanceRatioMinBp:x("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!xn(r.type))throw new Error("not a PoolState type");return je(r,[a]),s.reified(a).new({tokenBalance:k("u64",r.fields.token_balance),vusdBalance:k("u64",r.fields.vusd_balance),d:k("u64",r.fields.d),a:k("u64",r.fields.a),balanceRatioMinBp:k("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:F("u64",r.tokenBalance),vusdBalance:F("u64",r.vusdBalance),d:F("u64",r.d),a:F("u64",r.a),balanceRatioMinBp:F("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(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(!xn(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"||!xn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=te(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,ws(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"||!xn(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 Cs}from"@mysten/sui/utils";function Mn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool::Pool<`)}var On=class s{__StructClass=!0;static get $typeName(){return`${Mr.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=D(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:D(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 _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return jt.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:jt.u64(),can_deposit:jt.bool(),can_withdraw:jt.bool(),decimals:jt.u8(),balance:ne.bcs})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),state:x(ut.reified(a),r.state),rewards:x(mt.reified(a),r.rewards),feeShareBp:x("u64",r.fee_share_bp),canDeposit:x("bool",r.can_deposit),canWithdraw:x("bool",r.can_withdraw),decimals:x("u8",r.decimals),balance:x(ne.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Mn(r.type))throw new Error("not a Pool type");return je(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),state:k(ut.reified(a),r.fields.state),rewards:k(mt.reified(a),r.fields.rewards),feeShareBp:k("u64",r.fields.fee_share_bp),canDeposit:k("bool",r.fields.can_deposit),canWithdraw:k("bool",r.fields.can_withdraw),decimals:k("u8",r.fields.decimals),balance:k(ne.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:F(Pe.reified(),r.id),state:F(ut.reified(a),r.state),rewards:F(mt.reified(a),r.rewards),feeShareBp:F("u64",r.feeShareBp),canDeposit:F("bool",r.canDeposit),canWithdraw:F("bool",r.canWithdraw),decimals:F("u8",r.decimals),balance:F(ne.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(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(!Mn(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"||!Mn(r.bcs.type))throw new Error("object at is not a Pool object");let i=te(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,Cs(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"||!Mn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};Q();var Dr=Ie(ze());import{bcs as Or}from"@mysten/sui/bcs";import{fromB64 as Bs}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::user_deposit::UserDeposit<`)}var Wn=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=D(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:D(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 _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Or.struct("UserDeposit",{id:Pe.bcs,lp_amount:Or.u64(),reward_debt:Or.u64()})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),lpAmount:x("u64",r.lp_amount),rewardDebt:x("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a UserDeposit type");return je(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),lpAmount:k("u64",r.fields.lp_amount),rewardDebt:k("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:F(Pe.reified(),r.id),lpAmount:F("u64",r.lpAmount),rewardDebt:F("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(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 UserDeposit 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 UserDeposit object");let i=te(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,Bs(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"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Xa(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 La(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?La(r,i,c,s):[]}function La(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 Is="0x0000000000000000000000000000000000000000000000000000000000000000";async function Ya(s,a,r){let i=await s.devInspectTransactionBlock({sender:Is,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 Gn=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Rs({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,Ct.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 h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new oe({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Wn.phantom(_(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,A=new Nn;ka(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await Ya(this.client,A,On.reified(_(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,d=se({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:d}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("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 Nn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[d]=Xa([r.amount],o,c);if(!d)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let l=Ia(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:d});return c.mergeCoins(A.coinObjectId,[l]),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=_(i).phantomType;return{depositObj:Fa(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new Nn;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=Ra(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));if(!u[0]||!u[1])throw new h("No rewards found");return d[0]?A.mergeCoins(d[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 h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new Nn;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=va(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));return d[0]?A.mergeCoins(d[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Un}from"web3";import{encodeFunctionCall as vs}from"web3-eth-abi";var Zt=class extends ge{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=Mt(o.poolAddress),c=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"]}],d=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(d)&&d.length===2){let l=p=>{let g=d.find(f=>f.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Un.utils.toBigInt(g.result).toString()};return new oe({lpAmount:Un.utils.toBigInt(l(2)).toString(),rewardDebt:Un.utils.toBigInt(l(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 oe({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=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=g=>{let f=m.find(y=>y.id===g);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${g}`);return Un.utils.toBigInt(f.result).toString()},d=u(3),l=u(4),p=se({tokenBalance:d,vUsdBalance:l});return{aValue:u(1),dValue:u(2),tokenBalance:d,vUsdBalance:l,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,d]=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()]),l=c.toString(),p=m.toString(),g=se({tokenBalance:l,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:l,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:d.toString(),p:this.P,imbalance:g}}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 h("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 vs(o,i)}};var En=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Cn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Fs({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,d=ja(a,m,u,c,A);return v(d,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=Za(a),m=de(c,i.decimals),d=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",l=ks(m).plus(d).toFixed();return v(l,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return bt(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 bt(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}}};function bt(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Vt(o,a);{let A=r.getNodeRpcUrl(s),c=new Ds(A);return c.defaultReturnFormat={number:Os.STR,bytes:Ms.HEX},new Vt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new Zt(o,a,c);{let m=new xs({fullHost:A});return new Zt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new Bn(A,a)}case"SRB":return new Rn(r,i,a);case"SUI":return new Gn(r.getNodeRpcUrl(s),a)}}import{Big as L}from"big.js";function Qa(s,a,r){let i=Ws(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Ns(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function za(s,a,r){let i=Gs(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Us(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Ws(s,{feeShare:a,decimals:r},i){let o=L(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ka(it(c,r),i),amountExcludingCommissionInSystemPrecision:Ka(it(o,r),i)}}function Ka(s,a){if(s.eq(0))return"0";let r=L(a.tokenBalance).plus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(a.vUsdBalance).minus(i).round().toFixed()}function Ns(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=L(s).plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=de(L(i.tokenBalance).minus(c),r),u=L(m).times(a),d=L(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Gs(s,{feeShare:a,decimals:r},i){let o=L(a).div(L(1).minus(a)),A=L(s).times(o),c=L(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ha(it(c,r),i),amountExcludingCommissionInSystemPrecision:Ha(it(s,r),i)}}function Ha(s,a){let r=L(a.tokenBalance).minus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(i).minus(a.vUsdBalance).round().toFixed()}function Us(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=L(i.vUsdBalance).minus(s),A=Ue(o.toFixed(),i.aValue,i.dValue),c=L(A).minus(i.tokenBalance),m=de(c.toFixed(),r),u=L(a).div(L(1).minus(a)),d=L(m).times(u),l=L(m).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function qa(s,a,r,i,o){let A=Ge(s,a,r),c=de(A,a.decimals),m=xt(A,i,o),u=rt(s).times(a.feeShare),d=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:v(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:v(rt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:v(d,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:v(de(A,i.decimals).minus(m).minus(d),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import{Connection as Es,PublicKey as Vs,TransactionMessage as js}from"@solana/web3.js";var Vn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let i=new Es(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),A=js.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new h("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Vs(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as $s,BASE_FEE as Js,contract as AS,Horizon as ei,Operation as Ls,Operation as Xs,rpc as $t,TimeoutInfinite as Ys,TransactionBuilder as Wr,TransactionBuilder as ti}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Zs=e.Spec,_s=e.Client;var _t=class extends _s{constructor(r){super(new Zs(["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 Ks=100,Hs=180,jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ei.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(_t,a.tokenAddress).name();if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let d=new $s(m,u),l=Xs.changeTrust({asset:d,limit:a.limit});return new ti(i,{fee:Ks.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(Hs).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(_t,r).name();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ei.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==c&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new ei.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=ti.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=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if($t.Api.isSimulationRestore(c))return new Wr(o,{fee:(+Js+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Ls.restoreFootprint({})).setTimeout(Ys).build().toXDR()}async sendTransactionSoroban(a){let r=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Wr.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 Vr(()=>i.getTransaction(a),c=>c.status===$t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("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 Zn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new jn(a,r),this.sol=new Vn(a,r)}srb;sol};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),rn=(r=>(r.INT="int",r.FLOAT="float",r))(rn||{});import{Big as H}from"big.js";import no from"axios";var ni="3.23.0-beta.2";function ri(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=to(i,o);return A&&(a[i]=A),a},{})}function ai(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=Bt({chainSymbol:o,poolAddress:A.poolAddress}),m=se(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function Qs(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function zs(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function qs(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=eo(i),a),{})}function eo(s){return Object.entries(s).reduce((a,[r,i])=>{let o=zs(r);return o&&(a[o]=i),a},{})}function to(s,a){let r=M.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,transferTime:qs(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Qs(i,o))}}function Bt(s){return s.chainSymbol+"_"+s.poolAddress}function ii(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 si(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=se(c),a[Bt({chainSymbol:o,poolAddress:A})]=c}return a}var _n=class{api;constructor(a){this.api=no.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+ni},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:ri(a),poolInfoMap:ai(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){if(a.messenger===5&&!a.sourceToken)throw new Ht("For OFT sourceToken required");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,adminFeeShareWithExtras:r.adminFeeShareWithExtras}}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 si(i)}};import $n from"timed-cache";var Nr=20*1e3,ro=55*1e3,Jn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new $n({defaultTtl:ro}),this.receivedTransactionCache=new $n({defaultTtl:Nr}),this.pendingInfoCache=new $n({defaultTtl:Nr}),this.gasBalanceCache=new $n({defaultTtl:Nr})}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}${a.sourceToken?"_"+a.sourceToken:""}`,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 Ln=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 Xn=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:oi(A.tokens,a,this.isStaging)})}return i}async tokens(a){return oi(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 oi(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(ao)}function ao(s){let{flags:a,...r}=s;return r}import io from"timed-cache";var so=55*1e3,Yn=class{constructor(a){this.client=a;this.poolInfoCache=new Gr}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[Bt(a)];if(o)return o;throw new h("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(ii(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(Bt(a),r)}},Gr=class{cache;constructor(){this.cache=new io({defaultTtl:so})}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=Bt(a);return this.cache.get(r)}};import{Big as yo}from"big.js";import{TronWeb as ho}from"tronweb";import{Web3 as To}from"web3";var oo={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"}]},Kn=oo;import{Big as Ai}from"big.js";var fe=class{async checkAllowance(a){let r=await this.getAllowance(a);return Ai(r).gte(Ai(a.amount))}};var Ao="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",co="0xdac17f958d2ee523a2206206994597c13d831ec7",mo=1e5,Jt=class extends fe{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()===co}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?Ao:Sn(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=mo: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(Kn.abi,r)}};import{AnchorProvider as uo}from"@project-serum/anchor";import{Connection as lo,PublicKey as Hn}from"@solana/web3.js";var Qn=class extends fe{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 lo(this.solanaRpcUrl,"confirmed"),o=new Hn(r);return new uo(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 Re(new Hn(i),new Hn(o.tokenAddress));return(await ft(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 Hn(r.account))).toString()}};import{Horizon as eT,NotFoundError as po}from"@stellar/stellar-sdk";var zn=class extends fe{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 h("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new eT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(d){if(d instanceof po)return"0";throw d}let u=c.balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==i&&d.asset_issuer==o);return u?.balance?O(u.balance,M.getChainDecimalsByType(M.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new eT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?O(c.balance,M.getChainDecimalsByType(M.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Y}buildRawTransactionApprove(){throw new Y}};import{SuiClient as go}from"@mysten/sui/client";var qn=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new go({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 h("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 fo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Lt=class extends fe{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 Pn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?fo:Sn(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(Kn.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 h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var er=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.owner,r).getAllowance(a);return v(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),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)),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)),this.getChainTokenService(a.token.chainSymbol,a.owner,r).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.account,r).getTokenBalance(a);return a.token.decimals?v(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await this.getChainTokenService(a.chainSymbol,a.account,r).getNativeTokenBalance(a);return{int:i,float:v(i,M.getChainDecimalsByType(M.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(M.getChainProperty(a).chainType){case"EVM":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Jt(new To(o),this.api)}}case"TRX":{if(i)return new Lt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new ho({fullHost:o});return A.setAddress(r),new Lt(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Qn(o,this.api)}case"SRB":return new zn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new qn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:O(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:yo(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 qt(a)}},tr=class{api;tokenService;params;bridge;pool;constructor(a,r=Kt){M.addChainsProperties(r.additionalChainsProperties);let i=new _n(r),o=new Jn(i),A=new Ln(o),c=new Yn(A);this.api=new Xn(c,r),this.tokenService=new er(this.api,a,r),this.bridge=new wn(this.api,a,r,this.tokenService),this.pool=new En(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=O(a,i.decimals).toFixed()):A=a;let c=Ge(A,i,await K(this.api,i)),m=await K(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),d,l=await this.api.getPendingInfo();for(let p in l[o.chainSymbol]){let g=l[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);d=g[p]}if(d){let p=zr(d.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,o,p),f;return H(g.int).gt(u.int)?f={min:u,max:g}:f={min:g,max:u},{pendingTxs:d.pendingTxs,pendingAmount:{int:be(d.totalSentAmount,3,o.decimals).toFixed(0),float:v(d.totalSentAmount,3).toFixed()},estimatedAmount:f}}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=O(a,r.decimals);if(i.eq(0))return 0;let o=Ge(i,r,await K(this.api,r)),A=de(o,r.decimals);return cr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=O(a,r.decimals);if(o.eq(0))return 0;let A=Ge(o,r,await K(this.api,r)),c=xt(A,i,await K(this.api,i)),m=de(A,i.decimals);return cr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:H(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:H(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await K(this.api,r),async()=>await K(this.api,i))}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await this.pool.getPoolInfoFromChain(r,A),async()=>await this.pool.getPoolInfoFromChain(i,c))}async getAmountToBeReceivedCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,r,i,o);case 5:return this.getAmountToBeReceivedComputeOft(a,r,i)}}getAmountToBeReceivedComputeWithPools(a,r,i,o,A){U(a),E("amountToSendFloat",a,r.decimals);let c=O(a,r.decimals),m=Ge(c,r,o);return this.getAmountFromVUsdFormatted(m,i,A).float}getAmountToBeReceivedComputeCctp(a,r,i,o){U(a),E("amountToSendFloat",a,r.decimals);let A=O(a,r.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let c=A.mul(H(1).minus(r.cctpFeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let c=A.mul(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(a,r,i){U(a),E("amountToSendFloat",a,r.decimals);let o=O(a,r.decimals);if(!r.oftBridgeAddress||!i.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.mul(H(1).minus(A)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}async getAmountToSend(a,r,i,o){return this.getAmountToSendCompute(a,r,i,o,()=>K(this.api,r),()=>K(this.api,i))}async getAmountToSendFromChain(a,r,i,o,A,c){return this.getAmountToSendCompute(a,r,i,o,()=>this.pool.getPoolInfoFromChain(r,A),()=>this.pool.getPoolInfoFromChain(i,c))}async getAmountToSendCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(a,r,i,o);case 5:return this.getAmountToSendComputeOft(a,r,i)}}getAmountToSendComputeWithPools(a,r,i,o,A){U(a),E("amountToBeReceivedFloat",a,i.decimals);let c=O(a,i.decimals),m=ea(c,i,A),u=qr(m,r,o);if(H(u).lte(0))throw new Je;return v(u,r.decimals).toFixed()}getAmountToSendComputeCctp(a,r,i,o){U(a),E("amountToBeReceivedFloat",a,i.decimals);let A=O(a,i.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let c=A.div(H(1).minus(r.cctpFeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let c=A.div(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}}}async getAmountToSendComputeOft(a,r,i){U(a),E("amountToBeReceivedFloat",a,i.decimals);let o=O(a,i.decimals);if(!r.oftId||!i.oftId||!r.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.div(H(1).minus(A)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return mr(a,r.allbridgeChainId,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 na(a)}async getExtraGasMaxLimits(a,r,i){return await ur(a,r,i,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=O(a,i.decimals).toFixed()):o=a;let A=Ge(o,i,await K(this.api,i));return{int:A,float:v(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=xt(a,r,i);if(H(o).lt(0))throw new Je;return{int:o,float:v(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return Qa(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=za(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(H(A).lt(0))throw new Je;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=O(a,i.decimals).toFixed()):A=a,qa(A,i,await K(this.api,i),o,await K(this.api,o))}};function bo(s){return"solanaRpcUrl"in s}var ci=class{params;bridge;pool;utils;service;constructor(a,r=Kt){let i;bo(a)?i=new Xt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Xt(a),this.service=new tr(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Zn(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=1){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o=1,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,r,i,c)}}async getAmountToSend(a,r,i,o=1){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o=1,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,r,i,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,i=1){return this.service.getExtraGasMaxLimits(a,r,i)}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{rr as AddressStatus,ci as AllbridgeCoreSdk,rn as AmountFormat,dt as AmountNotEnoughError,zt as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,Z as ChainType,hi as ErrorCode,Qt as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,It as InvalidGasFeePaymentOptionError,Ht as InvalidMessengerOptionError,lt as InvalidTxError,z as JupiterError,Te as Messenger,Y as MethodNotSupportedError,qt as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,h as SdkError,J as SdkRootError,dr as SolanaAutoTxFee,vt as TimeoutError,en as TxTooLargeError,Rt as VerifyTxError,Kt as mainnet,wo as nodeRpcUrlsDefault,Po as nodeUrlsDefault};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|