@shogun-sdk/intents-sdk 1.2.31 → 1.4.0
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 +76 -25
- package/dist/index.cjs +8997 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1654 -0
- package/dist/index.d.ts +1654 -0
- package/dist/index.js +9246 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -30
- package/src/auth/siwe.ts +8 -3
- package/src/chains.ts +6 -0
- package/src/constants.ts +71 -15
- package/src/core/evm/chain-provider.ts +4 -1
- package/src/core/evm/connectors/monad.ts +27 -0
- package/src/core/evm/cross-chain-limit-order.ts +14 -14
- package/src/core/evm/intent-helpers.ts +162 -21
- package/src/core/evm/intent-provider.ts +5 -4
- package/src/core/evm/permit2.ts +36 -0
- package/src/core/evm/single-chain-dca-order.ts +18 -18
- package/src/core/evm/single-chain-limit-order.ts +15 -15
- package/src/core/evm/types.ts +4 -4
- package/src/core/evm/validator.ts +1 -1
- package/src/core/orders/api/fetch.ts +33 -16
- package/src/core/orders/api/index.ts +39 -8
- package/src/core/orders/common.ts +2 -0
- package/src/core/orders/cross-chain.ts +15 -18
- package/src/core/orders/single-chain.ts +30 -13
- package/src/core/sdk.ts +11 -0
- package/src/core/solana/cancel-order.ts +4 -2
- package/src/core/solana/client.ts +1 -1
- package/src/core/solana/dca/cancel-order.ts +2 -1
- package/src/core/solana/dca/single-chain-dca-order.ts +19 -22
- package/src/core/solana/dca/single-chain-limit-order.ts +20 -22
- package/src/core/solana/generated/cross-chain/accounts/dcaOrder.ts +2 -2
- package/src/core/solana/generated/cross-chain/accounts/guard.ts +22 -10
- package/src/core/solana/generated/cross-chain/errors/sourceChainGuard.ts +37 -33
- package/src/core/solana/generated/cross-chain/instructions/cancelDcaOrder.ts +36 -22
- package/src/core/solana/generated/cross-chain/instructions/cancelOrder.ts +32 -18
- package/src/core/solana/generated/cross-chain/instructions/claimTokensForDcaInterval.ts +396 -0
- package/src/core/solana/generated/cross-chain/instructions/index.ts +5 -0
- package/src/core/solana/generated/cross-chain/instructions/preStartDcaOrderExecution.ts +504 -0
- package/src/core/solana/generated/cross-chain/instructions/setCancelAuthorities.ts +326 -0
- package/src/core/solana/generated/cross-chain/instructions/startDcaOrderExecution.ts +440 -0
- package/src/core/solana/generated/cross-chain/instructions/startDcaOrderExecutionAfterSwap.ts +322 -0
- package/src/core/solana/generated/cross-chain/programs/sourceChainGuard.ts +80 -0
- package/src/core/solana/generated/cross-chain/types/cancelAuthoritiesUpdated.ts +40 -0
- package/src/core/solana/generated/cross-chain/types/index.ts +1 -0
- package/src/core/solana/generated/single-chain/accounts/guard.ts +22 -10
- package/src/core/solana/generated/single-chain/errors/singleChainGuard.ts +24 -20
- package/src/core/solana/generated/single-chain/instructions/cancelDcaOrder.ts +28 -14
- package/src/core/solana/generated/single-chain/instructions/cancelLimitOrder.ts +28 -14
- package/src/core/solana/generated/single-chain/instructions/fulfillDcaOrderInterval.ts +30 -4
- package/src/core/solana/generated/single-chain/instructions/fulfillLimitOrder.ts +30 -4
- package/src/core/solana/generated/single-chain/instructions/index.ts +1 -0
- package/src/core/solana/generated/single-chain/instructions/setCancelAuthorities.ts +326 -0
- package/src/core/solana/generated/single-chain/programs/singleChainGuard.ts +17 -1
- package/src/core/solana/generated/single-chain/types/cancelAuthoritiesUpdated.ts +40 -0
- package/src/core/solana/generated/single-chain/types/index.ts +1 -0
- package/src/core/solana/intent-helpers.ts +38 -27
- package/src/core/solana/sdk.ts +1 -1
- package/src/core/solana/utils.ts +10 -1
- package/src/core/sui/cross-chain-limit-order.ts +1 -29
- package/src/core/sui/intent-helpers.ts +39 -41
- package/src/core/sui/order-transaction.ts +1 -1
- package/src/core/sui/single-chain-dca-order.ts +19 -32
- package/src/core/sui/single-chain-limit-order.ts +19 -34
- package/src/index.ts +22 -9
- package/src/types/api.ts +22 -2
- package/src/types/intent.ts +42 -5
- package/src/types/token-list.ts +35 -0
- package/src/utils/base-validator.ts +0 -4
- package/src/utils/defillama.ts +2 -0
- package/src/utils/generate-execution-details-hash.ts +13 -0
- package/src/utils/quote/address.ts +4 -0
- package/src/utils/quote/aggregator.ts +326 -76
- package/src/utils/quote/liquidswap.ts +42 -13
- package/src/utils/quote/paraswap.ts +2 -0
- package/src/utils/quote/pricing/constants.ts +33 -0
- package/src/utils/quote/pricing/decimals.ts +11 -0
- package/src/utils/quote/pricing/estimate-amount-out.ts +36 -0
- package/src/utils/quote/pricing/expenses.ts +62 -0
- package/src/utils/quote/pricing/gas.ts +28 -0
- package/src/utils/quote/pumpfun/estimations.ts +206 -0
- package/src/utils/quote/pumpfun/estimations_amm.ts +165 -0
- package/src/utils/quote/pumpfun/index.ts +266 -0
- package/src/utils/quote/pumpfun/models.ts +163 -0
- package/src/utils/quote/pumpfun/utils.ts +343 -0
- package/src/utils/quote/raydium.ts +506 -0
- package/src/utils/quote/relay.ts +99 -0
- package/src/utils/quote/stablecoins-tokens.ts +35 -8
- package/src/utils/quote/utils.ts +8 -0
- package/src/utils/tokens/index.ts +38 -0
- package/dist/esm/auth/siwe.js +0 -26
- package/dist/esm/auth/siwe.js.map +0 -1
- package/dist/esm/chains.js +0 -62
- package/dist/esm/chains.js.map +0 -1
- package/dist/esm/config.js +0 -2
- package/dist/esm/config.js.map +0 -1
- package/dist/esm/constants.js +0 -106
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/core/evm/abi/erc20.js +0 -313
- package/dist/esm/core/evm/abi/erc20.js.map +0 -1
- package/dist/esm/core/evm/abi/permit2.js +0 -395
- package/dist/esm/core/evm/abi/permit2.js.map +0 -1
- package/dist/esm/core/evm/abi/single-chain-guard-limit.js +0 -768
- package/dist/esm/core/evm/abi/single-chain-guard-limit.js.map +0 -1
- package/dist/esm/core/evm/abi/source-chain-guard.js +0 -1121
- package/dist/esm/core/evm/abi/source-chain-guard.js.map +0 -1
- package/dist/esm/core/evm/cancel-order.js +0 -130
- package/dist/esm/core/evm/cancel-order.js.map +0 -1
- package/dist/esm/core/evm/chain-provider.js +0 -118
- package/dist/esm/core/evm/chain-provider.js.map +0 -1
- package/dist/esm/core/evm/connectors/hyperevm.js +0 -23
- package/dist/esm/core/evm/connectors/hyperevm.js.map +0 -1
- package/dist/esm/core/evm/cross-chain-limit-order.js +0 -43
- package/dist/esm/core/evm/cross-chain-limit-order.js.map +0 -1
- package/dist/esm/core/evm/intent-helpers.js +0 -130
- package/dist/esm/core/evm/intent-helpers.js.map +0 -1
- package/dist/esm/core/evm/intent-provider.js +0 -162
- package/dist/esm/core/evm/intent-provider.js.map +0 -1
- package/dist/esm/core/evm/order-signature.js +0 -41
- package/dist/esm/core/evm/order-signature.js.map +0 -1
- package/dist/esm/core/evm/permit2.js +0 -82
- package/dist/esm/core/evm/permit2.js.map +0 -1
- package/dist/esm/core/evm/sdk.js +0 -175
- package/dist/esm/core/evm/sdk.js.map +0 -1
- package/dist/esm/core/evm/single-chain-dca-order.js +0 -49
- package/dist/esm/core/evm/single-chain-dca-order.js.map +0 -1
- package/dist/esm/core/evm/single-chain-limit-order.js +0 -45
- package/dist/esm/core/evm/single-chain-limit-order.js.map +0 -1
- package/dist/esm/core/evm/types.js +0 -8
- package/dist/esm/core/evm/types.js.map +0 -1
- package/dist/esm/core/evm/validator.js +0 -111
- package/dist/esm/core/evm/validator.js.map +0 -1
- package/dist/esm/core/orders/api/fetch.js +0 -17
- package/dist/esm/core/orders/api/fetch.js.map +0 -1
- package/dist/esm/core/orders/api/index.js +0 -31
- package/dist/esm/core/orders/api/index.js.map +0 -1
- package/dist/esm/core/orders/common.js +0 -8
- package/dist/esm/core/orders/common.js.map +0 -1
- package/dist/esm/core/orders/cross-chain.js +0 -319
- package/dist/esm/core/orders/cross-chain.js.map +0 -1
- package/dist/esm/core/orders/dca-single-chain.js +0 -172
- package/dist/esm/core/orders/dca-single-chain.js.map +0 -1
- package/dist/esm/core/orders/single-chain.js +0 -197
- package/dist/esm/core/orders/single-chain.js.map +0 -1
- package/dist/esm/core/sdk.js +0 -86
- package/dist/esm/core/sdk.js.map +0 -1
- package/dist/esm/core/solana/cancel-order.js +0 -176
- package/dist/esm/core/solana/cancel-order.js.map +0 -1
- package/dist/esm/core/solana/client.js +0 -19
- package/dist/esm/core/solana/client.js.map +0 -1
- package/dist/esm/core/solana/cross-chain-limit-order.js +0 -18
- package/dist/esm/core/solana/cross-chain-limit-order.js.map +0 -1
- package/dist/esm/core/solana/dca/cancel-order.js +0 -61
- package/dist/esm/core/solana/dca/cancel-order.js.map +0 -1
- package/dist/esm/core/solana/dca/create-order.js +0 -82
- package/dist/esm/core/solana/dca/create-order.js.map +0 -1
- package/dist/esm/core/solana/dca/single-chain-dca-order.js +0 -23
- package/dist/esm/core/solana/dca/single-chain-dca-order.js.map +0 -1
- package/dist/esm/core/solana/dca/single-chain-limit-order.js +0 -29
- package/dist/esm/core/solana/dca/single-chain-limit-order.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/accounts/adminSingleton.js +0 -60
- package/dist/esm/core/solana/generated/cross-chain/accounts/adminSingleton.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/accounts/dcaOrder.js +0 -90
- package/dist/esm/core/solana/generated/cross-chain/accounts/dcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/accounts/guard.js +0 -64
- package/dist/esm/core/solana/generated/cross-chain/accounts/guard.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/accounts/index.js +0 -12
- package/dist/esm/core/solana/generated/cross-chain/accounts/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/accounts/order.js +0 -78
- package/dist/esm/core/solana/generated/cross-chain/accounts/order.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/errors/index.js +0 -9
- package/dist/esm/core/solana/generated/cross-chain/errors/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/errors/sourceChainGuard.js +0 -140
- package/dist/esm/core/solana/generated/cross-chain/errors/sourceChainGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/index.js +0 -13
- package/dist/esm/core/solana/generated/cross-chain/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/acceptAdmin.js +0 -88
- package/dist/esm/core/solana/generated/cross-chain/instructions/acceptAdmin.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/cancelDcaOrder.js +0 -118
- package/dist/esm/core/solana/generated/cross-chain/instructions/cancelDcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/cancelOrder.js +0 -107
- package/dist/esm/core/solana/generated/cross-chain/instructions/cancelOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/claimTokens.js +0 -127
- package/dist/esm/core/solana/generated/cross-chain/instructions/claimTokens.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/collectProtocolFees.js +0 -133
- package/dist/esm/core/solana/generated/cross-chain/instructions/collectProtocolFees.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/createDcaOrder.js +0 -170
- package/dist/esm/core/solana/generated/cross-chain/instructions/createDcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/createGuard.js +0 -188
- package/dist/esm/core/solana/generated/cross-chain/instructions/createGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/createOrder.js +0 -166
- package/dist/esm/core/solana/generated/cross-chain/instructions/createOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/index.js +0 -22
- package/dist/esm/core/solana/generated/cross-chain/instructions/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/initialize.js +0 -126
- package/dist/esm/core/solana/generated/cross-chain/instructions/initialize.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/preStartOrderExecution.js +0 -110
- package/dist/esm/core/solana/generated/cross-chain/instructions/preStartOrderExecution.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/setAdmin.js +0 -98
- package/dist/esm/core/solana/generated/cross-chain/instructions/setAdmin.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/setAuctioneerPubKey.js +0 -111
- package/dist/esm/core/solana/generated/cross-chain/instructions/setAuctioneerPubKey.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/startOrderExecution.js +0 -98
- package/dist/esm/core/solana/generated/cross-chain/instructions/startOrderExecution.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/instructions/startOrderExecutionAfterSwap.js +0 -106
- package/dist/esm/core/solana/generated/cross-chain/instructions/startOrderExecutionAfterSwap.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/programs/index.js +0 -9
- package/dist/esm/core/solana/generated/cross-chain/programs/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/programs/sourceChainGuard.js +0 -98
- package/dist/esm/core/solana/generated/cross-chain/programs/sourceChainGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/shared/index.js +0 -79
- package/dist/esm/core/solana/generated/cross-chain/shared/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/adminUpdateStarted.js +0 -18
- package/dist/esm/core/solana/generated/cross-chain/types/adminUpdateStarted.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/adminUpdated.js +0 -18
- package/dist/esm/core/solana/generated/cross-chain/types/adminUpdated.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/auctioneerPubkeyUpdated.js +0 -24
- package/dist/esm/core/solana/generated/cross-chain/types/auctioneerPubkeyUpdated.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/dcaExecutionStarted.js +0 -32
- package/dist/esm/core/solana/generated/cross-chain/types/dcaExecutionStarted.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/dcaOrderCreated.js +0 -42
- package/dist/esm/core/solana/generated/cross-chain/types/dcaOrderCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/dcaOrderIntervalFulfilled.js +0 -26
- package/dist/esm/core/solana/generated/cross-chain/types/dcaOrderIntervalFulfilled.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/dcaTokenInSwapped.js +0 -28
- package/dist/esm/core/solana/generated/cross-chain/types/dcaTokenInSwapped.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/executionStarted.js +0 -30
- package/dist/esm/core/solana/generated/cross-chain/types/executionStarted.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/failedDcaIntervalExecution.js +0 -26
- package/dist/esm/core/solana/generated/cross-chain/types/failedDcaIntervalExecution.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/guardCreated.js +0 -28
- package/dist/esm/core/solana/generated/cross-chain/types/guardCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/index.js +0 -22
- package/dist/esm/core/solana/generated/cross-chain/types/index.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/orderCancelled.js +0 -18
- package/dist/esm/core/solana/generated/cross-chain/types/orderCancelled.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/orderCreated.js +0 -36
- package/dist/esm/core/solana/generated/cross-chain/types/orderCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/orderFulfilled.js +0 -18
- package/dist/esm/core/solana/generated/cross-chain/types/orderFulfilled.js.map +0 -1
- package/dist/esm/core/solana/generated/cross-chain/types/tokenInSwapped.js +0 -26
- package/dist/esm/core/solana/generated/cross-chain/types/tokenInSwapped.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/accounts/adminSingleton.js +0 -60
- package/dist/esm/core/solana/generated/single-chain/accounts/adminSingleton.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/accounts/dcaOrder.js +0 -75
- package/dist/esm/core/solana/generated/single-chain/accounts/dcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/accounts/guard.js +0 -62
- package/dist/esm/core/solana/generated/single-chain/accounts/guard.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/accounts/index.js +0 -12
- package/dist/esm/core/solana/generated/single-chain/accounts/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/accounts/limitOrder.js +0 -65
- package/dist/esm/core/solana/generated/single-chain/accounts/limitOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/errors/index.js +0 -9
- package/dist/esm/core/solana/generated/single-chain/errors/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/errors/singleChainGuard.js +0 -101
- package/dist/esm/core/solana/generated/single-chain/errors/singleChainGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/index.js +0 -13
- package/dist/esm/core/solana/generated/single-chain/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/acceptAdmin.js +0 -88
- package/dist/esm/core/solana/generated/single-chain/instructions/acceptAdmin.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/cancelDcaOrder.js +0 -84
- package/dist/esm/core/solana/generated/single-chain/instructions/cancelDcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/cancelLimitOrder.js +0 -84
- package/dist/esm/core/solana/generated/single-chain/instructions/cancelLimitOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/collectProtocolFees.js +0 -121
- package/dist/esm/core/solana/generated/single-chain/instructions/collectProtocolFees.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/createDcaOrder.js +0 -172
- package/dist/esm/core/solana/generated/single-chain/instructions/createDcaOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/createGuard.js +0 -163
- package/dist/esm/core/solana/generated/single-chain/instructions/createGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/createLimitOrder.js +0 -168
- package/dist/esm/core/solana/generated/single-chain/instructions/createLimitOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/fulfillDcaOrderInterval.js +0 -146
- package/dist/esm/core/solana/generated/single-chain/instructions/fulfillDcaOrderInterval.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/fulfillLimitOrder.js +0 -146
- package/dist/esm/core/solana/generated/single-chain/instructions/fulfillLimitOrder.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/index.js +0 -20
- package/dist/esm/core/solana/generated/single-chain/instructions/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/initialize.js +0 -126
- package/dist/esm/core/solana/generated/single-chain/instructions/initialize.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/setAdmin.js +0 -98
- package/dist/esm/core/solana/generated/single-chain/instructions/setAdmin.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/instructions/setAuctioneerPubKey.js +0 -111
- package/dist/esm/core/solana/generated/single-chain/instructions/setAuctioneerPubKey.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/programs/index.js +0 -9
- package/dist/esm/core/solana/generated/single-chain/programs/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/programs/singleChainGuard.js +0 -90
- package/dist/esm/core/solana/generated/single-chain/programs/singleChainGuard.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/shared/index.js +0 -79
- package/dist/esm/core/solana/generated/single-chain/shared/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/adminUpdateStarted.js +0 -18
- package/dist/esm/core/solana/generated/single-chain/types/adminUpdateStarted.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/adminUpdated.js +0 -18
- package/dist/esm/core/solana/generated/single-chain/types/adminUpdated.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/auctioneerPubkeyUpdated.js +0 -24
- package/dist/esm/core/solana/generated/single-chain/types/auctioneerPubkeyUpdated.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderCreated.js +0 -42
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderFulfilled.js +0 -18
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderFulfilled.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderIntervalFulfilled.js +0 -30
- package/dist/esm/core/solana/generated/single-chain/types/dcaOrderIntervalFulfilled.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/guardCreated.js +0 -26
- package/dist/esm/core/solana/generated/single-chain/types/guardCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/index.js +0 -18
- package/dist/esm/core/solana/generated/single-chain/types/index.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/limitOrderCreated.js +0 -36
- package/dist/esm/core/solana/generated/single-chain/types/limitOrderCreated.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/limitOrderFulfilled.js +0 -24
- package/dist/esm/core/solana/generated/single-chain/types/limitOrderFulfilled.js.map +0 -1
- package/dist/esm/core/solana/generated/single-chain/types/orderCancelled.js +0 -18
- package/dist/esm/core/solana/generated/single-chain/types/orderCancelled.js.map +0 -1
- package/dist/esm/core/solana/inspect.js +0 -43
- package/dist/esm/core/solana/inspect.js.map +0 -1
- package/dist/esm/core/solana/intent-helpers.js +0 -177
- package/dist/esm/core/solana/intent-helpers.js.map +0 -1
- package/dist/esm/core/solana/order-instructions.js +0 -163
- package/dist/esm/core/solana/order-instructions.js.map +0 -1
- package/dist/esm/core/solana/sdk.js +0 -220
- package/dist/esm/core/solana/sdk.js.map +0 -1
- package/dist/esm/core/solana/utils.js +0 -19
- package/dist/esm/core/solana/utils.js.map +0 -1
- package/dist/esm/core/solana/validator.js +0 -28
- package/dist/esm/core/solana/validator.js.map +0 -1
- package/dist/esm/core/sui/cancel.js +0 -36
- package/dist/esm/core/sui/cancel.js.map +0 -1
- package/dist/esm/core/sui/client.js +0 -3
- package/dist/esm/core/sui/client.js.map +0 -1
- package/dist/esm/core/sui/cross-chain-limit-order.js +0 -26
- package/dist/esm/core/sui/cross-chain-limit-order.js.map +0 -1
- package/dist/esm/core/sui/intent-helpers.js +0 -136
- package/dist/esm/core/sui/intent-helpers.js.map +0 -1
- package/dist/esm/core/sui/order-transaction.js +0 -58
- package/dist/esm/core/sui/order-transaction.js.map +0 -1
- package/dist/esm/core/sui/sdk.js +0 -119
- package/dist/esm/core/sui/sdk.js.map +0 -1
- package/dist/esm/core/sui/single-chain-dca-order.js +0 -99
- package/dist/esm/core/sui/single-chain-dca-order.js.map +0 -1
- package/dist/esm/core/sui/single-chain-limit-order.js +0 -103
- package/dist/esm/core/sui/single-chain-limit-order.js.map +0 -1
- package/dist/esm/core/sui/validator.js +0 -31
- package/dist/esm/core/sui/validator.js.map +0 -1
- package/dist/esm/errors/index.js +0 -68
- package/dist/esm/errors/index.js.map +0 -1
- package/dist/esm/index.js +0 -38
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/types/api.js +0 -7
- package/dist/esm/types/api.js.map +0 -1
- package/dist/esm/types/intent.js +0 -2
- package/dist/esm/types/intent.js.map +0 -1
- package/dist/esm/utils/base-validator.js +0 -91
- package/dist/esm/utils/base-validator.js.map +0 -1
- package/dist/esm/utils/defillama.js +0 -104
- package/dist/esm/utils/defillama.js.map +0 -1
- package/dist/esm/utils/logger.js +0 -109
- package/dist/esm/utils/logger.js.map +0 -1
- package/dist/esm/utils/order-validator.js +0 -112
- package/dist/esm/utils/order-validator.js.map +0 -1
- package/dist/esm/utils/parsers.js +0 -28
- package/dist/esm/utils/parsers.js.map +0 -1
- package/dist/esm/utils/quote/aftermath.js +0 -15
- package/dist/esm/utils/quote/aftermath.js.map +0 -1
- package/dist/esm/utils/quote/aggregator.js +0 -254
- package/dist/esm/utils/quote/aggregator.js.map +0 -1
- package/dist/esm/utils/quote/jupiter.js +0 -31
- package/dist/esm/utils/quote/jupiter.js.map +0 -1
- package/dist/esm/utils/quote/liquidswap.js +0 -22
- package/dist/esm/utils/quote/liquidswap.js.map +0 -1
- package/dist/esm/utils/quote/paraswap.js +0 -67
- package/dist/esm/utils/quote/paraswap.js.map +0 -1
- package/dist/esm/utils/quote/stablecoins-tokens.js +0 -13
- package/dist/esm/utils/quote/stablecoins-tokens.js.map +0 -1
- package/dist/esm/utils/type-utils.js +0 -2
- package/dist/esm/utils/type-utils.js.map +0 -1
- package/dist/types/auth/siwe.d.ts +0 -13
- package/dist/types/auth/siwe.d.ts.map +0 -1
- package/dist/types/chains.d.ts +0 -62
- package/dist/types/chains.d.ts.map +0 -1
- package/dist/types/config.d.ts +0 -21
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/constants.d.ts +0 -43
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/core/evm/abi/erc20.d.ts +0 -240
- package/dist/types/core/evm/abi/erc20.d.ts.map +0 -1
- package/dist/types/core/evm/abi/permit2.d.ts +0 -304
- package/dist/types/core/evm/abi/permit2.d.ts.map +0 -1
- package/dist/types/core/evm/abi/single-chain-guard-limit.d.ts +0 -596
- package/dist/types/core/evm/abi/single-chain-guard-limit.d.ts.map +0 -1
- package/dist/types/core/evm/abi/source-chain-guard.d.ts +0 -877
- package/dist/types/core/evm/abi/source-chain-guard.d.ts.map +0 -1
- package/dist/types/core/evm/cancel-order.d.ts +0 -28
- package/dist/types/core/evm/cancel-order.d.ts.map +0 -1
- package/dist/types/core/evm/chain-provider.d.ts +0 -62338
- package/dist/types/core/evm/chain-provider.d.ts.map +0 -1
- package/dist/types/core/evm/connectors/hyperevm.d.ts +0 -38
- package/dist/types/core/evm/connectors/hyperevm.d.ts.map +0 -1
- package/dist/types/core/evm/cross-chain-limit-order.d.ts +0 -22
- package/dist/types/core/evm/cross-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/evm/intent-helpers.d.ts +0 -105
- package/dist/types/core/evm/intent-helpers.d.ts.map +0 -1
- package/dist/types/core/evm/intent-provider.d.ts +0 -19
- package/dist/types/core/evm/intent-provider.d.ts.map +0 -1
- package/dist/types/core/evm/order-signature.d.ts +0 -22
- package/dist/types/core/evm/order-signature.d.ts.map +0 -1
- package/dist/types/core/evm/permit2.d.ts +0 -261
- package/dist/types/core/evm/permit2.d.ts.map +0 -1
- package/dist/types/core/evm/sdk.d.ts +0 -63
- package/dist/types/core/evm/sdk.d.ts.map +0 -1
- package/dist/types/core/evm/single-chain-dca-order.d.ts +0 -26
- package/dist/types/core/evm/single-chain-dca-order.d.ts.map +0 -1
- package/dist/types/core/evm/single-chain-limit-order.d.ts +0 -23
- package/dist/types/core/evm/single-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/evm/types.d.ts +0 -8
- package/dist/types/core/evm/types.d.ts.map +0 -1
- package/dist/types/core/evm/validator.d.ts +0 -23
- package/dist/types/core/evm/validator.d.ts.map +0 -1
- package/dist/types/core/orders/api/fetch.d.ts +0 -3
- package/dist/types/core/orders/api/fetch.d.ts.map +0 -1
- package/dist/types/core/orders/api/index.d.ts +0 -8
- package/dist/types/core/orders/api/index.d.ts.map +0 -1
- package/dist/types/core/orders/common.d.ts +0 -12
- package/dist/types/core/orders/common.d.ts.map +0 -1
- package/dist/types/core/orders/cross-chain.d.ts +0 -125
- package/dist/types/core/orders/cross-chain.d.ts.map +0 -1
- package/dist/types/core/orders/dca-single-chain.d.ts +0 -47
- package/dist/types/core/orders/dca-single-chain.d.ts.map +0 -1
- package/dist/types/core/orders/single-chain.d.ts +0 -47
- package/dist/types/core/orders/single-chain.d.ts.map +0 -1
- package/dist/types/core/sdk.d.ts +0 -30
- package/dist/types/core/sdk.d.ts.map +0 -1
- package/dist/types/core/solana/cancel-order.d.ts +0 -18
- package/dist/types/core/solana/cancel-order.d.ts.map +0 -1
- package/dist/types/core/solana/client.d.ts +0 -11
- package/dist/types/core/solana/client.d.ts.map +0 -1
- package/dist/types/core/solana/cross-chain-limit-order.d.ts +0 -9
- package/dist/types/core/solana/cross-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/solana/dca/cancel-order.d.ts +0 -5
- package/dist/types/core/solana/dca/cancel-order.d.ts.map +0 -1
- package/dist/types/core/solana/dca/create-order.d.ts +0 -8
- package/dist/types/core/solana/dca/create-order.d.ts.map +0 -1
- package/dist/types/core/solana/dca/single-chain-dca-order.d.ts +0 -14
- package/dist/types/core/solana/dca/single-chain-dca-order.d.ts.map +0 -1
- package/dist/types/core/solana/dca/single-chain-limit-order.d.ts +0 -19
- package/dist/types/core/solana/dca/single-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/accounts/adminSingleton.d.ts +0 -40
- package/dist/types/core/solana/generated/cross-chain/accounts/adminSingleton.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/accounts/dcaOrder.d.ts +0 -110
- package/dist/types/core/solana/generated/cross-chain/accounts/dcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/accounts/guard.d.ts +0 -52
- package/dist/types/core/solana/generated/cross-chain/accounts/guard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/accounts/index.d.ts +0 -12
- package/dist/types/core/solana/generated/cross-chain/accounts/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/accounts/order.d.ts +0 -92
- package/dist/types/core/solana/generated/cross-chain/accounts/order.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/errors/index.d.ts +0 -9
- package/dist/types/core/solana/generated/cross-chain/errors/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/errors/sourceChainGuard.d.ts +0 -97
- package/dist/types/core/solana/generated/cross-chain/errors/sourceChainGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/index.d.ts +0 -13
- package/dist/types/core/solana/generated/cross-chain/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/acceptAdmin.d.ts +0 -56
- package/dist/types/core/solana/generated/cross-chain/instructions/acceptAdmin.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/cancelDcaOrder.d.ts +0 -124
- package/dist/types/core/solana/generated/cross-chain/instructions/cancelDcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/cancelOrder.d.ts +0 -108
- package/dist/types/core/solana/generated/cross-chain/instructions/cancelOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/claimTokens.d.ts +0 -131
- package/dist/types/core/solana/generated/cross-chain/instructions/claimTokens.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/collectProtocolFees.d.ts +0 -91
- package/dist/types/core/solana/generated/cross-chain/instructions/collectProtocolFees.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/createDcaOrder.d.ts +0 -130
- package/dist/types/core/solana/generated/cross-chain/instructions/createDcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/createGuard.d.ts +0 -137
- package/dist/types/core/solana/generated/cross-chain/instructions/createGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/createOrder.d.ts +0 -122
- package/dist/types/core/solana/generated/cross-chain/instructions/createOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/index.d.ts +0 -22
- package/dist/types/core/solana/generated/cross-chain/instructions/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/initialize.d.ts +0 -86
- package/dist/types/core/solana/generated/cross-chain/instructions/initialize.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/preStartOrderExecution.d.ts +0 -105
- package/dist/types/core/solana/generated/cross-chain/instructions/preStartOrderExecution.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/setAdmin.d.ts +0 -61
- package/dist/types/core/solana/generated/cross-chain/instructions/setAdmin.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/setAuctioneerPubKey.d.ts +0 -68
- package/dist/types/core/solana/generated/cross-chain/instructions/setAuctioneerPubKey.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/startOrderExecution.d.ts +0 -85
- package/dist/types/core/solana/generated/cross-chain/instructions/startOrderExecution.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/instructions/startOrderExecutionAfterSwap.d.ts +0 -95
- package/dist/types/core/solana/generated/cross-chain/instructions/startOrderExecutionAfterSwap.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/programs/index.d.ts +0 -9
- package/dist/types/core/solana/generated/cross-chain/programs/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/programs/sourceChainGuard.d.ts +0 -69
- package/dist/types/core/solana/generated/cross-chain/programs/sourceChainGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/shared/index.d.ts +0 -52
- package/dist/types/core/solana/generated/cross-chain/shared/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/adminUpdateStarted.d.ts +0 -16
- package/dist/types/core/solana/generated/cross-chain/types/adminUpdateStarted.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/adminUpdated.d.ts +0 -16
- package/dist/types/core/solana/generated/cross-chain/types/adminUpdated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/auctioneerPubkeyUpdated.d.ts +0 -17
- package/dist/types/core/solana/generated/cross-chain/types/auctioneerPubkeyUpdated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/dcaExecutionStarted.d.ts +0 -28
- package/dist/types/core/solana/generated/cross-chain/types/dcaExecutionStarted.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/dcaOrderCreated.d.ts +0 -38
- package/dist/types/core/solana/generated/cross-chain/types/dcaOrderCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/dcaOrderIntervalFulfilled.d.ts +0 -18
- package/dist/types/core/solana/generated/cross-chain/types/dcaOrderIntervalFulfilled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/dcaTokenInSwapped.d.ts +0 -24
- package/dist/types/core/solana/generated/cross-chain/types/dcaTokenInSwapped.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/executionStarted.d.ts +0 -26
- package/dist/types/core/solana/generated/cross-chain/types/executionStarted.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/failedDcaIntervalExecution.d.ts +0 -18
- package/dist/types/core/solana/generated/cross-chain/types/failedDcaIntervalExecution.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/guardCreated.d.ts +0 -19
- package/dist/types/core/solana/generated/cross-chain/types/guardCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/index.d.ts +0 -22
- package/dist/types/core/solana/generated/cross-chain/types/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/orderCancelled.d.ts +0 -16
- package/dist/types/core/solana/generated/cross-chain/types/orderCancelled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/orderCreated.d.ts +0 -32
- package/dist/types/core/solana/generated/cross-chain/types/orderCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/orderFulfilled.d.ts +0 -16
- package/dist/types/core/solana/generated/cross-chain/types/orderFulfilled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/cross-chain/types/tokenInSwapped.d.ts +0 -22
- package/dist/types/core/solana/generated/cross-chain/types/tokenInSwapped.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/accounts/adminSingleton.d.ts +0 -40
- package/dist/types/core/solana/generated/single-chain/accounts/adminSingleton.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/accounts/dcaOrder.d.ts +0 -99
- package/dist/types/core/solana/generated/single-chain/accounts/dcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/accounts/guard.d.ts +0 -48
- package/dist/types/core/solana/generated/single-chain/accounts/guard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/accounts/index.d.ts +0 -12
- package/dist/types/core/solana/generated/single-chain/accounts/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/accounts/limitOrder.d.ts +0 -79
- package/dist/types/core/solana/generated/single-chain/accounts/limitOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/errors/index.d.ts +0 -9
- package/dist/types/core/solana/generated/single-chain/errors/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/errors/singleChainGuard.d.ts +0 -71
- package/dist/types/core/solana/generated/single-chain/errors/singleChainGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/index.d.ts +0 -13
- package/dist/types/core/solana/generated/single-chain/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/acceptAdmin.d.ts +0 -56
- package/dist/types/core/solana/generated/single-chain/instructions/acceptAdmin.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/cancelDcaOrder.d.ts +0 -72
- package/dist/types/core/solana/generated/single-chain/instructions/cancelDcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/cancelLimitOrder.d.ts +0 -72
- package/dist/types/core/solana/generated/single-chain/instructions/cancelLimitOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/collectProtocolFees.d.ts +0 -91
- package/dist/types/core/solana/generated/single-chain/instructions/collectProtocolFees.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/createDcaOrder.d.ts +0 -134
- package/dist/types/core/solana/generated/single-chain/instructions/createDcaOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/createGuard.d.ts +0 -107
- package/dist/types/core/solana/generated/single-chain/instructions/createGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/createLimitOrder.d.ts +0 -126
- package/dist/types/core/solana/generated/single-chain/instructions/createLimitOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/fulfillDcaOrderInterval.d.ts +0 -179
- package/dist/types/core/solana/generated/single-chain/instructions/fulfillDcaOrderInterval.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/fulfillLimitOrder.d.ts +0 -179
- package/dist/types/core/solana/generated/single-chain/instructions/fulfillLimitOrder.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/index.d.ts +0 -20
- package/dist/types/core/solana/generated/single-chain/instructions/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/initialize.d.ts +0 -86
- package/dist/types/core/solana/generated/single-chain/instructions/initialize.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/setAdmin.d.ts +0 -61
- package/dist/types/core/solana/generated/single-chain/instructions/setAdmin.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/instructions/setAuctioneerPubKey.d.ts +0 -68
- package/dist/types/core/solana/generated/single-chain/instructions/setAuctioneerPubKey.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/programs/index.d.ts +0 -9
- package/dist/types/core/solana/generated/single-chain/programs/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/programs/singleChainGuard.d.ts +0 -63
- package/dist/types/core/solana/generated/single-chain/programs/singleChainGuard.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/shared/index.d.ts +0 -52
- package/dist/types/core/solana/generated/single-chain/shared/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/adminUpdateStarted.d.ts +0 -16
- package/dist/types/core/solana/generated/single-chain/types/adminUpdateStarted.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/adminUpdated.d.ts +0 -16
- package/dist/types/core/solana/generated/single-chain/types/adminUpdated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/auctioneerPubkeyUpdated.d.ts +0 -17
- package/dist/types/core/solana/generated/single-chain/types/auctioneerPubkeyUpdated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderCreated.d.ts +0 -38
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderFulfilled.d.ts +0 -16
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderFulfilled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderIntervalFulfilled.d.ts +0 -26
- package/dist/types/core/solana/generated/single-chain/types/dcaOrderIntervalFulfilled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/guardCreated.d.ts +0 -18
- package/dist/types/core/solana/generated/single-chain/types/guardCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/index.d.ts +0 -18
- package/dist/types/core/solana/generated/single-chain/types/index.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/limitOrderCreated.d.ts +0 -32
- package/dist/types/core/solana/generated/single-chain/types/limitOrderCreated.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/limitOrderFulfilled.d.ts +0 -20
- package/dist/types/core/solana/generated/single-chain/types/limitOrderFulfilled.d.ts.map +0 -1
- package/dist/types/core/solana/generated/single-chain/types/orderCancelled.d.ts +0 -16
- package/dist/types/core/solana/generated/single-chain/types/orderCancelled.d.ts.map +0 -1
- package/dist/types/core/solana/inspect.d.ts +0 -14
- package/dist/types/core/solana/inspect.d.ts.map +0 -1
- package/dist/types/core/solana/intent-helpers.d.ts +0 -120
- package/dist/types/core/solana/intent-helpers.d.ts.map +0 -1
- package/dist/types/core/solana/order-instructions.d.ts +0 -16
- package/dist/types/core/solana/order-instructions.d.ts.map +0 -1
- package/dist/types/core/solana/sdk.d.ts +0 -73
- package/dist/types/core/solana/sdk.d.ts.map +0 -1
- package/dist/types/core/solana/utils.d.ts +0 -7
- package/dist/types/core/solana/utils.d.ts.map +0 -1
- package/dist/types/core/solana/validator.d.ts +0 -11
- package/dist/types/core/solana/validator.d.ts.map +0 -1
- package/dist/types/core/sui/cancel.d.ts +0 -3
- package/dist/types/core/sui/cancel.d.ts.map +0 -1
- package/dist/types/core/sui/client.d.ts +0 -3
- package/dist/types/core/sui/client.d.ts.map +0 -1
- package/dist/types/core/sui/cross-chain-limit-order.d.ts +0 -14
- package/dist/types/core/sui/cross-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/sui/intent-helpers.d.ts +0 -89
- package/dist/types/core/sui/intent-helpers.d.ts.map +0 -1
- package/dist/types/core/sui/order-transaction.d.ts +0 -11
- package/dist/types/core/sui/order-transaction.d.ts.map +0 -1
- package/dist/types/core/sui/sdk.d.ts +0 -57
- package/dist/types/core/sui/sdk.d.ts.map +0 -1
- package/dist/types/core/sui/single-chain-dca-order.d.ts +0 -22
- package/dist/types/core/sui/single-chain-dca-order.d.ts.map +0 -1
- package/dist/types/core/sui/single-chain-limit-order.d.ts +0 -26
- package/dist/types/core/sui/single-chain-limit-order.d.ts.map +0 -1
- package/dist/types/core/sui/validator.d.ts +0 -11
- package/dist/types/core/sui/validator.d.ts.map +0 -1
- package/dist/types/errors/index.d.ts +0 -20
- package/dist/types/errors/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -42
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/types/api.d.ts +0 -65
- package/dist/types/types/api.d.ts.map +0 -1
- package/dist/types/types/intent.d.ts +0 -136
- package/dist/types/types/intent.d.ts.map +0 -1
- package/dist/types/utils/base-validator.d.ts +0 -46
- package/dist/types/utils/base-validator.d.ts.map +0 -1
- package/dist/types/utils/defillama.d.ts +0 -61
- package/dist/types/utils/defillama.d.ts.map +0 -1
- package/dist/types/utils/logger.d.ts +0 -35
- package/dist/types/utils/logger.d.ts.map +0 -1
- package/dist/types/utils/order-validator.d.ts +0 -64
- package/dist/types/utils/order-validator.d.ts.map +0 -1
- package/dist/types/utils/parsers.d.ts +0 -6
- package/dist/types/utils/parsers.d.ts.map +0 -1
- package/dist/types/utils/quote/aftermath.d.ts +0 -9
- package/dist/types/utils/quote/aftermath.d.ts.map +0 -1
- package/dist/types/utils/quote/aggregator.d.ts +0 -64
- package/dist/types/utils/quote/aggregator.d.ts.map +0 -1
- package/dist/types/utils/quote/jupiter.d.ts +0 -16
- package/dist/types/utils/quote/jupiter.d.ts.map +0 -1
- package/dist/types/utils/quote/liquidswap.d.ts +0 -16
- package/dist/types/utils/quote/liquidswap.d.ts.map +0 -1
- package/dist/types/utils/quote/paraswap.d.ts +0 -23
- package/dist/types/utils/quote/paraswap.d.ts.map +0 -1
- package/dist/types/utils/quote/stablecoins-tokens.d.ts +0 -11
- package/dist/types/utils/quote/stablecoins-tokens.d.ts.map +0 -1
- package/dist/types/utils/type-utils.d.ts +0 -2
- package/dist/types/utils/type-utils.d.ts.map +0 -1
- package/src/core/solana/cross-chain-limit-order.ts +0 -24
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/chains.ts","../src/errors/index.ts","../src/constants.ts","../src/core/sui/client.ts","../src/core/sui/single-chain-limit-order.ts","../src/index.ts","../src/core/orders/dca-single-chain.ts","../src/utils/order-validator.ts","../src/core/evm/validator.ts","../src/utils/base-validator.ts","../src/core/evm/abi/erc20.ts","../src/core/evm/chain-provider.ts","../src/core/evm/abi/source-chain-guard.ts","../src/core/evm/abi/permit2.ts","../src/core/evm/abi/single-chain-guard-limit.ts","../src/core/evm/connectors/hyperevm.ts","../src/core/evm/connectors/monad.ts","../src/core/solana/validator.ts","../src/core/sui/validator.ts","../src/core/sdk.ts","../src/utils/parsers.ts","../src/core/orders/cross-chain.ts","../src/core/evm/intent-provider.ts","../src/core/evm/permit2.ts","../src/core/evm/order-signature.ts","../src/core/solana/order-instructions.ts","../src/core/solana/client.ts","../src/core/solana/generated/cross-chain/accounts/order.ts","../src/core/solana/generated/cross-chain/programs/sourceChainGuard.ts","../src/core/solana/generated/cross-chain/shared/index.ts","../src/core/solana/generated/cross-chain/instructions/cancelOrder.ts","../src/core/solana/generated/cross-chain/instructions/createOrder.ts","../src/core/solana/generated/single-chain/accounts/dcaOrder.ts","../src/core/solana/generated/single-chain/accounts/limitOrder.ts","../src/core/solana/generated/single-chain/programs/singleChainGuard.ts","../src/core/solana/generated/single-chain/shared/index.ts","../src/core/solana/generated/single-chain/instructions/cancelDcaOrder.ts","../src/core/solana/generated/single-chain/instructions/cancelLimitOrder.ts","../src/core/solana/generated/single-chain/instructions/createDcaOrder.ts","../src/core/solana/generated/single-chain/instructions/createLimitOrder.ts","../src/core/solana/utils.ts","../src/core/sui/order-transaction.ts","../src/utils/quote/aggregator.ts","../src/utils/quote/jupiter.ts","../src/utils/quote/paraswap.ts","../src/utils/quote/stablecoins-tokens.ts","../src/utils/quote/aftermath.ts","../src/utils/quote/liquidswap.ts","../src/utils/quote/raydium.ts","../src/utils/quote/utils.ts","../src/utils/quote/pumpfun/index.ts","../src/utils/quote/pumpfun/utils.ts","../src/utils/quote/pumpfun/models.ts","../src/utils/quote/pumpfun/estimations.ts","../src/utils/quote/pumpfun/estimations_amm.ts","../src/utils/quote/relay.ts","../src/utils/quote/pricing/decimals.ts","../src/utils/quote/pricing/estimate-amount-out.ts","../src/utils/quote/pricing/expenses.ts","../src/utils/quote/address.ts","../src/utils/quote/pricing/gas.ts","../src/utils/quote/pricing/constants.ts","../src/core/orders/single-chain.ts","../src/core/solana/dca/create-order.ts","../src/core/evm/sdk.ts","../src/auth/siwe.ts","../src/core/solana/sdk.ts","../src/core/solana/cancel-order.ts","../src/core/solana/dca/cancel-order.ts","../src/core/sui/sdk.ts","../src/core/sui/cancel.ts","../src/core/orders/api/index.ts","../src/core/orders/api/fetch.ts","../src/types/api.ts","../src/utils/defillama.ts","../src/core/evm/cancel-order.ts","../src/core/solana/inspect.ts","../src/utils/logger.ts","../src/core/sui/single-chain-dca-order.ts","../src/utils/generate-execution-details-hash.ts","../src/core/sui/intent-helpers.ts","../src/core/evm/single-chain-dca-order.ts","../src/core/evm/types.ts","../src/core/evm/single-chain-limit-order.ts","../src/core/solana/dca/single-chain-dca-order.ts","../src/core/solana/dca/single-chain-limit-order.ts","../src/utils/tokens/index.ts","../src/core/evm/intent-helpers.ts","../src/core/solana/intent-helpers.ts"],"sourcesContent":["import type { TupleToUnion } from './utils/type-utils.js';\n\n/**\n * Represents the blockchain platform type\n * Used to distinguish between different blockchain ecosystems\n */\nexport enum ChainType {\n EVM = 'EVM',\n Solana = 'Solana',\n Sui = 'Sui',\n}\n\n/**\n * Enum of chain IDs for supported blockchains\n * EVM chains use their standard chain IDs\n * Non-EVM chains use custom assigned IDs\n */\nexport enum ChainID {\n Arbitrum = 42161,\n Optimism = 10,\n Base = 8453,\n Hyperliquid = 999,\n Solana = 7565164,\n Sui = 101,\n BSC = 56,\n MONAD = 143,\n}\n\n/**\n * Array of chain IDs that are supported by the SDK\n * Used as a source of truth for type generation\n */\nexport const SupportedChains = [\n ChainID.Arbitrum,\n ChainID.Base,\n ChainID.Optimism,\n ChainID.Hyperliquid,\n ChainID.Solana,\n ChainID.Sui,\n ChainID.BSC,\n ChainID.MONAD\n] as const;\n\n/**\n * Type utility to identify chains not in the SupportedChains array\n * @internal\n */\ntype UnsupportedChain = Exclude<ChainID, TupleToUnion<typeof SupportedChains>>;\n\n/**\n * Type representing chains that are supported by the SDK\n * Derived from the SupportedChains array\n */\nexport type SupportedChain = Exclude<ChainID, UnsupportedChain>;\n\nexport type SupportedSolanaChain = 7565164;\nexport type SupportedSuiChain = 101;\nexport type SupportedEvmChain = Exclude<ChainID, SupportedSolanaChain | SupportedSuiChain>;\n\nexport function isEvmChain(chainId: ChainID): chainId is SupportedEvmChain {\n return chainId !== ChainID.Solana && chainId !== ChainID.Sui;\n}\n\n/**\n * Type guard that checks if a chain ID is among the supported chains\n * @param chain - The chain ID to check\n * @returns Boolean indicating if the chain is supported\n */\nexport const isSupportedChain = (chain: unknown): chain is SupportedChain => {\n if (typeof chain !== 'number') return false;\n return (SupportedChains as readonly number[]).includes(chain);\n};\n\n/**\n * Maps chain IDs to their corresponding chain types\n * Used to determine which SDK implementation to use for a given chain\n */\nexport const chainIdToChainTypeMap = {\n [ChainID.Arbitrum]: ChainType.EVM,\n [ChainID.Base]: ChainType.EVM,\n [ChainID.Optimism]: ChainType.EVM,\n [ChainID.Hyperliquid]: ChainType.EVM,\n [ChainID.Solana]: ChainType.Solana,\n [ChainID.Sui]: ChainType.Sui,\n [ChainID.BSC]: ChainType.EVM,\n [ChainID.MONAD]: ChainType.EVM,\n} as const;\n","export class BaseError extends Error {\n constructor(\n message: string,\n public override readonly cause?: unknown,\n ) {\n super(message);\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, BaseError.prototype);\n }\n\n // Format the error for logging/debugging\n public toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n cause: this.formatCause(),\n };\n }\n\n private formatCause(): unknown {\n if (this.cause instanceof Error) {\n if ('toJSON' in this.cause && typeof this.cause.toJSON === 'function') {\n return this.cause.toJSON();\n }\n return {\n name: this.cause.name,\n message: this.cause.message,\n ...(this.cause.stack && { stack: this.cause.stack }),\n };\n }\n return this.cause;\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\nexport class NetworkError extends BaseError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\nexport class InsufficientBalanceError extends BaseError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n Object.setPrototypeOf(this, InsufficientBalanceError.prototype);\n }\n}\n\nexport class InsufficientAllowanceError extends BaseError {\n constructor(message: string, cause?: unknown) {\n super(message, cause);\n Object.setPrototypeOf(this, InsufficientAllowanceError.prototype);\n }\n}\n\nexport function handleError(error: unknown): BaseError {\n if (error instanceof BaseError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new BaseError(error.message, error);\n }\n\n return new BaseError(\n typeof error === 'string' ? error : 'Unknown error occurred',\n\n error,\n );\n}\n","import { type Address as SolanaAddress } from '@solana/kit';\nimport type { Address as EvmAddress } from 'viem';\nimport type { SupportedChain, SupportedEvmChain, SupportedSuiChain } from './chains.js';\nimport { ChainID } from './chains.js';\n\nconst useProdConfig = true;\n\nexport enum IntentsOrderType {\n CROSS_CHAIN_LIMIT = 'CROSS_CHAIN_LIMIT',\n SINGLE_CHAIN_LIMIT = 'SINGLE_CHAIN_LIMIT',\n}\n\nexport const PERMIT2_ADDRESS: Record<SupportedEvmChain, EvmAddress> = {\n [ChainID.Arbitrum]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n [ChainID.Optimism]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n [ChainID.Base]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n [ChainID.Hyperliquid]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n [ChainID.BSC]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n [ChainID.MONAD]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress,\n};\n\n// Production guard addresses\nexport const PROD_CROSS_CHAIN_GUARD_ADDRESSES: Record<SupportedChain, SolanaAddress | EvmAddress> = {\n [ChainID.Arbitrum]: '0x7f23f071be7d3161c026ae49289d34f3e7b89992' as EvmAddress,\n [ChainID.Optimism]: '0x8c29c82c65a0a58311f0e8967580e08e548c4614' as EvmAddress,\n [ChainID.Base]: '0x165d1187acf51a96faf6908e5d5cc459fe21fdba' as EvmAddress,\n [ChainID.Hyperliquid]: '0xe5329801f8c0ee293286e8be253d009b01d4e54e' as EvmAddress,\n [ChainID.Solana]:\n 'AiTqNSZe6Nxs2myiUX1cP6YfiER3v2pWuMYMSLYcrpyo' as SolanaAddress<'AiTqNSZe6Nxs2myiUX1cP6YfiER3v2pWuMYMSLYcrpyo'>,\n [ChainID.Sui]: '0x70d005df81d0fd7f7a7aaf87fa8676bff427f7202897b373bbf3d5bf0a8792de',\n [ChainID.BSC]: '0x18bab93fad2a790a6635553451307d309b1de2b4' as EvmAddress,\n [ChainID.MONAD]: '0x4E657A1386A6DB821cE764625Fb24BFbB54eA12E' as EvmAddress,\n};\n\n// Test guard addresses\nexport const TEST_CROSS_CHAIN_GUARD_ADDRESSES: Record<SupportedChain, SolanaAddress | EvmAddress> = {\n [ChainID.Arbitrum]: '0x7bd7c00c10bc8803d2a9384045becec39d556e6b' as EvmAddress,\n [ChainID.Optimism]: '0x179723d1c995bb7bb01778bacc07ef16a9987933' as EvmAddress,\n [ChainID.Base]: '0x8abb64e61923e235740b557c6c6b7b8e2fbf95a3' as EvmAddress,\n [ChainID.Hyperliquid]: '0x8eb7cee346aa7509804cec5c6dc34c94de586bba' as EvmAddress,\n [ChainID.Solana]:\n '97XuksD34dyU3qyPDNwQ8qfPw1zHoUa7xVxBVdojSJ7E' as SolanaAddress<'97XuksD34dyU3qyPDNwQ8qfPw1zHoUa7xVxBVdojSJ7E'>,\n [ChainID.Sui]: '0x47f2934f621483bc485feeb78972dd2fb25840074e296fffb9e64f9bde6d2ff1',\n [ChainID.BSC]: '0x41E46ea2a85E49c28A0cE313B4F7a6AEC1AfD852' as EvmAddress,\n [ChainID.MONAD]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n};\n\n// Prod guard addresses\nexport const PROD_SINGLE_CHAIN_GUARD_ADDRESSES: Record<\n Exclude<ChainID, SupportedSuiChain>,\n SolanaAddress | EvmAddress\n> = {\n [ChainID.Arbitrum]: '0x0' as EvmAddress,\n [ChainID.Optimism]: '0xdcbb658910b5192a43b79fd8244bdf27940d3b6b' as EvmAddress,\n [ChainID.Base]: '0x449808a27f42518c57791d4c2c6626f0069a0ed9' as EvmAddress,\n [ChainID.Hyperliquid]: '0x618ee9b6829261108d811b91581e00da192b0b75' as EvmAddress,\n [ChainID.Solana]:\n 'CwWkajHjBCWMKZdwR5D1P5M6Fgf9dAyxqZ1qDZgZGo1e' as SolanaAddress<'CwWkajHjBCWMKZdwR5D1P5M6Fgf9dAyxqZ1qDZgZGo1e'>,\n [ChainID.BSC]: '0xA69c47F93Ccc5BcCdc4b3c71646F61Fa5baa3323' as EvmAddress,\n [ChainID.MONAD]: '0x8CBaa5Db68C1dC5485DbC8dd1f86b089614926E7' as EvmAddress,\n};\n\n// Test guard addresses\nexport const TEST_SINGLE_CHAIN_GUARD_ADDRESSES: Record<\n Exclude<ChainID, SupportedSuiChain>,\n SolanaAddress | EvmAddress\n> = {\n [ChainID.Arbitrum]: '0x0' as EvmAddress,\n [ChainID.Optimism]: '0x0' as EvmAddress,\n [ChainID.Base]: '0x5602cedc725564694162a320c5bb91b5b4b25fca' as EvmAddress,\n [ChainID.Hyperliquid]: '0x6a2f41f905035fa89b7329c0661061b580b1eb92' as EvmAddress,\n [ChainID.Solana]:\n '4wi5wsgSs9q9WV55s9AvKWTdeMNPcDXhzcbx5SoRRFcg' as SolanaAddress<'4wi5wsgSs9q9WV55s9AvKWTdeMNPcDXhzcbx5SoRRFcg'>,\n [ChainID.BSC]: '0xBc68262535d2a8D42bA80c9bbF5299DfbfEc0040' as EvmAddress,\n [ChainID.MONAD]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n};\n\nexport const PROD_DCA_SINGLE_CHAIN_GUARD_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = {\n [ChainID.Arbitrum]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n [ChainID.Optimism]: '0x1b754840f058b78e412156d2674b5954728cb86e' as EvmAddress,\n [ChainID.Base]: '0x2df3ab1bb8b9d48769718003de2d8ca8e9d3c465' as EvmAddress,\n // HyperEVM SingleChainGuardDca per the on-chain deployment + auctioneer config.\n // (0x618ee9… is the SingleChainGuardLimit, which previously sat here by mistake.)\n [ChainID.Hyperliquid]: '0xdcbb658910b5192a43b79fd8244bdf27940d3b6b' as EvmAddress,\n [ChainID.BSC]: '0x11ef880e2e8d17c114b9eb87369ce3d1311c62e1' as EvmAddress,\n [ChainID.MONAD]: '0x418302C3bef14D405A9B30381a9cb9d4d82EB2d4' as EvmAddress,\n};\n\nexport const PROD_DCA_CROSS_CHAIN_GUARD_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = {\n [ChainID.Base]: '0x10fcdfdf20b4488f7da9036aa421ee51db6d436c' as EvmAddress,\n [ChainID.Arbitrum]: '0xfd1bf54b0058240325cd865638444806146682b1' as EvmAddress,\n [ChainID.BSC]: '0xaa704102bf25d4c87b0efc544c6008ed187ba011' as EvmAddress,\n [ChainID.Hyperliquid]: '0xffef1e5af589e251d539576869d2a977846c85a2' as EvmAddress,\n [ChainID.Optimism]: '0x386b310f137febfff79f72201dedef81501c1029' as EvmAddress,\n [ChainID.MONAD]: '0x68D338b4a1499D93bcD2A9D3C921c8472cA4cE4e' as EvmAddress,\n\n};\n\n// Test guard addresses\nexport const TEST_DCA_SINGLE_CHAIN_GUARD_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = {\n [ChainID.Arbitrum]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n [ChainID.Optimism]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n [ChainID.Base]: '0x79fd6a458066396c8938823049b6e614ce6b71f2' as EvmAddress,\n [ChainID.Hyperliquid]: '0x5156e6c7b7a1c60ed4d6b2175f88f1f6875c78d8' as EvmAddress,\n [ChainID.BSC]: '0x25c283094f9EDA9F1455a1ecbEEf10c69311D962' as EvmAddress,\n [ChainID.MONAD]: '0x0000000000000000000000000000000000000000' as EvmAddress,\n};\n\nexport const CROSS_CHAIN_GUARD_ADDRESSES = useProdConfig\n ? PROD_CROSS_CHAIN_GUARD_ADDRESSES\n : TEST_CROSS_CHAIN_GUARD_ADDRESSES;\n\nexport const SINGLE_CHAIN_GUARD_ADDRESSES = useProdConfig\n ? PROD_SINGLE_CHAIN_GUARD_ADDRESSES\n : TEST_SINGLE_CHAIN_GUARD_ADDRESSES;\n\nexport const DCA_SINGLE_CHAIN_GUARD_ADDRESSES = useProdConfig\n ? PROD_DCA_SINGLE_CHAIN_GUARD_ADDRESSES\n : TEST_DCA_SINGLE_CHAIN_GUARD_ADDRESSES;\n\n// No separate test deployment is configured for cross-chain DCA guards yet; prod values\n// match the auctioneer's `cross_chain.guard_dca` config and are used in both modes.\nexport const DCA_CROSS_CHAIN_GUARD_ADDRESSES = PROD_DCA_CROSS_CHAIN_GUARD_ADDRESSES;\n\nexport const NATIVE_SOLANA_TOKEN_ADDRESS =\n 'So11111111111111111111111111111111111111111' as SolanaAddress<'So11111111111111111111111111111111111111111'>;\nexport const WRAPPED_SOL_MINT_ADDRESS =\n 'So11111111111111111111111111111111111111112' as SolanaAddress<'So11111111111111111111111111111111111111112'>;\n\ntype SolanaMint = {\n name: string;\n mint: string;\n decimals: number;\n};\n\nexport const SOLANA_USDC_MINT = {\n name: 'USDC',\n mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n} as SolanaMint;\n\nexport const SOLANA_MINT_TOKEN = SOLANA_USDC_MINT;\n\nexport const PROD_SUI_PACKAGE_ID = '0x2c9b6a7a018f2f02663a1b2247e7e53d0bf832b30ab9534c49699a78a2f659f2'; // '0x9c0c9b7f5ddf7efbde76571783ef4a8a26b36ae5c2ef2eeba8fbc604a29cb195';\nexport const TEST_SUI_PACKAGE_ID = '0x2c9b6a7a018f2f02663a1b2247e7e53d0bf832b30ab9534c49699a78a2f659f2';\nexport const SUI_PACKAGE_ID = useProdConfig ? PROD_SUI_PACKAGE_ID : TEST_SUI_PACKAGE_ID;\n\nexport const SUI_GUARD_COLLATERAL_TYPE =\n '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC';\n\nexport const SUI_GUARD_STABLECOIN_TYPE =\n '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC';\n\n// `INTENTS_AUCTIONEER_URL` overrides the default endpoint (e.g. to target a locally\n// running auctioneer) without touching the committed `useProdConfig` flag. Guarded so it\n// is a no-op in browser bundles where `process` is undefined.\nconst auctioneerUrlOverride =\n typeof process !== 'undefined' ? process.env?.INTENTS_AUCTIONEER_URL : undefined;\n\nexport const AUCTIONEER_URL =\n auctioneerUrlOverride ||\n (useProdConfig ? 'https://auctioneer-825534211396.us-central1.run.app' : 'http://127.0.0.1:8080');\n\nexport const MAX_UINT_32 = 2n ** 32n - 1n;\nexport const MAX_UINT_64 = 2n ** 64n - 1n;\nexport const MAX_UINT_128 = 2n ** 128n - 1n;\nexport const MAX_UINT_256 = 2n ** 256n - 1n;\n\nexport const NATIVE_EVM_ETH_ADDRESSES = [\n '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n '0x0000000000000000000000000000000000000000',\n];\n\nexport const WRAPPED_ETH_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = {\n [ChainID.Arbitrum]: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' as EvmAddress,\n [ChainID.Optimism]: '0x4200000000000000000000000000000000000006' as EvmAddress,\n [ChainID.Base]: '0x4200000000000000000000000000000000000006' as EvmAddress,\n [ChainID.Hyperliquid]: '0x5555555555555555555555555555555555555555' as EvmAddress,\n [ChainID.BSC]: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' as EvmAddress,\n [ChainID.MONAD]: '0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A' as EvmAddress,\n};\n\nexport const NATIVE_SUI_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI';\n\nexport function isNativeEvmToken(tokenAddress: string): boolean {\n const normalizedAddress = tokenAddress.toLowerCase();\n\n return NATIVE_EVM_ETH_ADDRESSES.some((addr) => addr.toLowerCase() === normalizedAddress);\n}\n\nexport const EVM_ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as EvmAddress;\n\n/** Placeholder signature (32 zero bytes) for unsigned/validate-only intent requests. */\nexport const EVM_ZERO_SIGNATURE = '0x0000000000000000000000000000000000000000000000000000000000000000';\n\n/**\n * Output-token addresses must be normalized to the zero address before signing the EIP-712\n * witness: the auctioneer collapses any native sentinel (`0xeee…`/`0x0…`) to `Address::default()`\n * when it reconstructs `requestedOutput`/`extraTransfers` to recover the signer. Signing the raw\n * sentinel instead would yield a different hash → signature recovery fails. (`tokenIn` is NOT\n * normalized on either side, so leave it untouched.)\n */\nexport function normalizeNativeEvmTokenForSigning(tokenAddress: string): string {\n return isNativeEvmToken(tokenAddress) ? EVM_ZERO_ADDRESS : tokenAddress;\n}\n\nexport const TOKEN_SEARCH_API_BASE_URL = 'https://shogun-token-search-api-825534211396.europe-west4.run.app';\n","import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';\n\nexport const createSuiClient = () => new SuiClient({ url: getFullnodeUrl('mainnet') });\n","import { bcs, fromHex } from '@mysten/bcs';\nimport { normalizeStructTag, normalizeSuiAddress, normalizeSuiObjectId } from '@mysten/sui/utils';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { ValidationError } from '../../errors/index.js';\nimport { createSuiClient } from './client.js';\nimport {\n SUI_PACKAGE_ID,\n SUI_GUARD_COLLATERAL_TYPE,\n SUI_GUARD_STABLECOIN_TYPE,\n NATIVE_SUI_TOKEN_ADDRESS,\n} from '../../constants.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport pkg from 'js-sha3';\nconst { keccak256 } = pkg;\n/**\n * Generates random U64 number\n */\nexport function getRandomU64Number() {\n return BigInt('0x' + [...crypto.getRandomValues(new Uint8Array(8))].map((n) => n.toString(16)).join('')).toString();\n}\n\n/**\n * Generates secret hash based on types, addresses and secret number for single chain limit orders\n * @param coinOutType Type tag of Coin OUT\n * @param receiver Main Coins OUT receiver\n * @param secretNumber Secret number, for hash randomness\n * @param extraTransferCoinOut Type tag of extra transfer coin OUT\n * @param extraTransferReceiver Receiver of extra transfer\n */\nexport function getSecretHash(\n coinOutType: string,\n receiver: string,\n secretNumber: string,\n extraTransferCoinOut?: string,\n extraTransferReceiver?: string,\n) {\n const coinOutTypeBytes = Buffer.from(normalizeStructTag(coinOutType).replace('0x', ''), 'utf8');\n const receiverBytes = fromHex(normalizeSuiAddress(receiver));\n\n let resBytes = [...coinOutTypeBytes, ...receiverBytes];\n if (extraTransferCoinOut && extraTransferReceiver) {\n const extraTransferCoinOutBytes = Buffer.from(normalizeStructTag(extraTransferCoinOut).replace('0x', ''), 'utf8');\n const extraTransferReceiverBytes = fromHex(normalizeSuiAddress(extraTransferReceiver));\n\n resBytes = [...resBytes, ...extraTransferCoinOutBytes, ...extraTransferReceiverBytes];\n }\n\n resBytes = [...resBytes, ...bcs.u64().serialize(secretNumber).toBytes()];\n\n return keccak256.array(resBytes);\n}\n\n/**\n * Generates Sui single-chain limit order transaction\n * @param order The single-chain order to generate transaction for\n * @param secretHash The secret hash for the order\n * @param guardAddress The guard contract address\n * @param client The Sui client instance\n * @returns Transaction object for creating the limit order\n */\nexport async function getSuiSingleChainLimitOrderTransaction(\n order: SingleChainOrder,\n secretHash: Uint8Array,\n guardAddress: string,\n client?: ReturnType<typeof createSuiClient>,\n): Promise<Transaction> {\n const userAddress = order.user;\n const suiClient = client || createSuiClient();\n const coins = await suiClient.getCoins({\n owner: userAddress,\n coinType: order.tokenIn,\n });\n\n const sourceTokenInCoins = coins.data.sort((a, b) => Number(b.balance) - Number(a.balance));\n\n if (sourceTokenInCoins.length === 0) {\n throw new ValidationError(`No token (${order.tokenIn}) to create order`);\n }\n\n const coinsInSum = sourceTokenInCoins.reduce((acc, coin) => acc + BigInt(coin.balance), 0n);\n\n if (coinsInSum < order.amountIn) {\n throw new ValidationError(\n `Insufficient balance to create order. Total coins is ${coinsInSum}, but order requires ${order.amountIn}`,\n );\n }\n\n const spendingGasCoin = normalizeSuiObjectId(order.tokenIn) === normalizeSuiObjectId(NATIVE_SUI_TOKEN_ADDRESS);\n\n const tx = new Transaction();\n const coinInArg = spendingGasCoin ? tx.gas : sourceTokenInCoins[0]!.coinObjectId;\n\n if (sourceTokenInCoins.length > 1) {\n // Merging coins IN into a single object just in case\n tx.mergeCoins(\n // merge into 1st coin object\n coinInArg,\n // merge the rest of coins\n sourceTokenInCoins.slice(1).map((coin) => coin.coinObjectId),\n );\n }\n\n const [coinIn] = tx.splitCoins(coinInArg, [order.amountIn]);\n\n // Get extra transfer amount - only first extra transfer is supported on Sui\n const extraTransferAmount =\n order.extraTransfers && order.extraTransfers.length > 0 ? BigInt(order.extraTransfers[0]!.amount) : 0n;\n\n tx.moveCall({\n package: SUI_PACKAGE_ID,\n module: 'single_chain_limit_orders',\n function: 'create_limit_order',\n arguments: [\n tx.object(guardAddress), // arg0: &Guard<T0, T2>\n coinIn, // arg1: Coin<T1>\n tx.pure.u64(order.amountOutMin), // arg2: amount_out_min\n tx.pure.u64(extraTransferAmount), // arg3: extra_transfer_amount_out_min\n tx.pure.u64(order.deadline * 1000), // arg4: deadline (converted to milliseconds)\n tx.pure.vector('u8', [...secretHash]), // arg5: secret_hash\n tx.object.clock(), // arg6: &Clock\n ],\n typeArguments: [SUI_GUARD_COLLATERAL_TYPE, order.tokenIn, SUI_GUARD_STABLECOIN_TYPE],\n });\n\n tx.setSender(userAddress);\n\n return tx;\n}\n","export { DcaSingleChainOrder, type CreateDcaSingleChainOrderParams } from './core/orders/dca-single-chain.js';\n\nexport { ChainID, ChainType, SupportedChains, isSupportedChain, chainIdToChainTypeMap, isEvmChain } from './chains.js';\nexport type { SupportedEvmChain, SupportedChain } from './chains.js';\n\nexport type { EVMConfig, SolanaConfig, SuiConfig } from './config.js';\nexport { EVMSDK } from './core/evm/sdk.js';\nexport { SolanaSDK } from './core/solana/sdk.js';\nexport { SuiSDK } from './core/sui/sdk.js';\nexport { CrossChainOrder } from './core/orders/cross-chain.js';\nexport type { CreateCrossChainOrderParams } from './core/orders/cross-chain.js';\nexport { SingleChainOrder } from './core/orders/single-chain.js';\nexport type { CreateSingleChainOrderParams } from './core/orders/single-chain.js';\nexport type { StopLossType } from './core/orders/common.js';\n\nexport { fetchUserOrders, type FetchUserOrdersParams } from './core/orders/api/fetch.js';\nexport { AuctioneerAPI, type GetUserOrdersParams } from './core/orders/api/index.js';\nexport { type FetchJWTParams, type FetchSiweMessageParams, fetchJWTToken, fetchSiweMessage } from './auth/siwe.js';\nexport { ValidationError } from './errors/index.js';\nexport {\n type ApiCrossChainOrder,\n type ApiResponse,\n type ApiSingleChainOrder,\n type ApiUserOrders,\n type ChainOrderStatus,\n type ApiIntentResponse,\n isErrorApiResponse,\n isSuccessApiResponse,\n} from './types/api.js';\nexport { calculateAmounts, getCoinFromResponse, getTokensData } from './utils/defillama.js';\nexport type { DefiLlamaCoinData, DefiLlamaTokensResponse } from './utils/defillama.js';\nexport {\n getCancelCrossChainOrderRawData,\n getCancelSingleChainOrderRawData,\n type CancelSingleChainOrderParams,\n type CancelCrossChainOrderParams,\n getInvalidateNoncesRawData,\n} from './core/evm/cancel-order.js';\nexport { cancelDcaSingleChainOrderInstructions } from './core/solana/dca/cancel-order.js';\nexport { getEVMCrossChainOrderTypedData, getEVMSingleChainOrderTypedData } from './core/evm/order-signature.js';\n\nexport { getSolanaOrdersWithLockedFunds } from './core/solana/inspect.js';\n\nexport {\n getSolanaCrossChainOrderInstructions,\n getSolanaSingleChainOrderInstructions,\n type SolanaOrderInstructionResult,\n} from './core/solana/order-instructions.js';\nexport {\n cancelCrossChainOrderInstructionsAsBytes,\n cancelSingleChainOrderInstructionsAsBytes,\n} from './core/solana/cancel-order.js';\nexport { getSuiOrderTransaction } from './core/sui/order-transaction.js';\nexport { getSuiCancelCrossChainOrder } from './core/sui/cancel.js';\nexport { getDcaSecretHash, getSuiSingleChainDcaOrderTransaction } from './core/sui/single-chain-dca-order.js';\nexport {\n getSecretHash,\n getRandomU64Number as getSuiRandomU64Number,\n getSuiSingleChainLimitOrderTransaction,\n} from './core/sui/single-chain-limit-order.js';\nexport { generateExecutionDetailsHash } from './utils/generate-execution-details-hash.js';\nexport {\n createSuiSingleChainLimitOrderIntentRequest,\n createSuiSingleChainDcaOrderIntentRequest,\n createSuiCrossChainOrderIntentRequest,\n generateSuiLimitOrderSecretData,\n generateSuiDcaOrderSecretData,\n type CreateSuiSingleChainLimitOrderIntentParams,\n type CreateSuiSingleChainDcaOrderIntentParams,\n type CreateSuiCrossChainOrderIntentParams,\n} from './core/sui/intent-helpers.js';\n\nexport * from './constants.js';\n\nexport { getSolanaDcaSingleChainOrderInstructions } from './core/solana/dca/create-order.js';\n\nexport { signSingleChainDcaOrder } from './core/evm/single-chain-dca-order.js';\nexport { signSingleChainLimitOrder } from './core/evm/single-chain-limit-order.js';\n\nexport { QuoteProvider, type IntentsQuoteParams, type QuoteResponse } from './utils/quote/aggregator.js';\n\nexport { CROSS_CHAIN_GUARD_ADDRESSES, SINGLE_CHAIN_GUARD_ADDRESSES, PERMIT2_ADDRESS } from './constants.js';\n\nexport { prepareDcaSecretData } from './core/solana/dca/single-chain-dca-order.js';\nexport { prepareSecretData } from './core/solana/dca/single-chain-limit-order.js';\n\n// Token List and Search Helper\nexport { getTokenList } from './utils/tokens/index.js';\nexport { type TokenSearchParams, type TokenInfo, type TokenSearchResponse } from './types/token-list.js';\n\n// EVM Intent Helpers\nexport {\n createEvmSingleChainLimitOrderIntentRequest,\n createEvmSingleChainDcaOrderIntentRequest,\n createEvmCrossChainOrderIntentRequest,\n createEvmCrossChainDcaOrderIntentRequest,\n generateEvmSingleChainLimitOrderTypedData,\n generateEvmSingleChainDcaOrderTypedData,\n generateEvmCrossChainOrderTypedData,\n getEVMCrossChainDcaOrderTypedData,\n generateEvmRandomNonce,\n type CreateEvmSingleChainLimitOrderIntentParams,\n type CreateEvmSingleChainDcaOrderIntentParams,\n type CreateEvmCrossChainOrderIntentParams,\n type CreateEvmCrossChainDcaOrderIntentParams,\n} from './core/evm/intent-helpers.js';\n\n// Solana Intent Helpers\nexport {\n createSolanaSingleChainLimitOrderIntentRequest,\n createSolanaSingleChainDcaOrderIntentRequest,\n createSolanaCrossChainOrderIntentRequest,\n generateSolanaSingleChainLimitOrderInstructions,\n generateSolanaSingleChainDcaOrderInstructions,\n generateSolanaCrossChainOrderInstructions,\n generateSolanaLimitOrderSecretData,\n generateSolanaDcaOrderSecretData,\n generateSolanaRandomSecretNumber,\n type CreateSolanaSingleChainLimitOrderIntentParams,\n type CreateSolanaSingleChainDcaOrderIntentParams,\n type CreateSolanaCrossChainOrderIntentParams,\n} from './core/solana/intent-helpers.js';\n","// src/core/orders/dca-single-chain.ts\nimport { ChainID, chainIdToChainTypeMap, isEvmChain, type SupportedChain } from '../../chains.js';\nimport { ValidationError } from '../../errors/index.js';\nimport type { ApiResponse } from '../../types/api.js';\nimport type { DcaSingleChainPreparedData, DcaSingleChainUserIntentRequest } from '../../types/intent.js';\nimport { DcaSingleChainOrderValidator } from '../../utils/order-validator.js';\nimport { BaseSDK } from '../sdk.js';\nimport { getEVMDcaSingleChainOrderTypedData } from '../evm/order-signature.js';\nimport { type ExtraTransfer } from './common.js';\nimport { getSolanaDcaSingleChainOrderInstructions } from '../solana/dca/create-order.js';\n\nexport type CreateDcaSingleChainOrderParams = {\n chainId: SupportedChain;\n tokenIn: string;\n tokenOut: string;\n destinationAddress: string;\n startTime: number;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n amountOutMin?: bigint;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n};\n\nexport class DcaSingleChainOrder {\n public user: string;\n public chainId: SupportedChain;\n public tokenIn: string;\n public tokenOut: string;\n public destinationAddress: string;\n public startTime: number;\n public amountInPerInterval: bigint | number;\n public totalIntervals: number;\n public intervalDuration: number;\n public amountOutMin: bigint | number;\n public extraTransfers?: ExtraTransfer[];\n public deadline: number;\n\n private constructor(params: CreateDcaSingleChainOrderParams & { user: string }) {\n this.user = params.user;\n this.chainId = params.chainId;\n this.tokenIn = params.tokenIn;\n this.tokenOut = params.tokenOut;\n this.destinationAddress = params.destinationAddress;\n this.startTime = params.startTime;\n this.amountInPerInterval = params.amountInPerInterval;\n this.totalIntervals = params.totalIntervals;\n this.intervalDuration = params.intervalDuration;\n this.amountOutMin = params.amountOutMin ?? 1n;\n this.extraTransfers = params.extraTransfers;\n this.deadline = params.deadline;\n }\n\n public static async create(input: CreateDcaSingleChainOrderParams & { user: string }): Promise<DcaSingleChainOrder> {\n new DcaSingleChainOrderValidator().validateOrder(input);\n\n const order = new DcaSingleChainOrder({\n ...input,\n user: input.user,\n });\n\n if (isEvmChain(order.chainId)) {\n return order;\n }\n\n const preparedRandomData = order.getRandomPreparedData();\n const intentRequest = order.toIntentRequest(preparedRandomData);\n await BaseSDK.validateDcaSingleChainOrder(intentRequest);\n\n return order;\n }\n\n /// This is needed because API requires the prepared data to be sent\n /// In the cases of Solana and Sui, if we want the real data, we must send the order on-chain before validating.\n /// And that is something we cannot do before validating the order on the API side.\n private getRandomPreparedData(): DcaSingleChainPreparedData {\n const chainId = this.chainId;\n const chainType = chainIdToChainTypeMap[chainId];\n\n const randomNumber = String(Math.floor(Math.random() * 10000000));\n\n switch (chainType) {\n case 'EVM': {\n return {\n nonce: randomNumber,\n signature: '0x0000000000000000000000000000000000000000000000000000000000000000',\n };\n }\n case 'Solana': {\n return {\n secretNumber: randomNumber,\n orderPubkey: 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc',\n };\n }\n case 'Sui': {\n return {\n secretNumber: randomNumber,\n transactionHash: '0x0000000000000000000000000000000000000000000000000000000000000000',\n };\n }\n\n default: {\n throw new Error('Chain type not supported');\n }\n }\n }\n\n public getTotalAmountIn(): bigint {\n return BigInt(this.amountInPerInterval) * BigInt(this.totalIntervals);\n }\n\n public toIntentRequest(preparedData: DcaSingleChainPreparedData): DcaSingleChainUserIntentRequest {\n const sourceChainType = chainIdToChainTypeMap[this.chainId];\n\n return {\n genericData: this,\n chainSpecificData: {\n [sourceChainType]: preparedData,\n },\n };\n }\n\n public sendToAuctioneer(preparedData: DcaSingleChainPreparedData): Promise<ApiResponse> {\n return BaseSDK.sendDcaSingleChainOrder({\n order: this,\n preparedData,\n });\n }\n\n public async toEVMTypedData() {\n if (!isEvmChain(this.chainId)) {\n throw new ValidationError('Chain id is not an Ethereum compatible chain');\n }\n\n return getEVMDcaSingleChainOrderTypedData(this);\n }\n\n public async toSolanaInstructionsByteArray() {\n if (this.chainId !== ChainID.Solana) {\n throw new ValidationError('Chain id is not Solana');\n }\n\n return getSolanaDcaSingleChainOrderInstructions(this);\n }\n}\n","import { ChainType, chainIdToChainTypeMap, type SupportedChain } from '../chains.js';\nimport { EvmValidator } from '../core/evm/validator.js';\nimport type { CreateCrossChainOrderParams } from '../core/orders/cross-chain.js';\nimport type { CreateSingleChainOrderParams } from '../core/orders/single-chain.js';\nimport { SolanaValidator } from '../core/solana/validator.js';\nimport { SuiValidator } from '../core/sui/validator.js';\nimport { ValidationError } from '../errors/index.js';\n\nexport interface IAddressValidator {\n isValidAddress(address: string): boolean;\n}\n\nexport interface ITokenValidator {\n isValidTokenAddress(tokenAddress: string): boolean;\n}\n\nexport interface IAmountValidator {\n isValidAmount(amount: bigint): boolean;\n}\n\nexport interface IDeadlineValidator {\n isValidDeadline(deadline: number): boolean;\n}\n\nexport interface IChainValidator extends IAddressValidator, ITokenValidator, IAmountValidator {\n validateSourceChain(order: CreateCrossChainOrderParams & { user: string }): Promise<void>;\n validateDestinationChain(order: CreateCrossChainOrderParams): void;\n validateSingleChainOrder(order: CreateSingleChainOrderParams & { user: string }): Promise<void>;\n validateDcaSingleChainOrder(order: CreateDcaSingleChainOrderParams & { user: string }): Promise<void>;\n}\n\n/**\n * CommonValidator - Handles validations shared across chains\n */\nexport class CommonValidator implements IDeadlineValidator {\n isValidDeadline(deadline: number): boolean {\n return deadline > Math.floor(Date.now() / 1000);\n }\n\n validateDeadline(deadline: number): void {\n if (!this.isValidDeadline(deadline)) {\n throw new ValidationError('Deadline must be in the future');\n }\n }\n}\n\nexport class ValidatorFactory {\n private static validators: Map<ChainType, IChainValidator> = new Map();\n\n static getValidator(chainType: ChainType): IChainValidator {\n if (!this.validators.has(chainType)) {\n switch (chainType) {\n case ChainType.EVM:\n this.validators.set(chainType, new EvmValidator());\n break;\n case ChainType.Solana:\n this.validators.set(chainType, new SolanaValidator());\n break;\n case ChainType.Sui:\n this.validators.set(chainType, new SuiValidator());\n break;\n default:\n throw new ValidationError(`Chain type ${chainType} validation is not implemented.`);\n }\n }\n\n return this.validators.get(chainType)!;\n }\n\n static getValidatorForChain(chainId: SupportedChain): IChainValidator {\n const chainType = chainIdToChainTypeMap[chainId];\n return this.getValidator(chainType);\n }\n}\n\nexport class CrossChainOrderValidator {\n private readonly commonValidator = new CommonValidator();\n\n async validateOrder(order: CreateCrossChainOrderParams & { user: string }): Promise<void> {\n const sourceValidator = ValidatorFactory.getValidatorForChain(order.sourceChainId);\n\n await sourceValidator.validateSourceChain({ ...order, user: order.user });\n\n const destinationValidator = ValidatorFactory.getValidatorForChain(order.destinationChainId);\n\n destinationValidator.validateDestinationChain(order);\n\n this.commonValidator.validateDeadline(order.deadline);\n }\n}\n\nexport class SingleChainOrderValidator {\n private readonly commonValidator = new CommonValidator();\n\n async validateOrder(order: CreateSingleChainOrderParams & { user: string }): Promise<void> {\n this.commonValidator.validateDeadline(order.deadline);\n\n const chainValidator = ValidatorFactory.getValidatorForChain(order.chainId);\n\n chainValidator.validateSingleChainOrder(order);\n }\n}\n\nimport type { CreateDcaSingleChainOrderParams } from '../core/orders/dca-single-chain.js';\n\nexport interface IDcaValidator {\n validateDcaSingleChainOrder(order: CreateDcaSingleChainOrderParams & { user: string }): Promise<void>;\n}\n\nexport class DcaSingleChainOrderValidator {\n private readonly commonValidator = new CommonValidator();\n\n async validateOrder(order: CreateDcaSingleChainOrderParams & { user: string }): Promise<void> {\n this.commonValidator.validateDeadline(order.deadline);\n\n // Validate start time is in the future or current time\n if (order.startTime < Math.floor(Date.now() / 1000)) {\n throw new ValidationError('Start time must be in the future or current time');\n }\n\n // Validate intervals\n if (order.totalIntervals <= 0) {\n throw new ValidationError('Total intervals must be greater than 0');\n }\n\n if (order.intervalDuration <= 0) {\n throw new ValidationError('Interval duration must be greater than 0');\n }\n\n // Validate that the order will complete before deadline\n const estimatedCompletionTime = order.startTime + order.totalIntervals * order.intervalDuration;\n if (estimatedCompletionTime > order.deadline) {\n throw new ValidationError('Order would complete after deadline');\n }\n\n const chainValidator = ValidatorFactory.getValidatorForChain(order.chainId);\n await chainValidator.validateDcaSingleChainOrder(order);\n }\n}\n","import { type Address, getContract, isAddress as isEvmAddress } from 'viem';\nimport { ChainID, type SupportedEvmChain } from '../../chains.js';\nimport { isNativeEvmToken, MAX_UINT_128 } from '../../constants.js';\nimport { InsufficientBalanceError, ValidationError } from '../../errors/index.js';\nimport { BaseValidator } from '../../utils/base-validator.js';\nimport type { CreateCrossChainOrderParams } from '../orders/cross-chain.js';\nimport { ERC20ABI } from './abi/erc20.js';\nimport { ChainProvider } from './chain-provider.js';\nimport type { CreateSingleChainOrderParams } from '../orders/single-chain.js';\nimport type { CreateDcaSingleChainOrderParams } from '../orders/dca-single-chain.js';\n\n/**\n * Chain-specific validator implementations\n */\nexport class EvmValidator extends BaseValidator {\n isValidAddress(address: string): boolean {\n return isEvmAddress(address);\n }\n\n isValidTokenAddress(tokenAddress: string): boolean {\n return isEvmAddress(tokenAddress);\n }\n\n isValidAmount(amount: bigint): boolean {\n return amount > 0n && amount < MAX_UINT_128;\n }\n\n protected getChainName(): string {\n return 'EVM';\n }\n\n public async validateCrossChainOrderFeasability(\n order: CreateCrossChainOrderParams & { user: string },\n ): Promise<void> {\n const chain = order.sourceChainId as SupportedEvmChain;\n const client = ChainProvider.getClient(chain);\n const user = order.user as Address;\n\n if (isNativeEvmToken(order.sourceTokenAddress)) {\n throw new ValidationError('Native token is not supported.');\n }\n\n if (order.sourceChainId === ChainID.Hyperliquid && isNativeEvmToken(order.destinationTokenAddress)) {\n throw new ValidationError('HYPE native token as destination address is not supported.');\n }\n\n const ERC20Contract = getContract({\n address: order.sourceTokenAddress as Address,\n abi: ERC20ABI,\n client: {\n public: client,\n chain,\n },\n });\n\n const balance = await ERC20Contract.read.balanceOf([user]);\n\n if (balance < order.sourceTokenAmount) {\n throw new InsufficientBalanceError(\n `Insufficient balance for token ${order.sourceTokenAddress}. Current balance: ${balance}. Required balance: ${order.sourceTokenAmount}`,\n );\n }\n\n // Temporary allowance turn off. This should be handled in the frontend.\n // const permit2Address = PERMIT2_ADDRESS[chain];\n // const allowance = await ERC20Contract.read.allowance([user, permit2Address]);\n\n // if (allowance < order.sourceTokenAmount) {\n // throw new InsufficientAllowanceError(\n // `Insufficient allowance for token ${order.sourceTokenAddress} on permit2 address ${permit2Address}. Current allowance: ${allowance}. Required allowance: ${order.sourceTokenAmount}`,\n // );\n // }\n }\n\n override async validateSingleChainOrderFeasability(\n order: CreateSingleChainOrderParams & { user: string },\n ): Promise<void> {\n const chain = order.chainId as SupportedEvmChain;\n\n const validSingleChainChains = [ChainID.Hyperliquid, ChainID.Base, ChainID.BSC, ChainID.Arbitrum, ChainID.Optimism, ChainID.MONAD];\n\n if (!validSingleChainChains.includes(chain)) {\n throw new ValidationError(`Chain ${chain} is not supported for single chain orders`);\n }\n\n if (order.chainId === ChainID.Hyperliquid && isNativeEvmToken(order.tokenOut)) {\n throw new ValidationError('HYPE native token as destination address is not supported.');\n }\n\n const client = ChainProvider.getClient(chain);\n const user = order.user as Address;\n\n if (isNativeEvmToken(order.tokenIn)) {\n throw new ValidationError('Native token is not supported.');\n }\n\n const ERC20Contract = getContract({\n address: order.tokenIn as Address,\n abi: ERC20ABI,\n client: {\n public: client,\n chain,\n },\n });\n\n const balance = await ERC20Contract.read.balanceOf([user]);\n\n if (balance < order.amountIn) {\n throw new InsufficientBalanceError(\n `Insufficient balance for token ${order.tokenIn}. Current balance: ${balance}. Required balance: ${order.amountIn}`,\n );\n }\n\n // const permit2Address = PERMIT2_ADDRESS[chain];\n // const allowance = await ERC20Contract.read.allowance([user, permit2Address]);\n\n // if (allowance < order.amountIn) {\n // throw new InsufficientAllowanceError(\n // `Insufficient allowance for token ${order.tokenIn} on permit2 address ${permit2Address}. Current allowance: ${allowance}. Required allowance: ${order.amountIn}`,\n // );\n // }\n }\n\n override async validateDcaSingleChainOrderFeasability(\n order: CreateDcaSingleChainOrderParams & { user: string },\n ): Promise<void> {\n const chain = order.chainId as SupportedEvmChain;\n\n const client = ChainProvider.getClient(chain);\n const user = order.user as Address;\n\n if (isNativeEvmToken(order.tokenIn)) {\n throw new ValidationError('Native token is not supported for DCA orders.');\n }\n\n const ERC20Contract = getContract({\n address: order.tokenIn as Address,\n abi: ERC20ABI,\n client: {\n public: client,\n chain,\n },\n });\n\n const totalAmountIn = order.amountInPerInterval * BigInt(order.totalIntervals);\n const balance = await ERC20Contract.read.balanceOf([user]);\n\n if (balance < totalAmountIn) {\n throw new InsufficientBalanceError(\n `Insufficient balance for DCA order. Token: ${order.tokenIn}. Current balance: ${balance}. Required total: ${totalAmountIn}`,\n );\n }\n }\n}\n","import type { CreateCrossChainOrderParams } from '../core/orders/cross-chain.js';\nimport type { CreateDcaSingleChainOrderParams } from '../core/orders/dca-single-chain.js';\nimport type { CreateSingleChainOrderParams } from '../core/orders/single-chain.js';\nimport { ValidationError } from '../errors/index.js';\nimport type { IChainValidator } from './order-validator.js';\n\n/**\n * BaseValidator - Abstract class implementing common validation logic\n * This follows the Template Method pattern\n */\nexport abstract class BaseValidator implements IChainValidator {\n abstract isValidAddress(address: string): boolean;\n abstract isValidTokenAddress(tokenAddress: string): boolean;\n abstract isValidAmount(amount: bigint): boolean;\n protected abstract getChainName(): string;\n abstract validateCrossChainOrderFeasability(order: CreateCrossChainOrderParams & { user: string }): Promise<void>;\n abstract validateSingleChainOrderFeasability(order: CreateSingleChainOrderParams & { user: string }): Promise<void>;\n\n /**\n * Validate source chain specific parameters of the order\n */\n async validateSourceChain(order: CreateCrossChainOrderParams & { user: string }): Promise<void> {\n this.validateTokenAddress(order.sourceTokenAddress);\n this.validateAmount(order.sourceTokenAmount);\n this.validateAmount(order.minStablecoinAmount ?? 1n);\n await this.validateCrossChainOrderFeasability({ ...order, user: order.user });\n }\n\n async validateSingleChainOrder(order: CreateSingleChainOrderParams & { user: string }): Promise<void> {\n this.validateTokenAddress(order.tokenIn);\n this.validateTokenAddress(order.tokenOut);\n this.validateAmount(order.amountIn);\n this.validateAmount(order.amountOutMin ?? 1n);\n\n if (order.takeProfitMinOut) {\n this.validateAmount(order.takeProfitMinOut);\n }\n\n await this.validateSingleChainOrderFeasability(order);\n }\n\n /**\n * Validate destination chain specific parameters of the order\n */\n validateDestinationChain(order: CreateCrossChainOrderParams): void {\n this.validateAddress(order.destinationAddress);\n this.validateTokenAddress(order.destinationTokenAddress);\n this.validateAmount(order.destinationTokenMinAmount ?? 1n);\n\n if (order.extraTransfers) {\n for (const extraTransfer of order.extraTransfers) {\n this.validateAddress(extraTransfer.receiver);\n this.validateTokenAddress(extraTransfer.token);\n this.validateAmount(extraTransfer.amount);\n }\n }\n }\n\n abstract validateDcaSingleChainOrderFeasability(\n order: CreateDcaSingleChainOrderParams & { user: string },\n ): Promise<void>;\n\n async validateDcaSingleChainOrder(order: CreateDcaSingleChainOrderParams & { user: string }): Promise<void> {\n this.validateTokenAddress(order.tokenIn);\n this.validateTokenAddress(order.tokenOut);\n this.validateAmount(order.amountInPerInterval);\n this.validateAmount(order.amountOutMin ?? 1n);\n this.validateAddress(order.destinationAddress);\n\n // Validate DCA-specific parameters\n if (order.totalIntervals <= 0) {\n throw new ValidationError('Total intervals must be greater than 0');\n }\n\n if (order.intervalDuration <= 0) {\n throw new ValidationError('Interval duration must be greater than 0');\n }\n\n if (order.startTime < 0) {\n throw new ValidationError('Start time must be non-negative');\n }\n\n // Validate total amount doesn't overflow\n const totalAmount = order.amountInPerInterval * BigInt(order.totalIntervals);\n this.validateAmount(totalAmount);\n\n if (order.extraTransfers) {\n for (const extraTransfer of order.extraTransfers) {\n this.validateAddress(extraTransfer.receiver);\n this.validateTokenAddress(extraTransfer.token);\n this.validateAmount(extraTransfer.amount);\n }\n }\n\n await this.validateDcaSingleChainOrderFeasability(order);\n }\n\n /**\n * Helper methods that throw specific validation errors\n */\n protected validateAddress(address: string): void {\n if (!this.isValidAddress(address)) {\n throw new ValidationError(`Invalid ${this.getChainName()} address: ${address}`);\n }\n }\n\n protected validateTokenAddress(tokenAddress: string): void {\n if (!this.isValidTokenAddress(tokenAddress)) {\n throw new ValidationError(`Invalid ${this.getChainName()} token address: ${tokenAddress}`);\n }\n }\n\n protected validateAmount(amount: bigint): void {\n if (!this.isValidAmount(amount)) {\n throw new ValidationError(`Amount must be greater than 0. Value: ${amount}`);\n }\n }\n}\n","export const ERC20ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'PERMIT_TYPEHASH',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'nonces',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n {\n internalType: 'uint8',\n name: 'v',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'r',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 's',\n type: 'bytes32',\n },\n ],\n name: 'permit',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import {\n type Account,\n type Address,\n type Chain,\n type Client,\n createClient,\n createWalletClient,\n getContract,\n type Hex,\n http,\n type Transport,\n type WalletClient,\n} from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, base, optimism, bsc, } from 'viem/chains';\nimport { ChainID, type SupportedEvmChain } from '../../chains.js';\nimport type { EVMConfig } from '../../config.js';\nimport { ERC20ABI } from './abi/erc20.js';\nimport { SOURCE_CHAIN_GUARD_ABI } from './abi/source-chain-guard.js';\nimport { PERMIT2_ABI } from './abi/permit2.js';\nimport { SINGLE_CHAIN_GUARD_LIMIT_ABI } from './abi/single-chain-guard-limit.js';\nimport { hyperEVM } from './connectors/hyperevm.js';\nimport { monadMainnet } from './connectors/monad.js';\n\nexport const chainIdToProviderChainMap: Record<SupportedEvmChain, Chain> = {\n [ChainID.Arbitrum]: arbitrum,\n [ChainID.Optimism]: optimism,\n [ChainID.Base]: base,\n [ChainID.Hyperliquid]: hyperEVM,\n [ChainID.BSC]: bsc,\n [ChainID.MONAD]: monadMainnet,\n};\n\nexport class ChainProvider {\n private readonly privateKey: Hex;\n public readonly chainId: SupportedEvmChain;\n public readonly publicClient: Client;\n public readonly walletClient: WalletClient<Transport, Chain, Account>;\n\n constructor(config: EVMConfig) {\n this.privateKey = config.privateKey as Hex;\n this.chainId = config.chainId;\n\n this.publicClient = this.getClient(config.rpcProviderUrl);\n this.walletClient = this.getWalletClient(config.rpcProviderUrl);\n }\n\n static getClient(chainId: SupportedEvmChain, rpcProviderUrl?: string): Client {\n const chain = chainIdToProviderChainMap[chainId];\n\n return createClient({\n chain,\n transport: http(rpcProviderUrl),\n });\n }\n\n getClient(rpcProviderUrl?: string): Client {\n return ChainProvider.getClient(this.chainId, rpcProviderUrl);\n }\n\n getAccount(): Account {\n return privateKeyToAccount(this.privateKey);\n }\n\n getWalletClient(rpcProviderUrl?: string): WalletClient<Transport, Chain, Account> {\n const chain = chainIdToProviderChainMap[this.chainId];\n\n return createWalletClient({\n account: privateKeyToAccount(this.privateKey),\n chain,\n transport: http(rpcProviderUrl),\n });\n }\n\n getPermit2Contract(permit2Address: Address) {\n return getContract({\n address: permit2Address,\n abi: PERMIT2_ABI,\n client: {\n wallet: this.walletClient,\n public: this.publicClient,\n chain: chainIdToProviderChainMap[this.chainId],\n account: this.walletClient.account,\n },\n });\n }\n\n getSingleChainAuctioneerContract(address: Address) {\n return getContract({\n address: address,\n abi: SINGLE_CHAIN_GUARD_LIMIT_ABI,\n client: {\n wallet: this.walletClient,\n public: this.publicClient,\n chain: chainIdToProviderChainMap[this.chainId],\n account: this.walletClient.account,\n },\n });\n }\n\n // Any type since the inferred type of this node exceeds the maximum length the compiler will serialize\n getCrossChainAuctioneerContract(auctioneerAddress: Address): any {\n return getContract({\n address: auctioneerAddress,\n abi: SOURCE_CHAIN_GUARD_ABI,\n client: {\n wallet: this.walletClient,\n public: this.publicClient,\n chain: chainIdToProviderChainMap[this.chainId],\n account: this.walletClient.account,\n },\n });\n }\n\n getERC20Contract(tokenAddress: Address) {\n return getContract({\n address: tokenAddress,\n abi: ERC20ABI,\n client: {\n wallet: this.walletClient,\n public: this.publicClient,\n chain: chainIdToProviderChainMap[this.chainId],\n account: this.walletClient.account,\n },\n });\n }\n}\n","// NOTE: this ABI file only contains some of the functions to use by the SDK\nexport const SOURCE_CHAIN_GUARD_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'initialOwner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_auctioneer',\n type: 'address',\n },\n {\n internalType: 'contract ISignatureTransfer',\n name: '_permit2',\n type: 'address',\n },\n {\n internalType: 'contract IERC20',\n name: '_stablecoin',\n type: 'address',\n },\n {\n internalType: 'contract IERC20',\n name: '_collateralToken',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [],\n name: 'AlreadyInitialized',\n type: 'error',\n },\n {\n inputs: [],\n name: 'AlreadySwapped',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'BelowMinStablecoinsAmount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FeeOnTransferTokensNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidAddress',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidAuctioneerSignature',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidOrder',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidPermission',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidShortString',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidSignature',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidSolverDeadline',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidSuccessConfirmation',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NoReentrancy',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotAllowed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotSolver',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotUser',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OrderIsBeingProcessed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OrderIsNotActive',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OverdueDeadline',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'OwnableInvalidOwner',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'SafeERC20FailedOperation',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'str',\n type: 'string',\n },\n ],\n name: 'StringTooLong',\n type: 'error',\n },\n {\n inputs: [],\n name: 'SwapIsNotAllowed',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'newAuctioneer',\n type: 'address',\n },\n ],\n name: 'AuctioneerSet',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [],\n name: 'EIP712DomainChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'protocolFee',\n type: 'uint128',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'collateralAmount',\n type: 'uint128',\n },\n ],\n name: 'ExecutionStart',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n indexed: false,\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n name: 'NewOrder',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n ],\n name: 'OrderCancelledByUser',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'recoverTokensReceiver',\n type: 'address',\n },\n ],\n name: 'OrderSuccessfullyFulfilled',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferStarted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'feeReceiver',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'ProtocolFeesCollected',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'stablecoinsAmount',\n type: 'uint256',\n },\n ],\n name: 'SwappedToStablecoins',\n type: 'event',\n },\n {\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'auctioneer',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n ],\n name: 'cancelOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n ],\n internalType: 'struct SuccessConfirmation',\n name: 'successConfirmation',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'successConfirmationSignature',\n type: 'bytes',\n },\n {\n internalType: 'address',\n name: 'recoverTokensReceiver',\n type: 'address',\n },\n ],\n name: 'claimTokens',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'collateralToken',\n outputs: [\n {\n internalType: 'contract IERC20',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n ],\n name: 'createOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n {\n internalType: 'bytes1',\n name: 'fields',\n type: 'bytes1',\n },\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'version',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'chainId',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'verifyingContract',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'salt',\n type: 'bytes32',\n },\n {\n internalType: 'uint256[]',\n name: 'extensions',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n ],\n name: 'getOrderHash',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n name: 'lockedStablecoins',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n name: 'orderData',\n outputs: [\n {\n internalType: 'bool',\n name: 'initialized',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'deactivated',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'tokensInWereSwappedToStablecoins',\n type: 'bool',\n },\n {\n internalType: 'uint128',\n name: 'lockedCollateral',\n type: 'uint128',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'latestExecutionStart',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pendingOwner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'permit2',\n outputs: [\n {\n internalType: 'contract ISignatureTransfer',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newAuctioneer',\n type: 'address',\n },\n ],\n name: 'setAuctioneer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'stablecoin',\n outputs: [\n {\n internalType: 'contract IERC20',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'userSignature',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint128',\n name: 'collateralAmount',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'protocolFee',\n type: 'uint128',\n },\n {\n internalType: 'address',\n name: 'protocolFeeReceiver',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'allowSwap',\n type: 'bool',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n ],\n internalType: 'struct SourceChainSolverPermission',\n name: 'solverPermission',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'auctioneerSignature',\n type: 'bytes',\n },\n ],\n name: 'startOrderExecution',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'srcChainId',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint128',\n name: 'amountIn',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'bytes32',\n name: 'executionDetailsHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct OrderInfo',\n name: 'orderInfo',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'userSignature',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint128',\n name: 'collateralAmount',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'protocolFee',\n type: 'uint128',\n },\n {\n internalType: 'address',\n name: 'protocolFeeReceiver',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'allowSwap',\n type: 'bool',\n },\n {\n internalType: 'uint128',\n name: 'minStablecoinsAmount',\n type: 'uint128',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n ],\n internalType: 'struct SourceChainSolverPermission',\n name: 'solverPermission',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'auctioneerSignature',\n type: 'bytes',\n },\n {\n internalType: 'contract ISourceChainSwapper',\n name: 'swapper',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'swapData',\n type: 'bytes',\n },\n ],\n name: 'startOrderExecutionWithSwap',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const PERMIT2_ABI = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'maxAmount',\n type: 'uint256',\n },\n ],\n name: 'InvalidAmount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'LengthMismatch',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'word',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'mask',\n type: 'uint256',\n },\n ],\n name: 'UnorderedNonceInvalidation',\n type: 'event',\n },\n {\n inputs: [],\n name: 'DOMAIN_SEPARATOR',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'wordPos',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'mask',\n type: 'uint256',\n },\n ],\n name: 'invalidateUnorderedNonces',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'nonceBitmap',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.TokenPermissions',\n name: 'permitted',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.PermitTransferFrom',\n name: 'permit',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'requestedAmount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.SignatureTransferDetails',\n name: 'transferDetails',\n type: 'tuple',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'signature',\n type: 'bytes',\n },\n ],\n name: 'permitTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.TokenPermissions[]',\n name: 'permitted',\n type: 'tuple[]',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.PermitBatchTransferFrom',\n name: 'permit',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'requestedAmount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.SignatureTransferDetails[]',\n name: 'transferDetails',\n type: 'tuple[]',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'signature',\n type: 'bytes',\n },\n ],\n name: 'permitTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.TokenPermissions',\n name: 'permitted',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.PermitTransferFrom',\n name: 'permit',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'requestedAmount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.SignatureTransferDetails',\n name: 'transferDetails',\n type: 'tuple',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'witness',\n type: 'bytes32',\n },\n {\n internalType: 'string',\n name: 'witnessTypeString',\n type: 'string',\n },\n {\n internalType: 'bytes',\n name: 'signature',\n type: 'bytes',\n },\n ],\n name: 'permitWitnessTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.TokenPermissions[]',\n name: 'permitted',\n type: 'tuple[]',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.PermitBatchTransferFrom',\n name: 'permit',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'requestedAmount',\n type: 'uint256',\n },\n ],\n internalType: 'struct ISignatureTransfer.SignatureTransferDetails[]',\n name: 'transferDetails',\n type: 'tuple[]',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'witness',\n type: 'bytes32',\n },\n {\n internalType: 'string',\n name: 'witnessTypeString',\n type: 'string',\n },\n {\n internalType: 'bytes',\n name: 'signature',\n type: 'bytes',\n },\n ],\n name: 'permitWitnessTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const SINGLE_CHAIN_GUARD_LIMIT_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'initialOwner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_auctioneer',\n type: 'address',\n },\n {\n internalType: 'contract ISignatureTransfer',\n name: '_permit2',\n type: 'address',\n },\n {\n internalType: 'contract IExternalCallHandler',\n name: '_externalCallHandler',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [],\n name: 'FeeOnTransferTokensNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidAuctioneerSignature',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidOrder',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidPermission',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidShortString',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotASolver',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotAUser',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OrderWasAlreadyManuallyInitialized',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OrderWasNotManuallyInitialized',\n type: 'error',\n },\n {\n inputs: [],\n name: 'OverdueDeadline',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'OwnableInvalidOwner',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'minAmount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'received',\n type: 'uint256',\n },\n ],\n name: 'RequestedTransferNotFulfilled',\n type: 'error',\n },\n {\n inputs: [],\n name: 'RequestedTransfersLengthMismatch',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'SafeERC20FailedOperation',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'str',\n type: 'string',\n },\n ],\n name: 'StringTooLong',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ZeroAddress',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'AuctioneerSet',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [],\n name: 'EIP712DomainChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n ],\n name: 'OrderFulfilled',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n ],\n name: 'OrderManuallyCancelled',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n ],\n name: 'OrderManuallyInitialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferStarted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'auctioneer',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData',\n name: 'requestedOutput',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData[]',\n name: 'extraTransfers',\n type: 'tuple[]',\n },\n {\n internalType: 'bytes',\n name: 'encodedExternalCallData',\n type: 'bytes',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct SingleChainLimitOrder',\n name: 'order',\n type: 'tuple',\n },\n ],\n name: 'cancelManuallyCreatedOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData',\n name: 'requestedOutput',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData[]',\n name: 'extraTransfers',\n type: 'tuple[]',\n },\n {\n internalType: 'bytes',\n name: 'encodedExternalCallData',\n type: 'bytes',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct SingleChainLimitOrder',\n name: 'order',\n type: 'tuple',\n },\n ],\n name: 'createOrderManually',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n {\n internalType: 'bytes1',\n name: 'fields',\n type: 'bytes1',\n },\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'version',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'chainId',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'verifyingContract',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'salt',\n type: 'bytes32',\n },\n {\n internalType: 'uint256[]',\n name: 'extensions',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'externalCallHandler',\n outputs: [\n {\n internalType: 'contract IExternalCallHandler',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'promisedAmountOut',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData',\n name: 'requestedOutput',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData[]',\n name: 'extraTransfers',\n type: 'tuple[]',\n },\n {\n internalType: 'bytes',\n name: 'encodedExternalCallData',\n type: 'bytes',\n },\n {\n internalType: 'uint32',\n name: 'deadline',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct SingleChainLimitOrder',\n name: 'order',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'userSignature',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'solver',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'amountOutMin',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct RequestedTransferLib.TransferData',\n name: 'protocolFeeTransfer',\n type: 'tuple',\n },\n {\n internalType: 'uint32',\n name: 'permissionDeadline',\n type: 'uint32',\n },\n ],\n internalType: 'struct SingleChainLimitSolverPermission',\n name: 'permission',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'auctioneerSignature',\n type: 'bytes',\n },\n {\n internalType: 'contract ISingleChainIntentFulfiller',\n name: 'fillerContract',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'callBackData',\n type: 'bytes',\n },\n {\n internalType: 'bool',\n name: 'orderWasInitializedManually',\n type: 'bool',\n },\n ],\n name: 'fulfillLimitOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'orderHash',\n type: 'bytes32',\n },\n ],\n name: 'orderManuallyInitialized',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pendingOwner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'permit2',\n outputs: [\n {\n internalType: 'contract ISignatureTransfer',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newAuctioneer',\n type: 'address',\n },\n ],\n name: 'setAuctioneer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { defineChain } from 'viem';\n\nexport const hyperEVM = defineChain({\n id: 999,\n name: 'HyperEVM',\n nativeCurrency: {\n decimals: 18,\n name: 'HyperEVM',\n symbol: 'HYPE',\n },\n rpcUrls: {\n default: {\n http: ['https://rpc.hyperliquid.xyz/evm'],\n },\n },\n blockExplorers: {\n default: {\n name: 'HyperEVM Explorer',\n url: 'https://hyperevmscan.io/',\n },\n },\n testnet: false,\n});\n","import { defineChain } from 'viem';\n\nexport const monadMainnet = defineChain({\n id: 143,\n name: 'Monad Mainnet',\n network: 'monad-mainnet',\n nativeCurrency: {\n name: 'Monad',\n symbol: 'MON',\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: ['https://rpc-mainnet.monadinfra.com', 'https://rpc4.monad.xyz', 'https://rpc3.monad.xyz', 'https://rpc1.monad.xyz'],\n },\n public: {\n http: ['https://rpc-mainnet.monadinfra.com', 'https://rpc4.monad.xyz', 'https://rpc3.monad.xyz', 'https://rpc1.monad.xyz'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Monad Explorer',\n url: 'https://monadscan.com',\n },\n },\n testnet: false,\n});\n","import { isAddress as isSolanaAddress } from '@solana/kit';\nimport { MAX_UINT_64 } from '../../constants.js';\nimport { BaseValidator } from '../../utils/base-validator.js';\n\nexport class SolanaValidator extends BaseValidator {\n override validateSingleChainOrderFeasability(): Promise<void> {\n return Promise.resolve();\n }\n\n isValidAddress(address: string): boolean {\n return isSolanaAddress(address);\n }\n\n isValidTokenAddress(tokenAddress: string): boolean {\n return isSolanaAddress(tokenAddress);\n }\n\n isValidAmount(amount: bigint): boolean {\n return amount > 0n && amount < MAX_UINT_64;\n }\n\n protected getChainName(): string {\n return 'Solana';\n }\n\n public async validateCrossChainOrderFeasability(): Promise<void> {\n // No chain-specific validation implemented for now for Solana\n return;\n }\n\n override async validateDcaSingleChainOrderFeasability(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { isValidSuiAddress, normalizeSuiAddress } from '@mysten/sui/utils';\nimport { MAX_UINT_64 } from '../../constants.js';\nimport { BaseValidator } from '../../utils/base-validator.js';\n\nconst SUI_TOKEN_ADDRESS_REGEX = /^0x[a-fA-F0-9]{64}::\\w+::\\w+$/;\n\nexport class SuiValidator extends BaseValidator {\n isValidAddress(address: string): boolean {\n return isValidSuiAddress(normalizeSuiAddress(address));\n }\n\n isValidTokenAddress(tokenAddress: string): boolean {\n const [address] = tokenAddress.split('::');\n\n const isValidAddress = address !== undefined ? this.isValidAddress(address) : false;\n\n return isValidAddress && SUI_TOKEN_ADDRESS_REGEX.test(tokenAddress);\n }\n\n isValidAmount(amount: bigint): boolean {\n return amount > 0n && amount < MAX_UINT_64;\n }\n\n protected getChainName(): string {\n return 'Sui';\n }\n\n public async validateCrossChainOrderFeasability(): Promise<void> {\n // No chain-specific validation implemented for now for Sui\n return;\n }\n\n override validateSingleChainOrderFeasability(): Promise<void> {\n return Promise.resolve();\n }\n\n override validateDcaSingleChainOrderFeasability(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { AUCTIONEER_URL } from '../constants.js';\nimport { NetworkError } from '../errors/index.js';\nimport type { ApiResponse } from '../types/api.js';\nimport type {\n CrossChainOrderPrepared,\n CrossChainUserIntentRequest,\n DcaCrossChainUserIntentRequest,\n DcaSingleChainOrderPrepared,\n DcaSingleChainUserIntentRequest,\n SingleChainOrderPrepared,\n SingleChainUserIntentRequest,\n} from '../types/intent.js';\nimport { Parsers } from '../utils/parsers.js';\nimport { CrossChainOrder, type CreateCrossChainOrderParams } from './orders/cross-chain.js';\nimport { DcaSingleChainOrder, type CreateDcaSingleChainOrderParams } from './orders/dca-single-chain.js';\nimport { SingleChainOrder, type CreateSingleChainOrderParams } from './orders/single-chain.js';\n\n/**\n * Base SDK providing common functionality for all blockchain implementations\n */\nexport abstract class BaseSDK {\n public abstract getUserAddress(): Promise<string>;\n\n protected abstract prepareCrossChainOrder(order: CrossChainOrder): Promise<CrossChainOrderPrepared>;\n protected prepareSingleChainOrder?(order: SingleChainOrder): Promise<SingleChainOrderPrepared>;\n protected prepareDcaSingleChainOrder?(order: DcaSingleChainOrder): Promise<DcaSingleChainOrderPrepared>;\n\n // Generic HTTP request handler\n private static async makeRequest(url: string, body: string): Promise<ApiResponse> {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body,\n });\n\n console.debug(`url`, url, `body`, body)\n if (!response.ok) {\n const errorJson: ApiResponse = await response.json();\n const mainError = errorJson.error;\n const extraErrorData = errorJson.extra_error_data;\n\n const errorMessage = mainError\n ? `${mainError}. Extra error data: ${extraErrorData}`\n : `Server error ${extraErrorData}`;\n\n throw new NetworkError(errorMessage);\n }\n\n return response.json();\n }\n\n private static async validateOrder<T>(intentRequest: T, endpoint: string): Promise<void> {\n const body = JSON.stringify(intentRequest, Parsers.bigIntReplacer);\n const url = `${AUCTIONEER_URL}${endpoint}`;\n await BaseSDK.makeRequest(url, body);\n }\n\n private static async sendOrder<T extends { toIntentRequest(preparedData: any): any }>(\n preparedOrder: { order: T; preparedData: any },\n endpoint: string,\n ): Promise<ApiResponse> {\n const intentRequest = preparedOrder.order.toIntentRequest(preparedOrder.preparedData);\n const body = JSON.stringify(intentRequest, Parsers.bigIntReplacer);\n const url = `${AUCTIONEER_URL}${endpoint}`;\n return BaseSDK.makeRequest(url, body);\n }\n\n public async createCrossChainOrder(params: CreateCrossChainOrderParams): Promise<CrossChainOrderPrepared> {\n const userAddress = await this.getUserAddress();\n const order = await CrossChainOrder.create({ ...params, user: userAddress });\n return this.prepareCrossChainOrder!(order);\n }\n\n public async createAndSendCrossChainOrder(params: CreateCrossChainOrderParams): Promise<ApiResponse> {\n const preparedOrder = await this.createCrossChainOrder(params);\n return BaseSDK.sendCrossChainOrder(preparedOrder);\n }\n\n public static async sendCrossChainOrder(preparedOrder: CrossChainOrderPrepared): Promise<ApiResponse> {\n return BaseSDK.sendOrder(preparedOrder, '/user_intent/cross_chain/limit_order');\n }\n\n public static async validateCrossChainOrder(intentRequest: CrossChainUserIntentRequest): Promise<void> {\n return BaseSDK.validateOrder(intentRequest, '/validate_intent/cross_chain/limit_order');\n }\n\n public async createSingleChainOrder(params: CreateSingleChainOrderParams): Promise<SingleChainOrderPrepared> {\n const userAddress = await this.getUserAddress();\n const order = await SingleChainOrder.create({ ...params, user: userAddress });\n return this.prepareSingleChainOrder!(order);\n }\n\n public async createAndSendSingleChainOrder(params: CreateSingleChainOrderParams): Promise<ApiResponse> {\n const preparedOrder = await this.createSingleChainOrder(params);\n return BaseSDK.sendSingleChainOrder(preparedOrder);\n }\n\n public static async sendSingleChainOrder(preparedOrder: SingleChainOrderPrepared): Promise<ApiResponse> {\n return BaseSDK.sendOrder(preparedOrder, '/user_intent/single_chain/limit_order');\n }\n\n public static async validateSingleChainOrder(intentRequest: SingleChainUserIntentRequest): Promise<void> {\n return BaseSDK.validateOrder(intentRequest, '/validate_intent/single_chain/limit_order');\n }\n\n public async createDcaSingleChainOrder(\n params: CreateDcaSingleChainOrderParams,\n ): Promise<DcaSingleChainOrderPrepared> {\n const userAddress = await this.getUserAddress();\n const order = await DcaSingleChainOrder.create({ ...params, user: userAddress });\n return this.prepareDcaSingleChainOrder!(order);\n }\n\n public async createAndSendDcaSingleChainOrder(params: CreateDcaSingleChainOrderParams): Promise<ApiResponse> {\n const preparedOrder = await this.createDcaSingleChainOrder(params);\n return BaseSDK.sendDcaSingleChainOrder(preparedOrder);\n }\n\n public static async sendDcaSingleChainOrder(preparedOrder: DcaSingleChainOrderPrepared): Promise<ApiResponse> {\n return BaseSDK.sendOrder(preparedOrder, '/user_intent/single_chain/dca_order');\n }\n\n public static async validateDcaSingleChainOrder(intentRequest: DcaSingleChainUserIntentRequest): Promise<void> {\n return BaseSDK.validateOrder(intentRequest, '/validate_intent/single_chain/dca_order');\n }\n\n public static async validateDcaCrossChainOrder(intentRequest: DcaCrossChainUserIntentRequest): Promise<void> {\n return BaseSDK.validateOrder(intentRequest, '/validate_intent/cross_chain/dca_order');\n }\n\n public static async sendDcaCrossChainOrder(intentRequest: DcaCrossChainUserIntentRequest): Promise<ApiResponse> {\n const body = JSON.stringify(intentRequest, Parsers.bigIntReplacer);\n return BaseSDK.makeRequest(`${AUCTIONEER_URL}/user_intent/cross_chain/dca_order`, body);\n }\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport { formatUnits, parseUnits } from 'viem';\n\nexport namespace Parsers {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export function bigIntReplacer(_key: string, value: any): any {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (typeof value === 'string' && /^\\d+n$/.test(value)) {\n return value.slice(0, -1);\n }\n\n return value;\n }\n\n export function bigintToFloat(amount: bigint, decimals: number): number {\n const formatted = formatUnits(amount, decimals);\n const result = parseFloat(formatted);\n\n return result;\n }\n\n export function floatToBigint(usdValue: number, decimals: number): bigint {\n const valueString = usdValue.toFixed(decimals);\n\n return parseUnits(valueString, decimals);\n }\n}\n","import { sha256, toBytes, type TypedDataDefinition } from 'viem';\nimport { isEvmChain, ChainID, chainIdToChainTypeMap, type SupportedChain } from '../../chains.js';\nimport { ValidationError } from '../../errors/index.js';\nimport {\n type ChainPreparedData,\n type CrossChainUserIntentRequest,\n type ExecutionDetails,\n type Hash,\n type SourceChainData,\n} from '../../types/intent.js';\nimport { CrossChainOrderValidator } from '../../utils/order-validator.js';\nimport { Parsers } from '../../utils/parsers.js';\nimport { type ExtraTransfer, type StopLossType } from './common.js';\nimport type { ApiResponse } from '../../types/api.js';\nimport { BaseSDK } from '../sdk.js';\nimport { getEVMCrossChainOrderTypedData } from '../evm/order-signature.js';\nimport { getSolanaCrossChainOrderInstructions } from '../solana/order-instructions.js';\nimport { getSuiOrderTransaction } from '../sui/order-transaction.js';\nimport { QuoteProvider } from '../../utils/quote/aggregator.js';\n\nexport type CreateCrossChainOrderParams = {\n /** Source chain ID where tokens will be sent from */\n sourceChainId: SupportedChain;\n /** Token address on the source chain to be swapped */\n sourceTokenAddress: string;\n /** Amount of source tokens to swap with decimals */\n sourceTokenAmount: bigint;\n /** Destination chain ID where tokens will be received */\n destinationChainId: SupportedChain;\n /** Token address on the destination chain to receive */\n destinationTokenAddress: string;\n /** Minimum amount of destination tokens to receive */\n destinationTokenMinAmount?: bigint;\n /** Recipient wallet address on the destination chain */\n destinationAddress: string;\n /** Minimum amount of stablecoins in the intermediate swap */\n minStablecoinAmount?: bigint;\n /** Timestamp (in seconds) after which the order expires */\n deadline: number;\n /** Extra transfers to be made */\n extraTransfers?: ExtraTransfer[];\n\n /** Stop loss */\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n /** Take profit min out */\n takeProfitMinOut?: bigint;\n};\n\n/**\n * Represents a X-chain swap order\n * Contains all the information needed to execute the order on both source and destination chains\n */\nexport class CrossChainOrder {\n /** User's wallet address that initiates the order */\n public user: string;\n /** Source chain ID where tokens will be sent from */\n public sourceChainId: SupportedChain;\n /** Token address on the source chain to be swapped */\n public sourceTokenAddress: string;\n /** Amount of source tokens to swap */\n public sourceTokenAmount: bigint;\n /** Destination chain ID where tokens will be received */\n public destinationChainId: SupportedChain;\n /** Token address on the destination chain to receive */\n public destinationTokenAddress: string;\n /** Minimum amount of destination tokens to receive */\n public destinationTokenMinAmount: bigint;\n /** Recipient wallet address on the destination chain */\n public destinationAddress: string;\n /** Minimum amount of stablecoins in the intermediate swap */\n public minStablecoinAmount: bigint;\n /** Timestamp (in seconds) after which the order expires */\n public deadline: number;\n /** Extra transfers to be made */\n public extraTransfers?: ExtraTransfer[];\n /** Stop loss */\n public stopLossType?: StopLossType;\n public stopLossTriggerPrice?: string;\n /** Take profit min out */\n public takeProfitMinOut?: bigint;\n\n private constructor(params: CreateCrossChainOrderParams & { user: string }) {\n this.user = params.user;\n this.sourceChainId = params.sourceChainId;\n this.sourceTokenAddress = params.sourceTokenAddress;\n this.sourceTokenAmount = params.sourceTokenAmount;\n this.destinationChainId = params.destinationChainId;\n this.destinationTokenAddress = params.destinationTokenAddress;\n this.destinationTokenMinAmount = params.destinationTokenMinAmount ?? 1n;\n this.destinationAddress = params.destinationAddress;\n this.minStablecoinAmount = params.minStablecoinAmount ?? 1n;\n this.deadline = params.deadline;\n this.extraTransfers = params.extraTransfers;\n this.stopLossType = params.stopLossType;\n this.stopLossTriggerPrice = params.stopLossTriggerPrice;\n this.takeProfitMinOut = params.takeProfitMinOut;\n }\n\n /**\n * Factory method to create and validate a new Order instance\n * @param input Order parameters\n * @returns Validated Order instance\n * @throws {ValidationError} If order validation fails\n */\n public static async create(input: CreateCrossChainOrderParams & { user: string }): Promise<CrossChainOrder> {\n // Validate first on creation\n await new CrossChainOrderValidator().validateOrder({ ...input, user: input.user });\n\n const { minStablecoinAmount, destinationTokenMinAmount } = await this.calculateAmountOutMin(input);\n const order = new CrossChainOrder({\n ...input,\n minStablecoinAmount: minStablecoinAmount,\n destinationTokenMinAmount: destinationTokenMinAmount,\n user: input.user,\n });\n\n if (isEvmChain(order.sourceChainId)) {\n return order;\n }\n\n const randomPreparedData = order.getRandomPreparedData();\n const intentRequest = order.toIntentRequest(randomPreparedData);\n await BaseSDK.validateCrossChainOrder(intentRequest);\n\n return order;\n }\n\n /// This is needed because API requires the prepared data to be sent\n /// In the cases of Solana and Sui, if we want the real data, we must send the order on-chain before validating.\n /// And that is something we cannot do before validating the order on the API side.\n private getRandomPreparedData(): ChainPreparedData {\n const chainId = this.sourceChainId;\n const chainType = chainIdToChainTypeMap[chainId];\n\n switch (chainType) {\n case 'EVM': {\n return {\n nonce: String(Math.floor(Math.random() * 10000000)),\n signature: '0x0000000000000000000000000000000000000000000000000000000000000000',\n };\n }\n case 'Solana': {\n return { orderPubkey: 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc' };\n }\n case 'Sui': {\n const digest = 'FQWndwYJhNQUoHyvR8UuhGURC2EKx9eWErFm9Tc2DggF';\n return { transactionHash: digest };\n }\n\n default: {\n throw new Error('Chain type not supported');\n }\n }\n }\n\n private static async calculateAmountOutMin(\n input: CreateCrossChainOrderParams,\n ): Promise<{ minStablecoinAmount: bigint; destinationTokenMinAmount: bigint }> {\n const { destinationTokenMinAmount, stopLossType, stopLossTriggerPrice, minStablecoinAmount } = input;\n\n if (stopLossType !== undefined && stopLossTriggerPrice !== undefined) {\n return {\n destinationTokenMinAmount: 1n,\n minStablecoinAmount: 1n,\n };\n }\n\n // TODO: Change this\n if (!minStablecoinAmount || !destinationTokenMinAmount) {\n const quote = await QuoteProvider.getQuote({\n sourceChainId: input.sourceChainId,\n tokenIn: input.sourceTokenAddress,\n amount: input.sourceTokenAmount,\n destChainId: input.destinationChainId,\n tokenOut: input.destinationTokenAddress,\n });\n\n return {\n destinationTokenMinAmount: quote.estimatedAmountOutReduced,\n minStablecoinAmount: quote.estimatedAmountInAsMinStablecoinAmount,\n };\n }\n\n return {\n destinationTokenMinAmount,\n minStablecoinAmount,\n };\n }\n\n /**\n * Gets the execution details for the destination chain\n * These details are used to complete the order on the destination chain\n * @returns Structured execution details object\n */\n public getExecutionDetails(): ExecutionDetails {\n return {\n destChainId: this.destinationChainId,\n tokenOut: this.destinationTokenAddress,\n destinationAddress: this.destinationAddress,\n amountOutMin: this.destinationTokenMinAmount,\n extraTransfers: this.extraTransfers,\n stopLossType: this.stopLossType,\n stopLossTriggerPrice: this.stopLossTriggerPrice,\n takeProfitMinOut: this.takeProfitMinOut,\n };\n }\n\n public executionDetailsHashToBytes(): Uint8Array {\n const executionDetailsHash = this.getExecutionDetailsHash().slice(2);\n\n const executionHashByteSlice = Buffer.from(executionDetailsHash, 'hex');\n\n return new Uint8Array(executionHashByteSlice);\n }\n\n /**\n * Generates a cryptographic hash of the execution details\n * This hash is used to verify order integrity across chains\n * @returns SHA-256 hash of the execution details as a 0x-prefixed hex string\n * @throws {ValidationError} If hash generation fails\n */\n public getExecutionDetailsHash(): Hash {\n try {\n const executionDetails = this.getExecutionDetails();\n const executionDetailsString = JSON.stringify(executionDetails, Parsers.bigIntReplacer);\n\n const bytes = toBytes(executionDetailsString);\n return sha256(bytes);\n } catch (error) {\n throw new ValidationError(\n 'Failed to generate execution details hash',\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n public toIntentRequest(preparedData: ChainPreparedData): CrossChainUserIntentRequest {\n const sourceChain = this.sourceChainId;\n const sourceChainType = chainIdToChainTypeMap[sourceChain];\n const executionDetails = JSON.stringify(this.getExecutionDetails(), Parsers.bigIntReplacer);\n\n return {\n genericData: this.toSourceChainData(),\n executionDetails,\n chainSpecificData: {\n [sourceChainType]: preparedData,\n },\n };\n }\n\n /**\n * Converts the order to the format required for source chain processing\n * Used when sending the order to the auctioneer for execution\n * @returns Object containing source chain-specific data\n */\n public toSourceChainData() {\n const data: SourceChainData = {\n user: this.user,\n srcChainId: this.sourceChainId,\n tokenIn: this.sourceTokenAddress,\n amountIn: this.sourceTokenAmount,\n minStablecoinsAmount: this.minStablecoinAmount,\n deadline: this.deadline,\n executionDetailsHash: this.getExecutionDetailsHash(),\n extraTransfers: this.extraTransfers,\n };\n\n return data;\n }\n\n /**\n * Serializes the order to a JSON-compatible object\n * Converts bigint values to strings to ensure proper JSON serialization\n * @returns JSON-serializable representation of the order\n */\n public toJSON() {\n return {\n user: this.user,\n sourceChainId: this.sourceChainId as number,\n sourceTokenAddress: this.sourceTokenAddress,\n sourceTokenAmount: this.sourceTokenAmount.toString(),\n destinationChainId: this.destinationChainId as number,\n destinationTokenAddress: this.destinationTokenAddress,\n destinationTokenMinAmount: this.destinationTokenMinAmount.toString(),\n destinationAddress: this.destinationAddress,\n minStablecoinAmount: this.minStablecoinAmount.toString(),\n deadline: this.deadline,\n executionDetailsHash: this.getExecutionDetailsHash(),\n extraTransfers: this.extraTransfers,\n };\n }\n\n public sendToAuctioneer(preparedData: ChainPreparedData): Promise<ApiResponse> {\n return BaseSDK.sendCrossChainOrder({\n order: this,\n preparedData,\n });\n }\n\n public async toEVMTypedData(): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> {\n if (!isEvmChain(this.sourceChainId)) {\n throw new ValidationError('Source chain is not EVM');\n }\n\n return getEVMCrossChainOrderTypedData(this);\n }\n\n public async toSolanaInstructionsByteArray() {\n if (this.sourceChainId !== ChainID.Solana) {\n throw new ValidationError('Source chain is not Solana');\n }\n\n return getSolanaCrossChainOrderInstructions(this);\n }\n\n public async toSuiTransaction(client?: any) {\n if (this.sourceChainId !== ChainID.Sui) {\n throw new ValidationError('Source chain is not Sui');\n }\n\n return getSuiOrderTransaction(this, client);\n }\n}\n","import { type Address } from 'viem';\nimport { type SupportedEvmChain } from '../../chains.js';\nimport type { EVMConfig } from '../../config.js';\nimport {\n SINGLE_CHAIN_GUARD_ADDRESSES,\n CROSS_CHAIN_GUARD_ADDRESSES,\n MAX_UINT_32,\n DCA_SINGLE_CHAIN_GUARD_ADDRESSES,\n normalizeNativeEvmTokenForSigning,\n} from '../../constants.js';\nimport {\n getEVMCrossChainOrderTypedData,\n getEVMDcaSingleChainOrderTypedData,\n getEVMSingleChainOrderTypedData,\n} from './order-signature.js';\nimport {\n type CrossChainPermitTransferFrom,\n type DcaSingleChainPermitTransferFrom,\n type SingleChainPermitTransferFrom,\n type TransferData,\n} from './permit2.js';\nimport { ChainProvider } from './chain-provider.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport type {\n CrossChainOrderPrepared,\n DcaSingleChainOrderPrepared,\n SingleChainOrderPrepared,\n} from '../../types/intent.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\n\nexport class EVMIntentProvider {\n provider: ChainProvider;\n\n constructor(config: EVMConfig) {\n this.provider = new ChainProvider(config);\n }\n\n async prepareSingleChainOrder(order: SingleChainOrder): Promise<SingleChainOrderPrepared> {\n const { orderTypedData: dataToSign, nonce } = await getEVMSingleChainOrderTypedData(order);\n\n const signature = await this.provider.walletClient.signTypedData({\n message: dataToSign.message,\n primaryType: dataToSign.primaryType,\n types: dataToSign.types,\n domain: dataToSign.domain,\n account: this.provider.getAccount(),\n });\n\n return {\n order,\n preparedData: {\n nonce: nonce.toString(),\n signature: signature.slice(2),\n },\n };\n }\n\n async prepareCrossChainOrder(order: CrossChainOrder): Promise<CrossChainOrderPrepared> {\n const { orderTypedData: dataToSign, nonce } = await getEVMCrossChainOrderTypedData(order);\n\n const signature = await this.provider.walletClient.signTypedData({\n message: dataToSign.message,\n primaryType: dataToSign.primaryType,\n types: dataToSign.types,\n domain: dataToSign.domain,\n account: this.provider.getAccount(),\n });\n\n return {\n order,\n preparedData: {\n nonce: nonce.toString(),\n signature: signature.slice(2),\n },\n };\n }\n\n static getCrossChainPermissionMessage(order: CrossChainOrder, nonce: bigint): CrossChainPermitTransferFrom {\n const spender = CROSS_CHAIN_GUARD_ADDRESSES[order.sourceChainId as SupportedEvmChain] as Address;\n\n return {\n permitted: {\n token: order.sourceTokenAddress as Address,\n amount: order.sourceTokenAmount,\n },\n spender,\n nonce,\n deadline: BigInt(order.deadline),\n witness: {\n user: order.user as Address,\n tokenIn: order.sourceTokenAddress as Address,\n srcChainId: order.sourceChainId,\n deadline: order.deadline,\n amountIn: order.sourceTokenAmount,\n minStablecoinsAmount: order.minStablecoinAmount,\n nonce,\n executionDetailsHash: order.getExecutionDetailsHash(),\n },\n };\n }\n\n static getSingleChainLimitPermissionMessage(order: SingleChainOrder, nonce: bigint): SingleChainPermitTransferFrom {\n const spender = SINGLE_CHAIN_GUARD_ADDRESSES[order.chainId as SupportedEvmChain] as Address;\n\n const requestedOutput: TransferData = {\n token: normalizeNativeEvmTokenForSigning(order.tokenOut) as Address,\n receiver: order.destinationAddress as Address,\n amount: order.amountOutMin,\n };\n\n const extraTransfers: TransferData[] =\n order.extraTransfers?.map((transfer) => ({\n token: normalizeNativeEvmTokenForSigning(transfer.token) as Address,\n receiver: transfer.receiver as Address,\n amount: transfer.amount,\n })) || [];\n\n return {\n permitted: {\n token: order.tokenIn as Address,\n amount: order.amountIn,\n },\n spender,\n nonce,\n deadline: BigInt(order.deadline),\n witness: {\n user: order.user as Address,\n tokenIn: order.tokenIn as Address,\n amountIn: order.amountIn,\n requestedOutput,\n encodedExternalCallData: '0x', // TODO: Update when external call data is supported\n extraTransfers,\n deadline: order.deadline,\n nonce,\n },\n };\n }\n static getRandomNonce(): bigint {\n return BigInt(Math.floor(Math.random() * Number(MAX_UINT_32)));\n }\n\n async prepareDcaSingleChainOrder(order: DcaSingleChainOrder): Promise<DcaSingleChainOrderPrepared> {\n const { orderTypedData: dataToSign, nonce } = await getEVMDcaSingleChainOrderTypedData(order);\n\n const signature = await this.provider.walletClient.signTypedData({\n message: dataToSign.message,\n primaryType: dataToSign.primaryType,\n types: dataToSign.types,\n domain: dataToSign.domain,\n account: this.provider.getAccount(),\n });\n\n return {\n order,\n preparedData: {\n nonce: nonce.toString(),\n signature: signature.slice(2),\n },\n };\n }\n\n static getDcaSingleChainPermissionMessage(\n order: DcaSingleChainOrder,\n nonce: bigint,\n ): DcaSingleChainPermitTransferFrom {\n const spender = DCA_SINGLE_CHAIN_GUARD_ADDRESSES[order.chainId as SupportedEvmChain] as Address;\n\n const requestedOutput: TransferData = {\n token: normalizeNativeEvmTokenForSigning(order.tokenOut) as Address,\n receiver: order.destinationAddress as Address,\n amount: BigInt(order.amountOutMin),\n };\n\n const extraTransfers: TransferData[] =\n order.extraTransfers?.map((transfer) => ({\n token: normalizeNativeEvmTokenForSigning(transfer.token) as Address,\n receiver: transfer.receiver as Address,\n amount: transfer.amount,\n })) || [];\n\n const totalAmountIn = BigInt(order.amountInPerInterval) * BigInt(order.totalIntervals);\n\n return {\n permitted: {\n token: order.tokenIn as Address,\n amount: totalAmountIn,\n },\n spender,\n nonce,\n deadline: BigInt(order.deadline),\n witness: {\n user: order.user as Address,\n tokenIn: order.tokenIn as Address,\n startTime: order.startTime,\n amountInPerInterval: BigInt(order.amountInPerInterval),\n totalIntervals: order.totalIntervals,\n intervalDuration: order.intervalDuration,\n requestedOutput,\n encodedExternalCallData: '0x', // TODO: Update when external call data is supported\n extraTransfers,\n deadline: order.deadline,\n nonce,\n },\n };\n }\n}\n","import type { Address, Hex, TypedDataDomain } from 'viem';\nimport type { SupportedEvmChain } from '../../chains.js';\nimport { PERMIT2_ADDRESS } from '../../constants.js';\n\nexport type TokenPermissions = {\n token: Address;\n amount: bigint;\n};\n\nexport type TransferData = {\n token: Address;\n receiver: Address;\n amount: bigint;\n};\n\nexport type CrossChainOrderInfo = {\n user: Address;\n tokenIn: Address;\n srcChainId: number;\n deadline: number;\n amountIn: bigint;\n minStablecoinsAmount: bigint;\n executionDetailsHash: Hex;\n nonce: bigint;\n};\n\nexport type SingleChainLimitOrder = {\n user: Address;\n tokenIn: Address;\n amountIn: bigint;\n requestedOutput: TransferData;\n extraTransfers: TransferData[];\n encodedExternalCallData: Hex;\n deadline: number;\n nonce: bigint;\n};\n\nexport type DcaOrderInfo = {\n user: Address;\n tokenIn: Address;\n srcChainId: number;\n startTime: number;\n deadline: number;\n totalIntervals: number;\n intervalDuration: number;\n amountInPerInterval: bigint;\n minStablecoinsAmountPerInterval: bigint;\n executionDetailsHash: Hex;\n nonce: bigint;\n};\n\nexport type CrossChainPermitTransferFrom = {\n permitted: TokenPermissions;\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n witness: CrossChainOrderInfo;\n};\n\nexport type SingleChainPermitTransferFrom = {\n permitted: TokenPermissions;\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n witness: SingleChainLimitOrder;\n};\n\nexport type PermitTransferFrom = CrossChainPermitTransferFrom | SingleChainPermitTransferFrom;\n\nconst TOKEN_PERMISSIONS_TYPE = [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n] as const;\n\nconst TRANSFER_DATA_TYPE = [\n { name: 'token', type: 'address' },\n { name: 'receiver', type: 'address' },\n { name: 'amount', type: 'uint256' },\n] as const;\n\n// Cross-chain order types\nexport const CROSS_CHAIN_PERMIT2_TYPES = {\n TokenPermissions: TOKEN_PERMISSIONS_TYPE,\n OrderInfo: [\n { name: 'user', type: 'address' },\n { name: 'tokenIn', type: 'address' },\n { name: 'srcChainId', type: 'uint32' },\n { name: 'deadline', type: 'uint32' },\n { name: 'amountIn', type: 'uint128' },\n { name: 'minStablecoinsAmount', type: 'uint128' },\n { name: 'executionDetailsHash', type: 'bytes32' },\n { name: 'nonce', type: 'uint256' },\n ],\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'OrderInfo' },\n ],\n} as const;\n\nexport const SINGLE_CHAIN_LIMIT_PERMIT2_TYPES = {\n TokenPermissions: TOKEN_PERMISSIONS_TYPE,\n TransferData: TRANSFER_DATA_TYPE,\n SingleChainLimitOrder: [\n { name: 'user', type: 'address' },\n { name: 'tokenIn', type: 'address' },\n { name: 'amountIn', type: 'uint256' },\n { name: 'requestedOutput', type: 'TransferData' },\n { name: 'extraTransfers', type: 'TransferData[]' },\n { name: 'encodedExternalCallData', type: 'bytes' },\n { name: 'deadline', type: 'uint32' },\n { name: 'nonce', type: 'uint256' },\n ],\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'SingleChainLimitOrder' },\n ],\n} as const;\n\nexport const PERMIT2_DOMAIN = (chainId: SupportedEvmChain): TypedDataDomain => ({\n name: 'Permit2',\n chainId,\n verifyingContract: PERMIT2_ADDRESS[chainId],\n});\n\ntype DcaSingleChainOrderWitness = {\n user: Address;\n tokenIn: Address;\n startTime: number;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n requestedOutput: TransferData;\n extraTransfers: TransferData[];\n encodedExternalCallData: Hex;\n deadline: number;\n nonce: bigint;\n};\n\nexport type DcaSingleChainPermitTransferFrom = {\n permitted: TokenPermissions;\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n witness: DcaSingleChainOrderWitness;\n};\n\nexport const DCA_SINGLE_CHAIN_PERMIT2_TYPES = {\n TokenPermissions: TOKEN_PERMISSIONS_TYPE,\n TransferData: TRANSFER_DATA_TYPE,\n SingleChainDcaOrder: [\n { type: 'address', name: 'user' },\n { type: 'address', name: 'tokenIn' },\n { type: 'uint32', name: 'startTime' },\n { type: 'uint256', name: 'amountInPerInterval' },\n { type: 'uint24', name: 'totalIntervals' },\n { type: 'uint32', name: 'intervalDuration' },\n { type: 'TransferData', name: 'requestedOutput' },\n { type: 'TransferData[]', name: 'extraTransfers' },\n { type: 'bytes', name: 'encodedExternalCallData' },\n { type: 'uint32', name: 'deadline' },\n { type: 'uint256', name: 'nonce' },\n ],\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'SingleChainDcaOrder' },\n ],\n} as const;\n\nexport type CrossChainDcaPermitTransferFrom = {\n permitted: TokenPermissions;\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n witness: DcaOrderInfo;\n};\n\n// Cross-chain DCA witness — mirrors the auctioneer's\n// `DcaOrderInfo(address user,address tokenIn,uint32 srcChainId,uint32 startTime,uint32 deadline,\n// uint24 totalIntervals,uint32 intervalDuration,uint128 amountInPerInterval,\n// uint128 minStablecoinsAmountPerInterval,bytes32 executionDetailsHash,uint256 nonce)`.\nexport const CROSS_CHAIN_DCA_PERMIT2_TYPES = {\n TokenPermissions: TOKEN_PERMISSIONS_TYPE,\n DcaOrderInfo: [\n { name: 'user', type: 'address' },\n { name: 'tokenIn', type: 'address' },\n { name: 'srcChainId', type: 'uint32' },\n { name: 'startTime', type: 'uint32' },\n { name: 'deadline', type: 'uint32' },\n { name: 'totalIntervals', type: 'uint24' },\n { name: 'intervalDuration', type: 'uint32' },\n { name: 'amountInPerInterval', type: 'uint128' },\n { name: 'minStablecoinsAmountPerInterval', type: 'uint128' },\n { name: 'executionDetailsHash', type: 'bytes32' },\n { name: 'nonce', type: 'uint256' },\n ],\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'DcaOrderInfo' },\n ],\n} as const;\n","import type { TypedDataDefinition } from 'viem';\nimport type { SupportedEvmChain } from '../../chains.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport { EVMIntentProvider } from './intent-provider.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport {\n CROSS_CHAIN_PERMIT2_TYPES,\n DCA_SINGLE_CHAIN_PERMIT2_TYPES,\n PERMIT2_DOMAIN,\n SINGLE_CHAIN_LIMIT_PERMIT2_TYPES,\n} from './permit2.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\n\nexport async function getEVMSingleChainOrderTypedData(\n order: SingleChainOrder,\n): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> {\n const randomNonce = EVMIntentProvider.getRandomNonce();\n const permissionMessage = EVMIntentProvider.getSingleChainLimitPermissionMessage(order, randomNonce);\n\n const orderTypedData = {\n domain: PERMIT2_DOMAIN(order.chainId as SupportedEvmChain),\n types: SINGLE_CHAIN_LIMIT_PERMIT2_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message: permissionMessage,\n };\n\n return { orderTypedData, nonce: randomNonce };\n}\n\n/**\n * Generates typed data for EVM order signatures\n * @param order The order to generate typed data for\n * @returns Object containing the typed data and nonce\n */\nexport async function getEVMCrossChainOrderTypedData(\n order: CrossChainOrder,\n): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> {\n const randomNonce = EVMIntentProvider.getRandomNonce();\n const permissionMessage = EVMIntentProvider.getCrossChainPermissionMessage(order, randomNonce);\n\n const orderTypedData = {\n domain: PERMIT2_DOMAIN(order.sourceChainId as SupportedEvmChain),\n types: CROSS_CHAIN_PERMIT2_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message: permissionMessage,\n };\n\n return { orderTypedData, nonce: randomNonce };\n}\n\nexport async function getEVMDcaSingleChainOrderTypedData(\n order: DcaSingleChainOrder,\n): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> {\n const randomNonce = EVMIntentProvider.getRandomNonce();\n const permissionMessage = EVMIntentProvider.getDcaSingleChainPermissionMessage(order, randomNonce);\n\n const orderTypedData = {\n domain: PERMIT2_DOMAIN(order.chainId as SupportedEvmChain),\n types: DCA_SINGLE_CHAIN_PERMIT2_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message: permissionMessage,\n };\n\n return { orderTypedData, nonce: randomNonce };\n}\n","import { getTransferSolInstruction, SYSTEM_PROGRAM_ADDRESS } from '@solana-program/system';\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n fetchMint,\n getCreateAssociatedTokenInstructionAsync,\n getSyncNativeInstruction,\n} from '@solana-program/token';\nimport {\n type Address,\n address,\n addSignersToTransactionMessage,\n appendTransactionMessageInstructions,\n createNoopSigner,\n createSolanaRpc,\n createTransactionMessage,\n fetchEncodedAccount,\n generateKeyPairSigner,\n getAddressEncoder,\n getProgramDerivedAddress,\n getTransactionCodec,\n type Instruction,\n partiallySignTransactionMessageWithSigners,\n pipe,\n type ReadonlyUint8Array,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n} from '@solana/kit';\nimport { ChainID } from '../../chains.js';\nimport {\n CROSS_CHAIN_GUARD_ADDRESSES,\n NATIVE_SOLANA_TOKEN_ADDRESS,\n SINGLE_CHAIN_GUARD_ADDRESSES,\n WRAPPED_SOL_MINT_ADDRESS,\n} from '../../constants.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport { getDefaultSolanaRPC } from './client.js';\nimport { getCreateOrderInstruction } from './generated/cross-chain/index.js';\nimport { getCreateLimitOrderInstructionAsync } from './generated/single-chain/index.js';\nimport { genSecretHashAndNumber } from './utils.js';\n\nexport type SolanaOrderInstructionResult = {\n // Order address\n orderAddress: string;\n // Encoded transaction bytes to be later deserialized into a transaction type\n txBytes: ReadonlyUint8Array;\n};\n\nexport async function getSolanaSingleChainOrderInstructions(\n order: SingleChainOrder,\n options?: { rpcUrl?: string },\n): Promise<SolanaOrderInstructionResult & { secretNumber: string }> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const orderSigner = await generateKeyPairSigner();\n const signer = createNoopSigner(order.user as Address);\n\n let tokenInMint = address(order.tokenIn);\n\n const { secretHash, secretNumber } = genSecretHashAndNumber(order);\n\n const orderUserAddress = address(order.user);\n const spendingNative = tokenInMint === NATIVE_SOLANA_TOKEN_ADDRESS;\n\n if (spendingNative) {\n tokenInMint = WRAPPED_SOL_MINT_ADDRESS;\n }\n\n const tokenMintProgram = await fetchMint(rpc, tokenInMint);\n\n const guardAddress = address(SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana]);\n const addressEncoder = getAddressEncoder();\n const instructions: Array<Instruction> = [];\n\n const [tokenInProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(tokenMintProgram.programAddress),\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);\n\n if (!userTokenInAccount.exists) {\n const createAccountIx = await getCreateAssociatedTokenInstructionAsync({\n payer: signer,\n ata: tokenInProgramAccount,\n owner: orderUserAddress,\n mint: tokenMintProgram.address,\n tokenProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(createAccountIx);\n }\n\n if (spendingNative) {\n const transferIx = getTransferSolInstruction({\n amount: order.amountIn,\n destination: userTokenInAccount.address,\n source: signer,\n });\n\n instructions.push(transferIx);\n\n const syncNativeIx = getSyncNativeInstruction({\n account: userTokenInAccount.address,\n });\n\n instructions.push(syncNativeIx);\n }\n\n const createSingleChainLimitOrderIx = await getCreateLimitOrderInstructionAsync({\n user: signer,\n order: orderSigner,\n guard: guardAddress,\n tokenInMint: tokenInMint,\n userTokenInAccount: userTokenInAccount.address,\n tokenInProgram: tokenMintProgram.programAddress,\n amountIn: order.amountIn,\n deadline: order.deadline,\n amountOutMin: order.amountOutMin,\n secretHash: Uint8Array.from(secretHash),\n extraTransfersAmounts: [], // TODO\n });\n\n instructions.push(createSingleChainLimitOrderIx);\n\n const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: 'confirmed' }).send();\n\n const txMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(signer, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n (tx) => addSignersToTransactionMessage([orderSigner], tx),\n );\n\n const partiallySignedTransaction = await partiallySignTransactionMessageWithSigners(txMessage);\n\n const txBytes = getTransactionCodec().encode(partiallySignedTransaction);\n\n return {\n orderAddress: orderSigner.address,\n txBytes,\n secretNumber,\n };\n}\n\nexport async function getSolanaCrossChainOrderInstructions(\n order: CrossChainOrder,\n options?: { rpcUrl?: string },\n): Promise<SolanaOrderInstructionResult> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const orderSigner = await generateKeyPairSigner();\n const signer = createNoopSigner(order.user as Address);\n\n let tokenInMint = address(order.sourceTokenAddress);\n\n const orderUserAddress = address(order.user);\n const spendingNative = tokenInMint === NATIVE_SOLANA_TOKEN_ADDRESS;\n\n if (spendingNative) {\n tokenInMint = WRAPPED_SOL_MINT_ADDRESS;\n }\n\n const tokenMintProgram = await fetchMint(rpc, tokenInMint);\n\n const guardAddress = address(CROSS_CHAIN_GUARD_ADDRESSES[ChainID.Solana]);\n\n const addressEncoder = getAddressEncoder();\n\n const [tokenInProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(tokenMintProgram.programAddress),\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const [guardProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n // Owner\n addressEncoder.encode(guardAddress),\n // Token program\n addressEncoder.encode(tokenMintProgram.programAddress),\n // mint address\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const instructions: Array<Instruction> = [];\n\n const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);\n\n if (spendingNative) {\n order.sourceTokenAddress = WRAPPED_SOL_MINT_ADDRESS;\n\n if (!userTokenInAccount.exists) {\n const createAccountIx = await getCreateAssociatedTokenInstructionAsync({\n payer: signer,\n ata: tokenInProgramAccount,\n owner: orderUserAddress,\n mint: tokenMintProgram.address,\n tokenProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(createAccountIx);\n }\n\n const transferIx = getTransferSolInstruction({\n source: signer,\n destination: userTokenInAccount.address,\n amount: order.sourceTokenAmount,\n });\n\n const syncNativeIx = getSyncNativeInstruction({\n account: userTokenInAccount.address,\n });\n\n instructions.push(transferIx);\n instructions.push(syncNativeIx);\n }\n\n const executionHashUint8Array = order.executionDetailsHashToBytes();\n\n const createOrderIx = getCreateOrderInstruction({\n user: signer,\n order: orderSigner,\n guard: address(CROSS_CHAIN_GUARD_ADDRESSES[ChainID.Solana]),\n systemProgram: SYSTEM_PROGRAM_ADDRESS,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n tokenInMint: tokenInMint,\n userTokenInAccount: userTokenInAccount.address,\n guardTokenInAccount: guardProgramAccount,\n tokenInProgram: tokenMintProgram.programAddress,\n amountIn: order.sourceTokenAmount,\n deadline: order.deadline,\n executionDetailsHash: executionHashUint8Array,\n minStablecoinsAmount: order.minStablecoinAmount,\n });\n\n instructions.push(createOrderIx);\n\n const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: 'confirmed' }).send();\n\n const txMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(signer, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n (tx) => addSignersToTransactionMessage([orderSigner], tx),\n );\n\n const partiallySignedTransaction = await partiallySignTransactionMessageWithSigners(txMessage);\n\n const txBytes = getTransactionCodec().encode(partiallySignedTransaction);\n\n return {\n orderAddress: orderSigner.address,\n txBytes: Uint8Array.from(txBytes),\n };\n}\n","import {\n createSolanaRpc,\n createSolanaRpcSubscriptions,\n type Rpc,\n type RpcSubscriptions,\n type SolanaRpcApiMainnet,\n type SolanaRpcSubscriptionsApi,\n sendAndConfirmTransactionFactory,\n} from '@solana/kit';\nimport type { SolanaConfig } from '../../config.js';\n\nexport type SolanaClient = {\n privateKey: string;\n rpc: Rpc<SolanaRpcApiMainnet>;\n rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n sendAndConfirmTransaction: ReturnType<typeof sendAndConfirmTransactionFactory>;\n};\n\nexport function createSolanaClient(config: SolanaConfig): SolanaClient {\n const rpc = config.rpcProviderUrl ? createSolanaRpc(config.rpcProviderUrl) : getDefaultSolanaRPC();\n const rpcSubscriptions = createSolanaRpcSubscriptions('wss://api.mainnet-beta.solana.com');\n const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({\n rpc,\n rpcSubscriptions,\n });\n\n return {\n privateKey: config.privateKey,\n rpc,\n rpcSubscriptions,\n sendAndConfirmTransaction,\n };\n}\n\nexport function getDefaultSolanaRPC(): Rpc<SolanaRpcApiMainnet> {\n return createSolanaRpc('https://api.mainnet-beta.solana.com');\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n type Account,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type MaybeAccount,\n type MaybeEncodedAccount,\n} from '@solana/accounts';\nimport { getAddressDecoder, getAddressEncoder, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\n\nexport const ORDER_DISCRIMINATOR = new Uint8Array([134, 173, 223, 185, 77, 86, 28, 51]);\n\nexport function getOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(ORDER_DISCRIMINATOR);\n}\n\nexport type Order = {\n discriminator: ReadonlyUint8Array;\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens In locked */\n amountIn: bigint;\n /** Min amount of stablecoins to receive if token IN will be swapped */\n minStablecoinsAmount: bigint;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n /** 32 bytes SHA-256 hash of execution details JSON string. Everything that's not used in smart contract */\n executionDetailsHash: ReadonlyUint8Array;\n /** `true` if tokens IN were taken for swap during `pre_swap` instruction */\n tokensInWereSwapped: boolean;\n /** Amount of stablecoins, locked after swap */\n lockedStablecoins: bigint;\n /** Collateral amount, locked during order execution */\n lockedCollateral: bigint;\n /**\n * Collateral amount, taken after solver failed to fulfill the order in time.\n * Transferred to the user on order fulfillment or cancellation\n */\n takenCollateral: bigint;\n /** Active solver which is currently executing this order */\n activeSolver: Address;\n /**\n * Timestamp, until which `active_solver` MUST execute the order and claim tokens\n * Order is locked for everyone but `active_solver` until this deadline\n */\n executionDeadline: number;\n};\n\nexport type OrderArgs = {\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens In locked */\n amountIn: number | bigint;\n /** Min amount of stablecoins to receive if token IN will be swapped */\n minStablecoinsAmount: number | bigint;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n /** 32 bytes SHA-256 hash of execution details JSON string. Everything that's not used in smart contract */\n executionDetailsHash: ReadonlyUint8Array;\n /** `true` if tokens IN were taken for swap during `pre_swap` instruction */\n tokensInWereSwapped: boolean;\n /** Amount of stablecoins, locked after swap */\n lockedStablecoins: number | bigint;\n /** Collateral amount, locked during order execution */\n lockedCollateral: number | bigint;\n /**\n * Collateral amount, taken after solver failed to fulfill the order in time.\n * Transferred to the user on order fulfillment or cancellation\n */\n takenCollateral: number | bigint;\n /** Active solver which is currently executing this order */\n activeSolver: Address;\n /**\n * Timestamp, until which `active_solver` MUST execute the order and claim tokens\n * Order is locked for everyone but `active_solver` until this deadline\n */\n executionDeadline: number;\n};\n\nexport function getOrderEncoder(): FixedSizeEncoder<OrderArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['user', getAddressEncoder()],\n ['guard', getAddressEncoder()],\n ['tokenInMint', getAddressEncoder()],\n ['amountIn', getU64Encoder()],\n ['minStablecoinsAmount', getU64Encoder()],\n ['deadline', getU32Encoder()],\n ['executionDetailsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['tokensInWereSwapped', getBooleanEncoder()],\n ['lockedStablecoins', getU64Encoder()],\n ['lockedCollateral', getU64Encoder()],\n ['takenCollateral', getU64Encoder()],\n ['activeSolver', getAddressEncoder()],\n ['executionDeadline', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getOrderDecoder(): FixedSizeDecoder<Order> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['user', getAddressDecoder()],\n ['guard', getAddressDecoder()],\n ['tokenInMint', getAddressDecoder()],\n ['amountIn', getU64Decoder()],\n ['minStablecoinsAmount', getU64Decoder()],\n ['deadline', getU32Decoder()],\n ['executionDetailsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['tokensInWereSwapped', getBooleanDecoder()],\n ['lockedStablecoins', getU64Decoder()],\n ['lockedCollateral', getU64Decoder()],\n ['takenCollateral', getU64Decoder()],\n ['activeSolver', getAddressDecoder()],\n ['executionDeadline', getU32Decoder()],\n ]);\n}\n\nexport function getOrderCodec(): FixedSizeCodec<OrderArgs, Order> {\n return combineCodec(getOrderEncoder(), getOrderDecoder());\n}\n\nexport function decodeOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Order, TAddress>;\nexport function decodeOrder<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Order, TAddress>;\nexport function decodeOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Order, TAddress> | MaybeAccount<Order, TAddress> {\n return decodeAccount(encodedAccount as MaybeEncodedAccount<TAddress>, getOrderDecoder());\n}\n\nexport async function fetchOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Order, TAddress>> {\n const maybeAccount = await fetchMaybeOrder(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Order, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeOrder(maybeAccount);\n}\n\nexport async function fetchAllOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Order>[]> {\n const maybeAccounts = await fetchAllMaybeOrder(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Order>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeOrder(maybeAccount));\n}\n\nexport function getOrderSize(): number {\n return 217;\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { type Address } from '@solana/addresses';\nimport {\n containsBytes,\n fixEncoderSize,\n getBytesEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type ParsedAcceptAdminInstruction,\n type ParsedCancelDcaOrderInstruction,\n type ParsedCancelOrderInstruction,\n type ParsedClaimTokensForDcaIntervalInstruction,\n type ParsedClaimTokensInstruction,\n type ParsedCollectProtocolFeesInstruction,\n type ParsedCreateDcaOrderInstruction,\n type ParsedCreateGuardInstruction,\n type ParsedCreateOrderInstruction,\n type ParsedInitializeInstruction,\n type ParsedPreStartDcaOrderExecutionInstruction,\n type ParsedPreStartOrderExecutionInstruction,\n type ParsedSetAdminInstruction,\n type ParsedSetAuctioneerPubKeyInstruction,\n type ParsedSetCancelAuthoritiesInstruction,\n type ParsedStartDcaOrderExecutionAfterSwapInstruction,\n type ParsedStartDcaOrderExecutionInstruction,\n type ParsedStartOrderExecutionAfterSwapInstruction,\n type ParsedStartOrderExecutionInstruction,\n} from '../instructions/index.js';\n\nexport const SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS =\n 'DQZQGiVa1PBXesdbCRzmJpZ7AyntLXfAwP5Qty1hgFqQ' as Address<'DQZQGiVa1PBXesdbCRzmJpZ7AyntLXfAwP5Qty1hgFqQ'>;\n\nexport enum SourceChainGuardAccount {\n AdminSingleton,\n DcaOrder,\n Guard,\n Order,\n}\n\nexport function identifySourceChainGuardAccount(\n account: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): SourceChainGuardAccount {\n const data = 'data' in account ? account.data : account;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([179, 22, 254, 245, 204, 230, 222, 194])\n ),\n 0\n )\n ) {\n return SourceChainGuardAccount.AdminSingleton;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([55, 1, 103, 253, 215, 66, 27, 57])\n ),\n 0\n )\n ) {\n return SourceChainGuardAccount.DcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([54, 187, 84, 137, 192, 15, 74, 248])\n ),\n 0\n )\n ) {\n return SourceChainGuardAccount.Guard;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([134, 173, 223, 185, 77, 86, 28, 51])\n ),\n 0\n )\n ) {\n return SourceChainGuardAccount.Order;\n }\n throw new Error('The provided account could not be identified as a sourceChainGuard account.');\n}\n\nexport enum SourceChainGuardInstruction {\n AcceptAdmin,\n CancelDcaOrder,\n CancelOrder,\n ClaimTokens,\n ClaimTokensForDcaInterval,\n CollectProtocolFees,\n CreateDcaOrder,\n CreateGuard,\n CreateOrder,\n Initialize,\n PreStartDcaOrderExecution,\n PreStartOrderExecution,\n SetAdmin,\n SetAuctioneerPubKey,\n SetCancelAuthorities,\n StartDcaOrderExecution,\n StartDcaOrderExecutionAfterSwap,\n StartOrderExecution,\n StartOrderExecutionAfterSwap,\n}\n\nexport function identifySourceChainGuardInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): SourceChainGuardInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([112, 42, 45, 90, 116, 181, 13, 170])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.AcceptAdmin;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([60, 161, 130, 157, 181, 55, 218, 163])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CancelDcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 129, 237, 240, 8, 49, 223, 132])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CancelOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([108, 216, 210, 231, 0, 212, 42, 64])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.ClaimTokens;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([166, 78, 207, 111, 247, 63, 107, 46])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.ClaimTokensForDcaInterval;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([22, 67, 23, 98, 150, 178, 70, 220])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CollectProtocolFees;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 66, 166, 38, 170, 3, 150, 169])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CreateDcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([251, 254, 17, 198, 219, 218, 154, 99])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CreateGuard;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([141, 54, 37, 207, 237, 210, 250, 215])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.CreateOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([175, 175, 109, 31, 13, 152, 155, 237])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.Initialize;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([79, 13, 106, 110, 71, 32, 11, 248])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.PreStartDcaOrderExecution;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([69, 230, 54, 217, 254, 93, 181, 32])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.PreStartOrderExecution;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([251, 163, 0, 52, 91, 194, 187, 92])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.SetAdmin;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([153, 39, 10, 108, 220, 0, 84, 47])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.SetAuctioneerPubKey;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([14, 52, 221, 74, 176, 141, 238, 71])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.SetCancelAuthorities;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([0, 61, 163, 212, 122, 175, 14, 47])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.StartDcaOrderExecution;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([30, 107, 27, 130, 23, 22, 101, 198])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.StartDcaOrderExecutionAfterSwap;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([38, 237, 19, 225, 182, 31, 246, 143])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.StartOrderExecution;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([142, 117, 45, 141, 169, 107, 117, 209])\n ),\n 0\n )\n ) {\n return SourceChainGuardInstruction.StartOrderExecutionAfterSwap;\n }\n throw new Error(\n 'The provided instruction could not be identified as a sourceChainGuard instruction.'\n );\n}\n\nexport type ParsedSourceChainGuardInstruction<\n TProgram extends string = 'DQZQGiVa1PBXesdbCRzmJpZ7AyntLXfAwP5Qty1hgFqQ',\n> =\n | ({\n instructionType: SourceChainGuardInstruction.AcceptAdmin;\n } & ParsedAcceptAdminInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CancelDcaOrder;\n } & ParsedCancelDcaOrderInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CancelOrder;\n } & ParsedCancelOrderInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.ClaimTokens;\n } & ParsedClaimTokensInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.ClaimTokensForDcaInterval;\n } & ParsedClaimTokensForDcaIntervalInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CollectProtocolFees;\n } & ParsedCollectProtocolFeesInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CreateDcaOrder;\n } & ParsedCreateDcaOrderInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CreateGuard;\n } & ParsedCreateGuardInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.CreateOrder;\n } & ParsedCreateOrderInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.Initialize;\n } & ParsedInitializeInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.PreStartDcaOrderExecution;\n } & ParsedPreStartDcaOrderExecutionInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.PreStartOrderExecution;\n } & ParsedPreStartOrderExecutionInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.SetAdmin;\n } & ParsedSetAdminInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.SetAuctioneerPubKey;\n } & ParsedSetAuctioneerPubKeyInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.SetCancelAuthorities;\n } & ParsedSetCancelAuthoritiesInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.StartDcaOrderExecution;\n } & ParsedStartDcaOrderExecutionInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.StartDcaOrderExecutionAfterSwap;\n } & ParsedStartDcaOrderExecutionAfterSwapInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.StartOrderExecution;\n } & ParsedStartOrderExecutionInstruction<TProgram>)\n | ({\n instructionType: SourceChainGuardInstruction.StartOrderExecutionAfterSwap;\n } & ParsedStartOrderExecutionAfterSwapInstruction<TProgram>);\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramDerivedAddress,\n type Address,\n type ProgramDerivedAddress,\n} from '@solana/addresses';\nimport { AccountRole, type AccountMeta, upgradeRoleToSigner } from '@solana/instructions';\nimport {\n isTransactionSigner as kitIsTransactionSigner,\n type AccountSignerMeta,\n type TransactionSigner,\n} from '@solana/signers';\n\n/**\n * Asserts that the given value is not null or undefined.\n * @internal\n */\nexport function expectSome<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error('Expected a value but received null or undefined.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a PublicKey.\n * @internal\n */\nexport function expectAddress<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): Address<T> {\n if (!value) {\n throw new Error('Expected a Address.');\n }\n if (typeof value === 'object' && 'address' in value) {\n return value.address;\n }\n if (Array.isArray(value)) {\n return value[0] as Address<T>;\n }\n return value as Address<T>;\n}\n\n/**\n * Asserts that the given value is a PDA.\n * @internal\n */\nexport function expectProgramDerivedAddress<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): ProgramDerivedAddress<T> {\n if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) {\n throw new Error('Expected a ProgramDerivedAddress.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a TransactionSigner.\n * @internal\n */\nexport function expectTransactionSigner<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): TransactionSigner<T> {\n if (!value || !isTransactionSigner(value)) {\n throw new Error('Expected a TransactionSigner.');\n }\n return value;\n}\n\n/**\n * Defines an instruction account to resolve.\n * @internal\n */\nexport type ResolvedAccount<\n T extends string = string,\n U extends Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null =\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null,\n> = {\n isWritable: boolean;\n value: U;\n};\n\n/**\n * Defines an instruction that stores additional bytes on-chain.\n * @internal\n */\nexport type InstructionWithByteDelta = {\n byteDelta: number;\n};\n\n/**\n * Get account metas and signers from resolved accounts.\n * @internal\n */\nexport function getAccountMetaFactory(\n programAddress: Address,\n optionalAccountStrategy: 'omitted' | 'programId'\n) {\n return (account: ResolvedAccount): AccountMeta | AccountSignerMeta | undefined => {\n if (!account.value) {\n if (optionalAccountStrategy === 'omitted') return;\n return Object.freeze({ address: programAddress, role: AccountRole.READONLY });\n }\n\n const writableRole = account.isWritable ? AccountRole.WRITABLE : AccountRole.READONLY;\n return Object.freeze({\n address: expectAddress(account.value),\n role: isTransactionSigner(account.value) ? upgradeRoleToSigner(writableRole) : writableRole,\n ...(isTransactionSigner(account.value) ? { signer: account.value } : Object),\n });\n };\n}\n\nexport function isTransactionSigner<TAddress extends string = string>(\n value: Address<TAddress> | ProgramDerivedAddress<TAddress> | TransactionSigner<TAddress>\n): value is TransactionSigner<TAddress> {\n return (\n !!value && typeof value === 'object' && 'address' in value && kitIsTransactionSigner(value)\n );\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CANCEL_ORDER_DISCRIMINATOR = new Uint8Array([95, 129, 237, 240, 8, 49, 223, 132]);\n\nexport function getCancelOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CANCEL_ORDER_DISCRIMINATOR);\n}\n\nexport type CancelOrderInstruction<\n TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountSigner extends string | AccountMeta<string> = string,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountRecoveredTokenMint extends string | AccountMeta<string> = string,\n TAccountUserRecoveredTokenAccount extends string | AccountMeta<string> = string,\n TAccountGuardRecoveredTokenAccount extends string | AccountMeta<string> = string,\n TAccountRecoveredTokenProgram extends string | AccountMeta<string> = string,\n TAccountCollateralTokenMint extends string | AccountMeta<string> = string,\n TAccountUserCollateralTokenAccount extends string | AccountMeta<string> = string,\n TAccountGuardCollateralTokenAccount extends string | AccountMeta<string> = string,\n TAccountCollateralTokenProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountSigner extends string\n ? WritableSignerAccount<TAccountSigner> & AccountSignerMeta<TAccountSigner>\n : TAccountSigner,\n TAccountUser extends string ? WritableAccount<TAccountUser> : TAccountUser,\n TAccountOrder extends string ? WritableAccount<TAccountOrder> : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountRecoveredTokenMint extends string\n ? ReadonlyAccount<TAccountRecoveredTokenMint>\n : TAccountRecoveredTokenMint,\n TAccountUserRecoveredTokenAccount extends string\n ? WritableAccount<TAccountUserRecoveredTokenAccount>\n : TAccountUserRecoveredTokenAccount,\n TAccountGuardRecoveredTokenAccount extends string\n ? WritableAccount<TAccountGuardRecoveredTokenAccount>\n : TAccountGuardRecoveredTokenAccount,\n TAccountRecoveredTokenProgram extends string\n ? ReadonlyAccount<TAccountRecoveredTokenProgram>\n : TAccountRecoveredTokenProgram,\n TAccountCollateralTokenMint extends string\n ? ReadonlyAccount<TAccountCollateralTokenMint>\n : TAccountCollateralTokenMint,\n TAccountUserCollateralTokenAccount extends string\n ? WritableAccount<TAccountUserCollateralTokenAccount>\n : TAccountUserCollateralTokenAccount,\n TAccountGuardCollateralTokenAccount extends string\n ? WritableAccount<TAccountGuardCollateralTokenAccount>\n : TAccountGuardCollateralTokenAccount,\n TAccountCollateralTokenProgram extends string\n ? ReadonlyAccount<TAccountCollateralTokenProgram>\n : TAccountCollateralTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CancelOrderInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type CancelOrderInstructionDataArgs = Object;\n\nexport function getCancelOrderInstructionDataEncoder(): FixedSizeEncoder<CancelOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: CANCEL_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCancelOrderInstructionDataDecoder(): FixedSizeDecoder<CancelOrderInstructionData> {\n return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);\n}\n\nexport function getCancelOrderInstructionDataCodec(): FixedSizeCodec<\n CancelOrderInstructionDataArgs,\n CancelOrderInstructionData\n> {\n return combineCodec(\n getCancelOrderInstructionDataEncoder(),\n getCancelOrderInstructionDataDecoder()\n );\n}\n\nexport type CancelOrderInput<\n TAccountSigner extends string = string,\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountRecoveredTokenMint extends string = string,\n TAccountUserRecoveredTokenAccount extends string = string,\n TAccountGuardRecoveredTokenAccount extends string = string,\n TAccountRecoveredTokenProgram extends string = string,\n TAccountCollateralTokenMint extends string = string,\n TAccountUserCollateralTokenAccount extends string = string,\n TAccountGuardCollateralTokenAccount extends string = string,\n TAccountCollateralTokenProgram extends string = string,\n> = {\n /** Either user or cancel authority */\n signer: TransactionSigner<TAccountSigner>;\n /** User account that will receive lamports after closing Order account */\n user: Address<TAccountUser>;\n /** Order data */\n order: Address<TAccountOrder>;\n /** Guard address, that protects this order execution */\n guard: Address<TAccountGuard>;\n /** Recovered token mint */\n recoveredTokenMint: Address<TAccountRecoveredTokenMint>;\n /**\n * User token account to which tokens IN or stablecoins will be sent.\n * - Must be either Token IN account or stablecoin account\n * - Must be same token as Guard token account\n */\n userRecoveredTokenAccount: Address<TAccountUserRecoveredTokenAccount>;\n /**\n * Guard token account from which tokens IN or stablecoins will be sent to the user\n * - Must be either Token IN account or stablecoin account\n * - Must be same token as Guard token account\n */\n guardRecoveredTokenAccount: Address<TAccountGuardRecoveredTokenAccount>;\n /** Recovered token program */\n recoveredTokenProgram: Address<TAccountRecoveredTokenProgram>;\n /** Recovered token mint */\n collateralTokenMint: Address<TAccountCollateralTokenMint>;\n /** User collateral token account to which taken collateral (if any) will be sent. */\n userCollateralTokenAccount?: Address<TAccountUserCollateralTokenAccount>;\n /** Guard collateral token account to which taken collateral (if any) will be sent. */\n guardCollateralTokenAccount: Address<TAccountGuardCollateralTokenAccount>;\n /** Solana token program */\n collateralTokenProgram: Address<TAccountCollateralTokenProgram>;\n};\n\nexport function getCancelOrderInstruction<\n TAccountSigner extends string,\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountRecoveredTokenMint extends string,\n TAccountUserRecoveredTokenAccount extends string,\n TAccountGuardRecoveredTokenAccount extends string,\n TAccountRecoveredTokenProgram extends string,\n TAccountCollateralTokenMint extends string,\n TAccountUserCollateralTokenAccount extends string,\n TAccountGuardCollateralTokenAccount extends string,\n TAccountCollateralTokenProgram extends string,\n TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CancelOrderInput<\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountRecoveredTokenMint,\n TAccountUserRecoveredTokenAccount,\n TAccountGuardRecoveredTokenAccount,\n TAccountRecoveredTokenProgram,\n TAccountCollateralTokenMint,\n TAccountUserCollateralTokenAccount,\n TAccountGuardCollateralTokenAccount,\n TAccountCollateralTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CancelOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountRecoveredTokenMint,\n TAccountUserRecoveredTokenAccount,\n TAccountGuardRecoveredTokenAccount,\n TAccountRecoveredTokenProgram,\n TAccountCollateralTokenMint,\n TAccountUserCollateralTokenAccount,\n TAccountGuardCollateralTokenAccount,\n TAccountCollateralTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n signer: { value: input.signer ?? null, isWritable: true },\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n recoveredTokenMint: { value: input.recoveredTokenMint ?? null, isWritable: false },\n userRecoveredTokenAccount: { value: input.userRecoveredTokenAccount ?? null, isWritable: true },\n guardRecoveredTokenAccount: {\n value: input.guardRecoveredTokenAccount ?? null,\n isWritable: true,\n },\n recoveredTokenProgram: { value: input.recoveredTokenProgram ?? null, isWritable: false },\n collateralTokenMint: { value: input.collateralTokenMint ?? null, isWritable: false },\n userCollateralTokenAccount: {\n value: input.userCollateralTokenAccount ?? null,\n isWritable: true,\n },\n guardCollateralTokenAccount: {\n value: input.guardCollateralTokenAccount ?? null,\n isWritable: true,\n },\n collateralTokenProgram: { value: input.collateralTokenProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.signer),\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.recoveredTokenMint),\n getAccountMeta(accounts.userRecoveredTokenAccount),\n getAccountMeta(accounts.guardRecoveredTokenAccount),\n getAccountMeta(accounts.recoveredTokenProgram),\n getAccountMeta(accounts.collateralTokenMint),\n getAccountMeta(accounts.userCollateralTokenAccount),\n getAccountMeta(accounts.guardCollateralTokenAccount),\n getAccountMeta(accounts.collateralTokenProgram),\n ],\n programAddress,\n data: getCancelOrderInstructionDataEncoder().encode({}),\n } as CancelOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountRecoveredTokenMint,\n TAccountUserRecoveredTokenAccount,\n TAccountGuardRecoveredTokenAccount,\n TAccountRecoveredTokenProgram,\n TAccountCollateralTokenMint,\n TAccountUserCollateralTokenAccount,\n TAccountGuardCollateralTokenAccount,\n TAccountCollateralTokenProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCancelOrderInstruction<\n TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** Either user or cancel authority */\n signer: TAccountMetas[0];\n /** User account that will receive lamports after closing Order account */\n user: TAccountMetas[1];\n /** Order data */\n order: TAccountMetas[2];\n /** Guard address, that protects this order execution */\n guard: TAccountMetas[3];\n /** Recovered token mint */\n recoveredTokenMint: TAccountMetas[4];\n /**\n * User token account to which tokens IN or stablecoins will be sent.\n * - Must be either Token IN account or stablecoin account\n * - Must be same token as Guard token account\n */\n\n userRecoveredTokenAccount: TAccountMetas[5];\n /**\n * Guard token account from which tokens IN or stablecoins will be sent to the user\n * - Must be either Token IN account or stablecoin account\n * - Must be same token as Guard token account\n */\n\n guardRecoveredTokenAccount: TAccountMetas[6];\n /** Recovered token program */\n recoveredTokenProgram: TAccountMetas[7];\n /** Recovered token mint */\n collateralTokenMint: TAccountMetas[8];\n /** User collateral token account to which taken collateral (if any) will be sent. */\n userCollateralTokenAccount?: TAccountMetas[9] | undefined;\n /** Guard collateral token account to which taken collateral (if any) will be sent. */\n guardCollateralTokenAccount: TAccountMetas[10];\n /** Solana token program */\n collateralTokenProgram: TAccountMetas[11];\n };\n data: CancelOrderInstructionData;\n};\n\nexport function parseCancelOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCancelOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 12) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS ? undefined : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n signer: getNextAccount(),\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n recoveredTokenMint: getNextAccount(),\n userRecoveredTokenAccount: getNextAccount(),\n guardRecoveredTokenAccount: getNextAccount(),\n recoveredTokenProgram: getNextAccount(),\n collateralTokenMint: getNextAccount(),\n userCollateralTokenAccount: getNextOptionalAccount(),\n guardCollateralTokenAccount: getNextAccount(),\n collateralTokenProgram: getNextAccount(),\n },\n data: getCancelOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { getAddressEncoder, getProgramDerivedAddress, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { expectAddress, getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CREATE_ORDER_DISCRIMINATOR = new Uint8Array([141, 54, 37, 207, 237, 210, 250, 215]);\n\nexport function getCreateOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CREATE_ORDER_DISCRIMINATOR);\n}\n\nexport type CreateOrderInstruction<\n TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> = '11111111111111111111111111111111',\n TAccountAssociatedTokenProgram extends\n | string\n | AccountMeta<string> = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TAccountTokenInMint extends string | AccountMeta<string> = string,\n TAccountUserTokenInAccount extends string | AccountMeta<string> = string,\n TAccountGuardTokenInAccount extends string | AccountMeta<string> = string,\n TAccountTokenInProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountUser extends string\n ? WritableSignerAccount<TAccountUser> & AccountSignerMeta<TAccountUser>\n : TAccountUser,\n TAccountOrder extends string\n ? WritableSignerAccount<TAccountOrder> & AccountSignerMeta<TAccountOrder>\n : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n TAccountTokenInMint extends string\n ? ReadonlyAccount<TAccountTokenInMint>\n : TAccountTokenInMint,\n TAccountUserTokenInAccount extends string\n ? WritableAccount<TAccountUserTokenInAccount>\n : TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount extends string\n ? WritableAccount<TAccountGuardTokenInAccount>\n : TAccountGuardTokenInAccount,\n TAccountTokenInProgram extends string\n ? ReadonlyAccount<TAccountTokenInProgram>\n : TAccountTokenInProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CreateOrderInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n minStablecoinsAmount: bigint;\n deadline: number;\n executionDetailsHash: ReadonlyUint8Array;\n};\n\nexport type CreateOrderInstructionDataArgs = {\n amountIn: number | bigint;\n minStablecoinsAmount: number | bigint;\n deadline: number;\n executionDetailsHash: ReadonlyUint8Array;\n};\n\nexport function getCreateOrderInstructionDataEncoder(): FixedSizeEncoder<CreateOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['minStablecoinsAmount', getU64Encoder()],\n ['deadline', getU32Encoder()],\n ['executionDetailsHash', fixEncoderSize(getBytesEncoder(), 32)],\n ]),\n (value) => ({ ...value, discriminator: CREATE_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCreateOrderInstructionDataDecoder(): FixedSizeDecoder<CreateOrderInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['minStablecoinsAmount', getU64Decoder()],\n ['deadline', getU32Decoder()],\n ['executionDetailsHash', fixDecoderSize(getBytesDecoder(), 32)],\n ]);\n}\n\nexport function getCreateOrderInstructionDataCodec(): FixedSizeCodec<\n CreateOrderInstructionDataArgs,\n CreateOrderInstructionData\n> {\n return combineCodec(\n getCreateOrderInstructionDataEncoder(),\n getCreateOrderInstructionDataDecoder()\n );\n}\n\nexport type CreateOrderAsyncInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount?: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountIn: CreateOrderInstructionDataArgs['amountIn'];\n minStablecoinsAmount: CreateOrderInstructionDataArgs['minStablecoinsAmount'];\n deadline: CreateOrderInstructionDataArgs['deadline'];\n executionDetailsHash: CreateOrderInstructionDataArgs['executionDetailsHash'];\n};\n\nexport async function getCreateOrderInstructionAsync<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateOrderAsyncInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n CreateOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n if (!accounts.guardTokenInAccount.value) {\n accounts.guardTokenInAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.guard.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInMint.value)),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateOrderInstructionDataEncoder().encode(args as CreateOrderInstructionDataArgs),\n } as CreateOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type CreateOrderInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountIn: CreateOrderInstructionDataArgs['amountIn'];\n minStablecoinsAmount: CreateOrderInstructionDataArgs['minStablecoinsAmount'];\n deadline: CreateOrderInstructionDataArgs['deadline'];\n executionDetailsHash: CreateOrderInstructionDataArgs['executionDetailsHash'];\n};\n\nexport function getCreateOrderInstruction<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateOrderInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CreateOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateOrderInstructionDataEncoder().encode(args as CreateOrderInstructionDataArgs),\n } as CreateOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCreateOrderInstruction<\n TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** User creating the order */\n user: TAccountMetas[0];\n /** Account that will store order data */\n order: TAccountMetas[1];\n /** Guard address, that will protect this order execution */\n guard: TAccountMetas[2];\n /** Solana System program */\n systemProgram: TAccountMetas[3];\n /** Solana token program */\n associatedTokenProgram: TAccountMetas[4];\n /** Token IN that user wants to spend */\n tokenInMint: TAccountMetas[5];\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: TAccountMetas[6];\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount: TAccountMetas[7];\n /** Solana token program */\n tokenInProgram: TAccountMetas[8];\n };\n data: CreateOrderInstructionData;\n};\n\nexport function parseCreateOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCreateOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n systemProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n tokenInMint: getNextAccount(),\n userTokenInAccount: getNextAccount(),\n guardTokenInAccount: getNextAccount(),\n tokenInProgram: getNextAccount(),\n },\n data: getCreateOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n type Account,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type MaybeAccount,\n type MaybeEncodedAccount,\n} from '@solana/accounts';\nimport { getAddressDecoder, getAddressEncoder, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type Codec,\n type Decoder,\n type Encoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\n\nexport const DCA_ORDER_DISCRIMINATOR = new Uint8Array([55, 1, 103, 253, 215, 66, 27, 57]);\n\nexport function getDcaOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(DCA_ORDER_DISCRIMINATOR);\n}\n\nexport type DcaOrder = {\n discriminator: ReadonlyUint8Array;\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens IN user is willing to spend per interval/trade */\n amountInPerInterval: bigint;\n /** Minimum amount of tokens OUT to receive PER INTERVAL */\n amountOutMin: bigint;\n /** Timestamp (in seconds) when the user created and submitted the DCA order */\n startTime: number;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n /** Total number of intervals over which the DCA order will be executed */\n totalIntervals: number;\n /** DCA interval duration, in seconds */\n intervalDuration: number;\n /**\n * Keccak256 hash of (token_out,receiver,extra_transfers_tokens_and_receivers,secret_number)\n * Since we want to hide tokens OUT right until execution moment to protect user from\n * any sort of MEV attack\n */\n secretHash: ReadonlyUint8Array;\n /**\n * Array of requested extra transfers amounts\n * Since we want to hide tokens OUT and receivers right until execution moment\n * to protect user from any sort of MEV attack\n * Tokens and receivers will be collected from `remaining_accounts`\n * during fulfillment and checked against `secret_hash` value\n */\n extraTransfersAmounts: Array<bigint>;\n /** Total number of already executed intervals */\n totalExecutedIntervals: number;\n /** INDEX of last executed interval */\n lastExecutedIntervalIndex: number;\n};\n\nexport type DcaOrderArgs = {\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens IN user is willing to spend per interval/trade */\n amountInPerInterval: number | bigint;\n /** Minimum amount of tokens OUT to receive PER INTERVAL */\n amountOutMin: number | bigint;\n /** Timestamp (in seconds) when the user created and submitted the DCA order */\n startTime: number;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n /** Total number of intervals over which the DCA order will be executed */\n totalIntervals: number;\n /** DCA interval duration, in seconds */\n intervalDuration: number;\n /**\n * Keccak256 hash of (token_out,receiver,extra_transfers_tokens_and_receivers,secret_number)\n * Since we want to hide tokens OUT right until execution moment to protect user from\n * any sort of MEV attack\n */\n secretHash: ReadonlyUint8Array;\n /**\n * Array of requested extra transfers amounts\n * Since we want to hide tokens OUT and receivers right until execution moment\n * to protect user from any sort of MEV attack\n * Tokens and receivers will be collected from `remaining_accounts`\n * during fulfillment and checked against `secret_hash` value\n */\n extraTransfersAmounts: Array<number | bigint>;\n /** Total number of already executed intervals */\n totalExecutedIntervals: number;\n /** INDEX of last executed interval */\n lastExecutedIntervalIndex: number;\n};\n\nexport function getDcaOrderEncoder(): Encoder<DcaOrderArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['user', getAddressEncoder()],\n ['guard', getAddressEncoder()],\n ['tokenInMint', getAddressEncoder()],\n ['amountInPerInterval', getU64Encoder()],\n ['amountOutMin', getU64Encoder()],\n ['startTime', getU32Encoder()],\n ['deadline', getU32Encoder()],\n ['totalIntervals', getU32Encoder()],\n ['intervalDuration', getU32Encoder()],\n ['secretHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['extraTransfersAmounts', getArrayEncoder(getU64Encoder())],\n ['totalExecutedIntervals', getU32Encoder()],\n ['lastExecutedIntervalIndex', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: DCA_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getDcaOrderDecoder(): Decoder<DcaOrder> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['user', getAddressDecoder()],\n ['guard', getAddressDecoder()],\n ['tokenInMint', getAddressDecoder()],\n ['amountInPerInterval', getU64Decoder()],\n ['amountOutMin', getU64Decoder()],\n ['startTime', getU32Decoder()],\n ['deadline', getU32Decoder()],\n ['totalIntervals', getU32Decoder()],\n ['intervalDuration', getU32Decoder()],\n ['secretHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['extraTransfersAmounts', getArrayDecoder(getU64Decoder())],\n ['totalExecutedIntervals', getU32Decoder()],\n ['lastExecutedIntervalIndex', getU32Decoder()],\n ]);\n}\n\nexport function getDcaOrderCodec(): Codec<DcaOrderArgs, DcaOrder> {\n return combineCodec(getDcaOrderEncoder(), getDcaOrderDecoder());\n}\n\nexport function decodeDcaOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<DcaOrder, TAddress>;\nexport function decodeDcaOrder<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<DcaOrder, TAddress>;\nexport function decodeDcaOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<DcaOrder, TAddress> | MaybeAccount<DcaOrder, TAddress> {\n return decodeAccount(encodedAccount as MaybeEncodedAccount<TAddress>, getDcaOrderDecoder());\n}\n\nexport async function fetchDcaOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<DcaOrder, TAddress>> {\n const maybeAccount = await fetchMaybeDcaOrder(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeDcaOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<DcaOrder, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeDcaOrder(maybeAccount);\n}\n\nexport async function fetchAllDcaOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<DcaOrder>[]> {\n const maybeAccounts = await fetchAllMaybeDcaOrder(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeDcaOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<DcaOrder>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeDcaOrder(maybeAccount));\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n type Account,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type MaybeAccount,\n type MaybeEncodedAccount,\n} from '@solana/accounts';\nimport { getAddressDecoder, getAddressEncoder, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type Codec,\n type Decoder,\n type Encoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\n\nexport const LIMIT_ORDER_DISCRIMINATOR = new Uint8Array([137, 183, 212, 91, 115, 29, 141, 227]);\n\nexport function getLimitOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(LIMIT_ORDER_DISCRIMINATOR);\n}\n\nexport type LimitOrder = {\n discriminator: ReadonlyUint8Array;\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens In locked */\n amountIn: bigint;\n /** Minimum amount of tokens OUT to receive */\n amountOutMin: bigint;\n /**\n * Keccak256 hash of (token_out,receiver,extra_transfers_tokens_and_receivers,secret_number)\n * Since we want to hide tokens OUT right until execution moment to protect user from\n * any sort of MEV attack\n */\n secretHash: ReadonlyUint8Array;\n /**\n * Array of requested extra transfers amounts\n * Since we want to hide tokens OUT and receivers right until execution moment\n * to protect user from any sort of MEV attack\n * Tokens and receivers will be collected from `remaining_accounts`\n * during fulfillment and checked against `secret_hash` value\n */\n extraTransfersAmounts: Array<bigint>;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n};\n\nexport type LimitOrderArgs = {\n /** User address, that created this order */\n user: Address;\n /** Guard address, that will protect this order execution */\n guard: Address;\n /** Token IN that user wants to spend */\n tokenInMint: Address;\n /** Amount of tokens In locked */\n amountIn: number | bigint;\n /** Minimum amount of tokens OUT to receive */\n amountOutMin: number | bigint;\n /**\n * Keccak256 hash of (token_out,receiver,extra_transfers_tokens_and_receivers,secret_number)\n * Since we want to hide tokens OUT right until execution moment to protect user from\n * any sort of MEV attack\n */\n secretHash: ReadonlyUint8Array;\n /**\n * Array of requested extra transfers amounts\n * Since we want to hide tokens OUT and receivers right until execution moment\n * to protect user from any sort of MEV attack\n * Tokens and receivers will be collected from `remaining_accounts`\n * during fulfillment and checked against `secret_hash` value\n */\n extraTransfersAmounts: Array<number | bigint>;\n /** Deadline for the operation, in Unix timestamp format, in SECONDS */\n deadline: number;\n};\n\nexport function getLimitOrderEncoder(): Encoder<LimitOrderArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['user', getAddressEncoder()],\n ['guard', getAddressEncoder()],\n ['tokenInMint', getAddressEncoder()],\n ['amountIn', getU64Encoder()],\n ['amountOutMin', getU64Encoder()],\n ['secretHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['extraTransfersAmounts', getArrayEncoder(getU64Encoder())],\n ['deadline', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: LIMIT_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getLimitOrderDecoder(): Decoder<LimitOrder> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['user', getAddressDecoder()],\n ['guard', getAddressDecoder()],\n ['tokenInMint', getAddressDecoder()],\n ['amountIn', getU64Decoder()],\n ['amountOutMin', getU64Decoder()],\n ['secretHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['extraTransfersAmounts', getArrayDecoder(getU64Decoder())],\n ['deadline', getU32Decoder()],\n ]);\n}\n\nexport function getLimitOrderCodec(): Codec<LimitOrderArgs, LimitOrder> {\n return combineCodec(getLimitOrderEncoder(), getLimitOrderDecoder());\n}\n\nexport function decodeLimitOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<LimitOrder, TAddress>;\nexport function decodeLimitOrder<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<LimitOrder, TAddress>;\nexport function decodeLimitOrder<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<LimitOrder, TAddress> | MaybeAccount<LimitOrder, TAddress> {\n return decodeAccount(encodedAccount as MaybeEncodedAccount<TAddress>, getLimitOrderDecoder());\n}\n\nexport async function fetchLimitOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<LimitOrder, TAddress>> {\n const maybeAccount = await fetchMaybeLimitOrder(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeLimitOrder<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<LimitOrder, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeLimitOrder(maybeAccount);\n}\n\nexport async function fetchAllLimitOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<LimitOrder>[]> {\n const maybeAccounts = await fetchAllMaybeLimitOrder(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeLimitOrder(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<LimitOrder>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeLimitOrder(maybeAccount));\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { type Address } from '@solana/addresses';\nimport {\n containsBytes,\n fixEncoderSize,\n getBytesEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type ParsedAcceptAdminInstruction,\n type ParsedCancelDcaOrderInstruction,\n type ParsedCancelLimitOrderInstruction,\n type ParsedCollectProtocolFeesInstruction,\n type ParsedCreateDcaOrderInstruction,\n type ParsedCreateGuardInstruction,\n type ParsedCreateLimitOrderInstruction,\n type ParsedFulfillDcaOrderIntervalInstruction,\n type ParsedFulfillLimitOrderInstruction,\n type ParsedInitializeInstruction,\n type ParsedSetAdminInstruction,\n type ParsedSetAuctioneerPubKeyInstruction,\n type ParsedSetCancelAuthoritiesInstruction,\n} from '../instructions/index.js';\n\nexport const SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS =\n 'EaSKMioKTLtbFXVaMEmHjSdZDEoZHpSmQBu6NfsND87n' as Address<'EaSKMioKTLtbFXVaMEmHjSdZDEoZHpSmQBu6NfsND87n'>;\n\nexport enum SingleChainGuardAccount {\n AdminSingleton,\n DcaOrder,\n Guard,\n LimitOrder,\n}\n\nexport function identifySingleChainGuardAccount(\n account: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): SingleChainGuardAccount {\n const data = 'data' in account ? account.data : account;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([179, 22, 254, 245, 204, 230, 222, 194])\n ),\n 0\n )\n ) {\n return SingleChainGuardAccount.AdminSingleton;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([55, 1, 103, 253, 215, 66, 27, 57])\n ),\n 0\n )\n ) {\n return SingleChainGuardAccount.DcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([54, 187, 84, 137, 192, 15, 74, 248])\n ),\n 0\n )\n ) {\n return SingleChainGuardAccount.Guard;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([137, 183, 212, 91, 115, 29, 141, 227])\n ),\n 0\n )\n ) {\n return SingleChainGuardAccount.LimitOrder;\n }\n throw new Error('The provided account could not be identified as a singleChainGuard account.');\n}\n\nexport enum SingleChainGuardInstruction {\n AcceptAdmin,\n CancelDcaOrder,\n CancelLimitOrder,\n CollectProtocolFees,\n CreateDcaOrder,\n CreateGuard,\n CreateLimitOrder,\n FulfillDcaOrderInterval,\n FulfillLimitOrder,\n Initialize,\n SetAdmin,\n SetAuctioneerPubKey,\n SetCancelAuthorities,\n}\n\nexport function identifySingleChainGuardInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): SingleChainGuardInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([112, 42, 45, 90, 116, 181, 13, 170])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.AcceptAdmin;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([60, 161, 130, 157, 181, 55, 218, 163])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CancelDcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([132, 156, 132, 31, 67, 40, 232, 97])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CancelLimitOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([22, 67, 23, 98, 150, 178, 70, 220])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CollectProtocolFees;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 66, 166, 38, 170, 3, 150, 169])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CreateDcaOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([251, 254, 17, 198, 219, 218, 154, 99])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CreateGuard;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([76, 161, 70, 122, 82, 20, 142, 75])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.CreateLimitOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([15, 118, 183, 60, 46, 43, 243, 244])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.FulfillDcaOrderInterval;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([70, 1, 151, 197, 125, 110, 46, 244])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.FulfillLimitOrder;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([175, 175, 109, 31, 13, 152, 155, 237])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.Initialize;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([251, 163, 0, 52, 91, 194, 187, 92])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.SetAdmin;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([153, 39, 10, 108, 220, 0, 84, 47])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.SetAuctioneerPubKey;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([14, 52, 221, 74, 176, 141, 238, 71])\n ),\n 0\n )\n ) {\n return SingleChainGuardInstruction.SetCancelAuthorities;\n }\n throw new Error(\n 'The provided instruction could not be identified as a singleChainGuard instruction.'\n );\n}\n\nexport type ParsedSingleChainGuardInstruction<\n TProgram extends string = 'EaSKMioKTLtbFXVaMEmHjSdZDEoZHpSmQBu6NfsND87n',\n> =\n | ({\n instructionType: SingleChainGuardInstruction.AcceptAdmin;\n } & ParsedAcceptAdminInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CancelDcaOrder;\n } & ParsedCancelDcaOrderInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CancelLimitOrder;\n } & ParsedCancelLimitOrderInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CollectProtocolFees;\n } & ParsedCollectProtocolFeesInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CreateDcaOrder;\n } & ParsedCreateDcaOrderInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CreateGuard;\n } & ParsedCreateGuardInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.CreateLimitOrder;\n } & ParsedCreateLimitOrderInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.FulfillDcaOrderInterval;\n } & ParsedFulfillDcaOrderIntervalInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.FulfillLimitOrder;\n } & ParsedFulfillLimitOrderInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.Initialize;\n } & ParsedInitializeInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.SetAdmin;\n } & ParsedSetAdminInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.SetAuctioneerPubKey;\n } & ParsedSetAuctioneerPubKeyInstruction<TProgram>)\n | ({\n instructionType: SingleChainGuardInstruction.SetCancelAuthorities;\n } & ParsedSetCancelAuthoritiesInstruction<TProgram>);\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramDerivedAddress,\n type Address,\n type ProgramDerivedAddress,\n} from '@solana/addresses';\nimport { AccountRole, type AccountMeta, upgradeRoleToSigner } from '@solana/instructions';\nimport {\n isTransactionSigner as kitIsTransactionSigner,\n type AccountSignerMeta,\n type TransactionSigner,\n} from '@solana/signers';\n\n/**\n * Asserts that the given value is not null or undefined.\n * @internal\n */\nexport function expectSome<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error('Expected a value but received null or undefined.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a PublicKey.\n * @internal\n */\nexport function expectAddress<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): Address<T> {\n if (!value) {\n throw new Error('Expected a Address.');\n }\n if (typeof value === 'object' && 'address' in value) {\n return value.address;\n }\n if (Array.isArray(value)) {\n return value[0] as Address<T>;\n }\n return value as Address<T>;\n}\n\n/**\n * Asserts that the given value is a PDA.\n * @internal\n */\nexport function expectProgramDerivedAddress<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): ProgramDerivedAddress<T> {\n if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) {\n throw new Error('Expected a ProgramDerivedAddress.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a TransactionSigner.\n * @internal\n */\nexport function expectTransactionSigner<T extends string = string>(\n value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined\n): TransactionSigner<T> {\n if (!value || !isTransactionSigner(value)) {\n throw new Error('Expected a TransactionSigner.');\n }\n return value;\n}\n\n/**\n * Defines an instruction account to resolve.\n * @internal\n */\nexport type ResolvedAccount<\n T extends string = string,\n U extends Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null =\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null,\n> = {\n isWritable: boolean;\n value: U;\n};\n\n/**\n * Defines an instruction that stores additional bytes on-chain.\n * @internal\n */\nexport type InstructionWithByteDelta = {\n byteDelta: number;\n};\n\n/**\n * Get account metas and signers from resolved accounts.\n * @internal\n */\nexport function getAccountMetaFactory(\n programAddress: Address,\n optionalAccountStrategy: 'omitted' | 'programId'\n) {\n return (account: ResolvedAccount): AccountMeta | AccountSignerMeta | undefined => {\n if (!account.value) {\n if (optionalAccountStrategy === 'omitted') return;\n return Object.freeze({ address: programAddress, role: AccountRole.READONLY });\n }\n\n const writableRole = account.isWritable ? AccountRole.WRITABLE : AccountRole.READONLY;\n return Object.freeze({\n address: expectAddress(account.value),\n role: isTransactionSigner(account.value) ? upgradeRoleToSigner(writableRole) : writableRole,\n ...(isTransactionSigner(account.value) ? { signer: account.value } : Object),\n });\n };\n}\n\nexport function isTransactionSigner<TAddress extends string = string>(\n value: Address<TAddress> | ProgramDerivedAddress<TAddress> | TransactionSigner<TAddress>\n): value is TransactionSigner<TAddress> {\n return (\n !!value && typeof value === 'object' && 'address' in value && kitIsTransactionSigner(value)\n );\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CANCEL_DCA_ORDER_DISCRIMINATOR = new Uint8Array([\n 60, 161, 130, 157, 181, 55, 218, 163,\n]);\n\nexport function getCancelDcaOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CANCEL_DCA_ORDER_DISCRIMINATOR);\n}\n\nexport type CancelDcaOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountSigner extends string | AccountMeta<string> = string,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountTokenInMint extends string | AccountMeta<string> = string,\n TAccountUserTokenInAccount extends string | AccountMeta<string> = string,\n TAccountGuardTokenInAccount extends string | AccountMeta<string> = string,\n TAccountTokenInProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountSigner extends string\n ? WritableSignerAccount<TAccountSigner> & AccountSignerMeta<TAccountSigner>\n : TAccountSigner,\n TAccountUser extends string ? WritableAccount<TAccountUser> : TAccountUser,\n TAccountOrder extends string ? WritableAccount<TAccountOrder> : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountTokenInMint extends string\n ? ReadonlyAccount<TAccountTokenInMint>\n : TAccountTokenInMint,\n TAccountUserTokenInAccount extends string\n ? WritableAccount<TAccountUserTokenInAccount>\n : TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount extends string\n ? WritableAccount<TAccountGuardTokenInAccount>\n : TAccountGuardTokenInAccount,\n TAccountTokenInProgram extends string\n ? ReadonlyAccount<TAccountTokenInProgram>\n : TAccountTokenInProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CancelDcaOrderInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type CancelDcaOrderInstructionDataArgs = Object;\n\nexport function getCancelDcaOrderInstructionDataEncoder(): FixedSizeEncoder<CancelDcaOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: CANCEL_DCA_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCancelDcaOrderInstructionDataDecoder(): FixedSizeDecoder<CancelDcaOrderInstructionData> {\n return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);\n}\n\nexport function getCancelDcaOrderInstructionDataCodec(): FixedSizeCodec<\n CancelDcaOrderInstructionDataArgs,\n CancelDcaOrderInstructionData\n> {\n return combineCodec(\n getCancelDcaOrderInstructionDataEncoder(),\n getCancelDcaOrderInstructionDataDecoder()\n );\n}\n\nexport type CancelDcaOrderInput<\n TAccountSigner extends string = string,\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** Either user or cancel authority */\n signer: TransactionSigner<TAccountSigner>;\n /** User account that will receive lamports after closing Order account */\n user: Address<TAccountUser>;\n /** DCA order data */\n order: Address<TAccountOrder>;\n /** Guard address, that protects this DCA order execution */\n guard: Address<TAccountGuard>;\n /** Token IN mint */\n tokenInMint: Address<TAccountTokenInMint>;\n /** User token account to which tokens IN will be sent. */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Guard token account from which tokens IN will be sent to the user */\n guardTokenInAccount: Address<TAccountGuardTokenInAccount>;\n /** Recovered token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n};\n\nexport function getCancelDcaOrderInstruction<\n TAccountSigner extends string,\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CancelDcaOrderInput<\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CancelDcaOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n signer: { value: input.signer ?? null, isWritable: true },\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.signer),\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCancelDcaOrderInstructionDataEncoder().encode({}),\n } as CancelDcaOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCancelDcaOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** Either user or cancel authority */\n signer: TAccountMetas[0];\n /** User account that will receive lamports after closing Order account */\n user: TAccountMetas[1];\n /** DCA order data */\n order: TAccountMetas[2];\n /** Guard address, that protects this DCA order execution */\n guard: TAccountMetas[3];\n /** Token IN mint */\n tokenInMint: TAccountMetas[4];\n /** User token account to which tokens IN will be sent. */\n userTokenInAccount: TAccountMetas[5];\n /** Guard token account from which tokens IN will be sent to the user */\n guardTokenInAccount: TAccountMetas[6];\n /** Recovered token program */\n tokenInProgram: TAccountMetas[7];\n };\n data: CancelDcaOrderInstructionData;\n};\n\nexport function parseCancelDcaOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCancelDcaOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 8) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n signer: getNextAccount(),\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n tokenInMint: getNextAccount(),\n userTokenInAccount: getNextAccount(),\n guardTokenInAccount: getNextAccount(),\n tokenInProgram: getNextAccount(),\n },\n data: getCancelDcaOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CANCEL_LIMIT_ORDER_DISCRIMINATOR = new Uint8Array([\n 132, 156, 132, 31, 67, 40, 232, 97,\n]);\n\nexport function getCancelLimitOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CANCEL_LIMIT_ORDER_DISCRIMINATOR);\n}\n\nexport type CancelLimitOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountSigner extends string | AccountMeta<string> = string,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountTokenInMint extends string | AccountMeta<string> = string,\n TAccountUserTokenInAccount extends string | AccountMeta<string> = string,\n TAccountGuardTokenInAccount extends string | AccountMeta<string> = string,\n TAccountTokenInProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountSigner extends string\n ? WritableSignerAccount<TAccountSigner> & AccountSignerMeta<TAccountSigner>\n : TAccountSigner,\n TAccountUser extends string ? WritableAccount<TAccountUser> : TAccountUser,\n TAccountOrder extends string ? WritableAccount<TAccountOrder> : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountTokenInMint extends string\n ? ReadonlyAccount<TAccountTokenInMint>\n : TAccountTokenInMint,\n TAccountUserTokenInAccount extends string\n ? WritableAccount<TAccountUserTokenInAccount>\n : TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount extends string\n ? WritableAccount<TAccountGuardTokenInAccount>\n : TAccountGuardTokenInAccount,\n TAccountTokenInProgram extends string\n ? ReadonlyAccount<TAccountTokenInProgram>\n : TAccountTokenInProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CancelLimitOrderInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type CancelLimitOrderInstructionDataArgs = Object;\n\nexport function getCancelLimitOrderInstructionDataEncoder(): FixedSizeEncoder<CancelLimitOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: CANCEL_LIMIT_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCancelLimitOrderInstructionDataDecoder(): FixedSizeDecoder<CancelLimitOrderInstructionData> {\n return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);\n}\n\nexport function getCancelLimitOrderInstructionDataCodec(): FixedSizeCodec<\n CancelLimitOrderInstructionDataArgs,\n CancelLimitOrderInstructionData\n> {\n return combineCodec(\n getCancelLimitOrderInstructionDataEncoder(),\n getCancelLimitOrderInstructionDataDecoder()\n );\n}\n\nexport type CancelLimitOrderInput<\n TAccountSigner extends string = string,\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** Either user or cancel authority */\n signer: TransactionSigner<TAccountSigner>;\n /** User account that will receive lamports after closing Order account */\n user: Address<TAccountUser>;\n /** Order data */\n order: Address<TAccountOrder>;\n /** Guard address, that protects this order execution */\n guard: Address<TAccountGuard>;\n /** Token IN mint */\n tokenInMint: Address<TAccountTokenInMint>;\n /** User token account to which tokens IN will be sent. */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Guard token account from which tokens IN will be sent to the user */\n guardTokenInAccount: Address<TAccountGuardTokenInAccount>;\n /** Recovered token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n};\n\nexport function getCancelLimitOrderInstruction<\n TAccountSigner extends string,\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CancelLimitOrderInput<\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CancelLimitOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n signer: { value: input.signer ?? null, isWritable: true },\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.signer),\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCancelLimitOrderInstructionDataEncoder().encode({}),\n } as CancelLimitOrderInstruction<\n TProgramAddress,\n TAccountSigner,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCancelLimitOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** Either user or cancel authority */\n signer: TAccountMetas[0];\n /** User account that will receive lamports after closing Order account */\n user: TAccountMetas[1];\n /** Order data */\n order: TAccountMetas[2];\n /** Guard address, that protects this order execution */\n guard: TAccountMetas[3];\n /** Token IN mint */\n tokenInMint: TAccountMetas[4];\n /** User token account to which tokens IN will be sent. */\n userTokenInAccount: TAccountMetas[5];\n /** Guard token account from which tokens IN will be sent to the user */\n guardTokenInAccount: TAccountMetas[6];\n /** Recovered token program */\n tokenInProgram: TAccountMetas[7];\n };\n data: CancelLimitOrderInstructionData;\n};\n\nexport function parseCancelLimitOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCancelLimitOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 8) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n signer: getNextAccount(),\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n tokenInMint: getNextAccount(),\n userTokenInAccount: getNextAccount(),\n guardTokenInAccount: getNextAccount(),\n tokenInProgram: getNextAccount(),\n },\n data: getCancelLimitOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { getAddressEncoder, getProgramDerivedAddress, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type Codec,\n type Decoder,\n type Encoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { expectAddress, getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CREATE_DCA_ORDER_DISCRIMINATOR = new Uint8Array([95, 66, 166, 38, 170, 3, 150, 169]);\n\nexport function getCreateDcaOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CREATE_DCA_ORDER_DISCRIMINATOR);\n}\n\nexport type CreateDcaOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> = '11111111111111111111111111111111',\n TAccountAssociatedTokenProgram extends\n | string\n | AccountMeta<string> = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TAccountTokenInMint extends string | AccountMeta<string> = string,\n TAccountUserTokenInAccount extends string | AccountMeta<string> = string,\n TAccountGuardTokenInAccount extends string | AccountMeta<string> = string,\n TAccountTokenInProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountUser extends string\n ? WritableSignerAccount<TAccountUser> & AccountSignerMeta<TAccountUser>\n : TAccountUser,\n TAccountOrder extends string\n ? WritableSignerAccount<TAccountOrder> & AccountSignerMeta<TAccountOrder>\n : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n TAccountTokenInMint extends string\n ? ReadonlyAccount<TAccountTokenInMint>\n : TAccountTokenInMint,\n TAccountUserTokenInAccount extends string\n ? WritableAccount<TAccountUserTokenInAccount>\n : TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount extends string\n ? WritableAccount<TAccountGuardTokenInAccount>\n : TAccountGuardTokenInAccount,\n TAccountTokenInProgram extends string\n ? ReadonlyAccount<TAccountTokenInProgram>\n : TAccountTokenInProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CreateDcaOrderInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountInPerInterval: bigint;\n amountOutMin: bigint;\n totalIntervals: number;\n intervalDuration: number;\n secretHash: ReadonlyUint8Array;\n extraTransfersAmounts: Array<bigint>;\n deadline: number;\n};\n\nexport type CreateDcaOrderInstructionDataArgs = {\n amountInPerInterval: number | bigint;\n amountOutMin: number | bigint;\n totalIntervals: number;\n intervalDuration: number;\n secretHash: ReadonlyUint8Array;\n extraTransfersAmounts: Array<number | bigint>;\n deadline: number;\n};\n\nexport function getCreateDcaOrderInstructionDataEncoder(): Encoder<CreateDcaOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountInPerInterval', getU64Encoder()],\n ['amountOutMin', getU64Encoder()],\n ['totalIntervals', getU32Encoder()],\n ['intervalDuration', getU32Encoder()],\n ['secretHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['extraTransfersAmounts', getArrayEncoder(getU64Encoder())],\n ['deadline', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: CREATE_DCA_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCreateDcaOrderInstructionDataDecoder(): Decoder<CreateDcaOrderInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountInPerInterval', getU64Decoder()],\n ['amountOutMin', getU64Decoder()],\n ['totalIntervals', getU32Decoder()],\n ['intervalDuration', getU32Decoder()],\n ['secretHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['extraTransfersAmounts', getArrayDecoder(getU64Decoder())],\n ['deadline', getU32Decoder()],\n ]);\n}\n\nexport function getCreateDcaOrderInstructionDataCodec(): Codec<\n CreateDcaOrderInstructionDataArgs,\n CreateDcaOrderInstructionData\n> {\n return combineCodec(\n getCreateDcaOrderInstructionDataEncoder(),\n getCreateDcaOrderInstructionDataDecoder()\n );\n}\n\nexport type CreateDcaOrderAsyncInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the DCA order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store DCA order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after DCA order creation */\n guardTokenInAccount?: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountInPerInterval: CreateDcaOrderInstructionDataArgs['amountInPerInterval'];\n amountOutMin: CreateDcaOrderInstructionDataArgs['amountOutMin'];\n totalIntervals: CreateDcaOrderInstructionDataArgs['totalIntervals'];\n intervalDuration: CreateDcaOrderInstructionDataArgs['intervalDuration'];\n secretHash: CreateDcaOrderInstructionDataArgs['secretHash'];\n extraTransfersAmounts: CreateDcaOrderInstructionDataArgs['extraTransfersAmounts'];\n deadline: CreateDcaOrderInstructionDataArgs['deadline'];\n};\n\nexport async function getCreateDcaOrderInstructionAsync<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateDcaOrderAsyncInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n CreateDcaOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n if (!accounts.guardTokenInAccount.value) {\n accounts.guardTokenInAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.guard.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInMint.value)),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateDcaOrderInstructionDataEncoder().encode(\n args as CreateDcaOrderInstructionDataArgs\n ),\n } as CreateDcaOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type CreateDcaOrderInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the DCA order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store DCA order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after DCA order creation */\n guardTokenInAccount: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountInPerInterval: CreateDcaOrderInstructionDataArgs['amountInPerInterval'];\n amountOutMin: CreateDcaOrderInstructionDataArgs['amountOutMin'];\n totalIntervals: CreateDcaOrderInstructionDataArgs['totalIntervals'];\n intervalDuration: CreateDcaOrderInstructionDataArgs['intervalDuration'];\n secretHash: CreateDcaOrderInstructionDataArgs['secretHash'];\n extraTransfersAmounts: CreateDcaOrderInstructionDataArgs['extraTransfersAmounts'];\n deadline: CreateDcaOrderInstructionDataArgs['deadline'];\n};\n\nexport function getCreateDcaOrderInstruction<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateDcaOrderInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CreateDcaOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateDcaOrderInstructionDataEncoder().encode(\n args as CreateDcaOrderInstructionDataArgs\n ),\n } as CreateDcaOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCreateDcaOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** User creating the DCA order */\n user: TAccountMetas[0];\n /** Account that will store DCA order data */\n order: TAccountMetas[1];\n /** Guard address, that will protect this order execution */\n guard: TAccountMetas[2];\n /** Solana System program */\n systemProgram: TAccountMetas[3];\n /** Solana token program */\n associatedTokenProgram: TAccountMetas[4];\n /** Token IN that user wants to spend */\n tokenInMint: TAccountMetas[5];\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: TAccountMetas[6];\n /** Token IN account that will store Tokens IN after DCA order creation */\n guardTokenInAccount: TAccountMetas[7];\n /** Solana token program */\n tokenInProgram: TAccountMetas[8];\n };\n data: CreateDcaOrderInstructionData;\n};\n\nexport function parseCreateDcaOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCreateDcaOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n systemProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n tokenInMint: getNextAccount(),\n userTokenInAccount: getNextAccount(),\n guardTokenInAccount: getNextAccount(),\n tokenInProgram: getNextAccount(),\n },\n data: getCreateDcaOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport { getAddressEncoder, getProgramDerivedAddress, type Address } from '@solana/addresses';\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type Codec,\n type Decoder,\n type Encoder,\n type ReadonlyUint8Array,\n} from '@solana/codecs';\nimport {\n type AccountMeta,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/instructions';\nimport { type AccountSignerMeta, type TransactionSigner } from '@solana/signers';\nimport { SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';\nimport { expectAddress, getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';\n\nexport const CREATE_LIMIT_ORDER_DISCRIMINATOR = new Uint8Array([76, 161, 70, 122, 82, 20, 142, 75]);\n\nexport function getCreateLimitOrderDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(CREATE_LIMIT_ORDER_DISCRIMINATOR);\n}\n\nexport type CreateLimitOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountUser extends string | AccountMeta<string> = string,\n TAccountOrder extends string | AccountMeta<string> = string,\n TAccountGuard extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> = '11111111111111111111111111111111',\n TAccountAssociatedTokenProgram extends\n | string\n | AccountMeta<string> = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TAccountTokenInMint extends string | AccountMeta<string> = string,\n TAccountUserTokenInAccount extends string | AccountMeta<string> = string,\n TAccountGuardTokenInAccount extends string | AccountMeta<string> = string,\n TAccountTokenInProgram extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountUser extends string\n ? WritableSignerAccount<TAccountUser> & AccountSignerMeta<TAccountUser>\n : TAccountUser,\n TAccountOrder extends string\n ? WritableSignerAccount<TAccountOrder> & AccountSignerMeta<TAccountOrder>\n : TAccountOrder,\n TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n TAccountTokenInMint extends string\n ? ReadonlyAccount<TAccountTokenInMint>\n : TAccountTokenInMint,\n TAccountUserTokenInAccount extends string\n ? WritableAccount<TAccountUserTokenInAccount>\n : TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount extends string\n ? WritableAccount<TAccountGuardTokenInAccount>\n : TAccountGuardTokenInAccount,\n TAccountTokenInProgram extends string\n ? ReadonlyAccount<TAccountTokenInProgram>\n : TAccountTokenInProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CreateLimitOrderInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n amountOutMin: bigint;\n secretHash: ReadonlyUint8Array;\n extraTransfersAmounts: Array<bigint>;\n deadline: number;\n};\n\nexport type CreateLimitOrderInstructionDataArgs = {\n amountIn: number | bigint;\n amountOutMin: number | bigint;\n secretHash: ReadonlyUint8Array;\n extraTransfersAmounts: Array<number | bigint>;\n deadline: number;\n};\n\nexport function getCreateLimitOrderInstructionDataEncoder(): Encoder<CreateLimitOrderInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['amountOutMin', getU64Encoder()],\n ['secretHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['extraTransfersAmounts', getArrayEncoder(getU64Encoder())],\n ['deadline', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: CREATE_LIMIT_ORDER_DISCRIMINATOR })\n );\n}\n\nexport function getCreateLimitOrderInstructionDataDecoder(): Decoder<CreateLimitOrderInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['amountOutMin', getU64Decoder()],\n ['secretHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['extraTransfersAmounts', getArrayDecoder(getU64Decoder())],\n ['deadline', getU32Decoder()],\n ]);\n}\n\nexport function getCreateLimitOrderInstructionDataCodec(): Codec<\n CreateLimitOrderInstructionDataArgs,\n CreateLimitOrderInstructionData\n> {\n return combineCodec(\n getCreateLimitOrderInstructionDataEncoder(),\n getCreateLimitOrderInstructionDataDecoder()\n );\n}\n\nexport type CreateLimitOrderAsyncInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount?: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountIn: CreateLimitOrderInstructionDataArgs['amountIn'];\n amountOutMin: CreateLimitOrderInstructionDataArgs['amountOutMin'];\n secretHash: CreateLimitOrderInstructionDataArgs['secretHash'];\n extraTransfersAmounts: CreateLimitOrderInstructionDataArgs['extraTransfersAmounts'];\n deadline: CreateLimitOrderInstructionDataArgs['deadline'];\n};\n\nexport async function getCreateLimitOrderInstructionAsync<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateLimitOrderAsyncInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n CreateLimitOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n if (!accounts.guardTokenInAccount.value) {\n accounts.guardTokenInAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.guard.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenInMint.value)),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateLimitOrderInstructionDataEncoder().encode(\n args as CreateLimitOrderInstructionDataArgs\n ),\n } as CreateLimitOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type CreateLimitOrderInput<\n TAccountUser extends string = string,\n TAccountOrder extends string = string,\n TAccountGuard extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n TAccountTokenInMint extends string = string,\n TAccountUserTokenInAccount extends string = string,\n TAccountGuardTokenInAccount extends string = string,\n TAccountTokenInProgram extends string = string,\n> = {\n /** User creating the order */\n user: TransactionSigner<TAccountUser>;\n /** Account that will store order data */\n order: TransactionSigner<TAccountOrder>;\n /** Guard address, that will protect this order execution */\n guard: Address<TAccountGuard>;\n /** Solana System program */\n systemProgram?: Address<TAccountSystemProgram>;\n /** Solana token program */\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n /** Token IN that user wants to spend */\n tokenInMint: Address<TAccountTokenInMint>;\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: Address<TAccountUserTokenInAccount>;\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount: Address<TAccountGuardTokenInAccount>;\n /** Solana token program */\n tokenInProgram: Address<TAccountTokenInProgram>;\n amountIn: CreateLimitOrderInstructionDataArgs['amountIn'];\n amountOutMin: CreateLimitOrderInstructionDataArgs['amountOutMin'];\n secretHash: CreateLimitOrderInstructionDataArgs['secretHash'];\n extraTransfersAmounts: CreateLimitOrderInstructionDataArgs['extraTransfersAmounts'];\n deadline: CreateLimitOrderInstructionDataArgs['deadline'];\n};\n\nexport function getCreateLimitOrderInstruction<\n TAccountUser extends string,\n TAccountOrder extends string,\n TAccountGuard extends string,\n TAccountSystemProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TAccountTokenInMint extends string,\n TAccountUserTokenInAccount extends string,\n TAccountGuardTokenInAccount extends string,\n TAccountTokenInProgram extends string,\n TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n>(\n input: CreateLimitOrderInput<\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): CreateLimitOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n user: { value: input.user ?? null, isWritable: true },\n order: { value: input.order ?? null, isWritable: true },\n guard: { value: input.guard ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n associatedTokenProgram: { value: input.associatedTokenProgram ?? null, isWritable: false },\n tokenInMint: { value: input.tokenInMint ?? null, isWritable: false },\n userTokenInAccount: { value: input.userTokenInAccount ?? null, isWritable: true },\n guardTokenInAccount: { value: input.guardTokenInAccount ?? null, isWritable: true },\n tokenInProgram: { value: input.tokenInProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n const instruction = {\n accounts: [\n getAccountMeta(accounts.user),\n getAccountMeta(accounts.order),\n getAccountMeta(accounts.guard),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n getAccountMeta(accounts.tokenInMint),\n getAccountMeta(accounts.userTokenInAccount),\n getAccountMeta(accounts.guardTokenInAccount),\n getAccountMeta(accounts.tokenInProgram),\n ],\n programAddress,\n data: getCreateLimitOrderInstructionDataEncoder().encode(\n args as CreateLimitOrderInstructionDataArgs\n ),\n } as CreateLimitOrderInstruction<\n TProgramAddress,\n TAccountUser,\n TAccountOrder,\n TAccountGuard,\n TAccountSystemProgram,\n TAccountAssociatedTokenProgram,\n TAccountTokenInMint,\n TAccountUserTokenInAccount,\n TAccountGuardTokenInAccount,\n TAccountTokenInProgram\n >;\n\n return instruction;\n}\n\nexport type ParsedCreateLimitOrderInstruction<\n TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n /** User creating the order */\n user: TAccountMetas[0];\n /** Account that will store order data */\n order: TAccountMetas[1];\n /** Guard address, that will protect this order execution */\n guard: TAccountMetas[2];\n /** Solana System program */\n systemProgram: TAccountMetas[3];\n /** Solana token program */\n associatedTokenProgram: TAccountMetas[4];\n /** Token IN that user wants to spend */\n tokenInMint: TAccountMetas[5];\n /** Token IN account from which user is spending tokens IN */\n userTokenInAccount: TAccountMetas[6];\n /** Token IN account that will store Tokens IN after order creation */\n guardTokenInAccount: TAccountMetas[7];\n /** Solana token program */\n tokenInProgram: TAccountMetas[8];\n };\n data: CreateLimitOrderInstructionData;\n};\n\nexport function parseCreateLimitOrderInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedCreateLimitOrderInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n user: getNextAccount(),\n order: getNextAccount(),\n guard: getNextAccount(),\n systemProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n tokenInMint: getNextAccount(),\n userTokenInAccount: getNextAccount(),\n guardTokenInAccount: getNextAccount(),\n tokenInProgram: getNextAccount(),\n },\n data: getCreateLimitOrderInstructionDataDecoder().decode(instruction.data),\n };\n}\n","import BN from 'bn.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport { PublicKey } from '@solana/web3.js';\nimport sha3 from 'js-sha3';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\n\nexport function genSecretHashAndNumber(order: SingleChainOrder | DcaSingleChainOrder): {\n secretHash: number[];\n secretNumber: string;\n} {\n const rawTokenOut = new PublicKey(order.tokenOut);\n const tokenOut = formatTokenPubkey(rawTokenOut);\n const receiver = new PublicKey(order.destinationAddress);\n\n const extraTransfers = order.extraTransfers ?? [];\n const secretNumber = new BN(crypto.getRandomValues(new Uint8Array(8)));\n\n const fullArray = [\n ...tokenOut.toBuffer(),\n ...receiver.toBuffer(),\n ...Buffer.concat(\n extraTransfers.map((t) =>\n Buffer.concat([new PublicKey(t.token).toBuffer(), new PublicKey(t.receiver).toBuffer()]),\n ),\n ),\n ...secretNumber.toArrayLike(Buffer, 'le', 8),\n ];\n\n const value = sha3.keccak256(Uint8Array.from(fullArray));\n const secretHash = [...Uint8Array.from(Buffer.from(value, 'hex'))];\n\n return { secretHash, secretNumber: secretNumber.toString() };\n}\n\nexport function formatTokenPubkey(token: PublicKey) {\n if (token.equals(new PublicKey('So11111111111111111111111111111111111111111'))) {\n return PublicKey.default;\n }\n\n return token;\n}\n","import { Transaction } from '@mysten/sui/transactions';\nimport { normalizeSuiObjectId } from '@mysten/sui/utils';\n\nimport { ChainID } from '../../chains.js';\nimport {\n CROSS_CHAIN_GUARD_ADDRESSES,\n NATIVE_SUI_TOKEN_ADDRESS,\n SUI_GUARD_COLLATERAL_TYPE,\n SUI_GUARD_STABLECOIN_TYPE,\n SUI_PACKAGE_ID,\n} from '../../constants.js';\nimport { ValidationError } from '../../errors/index.js';\nimport { createSuiClient } from './client.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\n\n/**\n * Generates Sui order transaction for creating an order\n * @param order The order to generate transaction for\n * @param client The Sui client instance (optional, creates new if not provided)\n * @returns Object containing the transaction\n */\nexport async function getSuiOrderTransaction(\n order: CrossChainOrder,\n client?: ReturnType<typeof createSuiClient>,\n): Promise<Transaction> {\n const userAddress = order.user;\n const suiClient = client || createSuiClient();\n const coins = await suiClient.getCoins({\n owner: userAddress,\n coinType: order.sourceTokenAddress,\n });\n\n const guardAddress = CROSS_CHAIN_GUARD_ADDRESSES[ChainID.Sui];\n\n const sourceTokenInCoins = coins.data.sort((a, b) => Number(b.balance) - Number(a.balance));\n\n if (sourceTokenInCoins.length === 0) {\n throw new ValidationError(`No token (${order.sourceTokenAddress}) to create order`);\n }\n\n const coinsInSum = sourceTokenInCoins.reduce((acc, coin) => acc + BigInt(coin.balance), 0n);\n\n if (coinsInSum < order.sourceTokenAmount) {\n throw new ValidationError(\n `Insufficient balance to create order. Total coins is ${coinsInSum}, but order requires ${order.sourceTokenAmount}`,\n );\n }\n\n const spendingGasCoin =\n normalizeSuiObjectId(order.sourceTokenAddress) === normalizeSuiObjectId(NATIVE_SUI_TOKEN_ADDRESS);\n\n const tx = new Transaction();\n const coinInArg = spendingGasCoin ? tx.gas : sourceTokenInCoins[0]!.coinObjectId;\n\n if (sourceTokenInCoins.length > 1) {\n // Merging coins IN into a single object just in case\n tx.mergeCoins(\n // merge into 1st coin object\n coinInArg,\n // merge the rest of coins\n sourceTokenInCoins.slice(1).map((coin) => coin.coinObjectId),\n );\n }\n\n const [coinIn] = tx.splitCoins(coinInArg, [order.sourceTokenAmount]);\n\n tx.moveCall({\n package: SUI_PACKAGE_ID,\n module: 'cross_chain_limit_orders',\n function: 'create_order',\n arguments: [\n tx.object(guardAddress), // arg0: &Guard<T0, T2>\n coinIn, // arg1: Coin<T1>\n tx.pure.u64(order.minStablecoinAmount), // arg2: min_stablecoins_amount\n tx.pure.u64(order.deadline * 1000), // arg3: deadline (converted to milliseconds)\n tx.pure.vector('u8', order.executionDetailsHashToBytes()), // arg4: execution_details_hash\n tx.object.clock(), // arg5: &Clock\n ],\n typeArguments: [SUI_GUARD_COLLATERAL_TYPE, order.sourceTokenAddress, SUI_GUARD_STABLECOIN_TYPE],\n });\n\n tx.setSender(userAddress);\n\n return tx;\n}\n","import { ChainID, isEvmChain, type SupportedEvmChain } from '../../chains.js';\nimport { JupiterQuoteProvider } from './jupiter.js';\nimport { type QuoteResponse as JupiterQuoteResponse } from '@jup-ag/api';\nimport { ParaswapQuoteProvider, type SwapEstimateResult } from './paraswap.js';\nimport { CROSS_CHAIN_STABLES } from './stablecoins-tokens.js';\nimport { AftermathQuoteProvider } from './aftermath.js';\nimport type { RouterCompleteTradeRoute } from 'aftermath-ts-sdk';\nimport { LiquidSwapQuoteProvider, type LiquidSwapQuoteResponse } from './liquidswap.js';\nimport { RaydiumQuoteProvider, type RaydiumPumpQuoteParams, type RaydiumQuoteResponse } from './raydium.js';\nimport { PumpFunQuoteProvider } from './pumpfun/index.js';\nimport { RelayQuoteProvider } from './relay.js';\nimport { convertDecimals } from './pricing/decimals.js';\nimport { estimateAmountOut, IntentNotViableError } from './pricing/estimate-amount-out.js';\nimport { estimateExpensesInTokenOut } from './pricing/expenses.js';\nimport { DEFAULT_COMMISSION_BPS, CROSS_CHAIN_COMMISSION_DENOMINATOR, EVM_CROSS_CHAIN_GAS_LIMIT } from './pricing/constants.js';\nimport { compareAddresses } from './address.js';\n\ntype SingleChainQuoteParams = {\n chainId: ChainID;\n amount: bigint;\n tokenIn: string;\n tokenOut: string;\n slippageBps?: number;\n provider?: RouteProvider; // Optional provider override\n};\n\nexport type RouteProvider = 'paraswap' | 'jupiter' | 'aftermath' | 'liquidswap' | 'raydium' | 'pumpfun' | 'relay';\n\nexport type Quote = {\n amountIn: bigint;\n amountOut: bigint;\n amountOutMin?: bigint; // Optional, for quotes that provide a minimum guaranteed output\n amountOutUsd: number;\n amountInUsd: number;\n slippage: number;\n priceImpact: number;\n provider: RouteProvider;\n rawQuote: any;\n};\n\nexport type SimpleQuote = {\n amountIn: bigint;\n amountOut: bigint;\n amountOutMin?: bigint;\n slippage: number;\n};\n\nexport type IntentsQuoteParams = {\n sourceChainId: ChainID;\n destChainId: ChainID;\n amount: bigint;\n tokenIn: string;\n tokenOut: string;\n};\n\nexport type QuoteResponseInternal = {\n amountInUsd: number;\n estimatedAmountInAsMinStablecoinAmount: bigint;\n\n estimatedAmountOut: bigint;\n estimatedAmountOutUsd: number;\n\n estimatedAmountOutReduced: bigint;\n estimatedAmountOutUsdReduced: number;\n};\n\n// Public response with metadata and derived fields\nexport type QuoteResponse = QuoteResponseInternal & {\n /** Metadata for source token */\n tokenIn: {\n address: string;\n chainId: ChainID;\n };\n\n /** Metadata for destination token */\n tokenOut: {\n address: string;\n chainId: ChainID;\n };\n};\n\nexport class QuoteProvider {\n public static async getQuote(params: IntentsQuoteParams): Promise<QuoteResponse> {\n try {\n const quote = await this.getQuoteFromRouters(params);\n // Adapt QuoteResponseInternal to QuoteResponse by adding tokenIn and tokenOut metadata fields\n return {\n ...quote,\n tokenIn: {\n address: params.tokenIn,\n chainId: params.sourceChainId,\n },\n tokenOut: {\n address: params.tokenOut,\n chainId: params.destChainId,\n },\n };\n } catch (e) {\n if (e instanceof IntentNotViableError) throw e;\n console.error('Error getting quote from routers:', e);\n throw new Error('Failed to get quote from routers');\n }\n }\n\n /**\n * Get a quote for Solana with explicit provider selection\n * @param params - Quote parameters including provider preference\n * @returns Quote response\n */\n public static async getSolanaQuote(params: {\n amount: bigint;\n tokenIn: string;\n tokenOut: string;\n slippageBps?: number;\n provider?: 'jupiter' | 'raydium' | 'pumpfun';\n }): Promise<Quote> {\n const singleChainParams: SingleChainQuoteParams = {\n chainId: ChainID.Solana,\n amount: params.amount,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n slippageBps: params.slippageBps,\n provider: params.provider,\n };\n\n return this.getSingleChainQuote(singleChainParams);\n }\n\n private static async getQuoteFromRouters(params: IntentsQuoteParams): Promise<QuoteResponseInternal> {\n const sourceStable = getStableForChain(params.sourceChainId);\n const destStable = getStableForChain(params.destChainId);\n\n // Step 1: Get quote from tokenIn → bridge stable on source chain ---\n const sourceSingleChainQuoteParams: SingleChainQuoteParams = {\n chainId: params.sourceChainId,\n amount: params.amount,\n tokenIn: params.tokenIn,\n tokenOut: sourceStable.address,\n };\n\n const [sourceQuote, expenses] = await Promise.all([\n this.getSingleChainQuote(sourceSingleChainQuoteParams),\n estimateExpensesInTokenOut({\n chainId: params.destChainId,\n tokenOut: params.tokenOut,\n gasLimit: EVM_CROSS_CHAIN_GAS_LIMIT,\n getQuote: (p) => this.getSingleChainQuote(p),\n }),\n ]);\n\n // Step 2: Normalize stable amount between source and destination ---\n // Adjust for decimal difference between stables (e.g. 6 → 18)\n const normalizedBridgeAmount = convertDecimals(\n sourceQuote.amountOut,\n sourceStable.decimals,\n destStable.decimals,\n );\n\n // Step 3: Get quote from dest bridge stable → target token ---\n const destSingleChainQuoteParams: SingleChainQuoteParams = {\n chainId: params.destChainId,\n amount: normalizedBridgeAmount,\n tokenIn: destStable.address,\n tokenOut: params.tokenOut,\n };\n\n const destQuote = await this.getSingleChainQuote(destSingleChainQuoteParams);\n\n // Step 4: Compute stable min-amount with correct decimals ---\n const estimatedAmountInAsMinStablecoinAmount = BigInt(\n Math.floor(sourceQuote.amountInUsd * 10 ** sourceStable.decimals),\n );\n\n const swapOutput = destQuote.amountOutMin ?? destQuote.amountOut;\n const estimatedAmountOutReduced = estimateAmountOut(\n swapOutput,\n DEFAULT_COMMISSION_BPS,\n expenses,\n CROSS_CHAIN_COMMISSION_DENOMINATOR,\n );\n\n return {\n estimatedAmountOut: destQuote.amountOut,\n estimatedAmountOutUsd: destQuote.amountOutUsd,\n amountInUsd: sourceQuote.amountInUsd,\n estimatedAmountInAsMinStablecoinAmount,\n estimatedAmountOutReduced,\n estimatedAmountOutUsdReduced: destQuote.amountOutUsd,\n };\n }\n\n public static async getSingleChainQuote(params: SingleChainQuoteParams): Promise<Quote> {\n // Handle same-token case (self-swap)\n if (compareAddresses(params.tokenIn, params.tokenOut)) {\n let amountUsd = 0;\n\n // Pick correct stable for this chain\n const stable = getStableForChain(params.chainId);\n const stableAddress = stable.address;\n const stableDecimals = stable.decimals;\n\n // If it's the chain's stable token, derive USD value correctly\n if (compareAddresses(params.tokenIn, stableAddress)) {\n amountUsd = Number(params.amount) / 10 ** stableDecimals;\n }\n\n return {\n amountIn: params.amount,\n amountOut: params.amount,\n amountOutUsd: amountUsd,\n amountInUsd: amountUsd,\n slippage: 0,\n priceImpact: 0,\n provider: params.provider || getProviderNameByChainId(params.chainId),\n rawQuote: null,\n };\n }\n\n // Hyperliquid\n if (params.chainId === ChainID.Hyperliquid) {\n const liquidSwapQuote = await QuoteProvider.getLiquidSwapQuote(params);\n return QuoteProvider.transformLiquidSwapQuote(liquidSwapQuote);\n }\n\n // Solana (Jupiter / Raydium / Pumpfun)\n if (params.chainId === ChainID.Solana) {\n if (params.provider === 'jupiter') {\n const jupiterQuote = await QuoteProvider.getJupiterQuote(params);\n return QuoteProvider.transformJupiterQuote(jupiterQuote);\n } else if (params.provider === 'raydium') {\n const raydiumQuote = await QuoteProvider.getRaydiumQuote(params);\n return raydiumQuote;\n } else if (params.provider === 'pumpfun') {\n const pumpfunQuote = await QuoteProvider.getPumpFunQuote(params);\n return pumpfunQuote;\n } else {\n try {\n const jupiterQuote = await QuoteProvider.getJupiterQuote(params);\n if (!jupiterQuote.quote) throw new Error('Jupiter quote failed');\n return QuoteProvider.transformJupiterQuote(jupiterQuote);\n } catch (error) {\n console.warn('Jupiter quote failed, falling back to Raydium:', error);\n try {\n const raydiumQuote = await QuoteProvider.getRaydiumQuote(params);\n return raydiumQuote;\n } catch {\n const pumpfunQuote = await QuoteProvider.getPumpFunQuote(params);\n return pumpfunQuote;\n }\n }\n }\n }\n\n // Sui (Aftermath)\n if (params.chainId === ChainID.Sui) {\n const quote = await QuoteProvider.getAftermathQuote(params);\n return QuoteProvider.transformAftermathQuote({ quote, request: params });\n }\n\n // EVM chains (Paraswap)\n if (isEvmChain(params.chainId)) {\n if (params.chainId === ChainID.MONAD) {\n const relayQuote = await QuoteProvider.getRelayQuote(params);\n return QuoteProvider.transformRelayQuote(relayQuote);\n }\n const paraswapQuote = await QuoteProvider.getParaswapQuote(params);\n return QuoteProvider.transformParaswapQuote(paraswapQuote);\n }\n\n throw new Error(`Unsupported chain for quote: ${params.chainId}`);\n }\n\n static transformLiquidSwapQuote(liquidSwapQuote: LiquidSwapQuoteResponse): Quote {\n return {\n amountIn: liquidSwapQuote.execution.details.amountIn,\n amountOut: liquidSwapQuote.execution.details.amountOut,\n amountOutUsd: 0,\n amountInUsd: 0,\n slippage: 0,\n priceImpact: Number(liquidSwapQuote.averagePriceImpact),\n provider: 'liquidswap',\n rawQuote: liquidSwapQuote,\n };\n }\n\n /**\n * Calculates the weighted reduction factor for an amount in USD.\n * For amounts <= $5, the reduction factor is 0.65.\n */\n public static calculateWeightedReductionFactorForUsd(amountUsd: number): number {\n if (amountUsd <= 5) {\n return 0.5;\n } else if (amountUsd <= 10) {\n return 0.65;\n } else if (amountUsd <= 20) {\n return 0.77;\n } else if (amountUsd <= 30) {\n return 0.9;\n } else {\n return 0.95;\n }\n }\n\n protected static async getLiquidSwapQuote(params: SingleChainQuoteParams) {\n const liquidSwapQuoter = new LiquidSwapQuoteProvider();\n\n return liquidSwapQuoter.getQuote({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amount,\n });\n }\n\n protected static async getJupiterQuote(params: SingleChainQuoteParams) {\n const jupiterQuoter = new JupiterQuoteProvider();\n\n return jupiterQuoter.getQuote({\n amount: params.amount,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n swapMode: 'ExactIn',\n slippageBps: params.slippageBps ? params.slippageBps : 20, // Default 0.2% slippage\n });\n }\n\n protected static async getParaswapQuote(params: SingleChainQuoteParams) {\n const paraswapQuoter = new ParaswapQuoteProvider(params.chainId as SupportedEvmChain);\n\n return paraswapQuoter.getSwapEstimation({\n amount: BigInt(params.amount),\n srcToken: params.tokenIn,\n destToken: params.tokenOut,\n side: 'SELL',\n });\n }\n protected static async getRelayQuote(params: SingleChainQuoteParams) {\n const relayQuoter = new RelayQuoteProvider(params.chainId as SupportedEvmChain);\n\n return relayQuoter.getSwapEstimation({\n amount: BigInt(params.amount),\n srcToken: params.tokenIn,\n destToken: params.tokenOut,\n });\n }\n protected static async getAftermathQuote(params: SingleChainQuoteParams) {\n const aftermathQuoter = new AftermathQuoteProvider();\n\n return aftermathQuoter.getQuote({\n amountIn: params.amount,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n });\n }\n\n //TODO: For Raydium and Pump we are applying slippage twice if there are 2 swaps (e.g., USDC -> SOL -> Token), should we just apply half and half on each swap?\n\n protected static async getRaydiumQuote(params: SingleChainQuoteParams): Promise<Quote> {\n const raydiumQuoter = new RaydiumQuoteProvider();\n let request: RaydiumPumpQuoteParams = {\n inputMint: params.tokenIn,\n outputMint: params.tokenOut,\n amount: params.amount.toString(),\n slippageBps: params.slippageBps || 20, // Default 0.2% slippage\n };\n try {\n return this.transformRaydiumQuote(await raydiumQuoter.getQuote(request));\n } catch (e) {\n console.log('Raydium AMM quote cannot find a route, trying with prebonded raydium');\n return simpleQuoteToQuote(await raydiumQuoter.getQuotePrebonded(request), 'raydium');\n }\n }\n\n protected static async getPumpFunQuote(params: SingleChainQuoteParams): Promise<Quote> {\n const pumpfunQuoter = new PumpFunQuoteProvider();\n\n let request: RaydiumPumpQuoteParams = {\n inputMint: params.tokenIn,\n outputMint: params.tokenOut,\n amount: params.amount.toString(),\n slippageBps: params.slippageBps || 20, // Default 0.2% slippage\n };\n return simpleQuoteToQuote(await pumpfunQuoter.getQuote(request), 'pumpfun');\n }\n\n private static transformAftermathQuote({\n quote,\n request,\n }: {\n quote: RouterCompleteTradeRoute;\n request: SingleChainQuoteParams;\n }): Quote {\n const chainId = request.chainId;\n const stable = getStableForChain(chainId);\n const stableAddress = stable.address;\n const stableDecimals = stable.decimals;\n\n let amountUsd = 0;\n\n // Determine if input or output token is the stablecoin\n if (compareAddresses(request.tokenIn, stableAddress)) {\n amountUsd = Number(quote.coinIn.amount) / 10 ** stableDecimals;\n } else if (compareAddresses(request.tokenOut, stableAddress)) {\n amountUsd = Number(quote.coinOut.amount) / 10 ** stableDecimals;\n }\n\n return {\n amountIn: quote.coinIn.amount,\n amountOut: quote.coinOut.amount,\n amountOutUsd: amountUsd,\n amountInUsd: amountUsd,\n slippage: quote.slippage ?? 0,\n priceImpact: 0,\n provider: 'aftermath',\n rawQuote: quote,\n };\n }\n\n private static transformParaswapQuote(paraswapQuote: SwapEstimateResult): Quote {\n return {\n amountIn: BigInt(paraswapQuote.amountIn),\n amountOut: BigInt(paraswapQuote.amountOut),\n amountOutUsd: paraswapQuote.amountOutUsd,\n amountInUsd: paraswapQuote.amountInUsd,\n slippage: 0, // Calculate from paraswap data if available\n priceImpact: paraswapQuote.quote.maxImpact ? Number(paraswapQuote.quote.maxImpact) * 100 : 0,\n provider: 'paraswap',\n rawQuote: paraswapQuote,\n };\n }\n private static transformRelayQuote(data: any): Quote {\n const relayQuote = data.quote;\n // If details missing → fallback zero quote\n if (!relayQuote || !relayQuote.details) {\n return {\n amountIn: 0n,\n amountOut: 0n,\n amountOutUsd: 0,\n amountInUsd: 0,\n slippage: 0,\n priceImpact: 0,\n provider: 'relay',\n rawQuote: relayQuote,\n };\n }\n\n const details = relayQuote.details;\n\n const amountIn = details?.currencyIn?.amount ? BigInt(details.currencyIn.amount) : 0n;\n\n const amountOut = details?.currencyOut?.amount ? BigInt(details.currencyOut.amount) : 0n;\n\n const amountInUsd = details?.currencyIn?.amountUsd ? Number(details.currencyIn.amountUsd) : 0;\n\n const amountOutUsd = details?.currencyOut?.amountUsd ? Number(details.currencyOut.amountUsd) : 0;\n\n const slippage = details?.slippageTolerance?.origin?.percent ? Number(details.slippageTolerance.origin.percent) : 0;\n\n const priceImpact = details?.totalImpact?.percent ? Number(details.totalImpact.percent) : 0;\n\n return {\n amountIn,\n amountOut,\n amountInUsd,\n amountOutUsd,\n slippage,\n priceImpact,\n provider: 'relay',\n rawQuote: relayQuote,\n };\n }\n\n public static transformJupiterQuote({ quote }: { quote: JupiterQuoteResponse }): Quote {\n const amountIn = Number(quote.inAmount);\n const amountOut = Number(quote.outAmount);\n const amountOutMin = Number(quote.otherAmountThreshold);\n\n const chainId = ChainID.Solana; // Jupiter runs only on Solana\n const stable = getStableForChain(chainId);\n const stableAddress = stable.address;\n const stableDecimals = stable.decimals;\n\n let amountUsd = 0;\n const priceImpact = quote.priceImpactPct ? Number(quote.priceImpactPct) * 100 : 0;\n\n // Use stable decimals dynamically for USD conversions\n if (compareAddresses(quote.outputMint, stableAddress)) {\n amountUsd = amountOut / 10 ** stableDecimals;\n } else if (compareAddresses(quote.inputMint, stableAddress)) {\n amountUsd = amountIn / 10 ** stableDecimals;\n }\n\n return {\n amountIn: BigInt(amountIn),\n amountOut: BigInt(amountOut),\n amountOutMin: BigInt(amountOutMin),\n amountOutUsd: amountUsd,\n amountInUsd: amountUsd,\n slippage: quote.slippageBps ? quote.slippageBps / 100 : 0,\n priceImpact,\n provider: 'jupiter',\n rawQuote: quote,\n };\n }\n\n private static transformRaydiumQuote(raydiumQuote: RaydiumQuoteResponse): Quote {\n const amountIn = BigInt(raydiumQuote.data.inAmount);\n const amountOut = BigInt(raydiumQuote.data.outAmount);\n\n const chainId = ChainID.Solana; // Raydium runs on Solana\n const stable = getStableForChain(chainId);\n const stableAddress = stable.address;\n const stableDecimals = stable.decimals;\n\n let amountUsd = 0;\n const priceImpact = Number(raydiumQuote.data.priceImpactPct) * 100;\n\n // Determine if the input or output is the stablecoin (USDC/USDT)\n if (compareAddresses(raydiumQuote.data.outputMint, stableAddress)) {\n amountUsd = Number(amountOut) / 10 ** stableDecimals;\n } else if (compareAddresses(raydiumQuote.data.inputMint, stableAddress)) {\n amountUsd = Number(amountIn) / 10 ** stableDecimals;\n }\n\n return {\n amountIn,\n amountOut,\n amountOutUsd: amountUsd,\n amountInUsd: amountUsd,\n slippage: raydiumQuote.data.slippageBps / 100,\n priceImpact,\n provider: 'raydium',\n rawQuote: raydiumQuote,\n };\n }\n}\n\nfunction getStableForChain(chainId: ChainID) {\n // Prefer USDC if available, else USDT\n if (CROSS_CHAIN_STABLES.USDC?.[chainId]) {\n return { symbol: 'USDC', ...CROSS_CHAIN_STABLES.USDC[chainId] };\n }\n if (CROSS_CHAIN_STABLES.USDT?.[chainId]) {\n return { symbol: 'USDT', ...CROSS_CHAIN_STABLES.USDT[chainId] };\n }\n throw new Error(`No stablecoin found for chain ${chainId}`);\n}\nfunction getProviderNameByChainId(chainId: ChainID): RouteProvider {\n switch (chainId) {\n case ChainID.Sui:\n return 'aftermath';\n case ChainID.Solana:\n return 'jupiter'; // Primary provider, with Raydium and Pumpfun as fallbacks\n case ChainID.Hyperliquid:\n return 'liquidswap';\n default:\n return 'paraswap';\n }\n}\n\nexport function quoteToSimpleQuote(quote: Quote): SimpleQuote {\n return {\n amountIn: quote.amountIn,\n amountOut: quote.amountOut,\n amountOutMin: quote.amountOutMin,\n slippage: quote.slippage,\n };\n}\n\nexport function simpleQuoteToQuote(simpleQuote: SimpleQuote, provider: RouteProvider): Quote {\n return {\n amountIn: simpleQuote.amountIn,\n amountOut: simpleQuote.amountOut,\n amountOutMin: simpleQuote.amountOutMin,\n slippage: simpleQuote.slippage,\n amountInUsd: 0,\n amountOutUsd: 0,\n priceImpact: 0,\n provider,\n rawQuote: simpleQuote,\n };\n}\n","import { createJupiterApiClient, SwapApi, type QuoteResponse } from '@jup-ag/api';\n\nexport type JupiterQuoteParams = {\n amount: bigint;\n tokenIn: string;\n tokenOut: string;\n swapMode: 'ExactIn' | 'ExactOut';\n slippageBps?: number;\n};\n\nconst NATIVE_SOL = 'So11111111111111111111111111111111111111111';\nconst WRAPPED_SOL = 'So11111111111111111111111111111111111111112';\nexport class JupiterQuoteProvider {\n public swapApi: SwapApi;\n\n constructor() {\n this.swapApi = createJupiterApiClient({ fetchApi: fetch });\n }\n\n public async getQuote(params: JupiterQuoteParams): Promise<{ quote: QuoteResponse }> {\n if (params.tokenIn === NATIVE_SOL) {\n params.tokenIn = WRAPPED_SOL;\n }\n\n if (params.tokenOut === NATIVE_SOL) {\n params.tokenOut = WRAPPED_SOL;\n }\n\n const quote = await this.swapApi.quoteGet({\n amount: Number(params.amount),\n inputMint: params.tokenIn,\n outputMint: params.tokenOut,\n swapMode: params.swapMode,\n slippageBps: params.slippageBps,\n });\n\n return { quote };\n }\n}\n","import { constructSimpleSDK, type OptimalRate } from '@paraswap/sdk';\nimport { ChainID, type SupportedEvmChain } from '../../chains.js';\nimport { ChainProvider } from '../../core/evm/chain-provider.js';\nimport { getContract, type Address } from 'viem';\nimport { ERC20ABI } from '../../core/evm/abi/erc20.js';\nimport { isNativeEvmToken, WRAPPED_ETH_ADDRESSES } from '../../constants.js';\n\nconst rpcProvidersUrl: Record<SupportedEvmChain, string> = {\n [ChainID.Arbitrum]: 'https://arbitrum-one-rpc.publicnode.com',\n [ChainID.Optimism]: 'https://optimism-rpc.publicnode.com',\n [ChainID.Base]: 'https://base-rpc.publicnode.com',\n [ChainID.Hyperliquid]: 'https://rpc.hyperliquid.xyz/evm',\n [ChainID.BSC]: 'https://bsc-dataseed.ninicoin.io',\n [ChainID.MONAD]: 'https://rpc4.monad.xyz',\n};\n\nexport type ParaswapQuoteRequestParams = {\n srcToken: string;\n destToken: string;\n amount: bigint;\n side: 'SELL' | 'BUY';\n};\n\nexport type SwapEstimateResult = {\n amountOut: bigint;\n amountIn: bigint;\n amountOutUsd: number;\n amountInUsd: number;\n quote: OptimalRate;\n};\n\nexport class ParaswapQuoteProvider {\n protected chainId: SupportedEvmChain;\n\n constructor(chainId: SupportedEvmChain) {\n this.chainId = chainId;\n }\n\n private async getTokenDecimals(tokenAddress: Address): Promise<number> {\n const rpcUrl = rpcProvidersUrl[this.chainId];\n const client = ChainProvider.getClient(this.chainId, rpcUrl);\n const erc20Contract = getContract({\n abi: ERC20ABI,\n address: tokenAddress,\n client,\n });\n\n return erc20Contract.read.decimals();\n }\n\n private async getQuote(paraswapParams: ParaswapQuoteRequestParams): Promise<OptimalRate> {\n const params = { ...paraswapParams };\n if (isNativeEvmToken(params.destToken)) {\n params.destToken = WRAPPED_ETH_ADDRESSES[this.chainId];\n }\n\n const [srcTokenDecimals, destTokenDecimals] = await Promise.all([\n this.getTokenDecimals(params.srcToken as Address),\n this.getTokenDecimals(params.destToken as Address),\n ]);\n\n const sdk = constructSimpleSDK({ chainId: this.chainId, fetch: fetch });\n return sdk.swap.getRate({\n amount: params.amount.toString(),\n destDecimals: destTokenDecimals,\n destToken: params.destToken,\n side: params.side,\n srcDecimals: srcTokenDecimals,\n srcToken: params.srcToken,\n });\n }\n\n public async getSwapEstimation(params: ParaswapQuoteRequestParams): Promise<SwapEstimateResult> {\n const optimalRate = await this.getQuote(params);\n const amountOut = optimalRate.destAmount;\n const amountIn = optimalRate.srcAmount;\n\n const amountOutUsd = optimalRate.destUSD ?? 0;\n const amountInUsd = optimalRate.srcUSD ?? 0;\n\n return {\n amountIn: BigInt(amountIn),\n amountOut: BigInt(amountOut),\n amountOutUsd: Number(amountOutUsd),\n amountInUsd: Number(amountInUsd),\n quote: optimalRate,\n };\n }\n}\n","import { ChainID } from '../../chains.js';\n\nexport type QuoteParams = {\n sourceChainId: ChainID;\n destChainId: ChainID;\n amount: number;\n tokenIn: string;\n tokenOut: string;\n slippageBps?: number;\n};\n\nexport const CROSS_CHAIN_STABLES: Record<string, Partial<Record<ChainID, { address: string; decimals: number }>>> = {\n USDC: {\n [ChainID.Solana]: {\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n },\n [ChainID.Base]: {\n address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n decimals: 6,\n },\n [ChainID.Arbitrum]: {\n address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n decimals: 6,\n },\n [ChainID.Optimism]: {\n address: '0x7F5c764cBc14f9669B88837ca1490cCa17c31607',\n decimals: 6,\n },\n [ChainID.Sui]: {\n address: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',\n decimals: 6,\n },\n [ChainID.MONAD]: {\n address: '0x754704Bc059F8C67012fEd69BC8A327a5aafb603',\n decimals: 6,\n },\n },\n USDT: {\n [ChainID.Hyperliquid]: {\n address: '0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb',\n decimals: 6,\n },\n [ChainID.BSC]: {\n address: '0x55d398326f99059ff775485246999027b3197955',\n decimals: 18,\n },\n },\n};\n","import { Aftermath } from 'aftermath-ts-sdk';\n\nexport type AfterMathQuoteParams = {\n amountIn: bigint;\n tokenIn: string;\n tokenOut: string;\n};\nexport class AftermathQuoteProvider {\n public async getQuote(params: AfterMathQuoteParams) {\n const afSdk = new Aftermath('MAINNET');\n\n await afSdk.init();\n\n const router = afSdk.Router();\n\n const quote = await router.getCompleteTradeRouteGivenAmountIn({\n coinInAmount: params.amountIn,\n coinInType: params.tokenIn,\n coinOutType: params.tokenOut,\n });\n\n return quote;\n }\n}\n","import { formatUnits } from 'viem';\nimport { ChainID } from '../../chains.js';\nimport { isNativeEvmToken, WRAPPED_ETH_ADDRESSES } from '../../constants.js';\nimport { CROSS_CHAIN_STABLES } from './stablecoins-tokens.js';\n\ntype LiquidSwapQuoteParams = {\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n};\n\nexport type LiquidSwapQuoteResponse = {\n success: boolean;\n amountIn: string;\n amountOut: string;\n averagePriceImpact: string;\n execution: any;\n};\n\nconst LIQUID_SWAP_API_URL = 'https://api.liqd.ag';\n\nexport class LiquidSwapQuoteProvider {\n public async getQuote(params: LiquidSwapQuoteParams): Promise<LiquidSwapQuoteResponse> {\n const chainId = ChainID.Hyperliquid;\n let tokenIn = params.tokenIn;\n let tokenOut = params.tokenOut;\n\n // 1️ Wrap native tokens if needed\n if (isNativeEvmToken(tokenIn)) {\n tokenIn = WRAPPED_ETH_ADDRESSES[chainId];\n }\n if (isNativeEvmToken(tokenOut)) {\n tokenOut = WRAPPED_ETH_ADDRESSES[chainId];\n }\n\n // 2️Detect decimals\n const tokenInDecimals = this.getTokenDecimals(tokenIn, chainId);\n\n // 3️ Convert amountIn (wei → human)\n const formattedAmountIn = formatUnits(BigInt(params.amountIn), tokenInDecimals);\n\n // 4️ Build request URL — amountIn should still be in base units for API\n const url = `${LIQUID_SWAP_API_URL}/v2/route?tokenIn=${tokenIn}&tokenOut=${tokenOut}&amountIn=${formattedAmountIn}`;\n\n const response = await fetch(url);\n if (!response.ok) throw new Error('Failed to fetch quote from LiquidSwap API');\n\n const data = await response.json();\n\n return data;\n }\n\n private getTokenDecimals(addressOrSymbol: string, chainId: ChainID): number {\n const lower = addressOrSymbol.toLowerCase();\n\n // Match by address\n for (const symbol in CROSS_CHAIN_STABLES) {\n const stable = CROSS_CHAIN_STABLES[symbol]?.[chainId];\n if (stable && stable.address.toLowerCase() === lower) {\n return stable.decimals;\n }\n }\n\n // Match by symbol\n const stableBySymbol = CROSS_CHAIN_STABLES[addressOrSymbol.toUpperCase()]?.[chainId];\n if (stableBySymbol?.decimals) return stableBySymbol.decimals;\n\n // Default fallback\n return 18;\n }\n}\n","import { NATIVE_SOLANA_TOKEN_ADDRESS, WRAPPED_SOL_MINT_ADDRESS } from '../../constants.js';\nimport {\n API_URLS,\n getPdaLaunchpadPoolId,\n Raydium,\n LAUNCHPAD_PROGRAM,\n PlatformConfig,\n Curve,\n type LaunchpadConfigInfo,\n type LaunchpadPoolInfo,\n} from '@raydium-io/raydium-sdk-v2';\nimport { type SimpleQuote } from './aggregator.js';\nimport { Connection, clusterApiUrl, PublicKey } from '@solana/web3.js'; // Used this package for raydium-sdk-v2 compatibility\nimport BN from 'bn.js';\nimport { Decimal } from 'decimal.js';\nimport { JupiterQuoteProvider, type JupiterQuoteParams } from './jupiter.js';\nimport { TWO_SECONDS_MS, TEN_MINUTES_MS } from './utils.js';\n\nconst launchpadPoolCache = new Map<\n string,\n {\n data: [\n LaunchpadPoolInfo & {\n programId: PublicKey;\n configInfo: LaunchpadConfigInfo;\n },\n PublicKey,\n ];\n expiresAt: number;\n }\n>();\n\nconst launchpadPoolInfoCache = new Map<\n string,\n {\n data: LaunchpadPoolInfo & {\n programId: PublicKey;\n configInfo: LaunchpadConfigInfo;\n };\n expiresAt: number;\n }\n>();\n\nconst platformConfigCache = new Map<\n string,\n {\n data: ReturnType<typeof PlatformConfig.decode>;\n expiresAt: number;\n }\n>();\n\nconst mintInfoCache = new Map<string, Awaited<ReturnType<Raydium['token']['getTokenInfo']>>>();\n\n// Local implementation of compareAddresses function\nconst compareAddresses = (firstAddress?: string, secondAddress?: string): boolean => {\n return !!firstAddress && !!secondAddress && firstAddress.toLowerCase() === secondAddress.toLowerCase();\n};\n\nconst LAUNCHPAD_WHITELISTED_QUOTE_TOKENS = [\n new PublicKey('So11111111111111111111111111111111111111112'), // WSOL\n new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), // USDC\n new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'), // USDT\n new PublicKey('USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB'), // USD1\n];\n\nexport type RaydiumPumpQuoteParams = {\n inputMint: string;\n outputMint: string;\n amount: string;\n slippageBps: number;\n};\n\nexport type RaydiumQuoteResponse = {\n success: boolean;\n data: {\n inputMint: string;\n outputMint: string;\n inAmount: string;\n outAmount: string;\n otherAmountThreshold: string;\n swapMode: string;\n slippageBps: number;\n platformFee: null;\n priceImpactPct: string;\n routePlan: Array<{\n swapInfo: {\n ammKey: string;\n label: string;\n inputMint: string;\n outputMint: string;\n notEnoughLiquidity: boolean;\n minInAmount: string;\n minOutAmount: string;\n priceImpactPct: string;\n lpFee: {\n amount: string;\n mint: string;\n pct: number;\n };\n platformFee: {\n amount: string;\n mint: string;\n pct: number;\n };\n };\n percent: number;\n }>;\n };\n};\n\nlet raydium: Raydium | undefined;\nexport const initSdk = async (): Promise<Raydium> => {\n if (raydium) return raydium;\n raydium = await Raydium.load({\n connection: new Connection(clusterApiUrl('mainnet-beta')),\n disableFeatureCheck: true,\n disableLoadToken: true,\n });\n return raydium;\n};\n\n// Using API_URLS from Raydium SDK v2\n\nexport class RaydiumQuoteProvider {\n /**\n * Get priority fee recommendations from Raydium API\n * @returns Priority fee data with different tiers (vh, h, m)\n */\n public async getPriorityFee(): Promise<{\n vh: number; // very high\n h: number; // high\n m: number; // medium\n }> {\n const url = new URL(API_URLS.PRIORITY_FEE, API_URLS.BASE_HOST);\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch priority fee from Raydium API: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n if (!data.success) {\n throw new Error('Raydium API returned unsuccessful response for priority fee');\n }\n\n return data.data.default;\n }\n\n public async getQuote(raydiumParams: RaydiumPumpQuoteParams): Promise<RaydiumQuoteResponse> {\n const params = { ...raydiumParams };\n\n // Handle native SOL token mapping for Solana\n if (compareAddresses(params.inputMint, NATIVE_SOLANA_TOKEN_ADDRESS)) {\n params.inputMint = WRAPPED_SOL_MINT_ADDRESS;\n }\n\n if (compareAddresses(params.outputMint, NATIVE_SOLANA_TOKEN_ADDRESS)) {\n params.outputMint = WRAPPED_SOL_MINT_ADDRESS;\n }\n\n const url = new URL('/compute/swap-base-in', API_URLS.SWAP_HOST);\n url.searchParams.set('inputMint', params.inputMint);\n url.searchParams.set('outputMint', params.outputMint);\n url.searchParams.set('amount', params.amount);\n url.searchParams.set('slippageBps', params.slippageBps.toString());\n url.searchParams.set('txVersion', 'V0');\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch quote from Raydium API: ${response.status} ${response.statusText}`);\n }\n\n const data: RaydiumQuoteResponse = await response.json();\n\n if (!data.success) {\n throw new Error('Raydium API returned unsuccessful response');\n }\n\n return data;\n }\n\n /**\n * Get transaction data for executing a swap\n * @param params - Transaction parameters\n * @returns Serialized transaction data\n */\n public async getSwapTransaction(params: {\n swapResponse: RaydiumQuoteResponse;\n wallet: string;\n txVersion: 'V0' | 'LEGACY';\n wrapSol?: boolean;\n unwrapSol?: boolean;\n inputAccount?: string;\n outputAccount?: string;\n computeUnitPriceMicroLamports?: string;\n }): Promise<{\n id: string;\n version: string;\n success: boolean;\n data: { transaction: string }[];\n }> {\n const url = new URL('/transaction/swap-base-in', API_URLS.SWAP_HOST);\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n computeUnitPriceMicroLamports: params.computeUnitPriceMicroLamports || '0',\n swapResponse: params.swapResponse,\n txVersion: params.txVersion,\n wallet: params.wallet,\n wrapSol: params.wrapSol || false,\n unwrapSol: params.unwrapSol || false,\n inputAccount: params.inputAccount,\n outputAccount: params.outputAccount,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get swap transaction from Raydium API: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n if (!data.success) {\n throw new Error('Raydium API returned unsuccessful response for swap transaction');\n }\n\n return data;\n }\n\n public async getQuotePrebonded(raydiumParams: RaydiumPumpQuoteParams): Promise<SimpleQuote> {\n // First, get the Raydium quote token\n let raydiumSdk = await initSdk();\n let inputMintPk = new PublicKey(raydiumParams.inputMint);\n let outputMintPk = new PublicKey(raydiumParams.outputMint);\n\n // Check if either input or output mint is in the launchpad whitelisted tokens\n let poolInfo, inputPoolInfo, outputPoolInfo, quoteToken, isInputPrebonded, inputQuoteToken, outputQuoteToken;\n try {\n [inputPoolInfo, inputQuoteToken] = await this.checkPreboundedTokensSwapLaunchpad(raydiumSdk, inputMintPk);\n if (inputPoolInfo && inputQuoteToken) {\n isInputPrebonded = true;\n poolInfo = inputPoolInfo;\n quoteToken = inputQuoteToken;\n }\n } catch (e) {}\n try {\n [outputPoolInfo, outputQuoteToken] = await this.checkPreboundedTokensSwapLaunchpad(raydiumSdk, outputMintPk);\n if (outputPoolInfo && outputQuoteToken) {\n isInputPrebonded = false;\n poolInfo = outputPoolInfo;\n quoteToken = outputQuoteToken;\n }\n } catch (e) {}\n\n if (inputPoolInfo && outputPoolInfo) {\n // Both input and output are prebonded, which is not supported\n throw new Error('Both input and output tokens are prebonded, which is not supported');\n } else if (!quoteToken || !poolInfo) {\n // Neither input nor output is prebonded, fallback to regular Raydium quote\n throw new Error('Neither input nor output tokens are prebonded');\n }\n\n let quoteIsInput = quoteToken.equals(inputMintPk);\n let quoteIsOutput = quoteToken.equals(outputMintPk);\n\n if (isInputPrebonded) {\n // We have to estimate prebonded first and then swap from quote token to output token (if needed)\n let { expectedAmountOut, minimumAmountOut } = await this.estimatePrebondedToQuote(\n raydiumSdk,\n inputMintPk,\n poolInfo,\n 'sell',\n new BN(raydiumParams.amount),\n new BN(raydiumParams.slippageBps), // Use full slippage for simplicity\n );\n\n // Then, if output token is not quote token, we have to swap from quote token to output token\n if (!quoteIsOutput) {\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: BigInt(expectedAmountOut.toString()),\n tokenIn: quoteToken.toString(),\n tokenOut: raydiumParams.outputMint,\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Use full slippage for simplicity\n };\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: BigInt(jupiterQuote.quote.outAmount),\n amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),\n slippage: raydiumParams.slippageBps / 100,\n };\n } else {\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: BigInt(expectedAmountOut.toString()),\n amountOutMin: BigInt(minimumAmountOut.toString()),\n slippage: raydiumParams.slippageBps / 100,\n };\n }\n } else {\n // We have to swap from input token to quote token and then estimate prebonded\n let amountOutFromInput = new BN(raydiumParams.amount);\n if (!quoteIsInput) {\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: BigInt(raydiumParams.amount),\n tokenIn: raydiumParams.inputMint,\n tokenOut: quoteToken.toString(),\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Use full slippage for simplicity\n };\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n\n // Calculate minimum amount with slippage applied\n amountOutFromInput = new BN(jupiterQuote.quote.outAmount);\n }\n // Now estimate prebonded\n let { expectedAmountOut, minimumAmountOut } = await this.estimatePrebondedToQuote(\n raydiumSdk,\n outputMintPk,\n poolInfo,\n 'buy',\n amountOutFromInput,\n new BN(raydiumParams.slippageBps),\n );\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: BigInt(expectedAmountOut.toString()),\n amountOutMin: BigInt(minimumAmountOut.toString()),\n slippage: raydiumParams.slippageBps / 100,\n };\n }\n }\n\n async checkPreboundedTokensSwapLaunchpad(\n raydiumSdk: Raydium,\n raydiumMint: PublicKey,\n ): Promise<\n [\n LaunchpadPoolInfo & {\n programId: PublicKey;\n configInfo: LaunchpadConfigInfo;\n },\n PublicKey,\n ]\n > {\n // Try cache first\n const cacheKey = raydiumMint.toBase58();\n const cached = launchpadPoolCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.data;\n }\n\n // Check if either input or output mint is in the launchpad whitelisted tokens\n // Check for input mint\n for (const quoteToken of LAUNCHPAD_WHITELISTED_QUOTE_TOKENS) {\n try {\n const poolId = getPdaLaunchpadPoolId(LAUNCHPAD_PROGRAM, raydiumMint, quoteToken).publicKey;\n const poolCacheKey = poolId.toBase58();\n const cachedPoolInfo = launchpadPoolInfoCache.get(poolCacheKey);\n const poolInfo =\n cachedPoolInfo && Date.now() < cachedPoolInfo.expiresAt\n ? cachedPoolInfo.data\n : await raydiumSdk.launchpad.getRpcPoolInfo({ poolId });\n\n launchpadPoolInfoCache.set(poolCacheKey, {\n data: poolInfo,\n expiresAt: Date.now() + TWO_SECONDS_MS,\n });\n // Cache positive result for a short period\n launchpadPoolCache.set(cacheKey, {\n data: [poolInfo, quoteToken],\n expiresAt: Date.now() + TWO_SECONDS_MS,\n });\n return [poolInfo, quoteToken];\n } catch (e) {\n // Ignore and continue trying with next quote token\n }\n }\n throw new Error('No launchpad pool found for the given token pair');\n }\n\n async estimatePrebondedToQuote(\n raydiumSdk: Raydium,\n raydiumMint: PublicKey,\n poolInfo: LaunchpadPoolInfo & {\n programId: PublicKey;\n configInfo: LaunchpadConfigInfo;\n },\n trade_type: 'buy' | 'sell',\n amount: BN,\n slippage: BN,\n ): Promise<{ expectedAmountOut: BN; minimumAmountOut: BN }> {\n const epochInfo = await raydiumSdk.connection.getEpochInfo();\n const slot = await raydiumSdk.connection.getSlot();\n const platformCacheKey = poolInfo.platformId.toBase58();\n let platformInfoEntry = platformConfigCache.get(platformCacheKey);\n if (!platformInfoEntry || Date.now() > platformInfoEntry.expiresAt) {\n const accountInfo = await raydiumSdk.connection.getAccountInfo(poolInfo.platformId);\n if (!accountInfo) {\n throw new Error('Platform account not found');\n }\n platformInfoEntry = {\n data: PlatformConfig.decode(accountInfo.data),\n expiresAt: Date.now() + TEN_MINUTES_MS,\n };\n platformConfigCache.set(platformCacheKey, platformInfoEntry);\n }\n const platformInfo = platformInfoEntry.data;\n\n const mintCacheKey = raydiumMint.toBase58();\n let mintInfo = mintInfoCache.get(mintCacheKey);\n if (!mintInfo) {\n mintInfo = await raydiumSdk.token.getTokenInfo(raydiumMint);\n mintInfoCache.set(mintCacheKey, mintInfo);\n }\n const shareFeeRate = new BN(0);\n\n let expectedAmountOut;\n let minimumAmountOut;\n if (trade_type === 'buy') {\n const res = Curve.buyExactIn({\n poolInfo,\n amountB: amount,\n protocolFeeRate: poolInfo.configInfo.tradeFeeRate,\n platformFeeRate: platformInfo.feeRate,\n curveType: poolInfo.configInfo.curveType,\n shareFeeRate,\n creatorFeeRate: platformInfo.creatorFeeRate,\n transferFeeConfigA: mintInfo.extensions.feeConfig\n ? {\n transferFeeConfigAuthority: PublicKey.default,\n withdrawWithheldAuthority: PublicKey.default,\n withheldAmount: BigInt(0),\n olderTransferFee: {\n epoch: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.epoch ?? epochInfo?.epoch ?? 0),\n maximumFee: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.maximumFee),\n transferFeeBasisPoints: mintInfo.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints,\n },\n newerTransferFee: {\n epoch: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.epoch ?? epochInfo?.epoch ?? 0),\n maximumFee: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.maximumFee),\n transferFeeBasisPoints: mintInfo.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints,\n },\n }\n : undefined,\n slot,\n });\n expectedAmountOut = new BN(res.amountA.amount.sub(res.amountA.fee ?? new BN(0)).toString());\n minimumAmountOut = new BN(\n new Decimal(res.amountA.amount.sub(res.amountA.fee ?? new BN(0)).toString())\n .mul((10000 - slippage.toNumber()) / 10000)\n .toFixed(0),\n );\n } else if (trade_type === 'sell') {\n const res = Curve.sellExactIn({\n poolInfo,\n amountA: amount,\n protocolFeeRate: poolInfo.configInfo.tradeFeeRate,\n platformFeeRate: platformInfo.feeRate,\n curveType: poolInfo.configInfo.curveType,\n shareFeeRate,\n creatorFeeRate: platformInfo.creatorFeeRate,\n slot,\n transferFeeConfigA: mintInfo.extensions.feeConfig\n ? {\n transferFeeConfigAuthority: PublicKey.default,\n withdrawWithheldAuthority: PublicKey.default,\n withheldAmount: BigInt(0),\n olderTransferFee: {\n epoch: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.epoch ?? epochInfo?.epoch ?? 0),\n maximumFee: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.maximumFee),\n transferFeeBasisPoints: mintInfo.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints,\n },\n newerTransferFee: {\n epoch: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.epoch ?? epochInfo?.epoch ?? 0),\n maximumFee: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.maximumFee),\n transferFeeBasisPoints: mintInfo.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints,\n },\n }\n : undefined,\n });\n expectedAmountOut = new BN(res.amountB);\n minimumAmountOut = new BN(\n new Decimal(res.amountB.toString()).mul((10000 - slippage.toNumber()) / 10000).toFixed(0),\n );\n } else {\n throw new Error('Invalid trade type. Must be \"buy\" or \"sell\".');\n }\n return { expectedAmountOut, minimumAmountOut };\n }\n}\n","export const TEN_MINUTES_MS = 10 * 60 * 1000;\nexport const TWO_SECONDS_MS = 2 * 1000;\nexport const ONE_DAY_MS = 24 * 60 * 60 * 1000;\n\nexport function applySlippage(amount: bigint, slippageBps = 0): bigint {\n const multiplier = BigInt(10000 - slippageBps);\n return (amount * multiplier) / 10000n;\n}\n","import { address, type Address } from '@solana/kit';\nimport { type SimpleQuote } from '../aggregator.js';\nimport type { RaydiumPumpQuoteParams } from '../raydium.js';\nimport type { BondingCurve } from './models.js';\nimport {\n getPumpFunGlobalAccount,\n getPumpFunBondingCurve,\n getPumpFunGlobalConfig,\n getPumpFunMigratedPool,\n getPoolTokensInfo,\n} from './utils.js';\nimport { NATIVE_SOLANA_TOKEN_ADDRESS, WRAPPED_SOL_MINT_ADDRESS } from '../../../constants.js';\nimport { JupiterQuoteProvider, type JupiterQuoteParams } from '../jupiter.js';\nimport { estimatePumpFunPrebonded, PreBondedTradeType } from './estimations.js';\nimport { estimatePumpFunAmm } from './estimations_amm.js';\nimport { applySlippage } from '../utils.js';\n\nexport class PumpFunQuoteProvider {\n public async getQuote(raydiumParams: RaydiumPumpQuoteParams): Promise<SimpleQuote> {\n // Check which token is pump and if it is in prebonding stage\n const inputMint = address(raydiumParams.inputMint);\n const outputMint = address(raydiumParams.outputMint);\n\n const [inputBondingCurve, outputBondingCurve] = await this.getTokensBondingCurve(inputMint, outputMint);\n\n const { bondingCurve, isInputPrebonded } = this.ensureSinglePrebondedToken(inputBondingCurve, outputBondingCurve);\n\n let isInputSol = inputMint === NATIVE_SOLANA_TOKEN_ADDRESS || inputMint === WRAPPED_SOL_MINT_ADDRESS;\n let isOutputSol = outputMint === NATIVE_SOLANA_TOKEN_ADDRESS || outputMint === WRAPPED_SOL_MINT_ADDRESS;\n\n if (bondingCurve.complete) {\n console.log('Bonding curve is complete, using Pump AMM for quote');\n // We have to estimate prebonded first and then swap from quote token to output token (if needed)\n // Use Pump AMM logic to get quote\n let [globalConfig, _] = await getPumpFunGlobalConfig();\n\n if (isInputPrebonded) {\n let [migratePoolData, _] = await getPumpFunMigratedPool(inputMint);\n let [inputTokenAccount, outputTokenAccount] = await getPoolTokensInfo(\n migratePoolData.poolBaseTokenAccount,\n migratePoolData.poolQuoteTokenAccount,\n );\n\n let pumpAmountOut = estimatePumpFunAmm(\n inputTokenAccount,\n outputTokenAccount,\n globalConfig,\n BigInt(raydiumParams.amount),\n PreBondedTradeType.SellExactIn,\n );\n\n // Then if output token is SOL or WSOL, return directly\n if (isOutputSol) {\n // Apply slippage to amountOut\n const pumpMinAmountOut = applySlippage(pumpAmountOut, raydiumParams.slippageBps);\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: pumpAmountOut,\n amountOutMin: pumpMinAmountOut,\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n } else {\n // Then if output token is not SOL or WSOL, get a jupiter quote to swap SOL to output token\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: pumpAmountOut,\n tokenIn: WRAPPED_SOL_MINT_ADDRESS.toString(),\n tokenOut: raydiumParams.outputMint,\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Here we use all slippage to simplify\n };\n\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: BigInt(jupiterQuote.quote.outAmount),\n amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n }\n } else {\n let [migratePoolData, _] = await getPumpFunMigratedPool(outputMint);\n let [inputTokenAccount, outputTokenAccount] = await getPoolTokensInfo(\n migratePoolData.poolBaseTokenAccount,\n migratePoolData.poolQuoteTokenAccount,\n );\n let amountOutFromInput = BigInt(raydiumParams.amount);\n let amountOutFromInputMin = applySlippage(BigInt(raydiumParams.amount), raydiumParams.slippageBps);\n // Buying prebonded token with SOL\n // If input token is not SOL or WSOL, get a jupiter quote to swap input token to SOL first\n if (!isInputSol) {\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: BigInt(raydiumParams.amount),\n tokenIn: raydiumParams.inputMint,\n tokenOut: WRAPPED_SOL_MINT_ADDRESS.toString(),\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Use all slippage to simplify\n };\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n amountOutFromInput = BigInt(jupiterQuote.quote.outAmount);\n amountOutFromInputMin = BigInt(jupiterQuote.quote.otherAmountThreshold);\n }\n\n // Slippage is already applied to amountOutFromInputMin\n let pumpAmountOut = estimatePumpFunAmm(\n inputTokenAccount,\n outputTokenAccount,\n globalConfig,\n amountOutFromInput,\n PreBondedTradeType.BuyExactIn,\n );\n\n let pumpAmountOutMin = estimatePumpFunAmm(\n inputTokenAccount,\n outputTokenAccount,\n globalConfig,\n amountOutFromInputMin,\n PreBondedTradeType.BuyExactIn,\n );\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: pumpAmountOut,\n amountOutMin: pumpAmountOutMin,\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n }\n } else {\n // Use Pump logic to get quote during prebonding\n let globalAccount = await getPumpFunGlobalAccount();\n if (isInputPrebonded) {\n // Selling prebonded token for SOL\n // First get sell estimation from PumpFun\n const pumpAmountOut = estimatePumpFunPrebonded(\n bondingCurve,\n globalAccount[0],\n BigInt(raydiumParams.amount),\n PreBondedTradeType.SellExactIn,\n );\n console.log('pumpAmountOut', pumpAmountOut);\n\n // Then if output token is SOL or WSOL, return directly\n if (isOutputSol) {\n // Apply slippage to amountOut\n const pumpMinAmountOut = applySlippage(pumpAmountOut, raydiumParams.slippageBps);\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: pumpAmountOut,\n amountOutMin: pumpMinAmountOut,\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n } else {\n // Then if output token is not SOL or WSOL, get a jupiter quote to swap SOL to output token\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: pumpAmountOut,\n tokenIn: WRAPPED_SOL_MINT_ADDRESS.toString(),\n tokenOut: raydiumParams.outputMint,\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Here we use all slippage to simplify\n };\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: BigInt(jupiterQuote.quote.outAmount),\n amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n }\n } else {\n let amountOutFromInput = BigInt(raydiumParams.amount);\n let amountOutFromInputMin = applySlippage(BigInt(raydiumParams.amount), raydiumParams.slippageBps);\n // Buying prebonded token with SOL\n // If input token is not SOL or WSOL, get a jupiter quote to swap input token to SOL first\n if (!isInputSol) {\n let jupiterQuoteRequest: JupiterQuoteParams = {\n amount: BigInt(raydiumParams.amount),\n tokenIn: raydiumParams.inputMint,\n tokenOut: WRAPPED_SOL_MINT_ADDRESS.toString(),\n swapMode: 'ExactIn',\n slippageBps: raydiumParams.slippageBps, // Use all slippage to simplify\n };\n const jupiterQuoter = new JupiterQuoteProvider();\n const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);\n if (!jupiterQuote.quote) {\n throw new Error('Jupiter quote failed');\n }\n\n // Calculate minimum amount with slippage applied\n amountOutFromInput = BigInt(jupiterQuote.quote.outAmount);\n amountOutFromInputMin = BigInt(jupiterQuote.quote.otherAmountThreshold);\n }\n\n // Slippage is already applied to amountOutFromInputMin\n const amountOut = estimatePumpFunPrebonded(\n bondingCurve,\n globalAccount[0],\n amountOutFromInput,\n PreBondedTradeType.BuyExactIn,\n );\n\n const minAmountOut = estimatePumpFunPrebonded(\n bondingCurve,\n globalAccount[0],\n amountOutFromInputMin,\n PreBondedTradeType.BuyExactIn,\n );\n\n return {\n amountIn: BigInt(raydiumParams.amount),\n amountOut: amountOut,\n amountOutMin: minAmountOut,\n slippage: raydiumParams.slippageBps / 100, // convert to percentage\n };\n }\n }\n }\n\n async getTokensBondingCurve(\n inputMint: Address,\n outputMint: Address,\n ): Promise<[BondingCurve | null, BondingCurve | null]> {\n let inputBondingCurve: BondingCurve | null = null;\n let outputBondingCurve: BondingCurve | null = null;\n\n try {\n inputBondingCurve = (await getPumpFunBondingCurve(inputMint))[0];\n } catch (e) {\n // No bonding curve for input token\n }\n\n try {\n outputBondingCurve = (await getPumpFunBondingCurve(outputMint))[0];\n } catch (e) {\n // No bonding curve for output token\n }\n\n return [inputBondingCurve, outputBondingCurve];\n }\n\n private ensureSinglePrebondedToken(\n inputBonding: BondingCurve | null,\n outputBonding: BondingCurve | null,\n ): { bondingCurve: BondingCurve; isInputPrebonded: boolean } {\n if (inputBonding && outputBonding) {\n throw new Error('Both input and output tokens are prebonded, which is not supported');\n }\n if (!inputBonding && !outputBonding) {\n throw new Error('Neither input nor output token is prebonded, which is not supported');\n }\n return inputBonding\n ? { bondingCurve: inputBonding, isInputPrebonded: true }\n : { bondingCurve: outputBonding!, isInputPrebonded: false };\n }\n}\n","import {\n address,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n getAddressEncoder,\n getProgramDerivedAddress,\n unwrapOption,\n type Address,\n} from '@solana/kit';\nimport { getDefaultSolanaRPC } from '../../../core/solana/client.js';\nimport {\n getBondingCurveDecoder,\n getGlobalAccountDecoder,\n getGlobalConfigDecoder,\n getPumpPoolDataDecoder,\n type BondingCurve,\n type GlobalAccount,\n type GlobalConfig,\n type PumpPoolData,\n type TokenAccount,\n} from './models.js';\nimport { getTokenDecoder } from '@solana-program/token';\nimport { ONE_DAY_MS, TEN_MINUTES_MS, TWO_SECONDS_MS } from '../utils.js';\n\nexport const PUMP_FUN_PROGRAM_ADDRESS = address('6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P');\nexport const PUMP_FUN_AMM_PROGRAM_ADDRESS = address('pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA');\nexport const WRAPPED_NATIVE_TOKEN_PUBKEY = address('So11111111111111111111111111111111111111112');\nexport const GLOBAL_CONFIG_AMM = address('ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw');\nexport const ANCHOR_DISCRIMINATOR_SIZE = 8;\n\nlet globalAccountCache: { data: [GlobalAccount, Address]; expiresAt: number } | null = null;\nlet globalConfigCache: { data: [GlobalConfig, Address]; expiresAt: number } | null = null;\nconst migratedPoolCache = new Map<string, { data: [PumpPoolData, Address]; expiresAt: number }>();\nconst poolTokensInfoCache = new Map<string, { data: [TokenAccount, TokenAccount]; expiresAt: number }>();\n\n/**\n * Finds the PDA for a PumpFun bonding curve\n */\nasync function findBondingCurvePda(tokenMint: Address): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: PUMP_FUN_PROGRAM_ADDRESS,\n seeds: [new TextEncoder().encode('bonding-curve'), getAddressEncoder().encode(tokenMint)],\n });\n\n return pda;\n}\n\n/**\n * Finds the PDA for the PumpFun global account\n */\nasync function findGlobalAccountPda(): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: PUMP_FUN_PROGRAM_ADDRESS,\n seeds: [new TextEncoder().encode('global')],\n });\n\n return pda;\n}\n\n/**\n * Finds the PDA for pool authority in the AMM program\n */\nasync function findPoolAuthorityPdaAmm(mint: Address): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: PUMP_FUN_PROGRAM_ADDRESS,\n seeds: [new TextEncoder().encode('pool-authority'), getAddressEncoder().encode(mint)],\n });\n\n return pda;\n}\n\n/**\n * Finds the PDA for a pool in the AMM program\n */\nasync function findPoolPdaAmm(poolAuthority: Address, baseMint: Address, quoteMint: Address): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: PUMP_FUN_AMM_PROGRAM_ADDRESS,\n seeds: [\n new TextEncoder().encode('pool'),\n new Uint8Array([0, 0]), // Pool type bytes\n getAddressEncoder().encode(poolAuthority),\n getAddressEncoder().encode(baseMint),\n getAddressEncoder().encode(quoteMint),\n ],\n });\n\n return pda;\n}\n\n/**\n * Fetches and deserializes a PumpFun bonding curve account\n *\n * @param tokenMint - The token mint address\n * @param options - Optional RPC configuration\n * @returns Tuple of [BondingCurve data, PDA address]\n * @throws Error if account doesn't exist or deserialization fails\n */\nexport async function getPumpFunBondingCurve(tokenMint: Address): Promise<[BondingCurve, Address]> {\n const rpc = getDefaultSolanaRPC();\n\n try {\n // Derive the PDA for the bonding curve\n const pda = await findBondingCurvePda(tokenMint);\n\n // Fetch the account data\n const encodedAccount = await fetchEncodedAccount(rpc, pda);\n\n if (!encodedAccount.exists) {\n throw new Error(`Bonding curve account not found for token mint: ${tokenMint}`);\n }\n\n // Anchor accounts have an 8-byte discriminator prefix\n const dataWithoutDiscriminator = encodedAccount.data.slice(8);\n\n try {\n const decoder = getBondingCurveDecoder();\n const bondingCurve = decoder.decode(dataWithoutDiscriminator);\n\n return [bondingCurve, pda];\n } catch (decodingError) {\n throw new Error(\n `Failed to deserialize bonding curve: ${decodingError instanceof Error ? decodingError.message : String(decodingError)}`,\n );\n }\n } catch (error) {\n throw new Error(`Failed to fetch bonding curve account: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Fetches and deserializes the PumpFun global account\n *\n * @returns Tuple of [GlobalAccount data, PDA address]\n * @throws {Error} if account doesn't exist\n * @throws {Error} if deserialization fails\n */\nexport async function getPumpFunGlobalAccount(): Promise<[GlobalAccount, Address]> {\n // Return cached value if valid\n if (globalAccountCache && Date.now() < globalAccountCache.expiresAt) {\n return globalAccountCache.data;\n }\n\n const rpc = getDefaultSolanaRPC();\n const pda = await findGlobalAccountPda();\n\n const encodedAccount = await fetchEncodedAccount(rpc, pda);\n\n if (!encodedAccount.exists) {\n throw new Error(`GlobalAccount not found: ${pda}`);\n }\n\n // Validate minimum size\n if (encodedAccount.data.length < ANCHOR_DISCRIMINATOR_SIZE) {\n throw new Error(\n `GlobalAccount deserialization failed: Account data too small: ${encodedAccount.data.length} bytes`,\n );\n }\n\n // Skip Anchor's 8-byte discriminator\n const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);\n\n try {\n const decoder = getGlobalAccountDecoder();\n const globalAccount = decoder.decode(dataWithoutDiscriminator);\n\n // Update cache\n globalAccountCache = {\n data: [globalAccount, pda],\n expiresAt: Date.now() + TEN_MINUTES_MS,\n };\n\n return [globalAccount, pda];\n } catch (error) {\n throw new Error(`GlobalAccount deserialization failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Fetches and deserializes the PumpFun global config account\n *\n * @returns Tuple of [GlobalConfig data, PDA address]\n * @throws {Error} if account doesn't exist\n * @throws {Error} if deserialization fails\n */\nexport async function getPumpFunGlobalConfig(): Promise<[GlobalConfig, Address]> {\n // Return cached value if valid\n if (globalConfigCache && Date.now() < globalConfigCache.expiresAt) {\n return globalConfigCache.data;\n }\n\n const rpc = getDefaultSolanaRPC();\n\n const encodedAccount = await fetchEncodedAccount(rpc, GLOBAL_CONFIG_AMM);\n\n if (!encodedAccount.exists) {\n throw new Error(`GlobalConfig account not found: ${GLOBAL_CONFIG_AMM}`);\n }\n\n // Validate minimum size\n if (encodedAccount.data.length < ANCHOR_DISCRIMINATOR_SIZE) {\n throw new Error(`GlobalConfig deserialization failed: Account data too small: ${encodedAccount.data.length} bytes`);\n }\n\n // Skip Anchor's 8-byte discriminator\n const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);\n\n try {\n const decoder = getGlobalConfigDecoder();\n const globalConfig = decoder.decode(dataWithoutDiscriminator);\n\n // Update cache\n globalConfigCache = {\n data: [globalConfig, GLOBAL_CONFIG_AMM],\n expiresAt: Date.now() + TEN_MINUTES_MS,\n };\n\n return [globalConfig, GLOBAL_CONFIG_AMM];\n } catch (error) {\n throw new Error(`GlobalConfig deserialization failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Fetches the migrated AMM pool for a token\n *\n * @param baseMint - The token mint address (NOT WSOL)\n * @returns Tuple of [PumpPoolData, pool PDA address]\n * @throws Error if pool doesn't exist or deserialization fails\n */\nexport async function getPumpFunMigratedPool(baseMint: Address): Promise<[PumpPoolData, Address]> {\n // 2s in-memory cache\n const cacheKey = String(baseMint);\n const cached = migratedPoolCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.data;\n }\n\n const rpc = getDefaultSolanaRPC();\n\n try {\n const poolAuthorityPda = await findPoolAuthorityPdaAmm(baseMint);\n const poolPda = await findPoolPdaAmm(poolAuthorityPda, baseMint, WRAPPED_NATIVE_TOKEN_PUBKEY);\n\n const encodedAccount = await fetchEncodedAccount(rpc, poolPda);\n\n if (!encodedAccount.exists) {\n throw new Error(`Migrated pool not found for token mint: ${baseMint}`);\n }\n\n const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);\n\n try {\n const decoder = getPumpPoolDataDecoder();\n const poolData = decoder.decode(dataWithoutDiscriminator);\n\n // Update short-lived cache\n migratedPoolCache.set(cacheKey, {\n data: [poolData, poolPda],\n expiresAt: Date.now() + ONE_DAY_MS,\n });\n\n return [poolData, poolPda];\n } catch (decodingError) {\n throw new Error(\n `Failed to deserialize pool data: ${decodingError instanceof Error ? decodingError.message : String(decodingError)}`,\n );\n }\n } catch (error) {\n throw new Error(`Failed to fetch migrated pool: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Fetches and deserializes token account information for pool base and quote tokens\n *\n * @param poolBaseTokenAccount - Base token account public key\n * @param poolQuoteTokenAccount - Quote token account public key\n * @returns Tuple containing [baseTokenAccount, quoteTokenAccount]\n * @throws Error if accounts don't exist or deserialization fails\n */\nexport async function getPoolTokensInfo(\n poolBaseTokenAccount: Address,\n poolQuoteTokenAccount: Address,\n): Promise<[TokenAccount, TokenAccount]> {\n // 2s in-memory cache\n const cacheKey = `${poolBaseTokenAccount}-${poolQuoteTokenAccount}`;\n const cached = poolTokensInfoCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.data;\n }\n\n const rpc = getDefaultSolanaRPC();\n\n const accountsInfo = await fetchEncodedAccounts(rpc, [poolBaseTokenAccount, poolQuoteTokenAccount]);\n\n // Validate base token account exists\n const baseAccountInfo = accountsInfo[0];\n if (!baseAccountInfo || !baseAccountInfo.exists) {\n throw new Error(`Base token account not found: ${poolBaseTokenAccount}`);\n }\n\n // Validate quote token account exists\n const quoteAccountInfo = accountsInfo[1];\n if (!quoteAccountInfo || !quoteAccountInfo.exists) {\n throw new Error(`Quote token account not found: ${poolQuoteTokenAccount}`);\n }\n\n const tokenDecoder = getTokenDecoder();\n\n // Deserialize base token account\n const baseDecoded = tokenDecoder.decode(baseAccountInfo.data);\n const baseTokenAccount: TokenAccount = {\n mint: baseDecoded.mint,\n owner: baseDecoded.owner,\n amount: baseDecoded.amount,\n delegate: unwrapOption(baseDecoded.delegate),\n state: baseDecoded.state,\n isNative: unwrapOption(baseDecoded.isNative),\n delegatedAmount: baseDecoded.delegatedAmount,\n closeAuthority: unwrapOption(baseDecoded.closeAuthority),\n };\n\n // Deserialize quote token account\n const quoteDecoded = tokenDecoder.decode(quoteAccountInfo.data);\n const quoteTokenAccount: TokenAccount = {\n mint: quoteDecoded.mint,\n owner: quoteDecoded.owner,\n amount: quoteDecoded.amount,\n delegate: unwrapOption(quoteDecoded.delegate),\n state: quoteDecoded.state,\n isNative: unwrapOption(quoteDecoded.isNative),\n delegatedAmount: quoteDecoded.delegatedAmount,\n closeAuthority: unwrapOption(quoteDecoded.closeAuthority),\n };\n\n // Update short-lived cache\n poolTokensInfoCache.set(cacheKey, {\n data: [baseTokenAccount, quoteTokenAccount],\n expiresAt: Date.now() + TWO_SECONDS_MS,\n });\n\n return [baseTokenAccount, quoteTokenAccount];\n}\n","import {\n getAddressDecoder,\n getArrayDecoder,\n getBooleanDecoder,\n getStructDecoder,\n getU16Decoder,\n getU64Decoder,\n getU8Decoder,\n type Address,\n type Decoder,\n} from '@solana/kit';\n\n/**\n * Represents a Solana Token Account\n */\nexport interface TokenAccount {\n mint: Address;\n owner: Address;\n amount: bigint;\n delegate: Address | null;\n state: number;\n isNative: bigint | null;\n delegatedAmount: bigint;\n closeAuthority: Address | null;\n}\n\n/**\n * BondingCurve structure matching the Rust implementation\n * This mirrors the on-chain account layout\n */\nexport interface BondingCurve {\n virtualTokenReserves: bigint;\n virtualSolReserves: bigint;\n realTokenReserves: bigint;\n realSolReserves: bigint;\n tokenTotalSupply: bigint;\n complete: boolean;\n creator: Address;\n}\n\n/**\n * GlobalAccount structure matching the Rust implementation\n * Contains global configuration for the PumpFun protocol\n */\nexport interface GlobalAccount {\n initialized: boolean;\n authority: Address;\n feeRecipient: Address;\n initialVirtualTokenReserves: bigint;\n initialVirtualSolReserves: bigint;\n initialRealTokenReserves: bigint;\n tokenTotalSupply: bigint;\n feeBasisPoints: bigint;\n withdrawAuthority: Address;\n enableMigrate: boolean;\n poolMigrationFee: bigint;\n creatorFeeBasisPoints: bigint;\n feeRecipients: Address[]; // Array of 7 Pubkeys\n setCreatorAuthority: Address;\n adminSetCreatorAuthority: Address;\n}\n\n/**\n * GlobalConfig structure matching the Rust implementation\n * This is the ACTUAL structure used by PumpFun on-chain\n */\nexport interface GlobalConfig {\n admin: Address;\n lpFeeBasisPoints: bigint;\n protocolFeeBasisPoints: bigint;\n disableFlags: number;\n protocolFeeRecipients: Address[]; // Array of 8 Pubkeys\n coinCreatorFeeBasisPoints: bigint;\n adminSetCoinCreatorAuthority: Address;\n}\n\n/**\n * PumpPoolData for migrated AMM pools\n */\nexport interface PumpPoolData {\n poolBump: number;\n index: number;\n creator: Address;\n baseMint: Address;\n quoteMint: Address;\n lpMint: Address;\n poolBaseTokenAccount: Address;\n poolQuoteTokenAccount: Address;\n lpSupply: bigint;\n coinCreator: Address;\n}\n\n/**\n * Creates a decoder for PumpPoolData\n */\nexport function getPumpPoolDataDecoder(): Decoder<PumpPoolData> {\n return getStructDecoder([\n ['poolBump', getU8Decoder()],\n ['index', getU16Decoder()],\n ['creator', getAddressDecoder()],\n ['baseMint', getAddressDecoder()],\n ['quoteMint', getAddressDecoder()],\n ['lpMint', getAddressDecoder()],\n ['poolBaseTokenAccount', getAddressDecoder()],\n ['poolQuoteTokenAccount', getAddressDecoder()],\n ['lpSupply', getU64Decoder()],\n ['coinCreator', getAddressDecoder()],\n ]);\n}\n\n/**\n * Creates a decoder for the BondingCurve account structure\n * The layout must match exactly the Rust struct serialization order\n */\nexport function getBondingCurveDecoder(): Decoder<BondingCurve> {\n return getStructDecoder([\n ['virtualTokenReserves', getU64Decoder()],\n ['virtualSolReserves', getU64Decoder()],\n ['realTokenReserves', getU64Decoder()],\n ['realSolReserves', getU64Decoder()],\n ['tokenTotalSupply', getU64Decoder()],\n ['complete', getBooleanDecoder()],\n ['creator', getAddressDecoder()],\n ]);\n}\n\n/**\n * Creates a decoder for the GlobalAccount structure\n */\nexport function getGlobalAccountDecoder(): Decoder<GlobalAccount> {\n return getStructDecoder([\n ['initialized', getBooleanDecoder()],\n ['authority', getAddressDecoder()],\n ['feeRecipient', getAddressDecoder()],\n ['initialVirtualTokenReserves', getU64Decoder()],\n ['initialVirtualSolReserves', getU64Decoder()],\n ['initialRealTokenReserves', getU64Decoder()],\n ['tokenTotalSupply', getU64Decoder()],\n ['feeBasisPoints', getU64Decoder()],\n ['withdrawAuthority', getAddressDecoder()],\n ['enableMigrate', getBooleanDecoder()],\n ['poolMigrationFee', getU64Decoder()],\n ['creatorFeeBasisPoints', getU64Decoder()],\n ['feeRecipients', getArrayDecoder(getAddressDecoder(), { size: 7 })], // Fixed array of 7 Pubkeys\n ['setCreatorAuthority', getAddressDecoder()],\n ['adminSetCreatorAuthority', getAddressDecoder()],\n ]);\n}\n\n/**\n * Creates a decoder for the GlobalConfig structure\n */\nexport function getGlobalConfigDecoder(): Decoder<GlobalConfig> {\n return getStructDecoder([\n ['admin', getAddressDecoder()],\n ['lpFeeBasisPoints', getU64Decoder()],\n ['protocolFeeBasisPoints', getU64Decoder()],\n ['disableFlags', getU8Decoder()],\n ['protocolFeeRecipients', getArrayDecoder(getAddressDecoder(), { size: 8 })], // Fixed array of 8 Pubkeys\n ['coinCreatorFeeBasisPoints', getU64Decoder()],\n ['adminSetCoinCreatorAuthority', getAddressDecoder()],\n ]);\n}\n","import type { BondingCurve, GlobalAccount } from './models.js';\n\nexport const BPS_DEN = 10000n;\n\nexport enum PreBondedTradeType {\n BuyExactIn = 'BuyExactIn',\n BuyExactOut = 'BuyExactOut',\n SellExactIn = 'SellExactIn',\n SellExactOut = 'SellExactOut',\n}\n\nclass PreBondingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'PreBondingError';\n }\n}\n\n/**\n * Calculate output amount for constant product AMM: (amount_in * y_out) / (x_in + amount_in)\n */\nfunction cpAmountOut(amountIn: bigint, xIn: bigint, yOut: bigint): bigint {\n if (xIn === 0n || yOut === 0n) {\n throw new PreBondingError('Zero value for reserve');\n }\n\n const num = amountIn * yOut;\n const den = xIn + amountIn;\n\n return num / den;\n}\n\n/**\n * Buy exact SOL in, get tokens out.\n * Fee is deducted from SOL before the swap calculation.\n */\nexport function buyExactIn(curve: BondingCurve, solIn: bigint, feeBps: bigint): bigint {\n if (curve.complete) {\n throw new PreBondingError(`Pool not in fundraising state: ${JSON.stringify(curve)}`);\n }\n if (solIn === 0n) {\n return 0n;\n }\n\n const vSol = curve.virtualSolReserves;\n const vTok = curve.virtualTokenReserves;\n\n // Deduct protocol + creator fee from input SOL\n const fee = (solIn * feeBps) / BPS_DEN;\n const effectiveSolIn = solIn - fee;\n\n let out = cpAmountOut(effectiveSolIn, vSol, vTok);\n\n // Observed rounding in buy path (+1)\n out = out + 1n;\n\n // Cap by real tokens available\n return out < curve.realTokenReserves ? out : curve.realTokenReserves;\n}\n\n/**\n * Sell exact tokens in, get SOL out.\n * Fee is deducted from SOL output.\n */\nexport function sellExactIn(curve: BondingCurve, tokensIn: bigint, feeBps: bigint): bigint {\n if (curve.complete) {\n throw new PreBondingError(`Pool not in fundraising state: ${JSON.stringify(curve)}`);\n }\n if (tokensIn === 0n) {\n return 0n;\n }\n\n const vTok = curve.virtualTokenReserves;\n const vSol = curve.virtualSolReserves;\n\n const gross = cpAmountOut(tokensIn, vTok, vSol);\n\n // Deduct protocol + creator fee from output SOL\n const fee = (gross * feeBps) / BPS_DEN;\n let net = gross - fee;\n\n // Cap by real SOL available\n net = net < curve.realSolReserves ? net : curve.realSolReserves;\n\n return net;\n}\n\n/**\n * Buy exact tokens out, calculate required SOL in.\n * This calculates the EXACT amount needed, but doesn't account for slippage buffer.\n */\nexport function buyExactOut(curve: BondingCurve, tokensOut: bigint, feeBps: bigint): bigint {\n if (curve.complete) {\n throw new PreBondingError(`Pool not in fundraising state: ${JSON.stringify(curve)}`);\n }\n if (tokensOut === 0n) {\n return 0n;\n }\n if (tokensOut > curve.realTokenReserves) {\n throw new PreBondingError('Insufficient liquidity: real_token cap');\n }\n\n const vSol = curve.virtualSolReserves;\n const vTok = curve.virtualTokenReserves;\n\n if (tokensOut >= vTok) {\n throw new PreBondingError('Insufficient liquidity: tokens_out >= v_tok');\n }\n\n // Calculate effective SOL needed before fees: ceil((vSol * tokensOut) / (vTok - tokensOut))\n const num = vSol * tokensOut;\n const den = vTok - tokensOut;\n const effIn = (num + den - 1n) / den; // ceiling division\n\n const feeNum = BPS_DEN - feeBps;\n if (feeNum === 0n) {\n throw new PreBondingError('Invalid fee configuration');\n }\n\n // Calculate gross SOL including fees: ceil((effIn * BPS_DEN) / feeNum)\n const grossIn = (effIn * BPS_DEN + feeNum - 1n) / feeNum;\n\n return grossIn;\n}\n\n/**\n * Sell exact SOL out, calculate required tokens in.\n * This calculates the EXACT amount needed, but doesn't account for slippage buffer.\n */\nexport function sellExactOut(curve: BondingCurve, solOut: bigint, feeBps: bigint): bigint {\n if (curve.complete) {\n throw new PreBondingError(`Pool not in fundraising state: ${JSON.stringify(curve)}`);\n }\n if (solOut === 0n) {\n return 0n;\n }\n if (solOut > curve.realSolReserves) {\n throw new PreBondingError('Insufficient liquidity: real_sol cap');\n }\n\n const vTok = curve.virtualTokenReserves;\n const vSol = curve.virtualSolReserves;\n\n // fee_num = BPS_DEN - fee_bps\n const feeNum = BPS_DEN - feeBps;\n if (feeNum === 0n) {\n throw new PreBondingError('Invalid fee configuration');\n }\n\n // Upper bound via continuous formula: gross = ceil((solOut * BPS_DEN) / feeNum)\n const gross = (solOut * BPS_DEN + feeNum - 1n) / feeNum; // ceil\n if (gross >= vSol) {\n throw new PreBondingError('Insufficient liquidity: gross >= v_sol');\n }\n\n // hi = ceil((vTok * gross) / (vSol - gross))\n const num = vTok * gross;\n const den = vSol - gross;\n let hi = (num + den - 1n) / den; // ceil\n if (hi === 0n) {\n hi = 1n;\n }\n\n // Monotonic binary search on sellExactIn using forward path (with real floors)\n let lo = 0n;\n let ans = hi;\n while (lo <= hi) {\n const mid = lo + (hi - lo) / 2n;\n const got = sellExactIn(curve, mid, feeBps);\n if (got >= solOut) {\n ans = mid;\n if (mid === 0n) break;\n hi = mid - 1n;\n } else {\n lo = mid + 1n;\n }\n }\n\n return ans;\n}\n\nexport function estimatePumpFunPrebonded(\n bondingCurve: BondingCurve,\n globalAccount: GlobalAccount,\n amount: bigint,\n tradeType: PreBondedTradeType,\n): bigint {\n if (bondingCurve.complete) {\n throw new PreBondingError(`Pool not in fundraising state: ${JSON.stringify(bondingCurve)}`);\n }\n\n const totalFeeBps = globalAccount.feeBasisPoints + globalAccount.creatorFeeBasisPoints;\n\n switch (tradeType) {\n case PreBondedTradeType.BuyExactIn:\n return buyExactIn(bondingCurve, amount, totalFeeBps);\n case PreBondedTradeType.BuyExactOut:\n return buyExactOut(bondingCurve, amount, totalFeeBps);\n case PreBondedTradeType.SellExactIn:\n return sellExactIn(bondingCurve, amount, totalFeeBps);\n case PreBondedTradeType.SellExactOut:\n return sellExactOut(bondingCurve, amount, totalFeeBps);\n default:\n throw new PreBondingError(`Invalid trade type: ${tradeType}`);\n }\n}\n","import type { GlobalConfig, TokenAccount } from './models.js';\nimport { BPS_DEN, PreBondedTradeType } from './estimations.js';\n\n/**\n * Reserves structure for AMM calculations\n * X = reserve of the token you pay (input side)\n * Y = reserve of the token you receive (output side)\n */\ninterface Reserves {\n xIn: bigint;\n yOut: bigint;\n feeBps: bigint;\n}\n\n/**\n * Ceiling division for bigints\n * Returns ceil(n / d)\n */\nfunction ceilDiv(n: bigint, d: bigint): bigint {\n if (d === 0n) {\n throw new Error('Division by zero');\n }\n return (n + d - 1n) / d;\n}\n\n/**\n * Calculate output amount for constant product AMM with exact input\n * Formula: dy = (dx_effective * y_out) / (x_in + dx_effective)\n * where dx_effective = dx * BPS_DEN / (BPS_DEN + fee_bps)\n */\nfunction amountOutExactIn(dx: bigint, r: Reserves): bigint {\n if (dx === 0n) {\n return 0n;\n }\n if (r.xIn === 0n || r.yOut === 0n) {\n throw new Error('Insufficient liquidity: empty reserves');\n }\n\n const denom = BPS_DEN + r.feeBps;\n const dxEff = (dx * BPS_DEN) / denom;\n const num = dxEff * r.yOut;\n const den = r.xIn + dxEff;\n\n return num / den; // floor division\n}\n\n/**\n * Calculate input amount needed for exact output in constant product AMM\n * Formula: dx = ceil(dx_effective * (BPS_DEN + fee_bps) / BPS_DEN)\n * where dx_effective = ceil((x_in * dy) / (y_out - dy))\n */\nfunction amountInExactOut(dy: bigint, r: Reserves): bigint {\n if (dy === 0n) {\n return 0n;\n }\n if (dy >= r.yOut || r.xIn === 0n) {\n throw new Error('Insufficient liquidity: dy >= reserve or x_in is zero');\n }\n\n const dxEff = ceilDiv(r.xIn * dy, r.yOut - dy);\n const denom = BPS_DEN + r.feeBps;\n\n return ceilDiv(dxEff * denom, BPS_DEN);\n}\n\n/**\n * Calculate base tokens received when buying with exact quote amount\n * @param quoteIn Amount of quote tokens (SOL) to spend\n * @param baseRes Base token reserve\n * @param quoteRes Quote token reserve\n * @param feeBps Fee in basis points\n * @returns Amount of base tokens received\n */\nexport function buyBaseExactInQuote(quoteIn: bigint, baseRes: bigint, quoteRes: bigint, feeBps: bigint): bigint {\n return amountOutExactIn(quoteIn, {\n xIn: quoteRes,\n yOut: baseRes,\n feeBps,\n });\n}\n\n/**\n * Calculate quote tokens needed to buy exact base amount\n * @param baseOut Desired amount of base tokens\n * @param baseRes Base token reserve\n * @param quoteRes Quote token reserve\n * @param feeBps Fee in basis points\n * @returns Amount of quote tokens needed\n */\nexport function buyBaseExactOutQuote(baseOut: bigint, baseRes: bigint, quoteRes: bigint, feeBps: bigint): bigint {\n return amountInExactOut(baseOut, {\n xIn: quoteRes,\n yOut: baseRes,\n feeBps,\n });\n}\n\n/**\n * Calculate quote tokens received when selling exact base amount\n * @param baseIn Amount of base tokens to sell\n * @param baseRes Base token reserve\n * @param quoteRes Quote token reserve\n * @param feeBps Fee in basis points\n * @returns Amount of quote tokens received\n */\nexport function sellBaseExactInQuote(baseIn: bigint, baseRes: bigint, quoteRes: bigint, feeBps: bigint): bigint {\n return amountOutExactIn(baseIn, {\n xIn: baseRes,\n yOut: quoteRes,\n feeBps,\n });\n}\n\n/**\n * Calculate base tokens needed to receive exact quote amount\n * @param quoteOut Desired amount of quote tokens\n * @param baseRes Base token reserve\n * @param quoteRes Quote token reserve\n * @param feeBps Fee in basis points\n * @returns Amount of base tokens needed\n */\nexport function sellBaseExactOutQuote(quoteOut: bigint, baseRes: bigint, quoteRes: bigint, feeBps: bigint): bigint {\n return amountInExactOut(quoteOut, {\n xIn: baseRes,\n yOut: quoteRes,\n feeBps,\n });\n}\n\n/**\n * Main estimation function for PumpFun AMM\n * @param baseToken Base token account info\n * @param quoteToken Quote token account info\n * @param globalConfig Global configuration with fee settings\n * @param amount Amount to trade\n * @param tradeType Type of trade (BuyExactIn, BuyExactOut, SellExactIn, SellExactOut)\n * @returns Estimated output/input amount\n */\nexport function estimatePumpFunAmm(\n baseToken: TokenAccount,\n quoteToken: TokenAccount,\n globalConfig: GlobalConfig,\n amount: bigint,\n tradeType: PreBondedTradeType,\n): bigint {\n const totalFeeBps =\n globalConfig.lpFeeBasisPoints + globalConfig.protocolFeeBasisPoints + globalConfig.coinCreatorFeeBasisPoints;\n\n switch (tradeType) {\n case PreBondedTradeType.BuyExactIn:\n return buyBaseExactInQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);\n\n case PreBondedTradeType.BuyExactOut:\n return buyBaseExactOutQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);\n\n case PreBondedTradeType.SellExactIn:\n return sellBaseExactInQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);\n\n case PreBondedTradeType.SellExactOut:\n return sellBaseExactOutQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);\n\n default:\n throw new Error(`Invalid trade type: ${tradeType}`);\n }\n}\n","import { type SupportedEvmChain } from \"../../chains.js\";\nimport { isNativeEvmToken, WRAPPED_ETH_ADDRESSES } from \"../../constants.js\";\n\nconst RELAY_BASE_URL = \"https://api.relay.link/quote\";\n\nexport type RelayQuoteRequestParams = {\n srcToken: string;\n destToken: string;\n amount: bigint;\n user?: string;\n recipient?: string;\n};\n\nexport type RelayQuoteResult = {\n amountOut: bigint;\n amountIn: bigint;\n amountOutUsd: number;\n amountInUsd: number;\n slippage: number;\n priceImpact: number;\n quote: any;\n};\n\nexport class RelayQuoteProvider {\n protected chainId: SupportedEvmChain;\n\n constructor(chainId: SupportedEvmChain) {\n this.chainId = chainId;\n }\n\n private async postRelayQuote(params: RelayQuoteRequestParams) {\n const user = params.user ?? \"0x000000000000000000000000000000000000dead\";\n\n const srcToken = isNativeEvmToken(params.srcToken)\n ? WRAPPED_ETH_ADDRESSES[this.chainId]\n : params.srcToken;\n\n const destToken = isNativeEvmToken(params.destToken)\n ? WRAPPED_ETH_ADDRESSES[this.chainId]\n : params.destToken;\n\n const body = {\n user,\n recipient: params.recipient ?? user,\n originChainId: this.chainId,\n destinationChainId: this.chainId,\n originCurrency: srcToken,\n destinationCurrency: destToken,\n amount: params.amount.toString(),\n tradeType: \"EXACT_INPUT\",\n };\n\n const res = await fetch(RELAY_BASE_URL, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n throw new Error(`Relay POST /quote failed: ${await res.text()}`);\n }\n\n return res.json();\n }\n\n public async getSwapEstimation(\n params: RelayQuoteRequestParams\n ): Promise<RelayQuoteResult> {\n const relayQuote = await this.postRelayQuote(params);\n\n const details = relayQuote.details;\n\n const amountIn = BigInt(details.currencyIn.amount);\n const amountOut = BigInt(details.currencyOut.amount);\n\n const amountInUsd = Number(details.currencyIn.amountUsd ?? 0);\n const amountOutUsd = Number(details.currencyOut.amountUsd ?? 0);\n\n const priceImpact = details.totalImpact?.percent\n ? Number(details.totalImpact.percent)\n : 0;\n\n const slippage = details.slippageTolerance?.origin?.percent\n ? Number(details.slippageTolerance.origin.percent)\n : 0;\n\n return {\n amountIn,\n amountOut,\n amountInUsd,\n amountOutUsd,\n slippage,\n priceImpact,\n quote: relayQuote,\n };\n }\n}\n","/**\n * Integer decimal conversion between two tokens, mirroring solver cross_chain_estimation.rs:205-211.\n * Uses BigInt powers of ten to avoid the float precision loss of `Math.floor(Number(...))`.\n */\nexport function convertDecimals(amount: bigint, fromDecimals: number, toDecimals: number): bigint {\n const diff = toDecimals - fromDecimals;\n if (diff >= 0) {\n return amount * 10n ** BigInt(diff);\n }\n return amount / 10n ** BigInt(-diff);\n}\n","/** Expense components, all expressed in the output token's smallest units. */\nexport type Expenses = {\n gasInTokenOut: bigint;\n protocolFeeInTokenOut: bigint;\n extraTransfersInTokenOut: bigint;\n};\n\n/** Thrown when total expenses meet or exceed the swap output, mirroring the solver's rejection. */\nexport class IntentNotViableError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'IntentNotViableError';\n }\n}\n\n/**\n * Ports solver_rust evaluate.rs: final amount = swapOutput − expenses − commission.\n * `commissionBps` is basis points; `commissionDenominator` selects single-chain (10_000n)\n * vs cross-chain (100_000n) semantics. Throws IntentNotViableError when nothing is left.\n */\nexport function estimateAmountOut(\n swapOutput: bigint,\n commissionBps: bigint,\n expenses: Expenses,\n commissionDenominator = 10_000n,\n): bigint {\n const commissionFee = (swapOutput * commissionBps) / commissionDenominator;\n const total =\n expenses.gasInTokenOut + expenses.protocolFeeInTokenOut + expenses.extraTransfersInTokenOut + commissionFee;\n\n if (total >= swapOutput) {\n throw new IntentNotViableError(`Total expenses (${total}) meet or exceed swap output (${swapOutput})`);\n }\n\n return swapOutput - total;\n}\n","import { ChainID, type SupportedChain } from '../../../chains.js';\nimport {\n NATIVE_EVM_ETH_ADDRESSES,\n NATIVE_SOLANA_TOKEN_ADDRESS,\n NATIVE_SUI_TOKEN_ADDRESS,\n isNativeEvmToken,\n} from '../../../constants.js';\nimport { compareAddresses } from '../address.js';\nimport type { Expenses } from './estimate-amount-out.js';\nimport { getNativeGasCost } from './gas.js';\n\n/** Quotes a native->tokenOut swap on the given chain. Injected to keep this module a leaf (no dependency on the aggregator). */\ntype GasQuoteFn = (params: {\n chainId: SupportedChain;\n amount: bigint;\n tokenIn: string;\n tokenOut: string;\n}) => Promise<{ amountOut: bigint }>;\n\nfunction nativeTokenAddressForChain(chainId: SupportedChain): string {\n if (chainId === ChainID.Solana) return NATIVE_SOLANA_TOKEN_ADDRESS;\n if (chainId === ChainID.Sui) return NATIVE_SUI_TOKEN_ADDRESS;\n // EVM native sentinel addresses share the same 0xEee... value; use the first.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return NATIVE_EVM_ETH_ADDRESSES[0]!;\n}\n\nfunction isNativeToken(chainId: SupportedChain, address: string): boolean {\n if (chainId === ChainID.Solana) return compareAddresses(address, NATIVE_SOLANA_TOKEN_ADDRESS);\n if (chainId === ChainID.Sui) return compareAddresses(address, NATIVE_SUI_TOKEN_ADDRESS);\n return isNativeEvmToken(address);\n}\n\n/**\n * Builds the Expenses bundle in the output token. Gas is fetched in native units and\n * swapped into tokenOut via the injected quote fn, mirroring how the solver converts\n * expenses into the output token. protocolFee/extraTransfers are reserved (0n) for now.\n */\nexport async function estimateExpensesInTokenOut(params: {\n chainId: SupportedChain;\n tokenOut: string;\n gasLimit: bigint;\n getQuote: GasQuoteFn;\n rpcProviderUrl?: string;\n}): Promise<Expenses> {\n const { chainId, tokenOut, gasLimit, getQuote, rpcProviderUrl } = params;\n\n const nativeGasCost = await getNativeGasCost({ chainId, gasLimit, rpcProviderUrl });\n\n const gasInTokenOut = isNativeToken(chainId, tokenOut)\n ? nativeGasCost\n : (\n await getQuote({\n chainId,\n amount: nativeGasCost,\n tokenIn: nativeTokenAddressForChain(chainId),\n tokenOut,\n })\n ).amountOut;\n\n return { gasInTokenOut, protocolFeeInTokenOut: 0n, extraTransfersInTokenOut: 0n };\n}\n","/** Case-insensitive address equality; false if either address is missing. */\nexport function compareAddresses(firstAddress?: string, secondAddress?: string): boolean {\n return !!firstAddress && !!secondAddress && firstAddress.toLowerCase() === secondAddress.toLowerCase();\n}\n","import { getGasPrice } from 'viem/actions';\nimport { isEvmChain, type SupportedChain } from '../../../chains.js';\nimport { ChainProvider } from '../../../core/evm/chain-provider.js';\nimport { NON_EVM_FIXED_NATIVE_GAS_COST } from './constants.js';\n\n/**\n * Gas cost in the chain's native smallest unit (wei / lamports / MIST).\n * EVM: live gas price × gas limit. Non-EVM: solver-mirrored fixed cost.\n */\nexport async function getNativeGasCost(params: {\n chainId: SupportedChain;\n gasLimit: bigint;\n rpcProviderUrl?: string;\n}): Promise<bigint> {\n const { chainId, gasLimit, rpcProviderUrl } = params;\n\n if (isEvmChain(chainId)) {\n const client = ChainProvider.getClient(chainId, rpcProviderUrl);\n const gasPrice = await getGasPrice(client);\n return gasLimit * gasPrice;\n }\n\n const fixed = NON_EVM_FIXED_NATIVE_GAS_COST[chainId];\n if (fixed === undefined) {\n throw new Error(`No fixed native gas cost configured for chain ${chainId}`);\n }\n return fixed;\n}\n","import { ChainID } from '../../../chains.js';\n\n/**\n * Solver commission in basis points. MUST equal the solver's COMMISSION env value\n * (solver/src/config.rs). Update both together to avoid quote divergence.\n */\nexport const DEFAULT_COMMISSION_BPS = 50n; // 0.5% — placeholder, confirm against solver COMMISSION\n\n/** Single-chain divisor — mirrors evaluate.rs:130-131 (`commission / 10_000`). */\nexport const SINGLE_CHAIN_COMMISSION_DENOMINATOR = 10_000n;\n\n/**\n * Cross-chain divisor — mirrors cross_chain_estimation.rs:213-214 (`commission / 100_000`).\n * The asymmetry with the single-chain divisor is intentional (verbatim solver mirror);\n * confirm with the solver team whether this is a unit choice or a bug before relying on it.\n */\nexport const CROSS_CHAIN_COMMISSION_DENOMINATOR = 100_000n;\n\n/** EVM fulfillment gas units — mirrors solver/src/constants/chains.rs (EVM single-chain). */\nexport const EVM_SINGLE_CHAIN_GAS_LIMIT = 3_000_000n;\n\n/** EVM cross-chain fulfillment gas units — mirrors solver/src/constants/chains.rs (EVM cross-chain). */\nexport const EVM_CROSS_CHAIN_GAS_LIMIT = 2_000_000n;\n\n/**\n * Fixed native-token gas cost for non-EVM chains, in the chain's smallest unit.\n * Mirrors solver/src/constants/chains.rs: Sui = 20_000_000 MIST; Solana base = 200_000 lamports\n * (single-receiver default; per-receiver ATA cost is not modeled at quote time).\n */\nexport const NON_EVM_FIXED_NATIVE_GAS_COST: Partial<Record<ChainID, bigint>> = {\n [ChainID.Sui]: 20_000_000n,\n [ChainID.Solana]: 200_000n,\n};\n","import { ChainID, chainIdToChainTypeMap, isEvmChain, type SupportedChain } from '../../chains.js';\nimport { ValidationError } from '../../errors/index.js';\nimport type { ApiResponse } from '../../types/api.js';\nimport type { SingleChainPreparedData, SingleChainUserIntentRequest } from '../../types/intent.js';\nimport { SingleChainOrderValidator } from '../../utils/order-validator.js';\nimport { QuoteProvider } from '../../utils/quote/aggregator.js';\nimport { estimateAmountOut } from '../../utils/quote/pricing/estimate-amount-out.js';\nimport { estimateExpensesInTokenOut } from '../../utils/quote/pricing/expenses.js';\nimport { DEFAULT_COMMISSION_BPS, EVM_SINGLE_CHAIN_GAS_LIMIT, SINGLE_CHAIN_COMMISSION_DENOMINATOR } from '../../utils/quote/pricing/constants.js';\nimport { getEVMSingleChainOrderTypedData } from '../evm/order-signature.js';\nimport { BaseSDK } from '../sdk.js';\nimport { getSolanaSingleChainOrderInstructions } from '../solana/order-instructions.js';\nimport { type ExtraTransfer, type StopLossType } from './common.js';\n\nexport type CreateSingleChainOrderParams = {\n chainId: SupportedChain;\n amountIn: bigint;\n tokenIn: string;\n tokenOut: string;\n amountOutMin?: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n takeProfitMinOut?: bigint;\n};\n\ntype OrderScenario = 'QUOTE_REQUIRED' | 'USE_PROVIDED_AMOUNT' | 'STOP_LOSS_ONLY' | 'BOTH_PROVIDED';\n\nexport class SingleChainOrder {\n public user: string;\n public chainId: SupportedChain;\n public amountIn: bigint;\n public tokenIn: string;\n public tokenOut: string;\n public amountOutMin: bigint;\n public destinationAddress: string;\n public extraTransfers?: ExtraTransfer[];\n public deadline: number;\n public stopLossType?: StopLossType;\n public stopLossTriggerPrice?: string;\n public takeProfitMinOut?: bigint;\n\n private constructor(params: CreateSingleChainOrderParams & { user: string }) {\n this.user = params.user;\n this.chainId = params.chainId;\n this.amountIn = params.amountIn;\n this.tokenIn = params.tokenIn;\n this.tokenOut = params.tokenOut;\n this.amountOutMin = params.amountOutMin ?? 1n;\n this.destinationAddress = params.destinationAddress;\n this.extraTransfers = params.extraTransfers;\n this.deadline = params.deadline;\n this.stopLossType = params.stopLossType;\n this.stopLossTriggerPrice = params.stopLossTriggerPrice;\n this.takeProfitMinOut = params.takeProfitMinOut;\n }\n\n public static async create(input: CreateSingleChainOrderParams & { user: string }): Promise<SingleChainOrder> {\n new SingleChainOrderValidator().validateOrder(input);\n\n const amountOutMin = await this.calculateAmountOutMin(input);\n\n const order = new SingleChainOrder({\n ...input,\n amountOutMin,\n user: input.user,\n });\n\n if (isEvmChain(order.chainId)) {\n return order;\n }\n\n const preparedRandomData = order.getRandomPreparedData();\n const intentRequest = order.toIntentRequest(preparedRandomData);\n\n // Just validate for non EVM\n await BaseSDK.validateSingleChainOrder(intentRequest);\n\n return order;\n }\n\n /// This is needed because API requires the prepared data to be send\n /// In the cases of Solana and Sui, if we want the real data, we must send the order on-chain before validating.\n /// And that is something we cannot do before validating the order on the API side.\n private getRandomPreparedData(): SingleChainPreparedData {\n const chainId = this.chainId;\n const chainType = chainIdToChainTypeMap[chainId];\n\n const randomNumber = String(Math.floor(Math.random() * 10000000));\n\n switch (chainType) {\n case 'EVM': {\n return { nonce: randomNumber, signature: '0x0000000000000000000000000000000000000000000000000000000000000000' };\n }\n case 'Solana': {\n return { secretNumber: randomNumber, orderPubkey: 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc' };\n }\n case 'Sui': {\n const digest = 'FQWndwYJhNQUoHyvR8UuhGURC2EKx9eWErFm9Tc2DggF';\n return { transactionHash: digest, secretNumber: randomNumber };\n }\n\n default: {\n throw new Error('Chain type not supported');\n }\n }\n }\n\n private static async calculateAmountOutMin(input: CreateSingleChainOrderParams): Promise<bigint> {\n const { amountOutMin, stopLossType, stopLossTriggerPrice } = input;\n\n const scenario = this.getSingleChainOrderScenario({\n hasAmountOutMin: !!amountOutMin,\n hasStopLoss: !!stopLossType && !!stopLossTriggerPrice,\n });\n\n switch (scenario) {\n case 'QUOTE_REQUIRED': {\n const [quote, expenses] = await Promise.all([\n QuoteProvider.getSingleChainQuote({\n tokenIn: input.tokenIn,\n amount: input.amountIn,\n chainId: input.chainId,\n tokenOut: input.tokenOut,\n }),\n estimateExpensesInTokenOut({\n chainId: input.chainId,\n tokenOut: input.tokenOut,\n gasLimit: EVM_SINGLE_CHAIN_GAS_LIMIT,\n getQuote: (p) => QuoteProvider.getSingleChainQuote(p),\n }),\n ]);\n\n // Worst-case output already carries provider slippage; never use the nominal amountOut.\n const swapOutput = quote.amountOutMin ?? quote.amountOut;\n return estimateAmountOut(swapOutput, DEFAULT_COMMISSION_BPS, expenses, SINGLE_CHAIN_COMMISSION_DENOMINATOR);\n }\n\n case 'USE_PROVIDED_AMOUNT':\n return amountOutMin!;\n\n case 'STOP_LOSS_ONLY':\n case 'BOTH_PROVIDED':\n // When stop loss is involved, amountOutMin should be 1\n return 1n;\n }\n }\n\n private static getSingleChainOrderScenario({\n hasAmountOutMin,\n hasStopLoss,\n }: {\n hasAmountOutMin: boolean;\n hasStopLoss: boolean;\n }): OrderScenario {\n if (!hasAmountOutMin && !hasStopLoss) return 'QUOTE_REQUIRED';\n if (hasAmountOutMin && !hasStopLoss) return 'USE_PROVIDED_AMOUNT';\n if (!hasAmountOutMin && hasStopLoss) return 'STOP_LOSS_ONLY';\n return 'BOTH_PROVIDED';\n }\n\n public toIntentRequest(preparedData: SingleChainPreparedData): SingleChainUserIntentRequest {\n const sourceChainType = chainIdToChainTypeMap[this.chainId];\n\n return {\n genericData: this,\n chainSpecificData: {\n [sourceChainType]: preparedData,\n },\n };\n }\n\n public sendToAuctioneer(preparedData: SingleChainPreparedData): Promise<ApiResponse> {\n return BaseSDK.sendSingleChainOrder({\n order: this,\n preparedData,\n });\n }\n\n public async toEVMTypedData() {\n if (!isEvmChain(this.chainId)) {\n throw new ValidationError('Chain id is not an Ethereum compatible chain');\n }\n\n return getEVMSingleChainOrderTypedData(this);\n }\n\n public async toSolanaInstructionsByteArray() {\n if (this.chainId !== ChainID.Solana) {\n throw new ValidationError('Chain id is not Solana');\n }\n\n return getSolanaSingleChainOrderInstructions(this);\n }\n\n public async toSuiTransaction(secretHash: Uint8Array, guardAddress: string, client?: any) {\n if (this.chainId !== ChainID.Sui) {\n throw new ValidationError('Chain id is not Sui');\n }\n\n const { getSuiSingleChainLimitOrderTransaction } = await import('../sui/single-chain-limit-order.js');\n return getSuiSingleChainLimitOrderTransaction(this, secretHash, guardAddress, client);\n }\n}\n","import {\n address,\n addSignersToTransactionMessage,\n appendTransactionMessageInstructions,\n createNoopSigner,\n createSolanaRpc,\n createTransactionMessage,\n fetchEncodedAccount,\n generateKeyPairSigner,\n getAddressEncoder,\n getProgramDerivedAddress,\n getTransactionCodec,\n partiallySignTransactionMessageWithSigners,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n type Address,\n type Instruction,\n} from '@solana/kit';\nimport type { DcaSingleChainOrder } from '../../orders/dca-single-chain.js';\nimport type { SolanaOrderInstructionResult } from '../order-instructions.js';\nimport { getDefaultSolanaRPC } from '../client.js';\nimport { genSecretHashAndNumber } from '../utils.js';\nimport {\n NATIVE_SOLANA_TOKEN_ADDRESS,\n SINGLE_CHAIN_GUARD_ADDRESSES,\n WRAPPED_SOL_MINT_ADDRESS,\n} from '../../../constants.js';\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n fetchMint,\n getCreateAssociatedTokenInstructionAsync,\n getSyncNativeInstruction,\n} from '@solana-program/token';\nimport { ChainID } from '../../../chains.js';\nimport { getTransferSolInstruction } from '@solana-program/system';\nimport { getCreateDcaOrderInstructionAsync } from '../generated/single-chain/index.js';\n\nexport async function getSolanaDcaSingleChainOrderInstructions(\n order: DcaSingleChainOrder,\n options?: { rpcUrl?: string },\n): Promise<SolanaOrderInstructionResult & { secretNumber: string }> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const orderSigner = await generateKeyPairSigner();\n const signer = createNoopSigner(order.user as Address);\n\n let tokenInMint = address(order.tokenIn);\n\n const { secretHash, secretNumber } = genSecretHashAndNumber(order);\n\n const orderUserAddress = address(order.user);\n const spendingNative = tokenInMint === NATIVE_SOLANA_TOKEN_ADDRESS;\n\n if (spendingNative) {\n tokenInMint = WRAPPED_SOL_MINT_ADDRESS;\n }\n\n const tokenMintProgram = await fetchMint(rpc, tokenInMint);\n\n const guardAddress = address(SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana]); // Assuming DCA uses same guard\n const addressEncoder = getAddressEncoder();\n const instructions: Array<Instruction> = [];\n\n const [tokenInProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(tokenMintProgram.programAddress),\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);\n\n if (!userTokenInAccount.exists) {\n const createAccountIx = await getCreateAssociatedTokenInstructionAsync({\n payer: signer,\n ata: tokenInProgramAccount,\n owner: orderUserAddress,\n mint: tokenMintProgram.address,\n tokenProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(createAccountIx);\n }\n\n const totalAmountIn = BigInt(order.amountInPerInterval) * BigInt(order.totalIntervals);\n\n if (spendingNative) {\n const transferIx = getTransferSolInstruction({\n amount: totalAmountIn,\n destination: userTokenInAccount.address,\n source: signer,\n });\n\n instructions.push(transferIx);\n\n const syncNativeIx = getSyncNativeInstruction({\n account: userTokenInAccount.address,\n });\n\n instructions.push(syncNativeIx);\n }\n\n const createDcaOrderIx = await getCreateDcaOrderInstructionAsync({\n user: signer,\n order: orderSigner,\n guard: guardAddress,\n tokenInMint: tokenInMint,\n userTokenInAccount: userTokenInAccount.address,\n tokenInProgram: tokenMintProgram.programAddress,\n amountInPerInterval: order.amountInPerInterval,\n totalIntervals: order.totalIntervals,\n intervalDuration: order.intervalDuration,\n deadline: order.deadline,\n amountOutMin: order.amountOutMin,\n secretHash: Uint8Array.from(secretHash),\n extraTransfersAmounts: [], // TODO: Implement extra transfers\n });\n\n instructions.push(createDcaOrderIx);\n\n const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: 'confirmed' }).send();\n\n const txMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(signer, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n (tx) => addSignersToTransactionMessage([orderSigner], tx),\n );\n\n const partiallySignedTransaction = await partiallySignTransactionMessageWithSigners(txMessage);\n\n const txBytes = getTransactionCodec().encode(partiallySignedTransaction);\n\n return {\n orderAddress: orderSigner.address,\n txBytes,\n secretNumber,\n };\n}\n","import { privateKeyToAccount } from 'viem/accounts';\nimport type { EVMConfig } from '../../config.js';\nimport { BaseSDK } from '../sdk.js';\nimport { EVMIntentProvider } from './intent-provider.js';\nimport { type Address, type Hex } from 'viem';\nimport {\n PERMIT2_ADDRESS,\n CROSS_CHAIN_GUARD_ADDRESSES,\n SINGLE_CHAIN_GUARD_ADDRESSES,\n MAX_UINT_256,\n} from '../../constants.js';\nimport type { ExtraTransfer } from '../orders/common.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport type {\n CrossChainOrderPrepared,\n DcaSingleChainOrderPrepared,\n SingleChainOrderPrepared,\n} from '../../types/intent.js';\nimport { fetchJWTToken, fetchSiweMessage } from '../../auth/siwe.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\n\ntype CancelSingleChainOrderParams = {\n orderId: string;\n user: string;\n tokenIn: string;\n amountIn: bigint;\n requestedOutput: ExtraTransfer;\n extraTransfers: ExtraTransfer[];\n encodedExternalCallData: string;\n deadline: number;\n nonce: bigint;\n};\n\ntype CancelCrossChainOrderParams = {\n orderId: string;\n user: string;\n tokenIn: string;\n amountIn: bigint;\n srcChainId: number;\n deadline: number;\n minStablecoinsAmount: bigint;\n executionDetailsHash: string;\n nonce: bigint;\n};\n\n/**\n * Handles EVM-specific aspects of cross-chain swaps for Ethereum-compatible chains:\n */\nexport class EVMSDK extends BaseSDK {\n private readonly config: EVMConfig;\n private readonly evmIntentProvider: EVMIntentProvider;\n\n constructor(config: EVMConfig) {\n super();\n this.config = config;\n this.evmIntentProvider = new EVMIntentProvider(config);\n }\n\n public async cancelCrossChainOrder(params: CancelCrossChainOrderParams): Promise<string> {\n const chainId = this.config.chainId;\n const auctioneerAddress = CROSS_CHAIN_GUARD_ADDRESSES[chainId] as Hex;\n const userAddress = (await this.getUserAddress()) as Hex;\n\n const auctioneerContract = this.evmIntentProvider.provider.getCrossChainAuctioneerContract(auctioneerAddress);\n const permit2Contract = this.evmIntentProvider.provider.getPermit2Contract(PERMIT2_ADDRESS[chainId]);\n\n const orderIdHex = params.orderId as Hex;\n const [initialized, deactivated] = await auctioneerContract.read.orderData([orderIdHex]);\n let txHash: Hex;\n\n if (initialized) {\n if (deactivated) {\n throw new Error('Order is already deactivated');\n }\n\n const orderInfo = {\n user: params.user as Hex,\n tokenIn: params.tokenIn as Hex,\n srcChainId: params.srcChainId,\n deadline: params.deadline,\n amountIn: BigInt(params.amountIn),\n minStablecoinsAmount: BigInt(params.minStablecoinsAmount),\n executionDetailsHash: params.executionDetailsHash as Hex,\n nonce: BigInt(params.nonce!),\n };\n\n const tx = await auctioneerContract.write.cancelOrder([orderInfo]);\n txHash = tx;\n } else {\n const nonce = BigInt(params.nonce);\n const nonceWordPos = nonce >> 8n;\n const nonceBitPos = nonce - nonceWordPos * 256n;\n const mask = 1n << nonceBitPos;\n\n const currentNonceBitmap = await permit2Contract.read.nonceBitmap([userAddress, nonceWordPos]);\n if ((currentNonceBitmap & (1n << nonceBitPos)) !== 0n) {\n throw new Error('Nonce is already invalidated');\n }\n\n const tx = await permit2Contract.write.invalidateUnorderedNonces([nonceWordPos, mask]);\n txHash = tx;\n }\n\n return txHash;\n }\n\n public async cancelSingleChainOrder(params: CancelSingleChainOrderParams): Promise<string> {\n const chainId = this.config.chainId;\n const auctioneerAddress = SINGLE_CHAIN_GUARD_ADDRESSES[chainId] as Hex;\n const userAddress = (await this.getUserAddress()) as Hex;\n\n const auctioneerContract = this.evmIntentProvider.provider.getSingleChainAuctioneerContract(auctioneerAddress);\n\n const orderHash = params.orderId as Hex;\n const wasManuallyInitialized = await auctioneerContract.read.orderManuallyInitialized([orderHash]);\n\n let txHash: Hex;\n\n if (wasManuallyInitialized) {\n txHash = await auctioneerContract.write.cancelManuallyCreatedOrder([\n {\n amountIn: params.amountIn,\n tokenIn: params.tokenIn as Hex,\n deadline: params.deadline as number,\n nonce: params.nonce,\n encodedExternalCallData: params.encodedExternalCallData as Hex,\n extraTransfers: params.extraTransfers.map((transfer) => {\n return {\n amount: transfer.amount,\n receiver: transfer.receiver as Hex,\n token: transfer.token as Hex,\n };\n }),\n requestedOutput: {\n amount: params.requestedOutput.amount,\n receiver: params.requestedOutput.receiver as Hex,\n token: params.requestedOutput.token as Hex,\n },\n user: params.user as Hex,\n },\n ]);\n } else {\n const permit2Contract = this.evmIntentProvider.provider.getPermit2Contract(PERMIT2_ADDRESS[chainId]);\n\n const nonce = BigInt(params.nonce);\n const nonceWordPos = nonce >> 8n;\n const nonceBitPos = nonce - nonceWordPos * 256n;\n const mask = 1n << nonceBitPos;\n\n // Check if nonce is already invalidated\n const currentNonceBitmap = await permit2Contract.read.nonceBitmap([userAddress, nonceWordPos]);\n if ((currentNonceBitmap & (1n << nonceBitPos)) !== 0n) {\n throw new Error('Nonce is already invalidated');\n }\n\n txHash = await permit2Contract.write.invalidateUnorderedNonces([nonceWordPos, mask]);\n }\n\n return txHash;\n }\n\n public async authenticate(token?: string): Promise<string> {\n const chainId = this.config.chainId;\n const wallet = await this.getUserAddress();\n\n const response = await fetchSiweMessage({\n chainId,\n wallet,\n });\n\n const message = response.data!;\n\n // Sign the message using the wallet client\n const signature = await this.evmIntentProvider.provider.walletClient.signMessage({\n message,\n });\n\n const jwt = await fetchJWTToken(\n {\n message,\n signature,\n },\n token,\n );\n\n const newToken = jwt.data!;\n\n return newToken;\n }\n\n /**\n * Gets the user's Ethereum address derived from their private key\n * @returns Promise resolving to the user's Ethereum address as a 0x-prefixed string\n */\n public async getUserAddress(): Promise<string> {\n return privateKeyToAccount(this.config.privateKey).address;\n }\n\n protected async approveAllowanceIfNeeded(tokenAddress: Address, amount: bigint): Promise<void> {\n const permit2Address = PERMIT2_ADDRESS[this.config.chainId];\n const ERC20Contract = this.evmIntentProvider.provider.getERC20Contract(tokenAddress);\n\n const userAddress = (await this.getUserAddress()) as Address;\n\n const allowance = await ERC20Contract.read.allowance([userAddress, permit2Address]);\n\n if (allowance < amount) {\n await ERC20Contract.write.approve([permit2Address, MAX_UINT_256]);\n }\n }\n\n /**\n * Prepares an EVM order for submission\n *\n * This method:\n * 1. Validates token balances and allowances\n * 2. Creates and signs the EIP-712 typed data for Permit2\n * 3. Prepares the order for submission to the auctioneer\n *\n * @param order The validated order to prepare\n * @returns Promise resolving to a prepared order with EVM-specific signature data\n */\n protected override async prepareCrossChainOrder(order: CrossChainOrder): Promise<CrossChainOrderPrepared> {\n await this.approveAllowanceIfNeeded(order.sourceTokenAddress as Address, order.sourceTokenAmount);\n return this.evmIntentProvider.prepareCrossChainOrder(order);\n }\n\n protected override async prepareSingleChainOrder(order: SingleChainOrder): Promise<SingleChainOrderPrepared> {\n await this.approveAllowanceIfNeeded(order.tokenIn as Address, order.amountIn);\n return this.evmIntentProvider.prepareSingleChainOrder(order);\n }\n\n protected override async prepareDcaSingleChainOrder(\n order: DcaSingleChainOrder,\n ): Promise<DcaSingleChainOrderPrepared> {\n const totalAmountIn = order.getTotalAmountIn();\n await this.approveAllowanceIfNeeded(order.tokenIn as Address, totalAmountIn);\n return this.evmIntentProvider.prepareDcaSingleChainOrder(order);\n }\n}\n","import type { ChainID } from '../chains.js';\nimport { AUCTIONEER_URL } from '../constants.js';\nimport type { ApiResponse } from '../types/api.js';\n\nexport type FetchSiweMessageParams = {\n wallet: string;\n chainId: ChainID;\n};\n\nexport type FetchJWTParams = {\n message: string;\n signature: string;\n};\n\nexport async function fetchSiweMessage(params: FetchSiweMessageParams) {\n const url = `${AUCTIONEER_URL}/siwe?wallet=${params.wallet}&chainId=${params.chainId}`;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch SIWE message: ${response.status} ${response.statusText}`);\n }\n const data: ApiResponse<string> = await response.json();\n return data;\n}\n\nexport async function fetchJWTToken(params: FetchJWTParams, token?: string) {\n const url = `${AUCTIONEER_URL}/siwe`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n // Only forward an existing token when present; the server merges the newly verified\n // wallet into it. Sending `Bearer undefined` would be a no-op the server discards.\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(params),\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch JWT token: ${response.status} ${response.statusText}`);\n }\n\n const data: ApiResponse<string> = await response.json();\n return data;\n}\n","import {\n address,\n appendTransactionMessageInstructions,\n compileTransaction,\n createKeyPairFromBytes,\n createNoopSigner,\n createSignableMessage,\n createSignerFromKeyPair,\n createTransactionMessage,\n getBase58Encoder,\n getBase64EncodedWireTransaction,\n getTransactionCodec,\n type KeyPairSigner,\n partiallySignTransaction,\n signTransaction,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n type Transaction,\n type TransactionWithLifetime,\n assertIsSendableTransaction,\n} from '@solana/kit';\nimport type { SolanaConfig } from '../../config.js';\nimport { BaseSDK } from '../sdk.js';\nimport { createSolanaClient, type SolanaClient } from './client.js';\nimport { cancelCrossChainOrderInstructions, cancelSingleChainOrderInstructions } from './cancel-order.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type {\n CrossChainOrderPrepared,\n DcaSingleChainOrderPrepared,\n SingleChainOrderPrepared,\n} from '../../types/intent.js';\nimport { getSolanaCrossChainOrderInstructions, getSolanaSingleChainOrderInstructions } from './order-instructions.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport { fetchJWTToken, fetchSiweMessage } from '../../auth/siwe.js';\nimport { ChainID } from '../../chains.js';\nimport { bytesToHex } from 'viem';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport { getSolanaDcaSingleChainOrderInstructions } from './dca/create-order.js';\nimport { cancelDcaSingleChainOrderInstructions } from './dca/cancel-order.js';\n\n/**\n * Solana-specific SDK implementation\n *\n * Handles Solana-specific aspects of cross-chain swaps using Solana blockchain.\n * Uses @solana/kit for transaction creation, signing, and submission.\n * Supports cross-chain swaps from Solana to other supported chains.\n */\nexport class SolanaSDK extends BaseSDK {\n /** Configuration for Solana connection and authentication */\n private readonly config: SolanaConfig;\n /** Client for Solana RPC interactions and transaction handling */\n private client: SolanaClient;\n\n /**\n * Creates a new instance of the Solana SDK\n *\n * @param config Solana configuration including privateKey, commitment level, and optional RPC URL\n */\n constructor(config: SolanaConfig) {\n super();\n this.config = config;\n this.client = createSolanaClient(config);\n }\n\n /**\n * Gets the user's Solana wallet address derived from their private key\n *\n * Uses @solana/kit to securely derive the wallet address from the private key\n *\n * @returns Promise resolving to the user's Solana address as a Base58-encoded string\n * @throws {SolanaError} If address derivation fails\n */\n public async getUserAddress(): Promise<string> {\n const signer = await this.getUserSigner();\n\n return signer.address;\n }\n\n public async cancelCrossChainOrder(orderId: string): Promise<string> {\n const instructions = await cancelCrossChainOrderInstructions(orderId, { rpcUrl: this.config.rpcProviderUrl });\n const signer = await this.getUserSigner();\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const noopSigner = createNoopSigner(signer.address);\n\n const { value: latestBlockhash } = await this.client.rpc\n .getLatestBlockhash({ commitment: this.config.commitment })\n .send();\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(noopSigner, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n );\n\n const myTx = compileTransaction(transactionMessage);\n\n const signature = await signTransaction([signerKeyPair], myTx);\n\n assertIsSendableTransaction(signature);\n\n await this.client.sendAndConfirmTransaction(signature, {\n commitment: this.config.commitment,\n });\n\n return orderId;\n }\n\n public async cancelSingleChainOrder(orderId: string): Promise<string> {\n const instructions = await cancelSingleChainOrderInstructions(orderId, { rpcUrl: this.config.rpcProviderUrl });\n const signer = await this.getUserSigner();\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const noopSigner = createNoopSigner(signer.address);\n\n const { value: latestBlockhash } = await this.client.rpc\n .getLatestBlockhash({ commitment: this.config.commitment })\n .send();\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(noopSigner, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n );\n\n const myTx = compileTransaction(transactionMessage);\n\n const signature = await signTransaction([signerKeyPair], myTx);\n\n assertIsSendableTransaction(signature);\n\n await this.client.sendAndConfirmTransaction(signature, {\n commitment: this.config.commitment,\n });\n\n return orderId;\n }\n\n /**\n * Creates a CryptoKeyPair from the user's private key\n *\n * Converts the Base58-encoded private key to the format required by WebCrypto API\n *\n * @returns Promise resolving to a CryptoKeyPair for transaction signing\n * @private\n */\n private async getUserCryptoKeypair(): Promise<CryptoKeyPair> {\n const encoder = getBase58Encoder();\n const bytesWithPrefix = encoder.encode(this.config.privateKey);\n return createKeyPairFromBytes(bytesWithPrefix);\n }\n\n /**\n * Creates a KeyPairSigner from the user's crypto keypair\n *\n * The KeyPairSigner is used for transaction signing and verification\n *\n * @returns Promise resolving to a KeyPairSigner for transaction operations\n * @private\n */\n private async getUserSigner(): Promise<KeyPairSigner<string>> {\n const signer = await this.getUserCryptoKeypair();\n return createSignerFromKeyPair(signer);\n }\n\n public async authenticate(token?: string): Promise<string> {\n const wallet = await this.getUserAddress();\n const response = await fetchSiweMessage({\n chainId: ChainID.Solana,\n wallet,\n });\n\n const message = response.data!;\n\n const signableMessage = createSignableMessage(message);\n const signer = await this.getUserSigner();\n const signatureArray = await signer.signMessages([signableMessage]);\n\n const signatureBytes = signatureArray.map((signature) => signature[address(wallet)])[0];\n\n if (!signatureBytes) {\n throw new Error('No signature bytes found');\n }\n\n const hexSignature = bytesToHex(signatureBytes);\n\n const jwt = await fetchJWTToken(\n {\n message,\n signature: hexSignature,\n },\n token,\n );\n\n const newToken = jwt.data!;\n\n return newToken;\n }\n\n /**\n * Prepares a Solana order for submission\n *\n * This method:\n * 1. Gets the user's signer from their private key\n * 2. Generates Solana-specific instructions for the order\n * 3. Creates, signs, and submits the transaction to the Solana blockchain\n * 4. Returns the prepared order with the orderPubkey for tracking\n *\n * @param order The validated order to prepare\n * @returns Promise resolving to a prepared order with Solana-specific data\n * @protected\n */\n protected async prepareCrossChainOrder(order: CrossChainOrder): Promise<CrossChainOrderPrepared> {\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const { orderAddress, txBytes } = await getSolanaCrossChainOrderInstructions(order);\n\n const transactionCodec = getTransactionCodec();\n\n const tx = transactionCodec.decode(txBytes) as Transaction & TransactionWithLifetime;\n\n const signedTx = await signTransaction([signerKeyPair], tx);\n\n const encodedTransaction = getBase64EncodedWireTransaction(signedTx);\n\n await this.client.rpc\n .sendTransaction(encodedTransaction, { preflightCommitment: this.config.commitment, encoding: 'base64' })\n .send();\n\n return {\n order,\n preparedData: {\n orderPubkey: orderAddress,\n },\n };\n }\n\n protected override async prepareSingleChainOrder(order: SingleChainOrder): Promise<SingleChainOrderPrepared> {\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const { orderAddress, txBytes, secretNumber } = await getSolanaSingleChainOrderInstructions(order);\n\n const transactionCodec = getTransactionCodec();\n\n const tx = transactionCodec.decode(txBytes) as Transaction & TransactionWithLifetime;\n\n const signedTx = await partiallySignTransaction([signerKeyPair], tx);\n\n const encodedTransaction = getBase64EncodedWireTransaction(signedTx);\n\n await this.client.rpc\n .sendTransaction(encodedTransaction, { preflightCommitment: this.config.commitment, encoding: 'base64' })\n .send();\n\n return {\n order,\n preparedData: {\n orderPubkey: orderAddress,\n secretNumber,\n },\n };\n }\n public async cancelDcaSingleChainOrder(orderId: string): Promise<string> {\n const instructions = await cancelDcaSingleChainOrderInstructions(orderId, { rpcUrl: this.config.rpcProviderUrl });\n const signer = await this.getUserSigner();\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const noopSigner = createNoopSigner(signer.address);\n\n const { value: latestBlockhash } = await this.client.rpc\n .getLatestBlockhash({ commitment: this.config.commitment })\n .send();\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(noopSigner, tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n );\n\n const myTx = compileTransaction(transactionMessage);\n\n const signature = await signTransaction([signerKeyPair], myTx);\n\n assertIsSendableTransaction(signature);\n\n await this.client.sendAndConfirmTransaction(signature, {\n commitment: this.config.commitment,\n });\n\n return orderId;\n }\n\n protected override async prepareDcaSingleChainOrder(\n order: DcaSingleChainOrder,\n ): Promise<DcaSingleChainOrderPrepared> {\n const signerKeyPair = await this.getUserCryptoKeypair();\n\n const { orderAddress, txBytes, secretNumber } = await getSolanaDcaSingleChainOrderInstructions(order);\n\n const transactionCodec = getTransactionCodec();\n\n const tx = transactionCodec.decode(txBytes) as Transaction & TransactionWithLifetime;\n\n const signedTx = await partiallySignTransaction([signerKeyPair], tx);\n\n const encodedTransaction = getBase64EncodedWireTransaction(signedTx);\n\n await this.client.rpc\n .sendTransaction(encodedTransaction, { preflightCommitment: this.config.commitment, encoding: 'base64' })\n .send();\n\n return {\n order,\n preparedData: {\n orderPubkey: orderAddress,\n secretNumber,\n },\n };\n }\n}\n","import {\n address,\n appendTransactionMessageInstructions,\n compileTransactionMessage,\n createNoopSigner,\n createSolanaRpc,\n createTransactionMessage,\n fetchEncodedAccount,\n getAddressEncoder,\n getCompiledTransactionMessageEncoder,\n getProgramDerivedAddress,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n type Address,\n type Instruction,\n type ReadonlyUint8Array,\n type TransactionMessageBytes,\n} from '@solana/kit';\nimport { getDefaultSolanaRPC } from './client.js';\nimport { fetchMaybeLimitOrder, getCancelLimitOrderInstruction } from './generated/single-chain/index.js';\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n fetchMint,\n getCreateAssociatedTokenInstructionAsync,\n} from '@solana-program/token';\nimport { CROSS_CHAIN_GUARD_ADDRESSES, SINGLE_CHAIN_GUARD_ADDRESSES, SOLANA_MINT_TOKEN } from '../../constants.js';\nimport { ChainID } from '../../chains.js';\nimport { fetchMaybeOrder, getCancelOrderInstruction } from './generated/cross-chain/index.js';\n\nexport async function cancelSingleChainOrderInstructions(\n orderAddress: string,\n options?: { rpcUrl?: string },\n): Promise<Instruction[]> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n\n const orderId = address(orderAddress);\n const chainOrder = await fetchMaybeLimitOrder(rpc, orderId);\n\n if (!chainOrder.exists) {\n throw new Error(`Order with address ${orderAddress} not found`);\n }\n\n const instructions: Instruction[] = [];\n const orderUserAddress = chainOrder.data.user;\n\n const tokenInMint = chainOrder.data.tokenInMint;\n\n const tokenMintProgram = await fetchMint(rpc, tokenInMint);\n\n const addressEncoder = getAddressEncoder();\n\n const [tokenInProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(tokenMintProgram.programAddress),\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const guardAddress = SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana] as Address;\n const [guardProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n // Owner\n addressEncoder.encode(guardAddress),\n // Token program\n addressEncoder.encode(tokenMintProgram.programAddress),\n // mint address\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);\n\n if (!userTokenInAccount.exists) {\n const createTokenIx = await getCreateAssociatedTokenInstructionAsync({\n mint: tokenInMint,\n owner: orderUserAddress,\n payer: createNoopSigner(orderUserAddress),\n tokenProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(createTokenIx);\n }\n\n const cancelLimitOrderIx = getCancelLimitOrderInstruction({\n order: orderId,\n guard: guardAddress,\n tokenInMint: chainOrder.data.tokenInMint,\n userTokenInAccount: userTokenInAccount.address,\n guardTokenInAccount: guardProgramAccount,\n tokenInProgram: tokenMintProgram.programAddress,\n signer: createNoopSigner(orderUserAddress),\n user: orderUserAddress\n });\n\n instructions.push(cancelLimitOrderIx);\n\n return instructions;\n}\n\nexport async function cancelCrossChainOrderInstructionsAsBytes(\n orderAddress: string,\n signerAddress: string,\n options?: { rpcUrl?: string },\n): Promise<{ versionedMessageBytes: ReadonlyUint8Array }> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const instructions = await cancelCrossChainOrderInstructions(orderAddress, options);\n const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: 'confirmed' }).send();\n\n const txMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(createNoopSigner(address(signerAddress)), tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n );\n\n const compiledTxMessage = compileTransactionMessage(txMessage);\n\n const txBytes = getCompiledTransactionMessageEncoder().encode(compiledTxMessage);\n\n return { versionedMessageBytes: txBytes };\n}\n\nexport async function cancelSingleChainOrderInstructionsAsBytes(\n orderAddress: string,\n signerAddress: string,\n options?: { rpcUrl?: string },\n): Promise<{ versionedMessageBytes: ReadonlyUint8Array }> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const instructions = await cancelSingleChainOrderInstructions(orderAddress, options);\n const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: 'confirmed' }).send();\n\n const txMessage = pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => setTransactionMessageFeePayerSigner(createNoopSigner(address(signerAddress)), tx),\n (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n );\n\n const compiledTxMessage = compileTransactionMessage(txMessage);\n\n const txBytes = getCompiledTransactionMessageEncoder().encode(compiledTxMessage) as TransactionMessageBytes;\n\n return { versionedMessageBytes: txBytes };\n}\n\nexport async function cancelCrossChainOrderInstructions(\n orderAddress: string,\n options?: { rpcUrl?: string },\n): Promise<Instruction[]> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n const orderId = address(orderAddress);\n\n const chainOrder = await fetchMaybeOrder(rpc, orderId);\n if (!chainOrder.exists) {\n throw new Error(`Order with address ${orderAddress} not found`);\n }\n\n const instructions: Instruction[] = [];\n const orderUserAddress = chainOrder.data.user;\n const guardAddress = CROSS_CHAIN_GUARD_ADDRESSES[ChainID.Solana] as Address;\n const addressEncoder = getAddressEncoder();\n\n const isRecoveringTokenIn = chainOrder.data.lockedStablecoins === 0n;\n const recoverTokenMint = isRecoveringTokenIn ? chainOrder.data.tokenInMint : address(SOLANA_MINT_TOKEN.mint);\n\n const recoverTokenMintProgram = await fetchMint(rpc, recoverTokenMint);\n\n const [userRecoveredTokenAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(recoverTokenMintProgram.programAddress),\n addressEncoder.encode(recoverTokenMint),\n ],\n });\n\n const [guardRecoveredTokenAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(guardAddress),\n addressEncoder.encode(recoverTokenMintProgram.programAddress),\n addressEncoder.encode(recoverTokenMint),\n ],\n });\n\n // Check if user's recovered token account exists, create if needed\n const userRecoveredTokenAccountInfo = await fetchEncodedAccount(rpc, userRecoveredTokenAccount);\n if (!userRecoveredTokenAccountInfo.exists) {\n const createRecoveredTokenAccountIx = await getCreateAssociatedTokenInstructionAsync({\n payer: createNoopSigner(orderUserAddress),\n ata: userRecoveredTokenAccount,\n owner: orderUserAddress,\n mint: recoverTokenMint,\n tokenProgram: recoverTokenMintProgram.programAddress,\n });\n instructions.push(createRecoveredTokenAccountIx);\n }\n\n let userCollateralTokenAccount: Address | undefined;\n const willClaimCollateral = chainOrder.data.lockedCollateral > 0n;\n\n if (willClaimCollateral) {\n const collateralTokenMint = address(SOLANA_MINT_TOKEN.mint);\n const collateralTokenMintProgram = await fetchMint(rpc, collateralTokenMint);\n\n const [userCollateralAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(collateralTokenMintProgram.programAddress),\n addressEncoder.encode(collateralTokenMint),\n ],\n });\n\n userCollateralTokenAccount = userCollateralAccount;\n\n // Check if user's collateral token account exists, create if needed\n const userCollateralTokenAccountInfo = await fetchEncodedAccount(rpc, userCollateralTokenAccount);\n if (!userCollateralTokenAccountInfo.exists) {\n const createCollateralTokenAccountIx = await getCreateAssociatedTokenInstructionAsync({\n payer: createNoopSigner(orderUserAddress),\n ata: userCollateralTokenAccount,\n owner: orderUserAddress,\n mint: collateralTokenMint,\n tokenProgram: collateralTokenMintProgram.programAddress,\n });\n instructions.push(createCollateralTokenAccountIx);\n }\n }\n\n const collateralTokenMint = address(SOLANA_MINT_TOKEN.mint);\n const collateralTokenMintProgram = await fetchMint(rpc, collateralTokenMint);\n\n const [guardCollateralTokenAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(guardAddress),\n addressEncoder.encode(collateralTokenMintProgram.programAddress),\n addressEncoder.encode(collateralTokenMint),\n ],\n });\n\n // Create the cancel order instruction\n const cancelOrderIx = getCancelOrderInstruction({\n user: orderUserAddress,\n order: orderId,\n guard: guardAddress,\n recoveredTokenMint: recoverTokenMint,\n userRecoveredTokenAccount: userRecoveredTokenAccount,\n guardRecoveredTokenAccount: guardRecoveredTokenAccount,\n recoveredTokenProgram: recoverTokenMintProgram.programAddress,\n collateralTokenMint: collateralTokenMint,\n userCollateralTokenAccount: userCollateralTokenAccount,\n guardCollateralTokenAccount: guardCollateralTokenAccount,\n collateralTokenProgram: collateralTokenMintProgram.programAddress,\n signer: createNoopSigner(orderUserAddress)\n });\n\n instructions.push(cancelOrderIx);\n\n return instructions;\n}\n","import {\n address,\n createNoopSigner,\n createSolanaRpc,\n fetchEncodedAccount,\n getAddressEncoder,\n getProgramDerivedAddress,\n type Address,\n type Instruction,\n} from '@solana/kit';\nimport { getDefaultSolanaRPC } from '../client.js';\nimport { fetchMaybeDcaOrder, getCancelDcaOrderInstruction } from '../generated/single-chain/index.js';\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n fetchMint,\n getCreateAssociatedTokenInstructionAsync,\n} from '@solana-program/token';\nimport { SINGLE_CHAIN_GUARD_ADDRESSES } from '../../../constants.js';\nimport { ChainID } from '../../../chains.js';\n\nexport async function cancelDcaSingleChainOrderInstructions(\n orderAddress: string,\n options?: { rpcUrl?: string },\n): Promise<Instruction[]> {\n const rpc = options?.rpcUrl ? createSolanaRpc(options.rpcUrl) : getDefaultSolanaRPC();\n\n const orderId = address(orderAddress);\n const chainOrder = await fetchMaybeDcaOrder(rpc, orderId);\n\n if (!chainOrder.exists) {\n throw new Error(`Order with address ${orderAddress} not found`);\n }\n\n const instructions: Instruction[] = [];\n const orderUserAddress = chainOrder.data.user;\n\n const tokenInMint = chainOrder.data.tokenInMint;\n\n const tokenMintProgram = await fetchMint(rpc, tokenInMint);\n\n const addressEncoder = getAddressEncoder();\n\n const [tokenInProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n addressEncoder.encode(orderUserAddress),\n addressEncoder.encode(tokenMintProgram.programAddress),\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const guardAddress = SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana] as Address;\n const [guardProgramAccount] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n // Owner\n addressEncoder.encode(guardAddress),\n // Token program\n addressEncoder.encode(tokenMintProgram.programAddress),\n // mint address\n addressEncoder.encode(tokenInMint),\n ],\n });\n\n const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);\n\n if (!userTokenInAccount.exists) {\n const createTokenIx = await getCreateAssociatedTokenInstructionAsync({\n mint: tokenInMint,\n owner: orderUserAddress,\n payer: createNoopSigner(orderUserAddress),\n tokenProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(createTokenIx);\n }\n\n const cancelLimitOrderIx = getCancelDcaOrderInstruction({\n user: orderUserAddress,\n signer: createNoopSigner(orderUserAddress),\n order: orderId,\n guard: guardAddress,\n tokenInMint: chainOrder.data.tokenInMint,\n userTokenInAccount: userTokenInAccount.address,\n guardTokenInAccount: guardProgramAccount,\n tokenInProgram: tokenMintProgram.programAddress,\n });\n\n instructions.push(cancelLimitOrderIx);\n\n return instructions;\n}\n","import type { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { SuiConfig } from '../../config.js';\nimport { BaseSDK } from '../sdk.js';\nimport { createSuiClient } from './client.js';\nimport { getSuiOrderTransaction } from './order-transaction.js';\nimport { getSuiCancelCrossChainOrder } from './cancel.js';\nimport type { CrossChainOrderPrepared } from '../../types/intent.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport { fetchJWTToken, fetchSiweMessage } from '../../auth/siwe.js';\nimport { ChainID } from '../../chains.js';\n\n/**\n * Sui-specific SDK implementation\n *\n * Handles Sui-specific aspects of cross-chain swaps using the Sui blockchain.\n * Uses @mysten/sui libraries for transaction creation, signing, and submission.\n * Supports cross-chain swaps from Sui to other supported chains.\n */\nexport class SuiSDK extends BaseSDK {\n /** Configuration for Sui connection and authentication */\n private readonly config: SuiConfig;\n /** Client for Sui RPC interactions and transaction handling */\n private client: SuiClient;\n\n /**\n * Creates a new instance of the Sui SDK\n *\n * @param config Sui configuration including privateKey and optional RPC URL\n */\n constructor(config: SuiConfig) {\n super();\n this.config = config;\n this.client = createSuiClient();\n }\n\n /**\n * Gets the user's Sui wallet address derived from their private key\n *\n * Uses Ed25519Keypair to securely derive the wallet address from the private key\n *\n * @returns Promise resolving to the user's Sui address as a hex string\n */\n public async getUserAddress(): Promise<string> {\n return this.getKeyPair().toSuiAddress();\n }\n\n /**\n * Creates an Ed25519Keypair from the user's private key\n *\n * The keypair is used for transaction signing and address derivation\n *\n * @returns Ed25519Keypair for cryptographic operations\n * @private\n */\n private getKeyPair(): Ed25519Keypair {\n return Ed25519Keypair.fromSecretKey(this.config.privateKey);\n }\n\n public async authenticate(token?: string): Promise<string> {\n const wallet = await this.getUserAddress();\n\n const response = await fetchSiweMessage({\n chainId: ChainID.Sui,\n wallet,\n });\n\n const message = response.data!;\n\n const keypair = this.getKeyPair();\n\n const messageBytes = new TextEncoder().encode(message);\n\n const { signature } = await keypair.signPersonalMessage(messageBytes);\n\n const jwt = await fetchJWTToken(\n {\n message,\n signature,\n },\n token,\n );\n\n const newToken = jwt.data!;\n\n return newToken;\n }\n\n /**\n * Prepares a Sui order for submission\n *\n * This method:\n * 1. Gets the user's keypair from their private key\n * 2. Generates Sui-specific transaction for the order\n * 3. Signs and executes the transaction on the Sui blockchain\n * 4. Returns the prepared order with the transaction hash for tracking\n *\n * @param order The validated order to prepare\n * @returns Promise resolving to a prepared order with Sui-specific data\n * @protected\n */\n protected override async prepareCrossChainOrder(order: CrossChainOrder): Promise<CrossChainOrderPrepared> {\n const signer = this.getKeyPair();\n\n const transaction = await getSuiOrderTransaction(order, this.client);\n\n const tx = await this.client.signAndExecuteTransaction({\n signer,\n transaction,\n });\n\n await this.client.waitForTransaction({ digest: tx.digest });\n\n return {\n order,\n preparedData: {\n transactionHash: tx.digest,\n },\n };\n }\n\n public async cancelCrossChainOrder(orderId: string): Promise<string> {\n const signer = this.getKeyPair();\n\n const transaction = await getSuiCancelCrossChainOrder(orderId);\n\n const sender = await this.getUserAddress();\n\n transaction.setSender(sender);\n\n const tx = await this.client.signAndExecuteTransaction({\n signer,\n transaction,\n });\n\n await this.client.waitForTransaction({ digest: tx.digest });\n\n return tx.digest;\n }\n}\n","import { Transaction } from '@mysten/sui/transactions';\nimport { createSuiClient } from './client.js';\nimport { SUI_PACKAGE_ID } from '../../constants.js';\n\nexport async function getSuiCancelCrossChainOrder(orderId: string): Promise<Transaction> {\n const client = createSuiClient();\n const order = await client.getObject({\n id: orderId,\n options: {\n showContent: true,\n },\n });\n\n if (!order.data) {\n throw new Error(`Order ${orderId} not found`);\n }\n\n if (!order.data.content || order.data.content.dataType !== 'moveObject') {\n throw new Error(`Order ${orderId} is not a move object`);\n }\n\n if (!order?.data?.content?.type) {\n throw new Error(`Order ${orderId} has no type`);\n }\n\n const matched = order.data.content.type.match(/<([^>]+)>/)!;\n\n if (!matched[1]) {\n throw new Error(`Order ${orderId} has no type arguments`);\n }\n\n const typeArguments = matched[1].split(', ');\n const tx = new Transaction();\n\n tx.moveCall({\n package: SUI_PACKAGE_ID,\n module: 'cross_chain_limit_orders',\n function: 'cancel_order',\n arguments: [tx.object(orderId), tx.object.clock()],\n typeArguments,\n });\n\n return tx;\n}\n","import { AUCTIONEER_URL } from '../../../constants.js';\nimport type { SupportedChain } from '../../../chains.js';\nimport type { ApiResponse, ApiUserOrders } from '../../../types/api.js';\n\n/**\n * Query filters for `GET /user_intent`.\n *\n * The auctioneer resolves the wallets to query from the (currently unvalidated) JWT claims\n * and/or the `wallet` param; at least one source must be present. `network` optionally\n * restricts results to a single chain — omit it to return orders on every network.\n */\nexport interface GetUserOrdersParams {\n /** Wallet address to query. Combined with any wallet(s) carried by the JWT claims. */\n wallet?: string;\n /** Restrict results to a single chain. Serialized as its chain id (e.g. 8453). */\n network?: SupportedChain;\n}\n\nexport class AuctioneerAPI {\n public aggregatedToken?: string;\n\n constructor(aggregatedToken?: string) {\n this.aggregatedToken = aggregatedToken;\n }\n\n public extend(token: string) {\n this.aggregatedToken = token;\n }\n\n public async getUserOrders(params: GetUserOrdersParams = {}) {\n const query = new URLSearchParams();\n if (params.wallet) {\n query.set('wallet', params.wallet);\n }\n if (params.network !== undefined) {\n query.set('network', String(params.network));\n }\n\n const queryString = query.toString();\n const url = `${AUCTIONEER_URL}/user_intent${queryString ? `?${queryString}` : ''}`;\n\n // JWT is optional while the auctioneer skips verification; only send the header when a\n // token is present. Otherwise the wallet is resolved from the `wallet` param alone.\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (this.aggregatedToken) {\n headers.Authorization = `Bearer ${this.aggregatedToken}`;\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers,\n });\n\n const data: ApiResponse<ApiUserOrders> = await response.json();\n\n if (!data.success) {\n throw new Error(`Failed to fetch user orders: ${data.error}`);\n }\n\n return data.data!;\n }\n}\n","import { AuctioneerAPI } from './index.js';\nimport type { SupportedChain } from '../../../chains.js';\nimport type { ApiUserOrders } from '../../../types/api.js';\n\n/**\n * Parameters for {@link fetchUserOrders}.\n *\n * The auctioneer resolves the wallets to query from the JWT claims and/or the `wallet`\n * address, so at least one of `token`/`wallet` must be provided. `network` optionally\n * restricts the results to a single chain.\n */\nexport interface FetchUserOrdersParams {\n /**\n * SIWE-issued JWT. Optional while the auctioneer skips JWT verification — when present,\n * its wallet claims are queried in addition to `wallet`. Obtain it with\n * `EVMSDK.authenticate()` (or the `fetchSiweMessage` + `fetchJWTToken` pair).\n */\n token?: string;\n /** Wallet address to query. Required when no `token` is supplied. */\n wallet?: string;\n /** Restrict results to a single chain; omit to return orders on every network. */\n network?: SupportedChain;\n}\n\n/**\n * Fetches the orders owned by a wallet (and/or the wallets encoded in a SIWE-issued JWT).\n *\n * ⚠️ The auctioneer currently skips JWT verification, so the queried wallet may be passed\n * directly via `wallet`. Once verification is restored, only wallets proved via SIWE (i.e.\n * carried by a valid `token`) will be readable.\n */\nexport async function fetchUserOrders({ token, wallet, network }: FetchUserOrdersParams): Promise<ApiUserOrders> {\n if (!token && !wallet) {\n throw new Error('fetchUserOrders requires a `wallet` address or a SIWE-issued `token` (JWT)');\n }\n\n return new AuctioneerAPI(token).getUserOrders({ wallet, network });\n}\n","import type { ExtraTransfer } from '../core/orders/common.js';\n\nexport type ChainOrderStatus =\n | 'Auction'\n | 'NoBids'\n | 'Executing'\n | 'Fulfilled'\n | 'Cancelled'\n | 'Outdated'\n | 'DcaIntervalFulfilled';\n\nexport type ApiCrossChainOrder = {\n orderId: string;\n // Flattened fields from the API response\n user: string;\n srcChainId: number;\n tokenIn: string;\n minStablecoinsAmount: string;\n destChainId: number;\n tokenOut: string;\n amountOutMin: string;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n executionDetailsHash: string;\n amountIn: string;\n // Cross-chain specific fields\n executionDetails: string;\n orderCreationTime: number;\n orderStatus: ChainOrderStatus;\n tokensInWereSwappedToStablecoins: boolean;\n lockedStablecoins: string;\n nonce?: string;\n orderFulfillmentTimestamp?: number;\n transactionHash?: string;\n amountOut?: string;\n};\n\nexport type ApiSingleChainOrder = {\n orderId: string;\n // Flattened fields from the API response\n user: string;\n chainId: number;\n tokenIn: string;\n tokenOut: string;\n amountOutMin: string;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n amountIn: string;\n // Single-chain specific fields\n orderCreationTime: number;\n orderStatus: ChainOrderStatus;\n nonce?: string;\n orderFulfillmentTimestamp?: number;\n transactionHash?: string;\n amountOut?: string;\n};\n\nexport type ApiUserOrders = {\n singleChainLimitOrders: ApiSingleChainOrder[];\n crossChainLimitOrders: ApiCrossChainOrder[];\n};\n/**\n * Represents the response from an Intent API endpoint.\n */\nexport interface ApiIntentResponse {\n /** Unique identifier for the created intent */\n intentId: string;\n\n /**\n * JWT token used for authorization or subsequent requests.\n * Optional: order-creation responses only return `intentId`; obtain a JWT via the\n * SIWE flow (`EVMSDK.authenticate()` / `fetchJWTToken`) instead.\n */\n jwt?: string;\n}\nexport type ValidResponseData = ApiUserOrders | string | ApiIntentResponse | null;\n\nexport type ApiResponse<T extends ValidResponseData = ValidResponseData> = {\n success: boolean;\n code: number;\n data?: T;\n error?: unknown;\n extra_error_data?: unknown;\n};\n\nexport function isSuccessApiResponse<T extends ValidResponseData>(\n response: ApiResponse<T>,\n): response is ApiResponse<T> & { success: true; data: T } {\n return response.success;\n}\n\nexport function isErrorApiResponse<T extends ValidResponseData>(\n response: ApiResponse<T>,\n): response is ApiResponse<T> & { success: false; error: unknown } {\n return !response.success;\n}\n","import { ChainID, type SupportedChain } from '../chains.js';\nimport { NATIVE_EVM_ETH_ADDRESSES, NATIVE_SOLANA_TOKEN_ADDRESS, WRAPPED_SOL_MINT_ADDRESS } from '../constants.js';\nimport { Parsers } from './parsers.js';\nimport { QuoteProvider } from './quote/aggregator.js';\n\nconst TOKEN_PRICE_BASE_URL: string = 'https://coins.llama.fi/prices/current/';\nconst STABLECOIN_DECIMALS = 6; // USDC/USDT typically use 6 decimals\n\n/**\n * Response structure from DefiLlama API for token prices\n */\nexport interface DefiLlamaTokensResponse {\n coins: Record<string, DefiLlamaCoinData>;\n}\n\n/**\n * Individual token data from DefiLlama API\n */\nexport interface DefiLlamaCoinData {\n /** Number of decimal places for the token */\n decimals: number;\n /** Token symbol (e.g., \"ETH\", \"USDC\") */\n symbol: string;\n /** Current price in USD */\n price: number;\n /** Unix timestamp of the price data */\n timestamp: number;\n /** Confidence level of the price data (0-1) */\n confidence: number;\n}\n\n/**\n * Maps chain IDs to their corresponding chain types\n * Used to determine which SDK implementation to use for a given chain\n */\nexport const chainIdToDefiLlamaChainMap = {\n [ChainID.Arbitrum]: 'arbitrum',\n [ChainID.Base]: 'base',\n [ChainID.Optimism]: 'optimism',\n [ChainID.Hyperliquid]: 'hyperliquid',\n [ChainID.Solana]: 'solana',\n [ChainID.Sui]: 'sui',\n [ChainID.BSC]: 'bsc',\n [ChainID.MONAD]: 'monad',\n} as const;\n\n/**\n * Creates DefiLlama coin key from chain ID and token address\n * Format: \"chainName:tokenAddress\"\n */\nexport const createDefiLlamaCoinKey = (chainId: ChainID, tokenAddress: string): string => {\n const chainName = chainIdToDefiLlamaChainMap[chainId];\n\n return `${chainName}:${toDefiLlamaToken(tokenAddress)}`;\n};\n\n/**\n * Retrieves token data from DefiLlama response by chain and address\n */\nexport const getCoinFromResponse = (\n response: DefiLlamaTokensResponse,\n chainId: ChainID,\n tokenAddress: string,\n): DefiLlamaCoinData => {\n const key = createDefiLlamaCoinKey(chainId, tokenAddress);\n const coin = response.coins[key];\n\n if (!coin) {\n throw new Error(`DefiLlama coin not found for ${key}`);\n }\n\n return coin;\n};\n\n/**\n * Converts Solana native token address to wrapped SOL mint address\n * DefiLlama uses wrapped SOL mint address for native SOL\n *\n * @param tokenAddress The token address to convert\n * @returns The DefiLlama-compatible token address\n */\nfunction toDefiLlamaToken(tokenAddress: string): string {\n if (isNativeTokenEvmAddress(tokenAddress)) {\n return '0x0000000000000000000000000000000000000000';\n }\n\n if (tokenAddress === NATIVE_SOLANA_TOKEN_ADDRESS) {\n return WRAPPED_SOL_MINT_ADDRESS;\n }\n\n return tokenAddress;\n}\n\nfunction isNativeTokenEvmAddress(tokenAddress: string): boolean {\n const normalizedAddress = tokenAddress.toLowerCase();\n\n return NATIVE_EVM_ETH_ADDRESSES.some((addr) => addr.toLowerCase() === normalizedAddress);\n}\n\n/**\n * Builds a comma-separated query string for DefiLlama API token requests\n *\n * Converts an array of chain/token pairs into the format expected by DefiLlama's\n * bulk price endpoint: \"chain1:token1,chain2:token2,...\"\n *\n * @param tokens - Array of [ChainID, token address] tuples to query\n * @returns Comma-separated string of DefiLlama coin keys\n */\nfunction buildTokensQueryString(tokens: Array<[ChainID, string]>): string {\n return tokens.map(([chainId, tokenAddress]) => createDefiLlamaCoinKey(chainId, tokenAddress)).join(',');\n}\n\n/**\n * Fetch tokens data for array of coins\n *\n * @param tokens Array of [ChainID, Token Address] tuples\n * @returns Promise resolving to DefiLlama tokens response\n */\nexport async function getTokensData(tokens: Array<[ChainID, string]>): Promise<DefiLlamaTokensResponse> {\n const tokensStr = buildTokensQueryString(tokens);\n\n const url = `${TOKEN_PRICE_BASE_URL}${tokensStr}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return response.json();\n}\n\nexport async function calculateAmounts({\n srcChainId,\n tokenIn,\n amountIn,\n destChainId,\n tokenOut,\n}: {\n srcChainId: SupportedChain;\n tokenIn: string;\n amountIn: bigint;\n destChainId: SupportedChain;\n tokenOut: string;\n}): Promise<{ amountOut: bigint; minStablecoinsAmount: bigint }> {\n // Fetch token data from DefiLlama\n const tokensResponse = await getTokensData([\n [srcChainId, tokenIn],\n [destChainId, tokenOut],\n ]);\n\n const tokenInData = getCoinFromResponse(tokensResponse, srcChainId, tokenIn);\n\n const tokenOutData = getCoinFromResponse(tokensResponse, destChainId, tokenOut);\n\n // Calculate 80% of the amount_in value as amount_out_min and min_stablecoins_amount\n const tokenInUsdAmount = Parsers.bigintToFloat(amountIn, tokenInData.decimals) * tokenInData.price;\n const reductionFactor = QuoteProvider.calculateWeightedReductionFactorForUsd(tokenInUsdAmount);\n const amountInUsdReduced = tokenInUsdAmount * reductionFactor;\n const amountOutReduced = amountInUsdReduced / tokenOutData.price;\n\n const amountOut = Parsers.floatToBigint(amountOutReduced, tokenOutData.decimals);\n const minStablecoinsAmount = Parsers.floatToBigint(amountInUsdReduced, STABLECOIN_DECIMALS);\n\n return { amountOut, minStablecoinsAmount };\n}\n","import { encodeFunctionData, type Hex } from 'viem';\nimport type { ExtraTransfer } from '../orders/common.js';\n\nexport type CancelSingleChainOrderParams = {\n orderId: string;\n user: string;\n tokenIn: string;\n amountIn: bigint;\n requestedOutput: ExtraTransfer;\n extraTransfers: ExtraTransfer[];\n encodedExternalCallData: string;\n deadline: number;\n nonce: bigint;\n};\n\nexport type CancelCrossChainOrderParams = {\n orderId: string;\n user: string;\n tokenIn: string;\n amountIn: bigint;\n srcChainId: number;\n deadline: number;\n minStablecoinsAmount: bigint;\n executionDetailsHash: string;\n nonce: bigint;\n};\n\nconst CROSS_CHAIN_CANCEL_ORDER_ABI = [\n {\n inputs: [\n {\n components: [\n { name: 'user', type: 'address' },\n { name: 'tokenIn', type: 'address' },\n { name: 'srcChainId', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'amountIn', type: 'uint256' },\n { name: 'minStablecoinsAmount', type: 'uint256' },\n { name: 'executionDetailsHash', type: 'bytes32' },\n { name: 'nonce', type: 'uint256' },\n ],\n name: 'orderInfo',\n type: 'tuple',\n },\n ],\n name: 'cancelOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\nconst SINGLE_CHAIN_CANCEL_ORDER_ABI = [\n {\n inputs: [\n {\n components: [\n { name: 'amountIn', type: 'uint256' },\n { name: 'tokenIn', type: 'address' },\n { name: 'deadline', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'encodedExternalCallData', type: 'bytes' },\n {\n components: [\n { name: 'amount', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'token', type: 'address' },\n ],\n name: 'extraTransfers',\n type: 'tuple[]',\n },\n {\n components: [\n { name: 'amount', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'token', type: 'address' },\n ],\n name: 'requestedOutput',\n type: 'tuple',\n },\n { name: 'user', type: 'address' },\n ],\n name: 'order',\n type: 'tuple',\n },\n ],\n name: 'cancelManuallyCreatedOrder',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\nconst PERMIT2_INVALIDATE_NONCES_ABI = [\n {\n inputs: [\n { name: 'wordPos', type: 'uint256' },\n { name: 'mask', type: 'uint256' },\n ],\n name: 'invalidateUnorderedNonces',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n\nexport function getCancelCrossChainOrderRawData(params: CancelCrossChainOrderParams): Hex {\n const orderInfo = {\n user: params.user as Hex,\n tokenIn: params.tokenIn as Hex,\n srcChainId: BigInt(params.srcChainId),\n deadline: BigInt(params.deadline),\n amountIn: params.amountIn,\n minStablecoinsAmount: params.minStablecoinsAmount,\n executionDetailsHash: params.executionDetailsHash as Hex,\n nonce: params.nonce,\n };\n\n return encodeFunctionData({\n abi: CROSS_CHAIN_CANCEL_ORDER_ABI,\n functionName: 'cancelOrder',\n args: [orderInfo],\n });\n}\n\nexport function getCancelSingleChainOrderRawData(params: CancelSingleChainOrderParams): Hex {\n const order = {\n amountIn: params.amountIn,\n tokenIn: params.tokenIn as Hex,\n deadline: BigInt(params.deadline),\n nonce: params.nonce,\n encodedExternalCallData: params.encodedExternalCallData as Hex,\n extraTransfers: params.extraTransfers.map((transfer) => ({\n amount: transfer.amount,\n receiver: transfer.receiver as Hex,\n token: transfer.token as Hex,\n })),\n requestedOutput: {\n amount: params.requestedOutput.amount,\n receiver: params.requestedOutput.receiver as Hex,\n token: params.requestedOutput.token as Hex,\n },\n user: params.user as Hex,\n };\n\n return encodeFunctionData({\n abi: SINGLE_CHAIN_CANCEL_ORDER_ABI,\n functionName: 'cancelManuallyCreatedOrder',\n args: [order],\n });\n}\n\nexport function getInvalidateNoncesRawData(nonce: bigint): Hex {\n const nonceWordPos = nonce >> 8n;\n const nonceBitPos = nonce - nonceWordPos * 256n;\n const mask = 1n << nonceBitPos;\n\n return encodeFunctionData({\n abi: PERMIT2_INVALIDATE_NONCES_ABI,\n functionName: 'invalidateUnorderedNonces',\n args: [nonceWordPos, mask],\n });\n}\n","import { address, createSolanaRpc, type Base58EncodedBytes } from '@solana/kit';\nimport { getDefaultSolanaRPC } from './client.js';\nimport { logger } from '../../utils/logger.js';\n\n/**\n * Inspect Solana guards to find orders that are currently locked on-chain.\n * @param userAddress - The user's Solana address\n * @param config - The Solana RPC configuration\n * @returns An object containing the Solana guard programs for cross-chain and single-chain orders\n */\nexport async function getSolanaOrdersWithLockedFunds(userAddress: string, config?: { rpcUrl?: string }) {\n const rpc = config?.rpcUrl ? createSolanaRpc(config.rpcUrl) : getDefaultSolanaRPC();\n\n // const singleChainGuardAddress = SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana];\n\n const programAccountAddress = address('DQZQGiVa1PBXesdbCRzmJpZ7AyntLXfAwP5Qty1hgFqQ');\n const programAccountsConfig = {\n encoding: 'base64',\n filters: [\n {\n memcmp: {\n offset: 8n,\n encoding: 'base58',\n bytes: userAddress as Base58EncodedBytes,\n },\n },\n ],\n } as Readonly<unknown>;\n\n logger.info(`Fetching cross-chain guard programs for user: ${userAddress}`);\n const crossChainGuardPrograms = await rpc.getProgramAccounts(programAccountAddress, programAccountsConfig).send();\n logger.info(`Found ${crossChainGuardPrograms.length} cross-chain guard programs`);\n // const singleChainGuardPrograms = await rpc.getProgramAccounts(address(singleChainGuardAddress), programAccountsConfig).send();\n\n // const crossChainCodec = getOrderCodec();\n // const singleChainCodec = getLimitOrderCodec();\n // const base64Encoder = getBase64Encoder();\n\n const crossChainGuardProgramsWithOrders = crossChainGuardPrograms.map(({ pubkey, account }) => {\n logger.info(`Account data: ${account} and pubkey: ${pubkey}`);\n\n return {\n pubkey,\n };\n });\n\n return {\n crossChainGuardPrograms: crossChainGuardProgramsWithOrders,\n };\n}\n","import { BaseError } from '../errors/index.js';\n\nexport enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARN = 'WARN',\n ERROR = 'ERROR',\n NONE = 'NONE',\n}\n\nexport type LoggerConfig = {\n level: LogLevel;\n customLogger?: CustomLogger;\n};\n\nexport interface CustomLogger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n}\n\nclass DefaultLogger implements CustomLogger {\n debug(message: string, ...args: unknown[]): void {\n console.debug(`[${new Date().toISOString()} DEBUG] ${message}`, ...args);\n }\n\n info(message: string, ...args: unknown[]): void {\n console.info(`[${new Date().toISOString()} INFO] ${message}`, ...args);\n }\n\n warn(message: string, ...args: unknown[]): void {\n console.warn(`[${new Date().toISOString()} WARN] ${message}`, ...args);\n }\n\n error(message: string, ...args: unknown[]): void {\n console.error(`[${new Date().toISOString()} ERROR] ${message}`, ...args);\n }\n}\n\nclass Logger {\n private static instance: Logger;\n private loggerImpl: CustomLogger = new DefaultLogger();\n private logLevel: LogLevel = LogLevel.INFO;\n\n private constructor() {}\n\n public static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n public configure(config: LoggerConfig): void {\n this.logLevel = config.level;\n if (config.customLogger) {\n this.loggerImpl = config.customLogger;\n }\n }\n\n public debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.DEBUG)) {\n this.loggerImpl.debug(message, ...args);\n }\n }\n\n public info(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.INFO)) {\n this.loggerImpl.info(message, ...args);\n }\n }\n\n public warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.WARN)) {\n this.loggerImpl.warn(message, ...args);\n }\n }\n\n public error(message: string, error?: unknown): void {\n if (this.shouldLog(LogLevel.ERROR)) {\n const formattedError = this.formatError(error);\n this.loggerImpl.error(message, formattedError);\n }\n }\n\n public logError(error: unknown): void {\n if (this.shouldLog(LogLevel.ERROR)) {\n const formattedError = this.formatError(error);\n\n if (error instanceof BaseError) {\n this.loggerImpl.error(`${error.name}: ${error.message}`, formattedError);\n } else if (error instanceof Error) {\n this.loggerImpl.error(`${error.name}: ${error.message}`, formattedError);\n } else {\n this.loggerImpl.error('Unknown error', formattedError);\n }\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR];\n const currentLevelIndex = levels.indexOf(this.logLevel);\n const targetLevelIndex = levels.indexOf(level);\n\n return currentLevelIndex <= targetLevelIndex && this.logLevel !== LogLevel.NONE;\n }\n\n private formatError(error?: unknown): unknown {\n if (!error) return 'No error details provided';\n\n if (error instanceof BaseError) {\n return error.toJSON();\n }\n\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return error;\n }\n}\n\nexport const logger = Logger.getInstance();\n","import { bcs, fromHex } from '@mysten/bcs';\nimport { normalizeStructTag, normalizeSuiAddress, normalizeSuiObjectId } from '@mysten/sui/utils';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { ValidationError } from '../../errors/index.js';\nimport { createSuiClient } from './client.js';\nimport {\n SUI_PACKAGE_ID,\n SUI_GUARD_COLLATERAL_TYPE,\n SUI_GUARD_STABLECOIN_TYPE,\n NATIVE_SUI_TOKEN_ADDRESS,\n} from '../../constants.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport pkg from 'js-sha3';\nconst { keccak256 } = pkg;\n/**\n * Generates secret hash based on types, addresses and secret number for single chain DCA orders\n * @param coinOutType Type tag of Coin OUT\n * @param receiver Main Coins OUT receiver\n * @param secretNumber Secret number, for hash randomness\n * @param extraTransferCoinOut Type tag of extra transfer coin OUT\n * @param extraTransferReceiver Receiver of extra transfer\n */\nexport function getDcaSecretHash(\n coinOutType: string,\n receiver: string,\n secretNumber: string,\n extraTransferCoinOut?: string,\n extraTransferReceiver?: string,\n) {\n const coinOutTypeBytes = Buffer.from(normalizeStructTag(coinOutType).replace('0x', ''), 'utf8');\n const receiverBytes = fromHex(normalizeSuiAddress(receiver));\n\n let resBytes = [...coinOutTypeBytes, ...receiverBytes];\n if (extraTransferCoinOut && extraTransferReceiver) {\n const extraTransferCoinOutBytes = Buffer.from(normalizeStructTag(extraTransferCoinOut).replace('0x', ''), 'utf8');\n const extraTransferReceiverBytes = fromHex(normalizeSuiAddress(extraTransferReceiver));\n\n resBytes = [...resBytes, ...extraTransferCoinOutBytes, ...extraTransferReceiverBytes];\n }\n\n resBytes = [...resBytes, ...bcs.u64().serialize(secretNumber).toBytes()];\n\n return keccak256.array(resBytes);\n}\n\n/**\n * Generates Sui single-chain DCA order transaction\n * @param order The DCA order to generate transaction for\n * @param secretHash The secret hash for the order\n * @param guardAddress The guard contract address\n * @param client The Sui client instance\n * @returns Transaction object for creating the DCA order\n */\nexport async function getSuiSingleChainDcaOrderTransaction(\n order: DcaSingleChainOrder,\n secretHash: Uint8Array,\n guardAddress: string,\n client?: ReturnType<typeof createSuiClient>,\n): Promise<Transaction> {\n const userAddress = order.user;\n const suiClient = client || createSuiClient();\n const totalAmountIn = order.getTotalAmountIn();\n\n const coins = await suiClient.getCoins({\n owner: userAddress,\n coinType: order.tokenIn,\n });\n\n const sourceTokenInCoins = coins.data.sort((a, b) => Number(b.balance) - Number(a.balance));\n\n if (sourceTokenInCoins.length === 0) {\n throw new ValidationError(`No token (${order.tokenIn}) to create order`);\n }\n\n const coinsInSum = sourceTokenInCoins.reduce((acc, coin) => acc + BigInt(coin.balance), 0n);\n\n if (coinsInSum < totalAmountIn) {\n throw new ValidationError(\n `Insufficient balance to create order. Total coins is ${coinsInSum}, but order requires ${totalAmountIn}`,\n );\n }\n\n const spendingGasCoin = normalizeSuiObjectId(order.tokenIn) === normalizeSuiObjectId(NATIVE_SUI_TOKEN_ADDRESS);\n\n const tx = new Transaction();\n const coinInArg = spendingGasCoin ? tx.gas : sourceTokenInCoins[0]!.coinObjectId;\n\n if (sourceTokenInCoins.length > 1) {\n // Merging coins IN into a single object just in case\n tx.mergeCoins(\n // merge into 1st coin object\n coinInArg,\n // merge the rest of coins\n sourceTokenInCoins.slice(1).map((coin) => coin.coinObjectId),\n );\n }\n\n const [coinIn] = tx.splitCoins(coinInArg, [totalAmountIn]);\n\n // Get extra transfer amount - only first extra transfer is supported on Sui\n const extraTransferAmount =\n order.extraTransfers && order.extraTransfers.length > 0 ? BigInt(order.extraTransfers[0]!.amount) : 0n;\n\n tx.moveCall({\n package: SUI_PACKAGE_ID,\n module: 'single_chain_dca_orders',\n function: 'create_dca_order',\n arguments: [\n tx.object(guardAddress), // arg0: &Guard<T0, T2>\n coinIn, // arg1: Coin<T1>\n tx.pure.u64(order.amountInPerInterval), // arg2: amount_in_per_interval\n tx.pure.u64(order.amountOutMin), // arg3: amount_out_min\n tx.pure.u64(extraTransferAmount), // arg4: extra_transfer_amount_out_min\n tx.pure.u64(order.deadline * 1000), // arg5: deadline (converted to milliseconds)\n tx.pure.u32(order.totalIntervals), // arg6: total_intervals\n tx.pure.u64(order.intervalDuration * 1000), // arg7: interval_duration (converted to milliseconds)\n tx.pure.vector('u8', [...secretHash]), // arg8: secret_hash\n tx.object.clock(), // arg9: &Clock\n ],\n typeArguments: [SUI_GUARD_COLLATERAL_TYPE, order.tokenIn, SUI_GUARD_STABLECOIN_TYPE],\n });\n\n tx.setSender(userAddress);\n\n return tx;\n}\n","import { createHash } from 'crypto';\n\n/**\n * Computes the SHA-256 hash the auctioneer expects for cross-chain execution details.\n *\n * The auctioneer recomputes sha256 over the exact `executionDetails` JSON string it\n * receives and rejects the order when it differs (hash mismatch). Callers therefore MUST\n * hash the same serialized string they send on the wire — pass that string here directly\n * instead of re-serializing a parallel object, which is how key-order/field drift creeps in.\n */\nexport function generateExecutionDetailsHash(executionDetails: string): string {\n return '0x' + createHash('sha256').update(executionDetails).digest('hex');\n}\n","import { ChainID } from '../../chains.js';\nimport type {\n SingleChainUserIntentRequest,\n CrossChainUserIntentRequest,\n DcaSingleChainUserIntentRequest,\n} from '../../types/intent.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport type { ExtraTransfer, StopLossType } from '../orders/common.js';\nimport { getSecretHash, getRandomU64Number } from './single-chain-limit-order.js';\nimport { getDcaSecretHash } from './single-chain-dca-order.js';\nimport { generateExecutionDetailsHash } from '../../utils/generate-execution-details-hash.js';\nimport { Parsers } from '../../utils/parsers.js';\n\nexport type CreateSuiSingleChainLimitOrderIntentParams = {\n user: string;\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n transactionHash: string;\n secretNumber?: string;\n takeProfitMinOut?: bigint;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n};\n\nexport type CreateSuiSingleChainDcaOrderIntentParams = {\n user: string;\n tokenIn: string;\n tokenOut: string;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n startTime: number;\n transactionHash: string;\n secretNumber?: string;\n};\n\nexport type CreateSuiCrossChainOrderIntentParams = {\n user: string;\n srcChainId: number;\n tokenIn: string;\n amountIn: bigint;\n minStablecoinsAmount: bigint;\n deadline: number;\n destChainId: number;\n destinationAddress: string;\n tokenOut: string;\n amountOutMin: bigint;\n transactionHash: string;\n takeProfitMinOut?: bigint;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n extraTransfers?: ExtraTransfer[];\n};\n\n/**\n * Creates a Sui single-chain limit order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSuiSingleChainLimitOrderIntentRequest(\n params: CreateSuiSingleChainLimitOrderIntentParams,\n): SingleChainUserIntentRequest {\n const secretNumber = params.secretNumber || getRandomU64Number();\n\n const order: SingleChainOrder = {\n user: params.user,\n chainId: ChainID.Sui,\n amountIn: params.amountIn,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountOutMin: params.amountOutMin,\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n\n takeProfitMinOut: params.takeProfitMinOut,\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n } as SingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n Sui: {\n transactionHash: params.transactionHash,\n secretNumber,\n },\n },\n };\n}\n\n/**\n * Creates a Sui single-chain DCA order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSuiSingleChainDcaOrderIntentRequest(\n params: CreateSuiSingleChainDcaOrderIntentParams,\n): DcaSingleChainUserIntentRequest {\n const secretNumber = params.secretNumber || getRandomU64Number();\n\n const order: DcaSingleChainOrder = {\n user: params.user,\n chainId: ChainID.Sui,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n destinationAddress: params.destinationAddress,\n startTime: params.startTime,\n amountInPerInterval: params.amountInPerInterval,\n totalIntervals: params.totalIntervals,\n intervalDuration: params.intervalDuration,\n amountOutMin: params.amountOutMin,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n } as DcaSingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n Sui: {\n transactionHash: params.transactionHash,\n secretNumber,\n },\n },\n };\n}\n\n/**\n * Creates a Sui cross-chain order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSuiCrossChainOrderIntentRequest(\n params: CreateSuiCrossChainOrderIntentParams,\n): CrossChainUserIntentRequest {\n const executionDetails = {\n destChainId: params.destChainId,\n tokenOut: params.tokenOut,\n amountOutMin: params.amountOutMin.toString(),\n destinationAddress: params.destinationAddress,\n takeProfitMinOut: params.takeProfitMinOut?.toString(),\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n extraTransfers: params.extraTransfers,\n };\n const executionDetailsString = JSON.stringify(executionDetails, Parsers.bigIntReplacer);\n\n // Hash the exact string we send; the auctioneer recomputes sha256 over it and rejects on mismatch\n const executionDetailsHash = generateExecutionDetailsHash(executionDetailsString);\n\n const genericData = {\n user: params.user,\n srcChainId: params.srcChainId,\n tokenIn: params.tokenIn,\n amountIn: params.amountIn,\n minStablecoinsAmount: params.minStablecoinsAmount,\n deadline: params.deadline,\n executionDetailsHash: executionDetailsHash as `0x${string}`,\n extraTransfers: params.extraTransfers,\n };\n\n return {\n genericData,\n executionDetails: executionDetailsString,\n chainSpecificData: {\n Sui: {\n transactionHash: params.transactionHash,\n },\n },\n };\n}\n\n/**\n * Generates secret hash for Sui single-chain limit orders\n * @param tokenOut Output token address\n * @param receiver Receiver address\n * @param secretNumber Secret number (optional, generates random if not provided)\n * @param extraTransfers Extra transfers array\n * @returns Object containing secret number and secret hash\n */\nexport function generateSuiLimitOrderSecretData(\n tokenOut: string,\n receiver: string,\n secretNumber?: string,\n extraTransfers?: ExtraTransfer[],\n): { secretNumber: string; secretHash: Uint8Array } {\n const secret = secretNumber || getRandomU64Number();\n const extraTransferCoinOut = extraTransfers?.[0]?.token;\n const extraTransferReceiver = extraTransfers?.[0]?.receiver;\n\n const secretHash = getSecretHash(tokenOut, receiver, secret, extraTransferCoinOut, extraTransferReceiver);\n\n return {\n secretNumber: secret,\n secretHash: new Uint8Array(secretHash),\n };\n}\n\n/**\n * Generates secret hash for Sui single-chain DCA orders\n * @param tokenOut Output token address\n * @param receiver Receiver address\n * @param secretNumber Secret number (optional, generates random if not provided)\n * @param extraTransfers Extra transfers array\n * @returns Object containing secret number and secret hash\n */\nexport function generateSuiDcaOrderSecretData(\n tokenOut: string,\n receiver: string,\n secretNumber?: string,\n extraTransfers?: ExtraTransfer[],\n): { secretNumber: string; secretHash: Uint8Array } {\n const secret = secretNumber || getRandomU64Number();\n const extraTransferCoinOut = extraTransfers?.[0]?.token;\n const extraTransferReceiver = extraTransfers?.[0]?.receiver;\n\n const secretHash = getDcaSecretHash(tokenOut, receiver, secret, extraTransferCoinOut, extraTransferReceiver);\n\n return {\n secretNumber: secret,\n secretHash: new Uint8Array(secretHash),\n };\n}\n","import { ethers, type TypedDataField, type AddressLike, type BigNumberish, type BytesLike } from 'ethers';\nimport { SignatureTransfer } from '@uniswap/permit2-sdk';\nimport { TransferDataType, type TransferDataStruct } from './types.js';\n\nexport const SingleChainDcaOrderType: Record<string, TypedDataField[]> = {\n SingleChainDcaOrder: [\n { type: 'address', name: 'user' },\n { type: 'address', name: 'tokenIn' },\n { type: 'uint32', name: 'startTime' },\n { type: 'uint256', name: 'amountInPerInterval' },\n { type: 'uint24', name: 'totalIntervals' },\n { type: 'uint32', name: 'intervalDuration' },\n { type: 'TransferData', name: 'requestedOutput' },\n { type: 'TransferData[]', name: 'extraTransfers' },\n { type: 'bytes', name: 'encodedExternalCallData' },\n { type: 'uint32', name: 'deadline' },\n { type: 'uint256', name: 'nonce' },\n ],\n TransferData: TransferDataType.TransferData!,\n};\n\nexport type SingleChainDcaOrderStruct = {\n user: AddressLike;\n tokenIn: AddressLike;\n startTime: BigNumberish;\n amountInPerInterval: BigNumberish;\n totalIntervals: BigNumberish;\n intervalDuration: BigNumberish;\n requestedOutput: TransferDataStruct;\n extraTransfers: TransferDataStruct[];\n encodedExternalCallData: BytesLike;\n deadline: BigNumberish;\n nonce: BigNumberish;\n};\n\n/**\n * Signs Permit2 struct with SingleChainDcaOrder\n */\nexport async function signSingleChainDcaOrder(\n signer: ethers.Wallet,\n order: SingleChainDcaOrderStruct,\n chainId: number,\n guardAddress: string,\n permit2Address: string,\n): Promise<{\n domain: any;\n types: any;\n values: any;\n signature: string;\n}> {\n const amountIn = BigInt(order.totalIntervals) * BigInt(order.amountInPerInterval);\n const permitData = SignatureTransfer.getPermitData(\n {\n permitted: {\n token: order.tokenIn.toString(),\n amount: amountIn,\n },\n spender: guardAddress,\n nonce: order.nonce,\n deadline: order.deadline,\n },\n permit2Address,\n chainId,\n {\n witness: order,\n witnessTypeName: 'SingleChainDcaOrder',\n witnessType: SingleChainDcaOrderType,\n },\n );\n\n return {\n domain: permitData.domain,\n types: permitData.types,\n values: permitData.values,\n signature: await signer.signTypedData(\n {\n name: permitData.domain.name,\n chainId: Number(permitData.domain.chainId),\n verifyingContract: permitData.domain.verifyingContract,\n },\n permitData.types,\n permitData.values,\n ),\n };\n}\n","import type { AddressLike, BigNumberish, TypedDataField } from 'ethers';\n\nexport const TransferDataType: Record<string, TypedDataField[]> = {\n TransferData: [\n { type: 'address', name: 'token' },\n { type: 'address', name: 'receiver' },\n { type: 'uint256', name: 'amount' },\n ],\n};\n\nexport type TransferDataStruct = {\n token: AddressLike;\n receiver: AddressLike;\n amount: BigNumberish;\n};\n","import { ethers, type TypedDataField, type AddressLike, type BigNumberish, type BytesLike } from 'ethers';\nimport { SignatureTransfer } from '@uniswap/permit2-sdk';\nimport { TransferDataType, type TransferDataStruct } from './types.js';\n\nexport const SingleChainLimitOrderType: Record<string, TypedDataField[]> = {\n SingleChainLimitOrder: [\n { type: 'address', name: 'user' },\n { type: 'address', name: 'tokenIn' },\n { type: 'uint256', name: 'amountIn' },\n { type: 'TransferData', name: 'requestedOutput' },\n { type: 'TransferData[]', name: 'extraTransfers' },\n { type: 'bytes', name: 'encodedExternalCallData' },\n { type: 'uint32', name: 'deadline' },\n { type: 'uint256', name: 'nonce' },\n ],\n TransferData: TransferDataType.TransferData!,\n};\n\nexport type SingleChainLimitOrderStruct = {\n user: AddressLike;\n tokenIn: AddressLike;\n amountIn: BigNumberish;\n requestedOutput: TransferDataStruct;\n extraTransfers: TransferDataStruct[];\n encodedExternalCallData: BytesLike;\n deadline: BigNumberish;\n nonce: BigNumberish;\n};\n\n/**\n * Signs Permit2 struct with SingleChainLimitOrder\n */\nexport async function signSingleChainLimitOrder(\n signer: ethers.Wallet,\n order: SingleChainLimitOrderStruct,\n chainId: number,\n guardAddress: string,\n permit2Address: string,\n): Promise<{\n domain: any;\n types: any;\n values: any;\n signature: string;\n}> {\n const permitData = SignatureTransfer.getPermitData(\n {\n permitted: {\n token: order.tokenIn.toString(),\n amount: order.amountIn,\n },\n spender: guardAddress,\n nonce: order.nonce,\n deadline: order.deadline,\n },\n permit2Address,\n chainId,\n {\n witness: order,\n witnessTypeName: 'SingleChainLimitOrder',\n witnessType: SingleChainLimitOrderType,\n },\n );\n\n return {\n domain: permitData.domain,\n types: permitData.types,\n values: permitData.values,\n signature: await signer.signTypedData(\n {\n name: permitData.domain.name,\n chainId: Number(permitData.domain.chainId),\n verifyingContract: permitData.domain.verifyingContract,\n },\n permitData.types,\n permitData.values,\n ),\n };\n}\n","import { BN } from 'bn.js';\nimport { PublicKey } from '@solana/web3.js';\nimport type { ExtraTransfer } from './single-chain-limit-order.js';\nimport pkg from 'js-sha3';\nconst { keccak256 } = pkg;\n/**\n * Generate secret number and prepare secret hash for single chain DCA orders\n * @param tokenOut Token OUT Pubkey\n * @param receiver Token OUT receiver Pubkey\n * @param extraTransfers Requested extra transfers\n */\nexport function prepareDcaSecretData(tokenOut: PublicKey, receiver: PublicKey, extraTransfers: ExtraTransfer[]) {\n const secretNumber = new BN(crypto.getRandomValues(new Uint8Array(8)));\n const secretHash = [\n ...Uint8Array.from(\n Buffer.from(\n keccak256([\n ...tokenOut.toBuffer(),\n ...receiver.toBuffer(),\n ...Buffer.concat(extraTransfers.map((t) => Buffer.concat([t.token.toBuffer(), t.receiver.toBuffer()]))),\n ...secretNumber.toBuffer('le', 8),\n ]),\n 'hex',\n ),\n ),\n ];\n\n return { secretHash, secretNumber };\n}\n","import { BN } from 'bn.js';\nimport { PublicKey } from '@solana/web3.js';\nimport pkg from 'js-sha3';\nconst { keccak256 } = pkg;\n\nexport type ExtraTransfer = {\n token: PublicKey;\n receiver: PublicKey;\n amount: string;\n};\n\n/**\n * Generate secret number and prepare secret hash for single chain limit orders\n * @param tokenOut Token OUT Pubkey\n * @param receiver Token OUT receiver Pubkey\n * @param extraTransfers Requested extra transfers\n */\nexport function prepareSecretData(tokenOut: PublicKey, receiver: PublicKey, extraTransfers: ExtraTransfer[]) {\n const secretNumber = new BN(crypto.getRandomValues(new Uint8Array(8)));\n const secretHash = [\n ...Uint8Array.from(\n Buffer.from(\n keccak256([\n ...tokenOut.toBuffer(),\n ...receiver.toBuffer(),\n ...Buffer.concat(extraTransfers.map((t) => Buffer.concat([t.token.toBuffer(), t.receiver.toBuffer()]))),\n ...secretNumber.toBuffer('le', 8),\n ]),\n 'hex',\n ),\n ),\n ];\n\n return { secretHash, secretNumber };\n}\n\nexport function formatTokenPubkey(token: PublicKey) {\n if (token.equals(new PublicKey('So11111111111111111111111111111111111111111'))) {\n return PublicKey.default;\n }\n\n return token;\n}\n","import { TOKEN_SEARCH_API_BASE_URL } from '../../constants.js';\nimport type { TokenSearchParams, TokenSearchResponse } from '../../types/token-list.js';\n\n/**\n * getTokenList\n *\n * High-level SDK function for token discovery.\n * Supports cancellation via AbortController.\n *\n * Example:\n * ```ts\n * import { getTokenList } from \"@shogun/sdk\";\n *\n * const controller = new AbortController();\n * const res = await getTokenList({ q: \"usdc\", networkId: 8453, signal: controller.signal });\n *\n * To cancel:\n * controller.abort();\n * ```\n */\nexport async function getTokenList(params: TokenSearchParams): Promise<TokenSearchResponse> {\n const url = new URL(`${TOKEN_SEARCH_API_BASE_URL}/tokens/search`);\n\n if (params.q) url.searchParams.append('q', params.q);\n if (params.networkId) url.searchParams.append('networkId', String(params.networkId));\n if (params.page) url.searchParams.append('page', String(params.page));\n if (params.limit) url.searchParams.append('limit', String(params.limit));\n\n const res = await fetch(url.toString(), {\n signal: params.signal,\n });\n\n if (!res.ok) {\n throw new Error(`Failed to fetch tokens: ${res.status} ${res.statusText}`);\n }\n\n return (await res.json()) as TokenSearchResponse;\n}\n","import type { Address, Hex, TypedDataDefinition } from 'viem';\nimport type { SupportedEvmChain } from '../../chains.js';\nimport type {\n SingleChainUserIntentRequest,\n CrossChainUserIntentRequest,\n DcaSingleChainUserIntentRequest,\n DcaCrossChainUserIntentRequest,\n} from '../../types/intent.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport type { ExtraTransfer, StopLossType } from '../orders/common.js';\nimport {\n getEVMCrossChainOrderTypedData,\n getEVMSingleChainOrderTypedData,\n getEVMDcaSingleChainOrderTypedData,\n} from './order-signature.js';\nimport {\n CROSS_CHAIN_DCA_PERMIT2_TYPES,\n PERMIT2_DOMAIN,\n type CrossChainDcaPermitTransferFrom,\n} from './permit2.js';\nimport { EVMIntentProvider } from './intent-provider.js';\nimport { DCA_CROSS_CHAIN_GUARD_ADDRESSES, EVM_ZERO_SIGNATURE } from '../../constants.js';\nimport { generateExecutionDetailsHash } from '../../utils/generate-execution-details-hash.js';\nimport { Parsers } from '../../utils/parsers.js';\n\nexport type CreateEvmSingleChainLimitOrderIntentParams = {\n user: `0x${string}`;\n chainId: SupportedEvmChain;\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n nonce?: string;\n signature?: string;\n takeProfitMinOut?: bigint;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n};\n\nexport type CreateEvmSingleChainDcaOrderIntentParams = {\n user: `0x${string}`;\n chainId: SupportedEvmChain;\n tokenIn: string;\n tokenOut: string;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n startTime: number;\n nonce?: string;\n signature?: string;\n};\n\nexport type CreateEvmCrossChainOrderIntentParams = {\n user: `0x${string}`;\n sourceChainId: SupportedEvmChain;\n sourceTokenAddress: string;\n sourceTokenAmount: bigint;\n destinationChainId: number;\n destinationTokenAddress: string;\n destinationTokenMinAmount?: bigint;\n destinationAddress: string;\n minStablecoinAmount?: bigint;\n deadline: number;\n extraTransfers?: ExtraTransfer[];\n nonce?: string;\n signature?: string;\n takeProfitMinOut?: bigint;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n};\n\n/**\n * Creates an EVM single-chain limit order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createEvmSingleChainLimitOrderIntentRequest(\n params: CreateEvmSingleChainLimitOrderIntentParams,\n): SingleChainUserIntentRequest {\n const order: SingleChainOrder = {\n user: params.user,\n chainId: params.chainId,\n amountIn: params.amountIn,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountOutMin: params.amountOutMin,\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n takeProfitMinOut: params.takeProfitMinOut,\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n } as SingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n EVM: {\n nonce: params.nonce || String(Math.floor(Math.random() * 10000000)),\n signature: params.signature || EVM_ZERO_SIGNATURE,\n },\n },\n };\n}\n\n/**\n * Creates an EVM single-chain DCA order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createEvmSingleChainDcaOrderIntentRequest(\n params: CreateEvmSingleChainDcaOrderIntentParams,\n): DcaSingleChainUserIntentRequest {\n const order: DcaSingleChainOrder = {\n user: params.user,\n chainId: params.chainId,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n destinationAddress: params.destinationAddress,\n startTime: params.startTime,\n amountInPerInterval: params.amountInPerInterval,\n totalIntervals: params.totalIntervals,\n intervalDuration: params.intervalDuration,\n amountOutMin: params.amountOutMin,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n } as DcaSingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n EVM: {\n nonce: params.nonce || String(Math.floor(Math.random() * 10000000)),\n signature: params.signature || EVM_ZERO_SIGNATURE,\n },\n },\n };\n}\n\n/**\n * Creates an EVM cross-chain order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createEvmCrossChainOrderIntentRequest(\n params: CreateEvmCrossChainOrderIntentParams,\n): CrossChainUserIntentRequest {\n const executionDetails = {\n destChainId: params.destinationChainId,\n tokenOut: params.destinationTokenAddress,\n amountOutMin: params.destinationTokenMinAmount?.toString() || '1',\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n takeProfitMinOut: params.takeProfitMinOut?.toString(),\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n };\n const executionDetailsString = JSON.stringify(executionDetails, Parsers.bigIntReplacer);\n\n // Hash the exact string we send; the auctioneer recomputes sha256 over it and rejects on mismatch\n const executionDetailsHash = generateExecutionDetailsHash(executionDetailsString);\n\n const genericData = {\n user: params.user,\n srcChainId: params.sourceChainId,\n tokenIn: params.sourceTokenAddress,\n amountIn: params.sourceTokenAmount,\n minStablecoinsAmount: params.minStablecoinAmount || 1n,\n deadline: params.deadline,\n executionDetailsHash: executionDetailsHash as `0x${string}`,\n extraTransfers: params.extraTransfers,\n };\n\n return {\n genericData,\n executionDetails: executionDetailsString,\n chainSpecificData: {\n EVM: {\n nonce: params.nonce || String(Math.floor(Math.random() * 10000000)),\n signature: params.signature || EVM_ZERO_SIGNATURE,\n },\n },\n };\n}\n\n/**\n * Generates EVM typed data and nonce for single-chain limit orders\n * @param order The single-chain order\n * @returns Object containing typed data and nonce for signing\n */\nexport async function generateEvmSingleChainLimitOrderTypedData(order: SingleChainOrder) {\n return getEVMSingleChainOrderTypedData(order);\n}\n\n/**\n * Generates EVM typed data and nonce for single-chain DCA orders\n * @param order The DCA order\n * @returns Object containing typed data and nonce for signing\n */\nexport async function generateEvmSingleChainDcaOrderTypedData(order: DcaSingleChainOrder) {\n return getEVMDcaSingleChainOrderTypedData(order);\n}\n\n/**\n * Generates EVM typed data and nonce for cross-chain orders\n * @param order The cross-chain order\n * @returns Object containing typed data and nonce for signing\n */\nexport async function generateEvmCrossChainOrderTypedData(order: CrossChainOrder) {\n return getEVMCrossChainOrderTypedData(order);\n}\n\n/**\n * Generates a random nonce for EVM orders\n * @returns Random nonce as string\n */\nexport function generateEvmRandomNonce(): string {\n return String(Math.floor(Math.random() * 10000000));\n}\n\nexport type CreateEvmCrossChainDcaOrderIntentParams = {\n user: `0x${string}`;\n sourceChainId: SupportedEvmChain;\n sourceTokenAddress: string;\n destinationChainId: number;\n destinationTokenAddress: string;\n destinationTokenMinAmount?: bigint;\n destinationAddress: string;\n minStablecoinAmount?: bigint;\n deadline: number;\n startTime: number;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n extraTransfers?: ExtraTransfer[];\n nonce?: string;\n signature?: string;\n};\n\n/**\n * Builds the cross-chain DCA execution-details string and its SHA-256 hash.\n * Both the wire payload and the EIP-712 witness must reference the SAME string/hash, so this\n * is the single source of truth — the auctioneer recomputes sha256 over the string it receives.\n */\nfunction buildCrossChainDcaExecutionDetails(params: CreateEvmCrossChainDcaOrderIntentParams): {\n executionDetailsString: string;\n executionDetailsHash: string;\n} {\n const executionDetails = {\n destChainId: params.destinationChainId,\n tokenOut: params.destinationTokenAddress,\n amountOutMin: params.destinationTokenMinAmount?.toString() || '1',\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n };\n const executionDetailsString = JSON.stringify(executionDetails, Parsers.bigIntReplacer);\n return { executionDetailsString, executionDetailsHash: generateExecutionDetailsHash(executionDetailsString) };\n}\n\n/**\n * Creates an EVM cross-chain DCA order intent request, ready to POST to\n * `/user_intent/cross_chain/dca_order`. Pass `nonce`/`signature` from\n * {@link getEVMCrossChainDcaOrderTypedData} for an executable order.\n */\nexport function createEvmCrossChainDcaOrderIntentRequest(\n params: CreateEvmCrossChainDcaOrderIntentParams,\n): DcaCrossChainUserIntentRequest {\n const { executionDetailsString, executionDetailsHash } = buildCrossChainDcaExecutionDetails(params);\n\n return {\n genericData: {\n user: params.user,\n srcChainId: params.sourceChainId,\n tokenIn: params.sourceTokenAddress,\n minStablecoinsAmount: params.minStablecoinAmount || 1n,\n deadline: params.deadline,\n executionDetailsHash: executionDetailsHash as `0x${string}`,\n startTime: params.startTime,\n amountInPerInterval: params.amountInPerInterval,\n totalIntervals: params.totalIntervals,\n intervalDuration: params.intervalDuration,\n },\n executionDetails: executionDetailsString,\n chainSpecificData: {\n EVM: {\n nonce: params.nonce || generateEvmRandomNonce(),\n signature: params.signature || EVM_ZERO_SIGNATURE,\n },\n },\n };\n}\n\n/**\n * Generates the EIP-712 typed data (and nonce) for a cross-chain DCA order's Permit2 witness.\n * Sign `orderTypedData`, then pass the resulting `nonce`/`signature` into\n * {@link createEvmCrossChainDcaOrderIntentRequest} — both share the same execution-details hash.\n */\nexport function getEVMCrossChainDcaOrderTypedData(\n params: CreateEvmCrossChainDcaOrderIntentParams,\n providedNonce?: bigint,\n): { orderTypedData: TypedDataDefinition; nonce: bigint } {\n const { executionDetailsHash } = buildCrossChainDcaExecutionDetails(params);\n const nonce = providedNonce ?? EVMIntentProvider.getRandomNonce();\n const totalAmountIn = params.amountInPerInterval * BigInt(params.totalIntervals);\n const spender = DCA_CROSS_CHAIN_GUARD_ADDRESSES[params.sourceChainId] as Address;\n\n const message: CrossChainDcaPermitTransferFrom = {\n permitted: { token: params.sourceTokenAddress as Address, amount: totalAmountIn },\n spender,\n nonce,\n deadline: BigInt(params.deadline),\n witness: {\n user: params.user as Address,\n tokenIn: params.sourceTokenAddress as Address,\n srcChainId: params.sourceChainId,\n startTime: params.startTime,\n deadline: params.deadline,\n totalIntervals: params.totalIntervals,\n intervalDuration: params.intervalDuration,\n amountInPerInterval: params.amountInPerInterval,\n minStablecoinsAmountPerInterval: params.minStablecoinAmount || 1n,\n executionDetailsHash: executionDetailsHash as Hex,\n nonce,\n },\n };\n\n return {\n orderTypedData: {\n domain: PERMIT2_DOMAIN(params.sourceChainId),\n types: CROSS_CHAIN_DCA_PERMIT2_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message,\n },\n nonce,\n };\n}\n","import { ChainID } from '../../chains.js';\nimport type {\n SingleChainUserIntentRequest,\n CrossChainUserIntentRequest,\n DcaSingleChainUserIntentRequest,\n} from '../../types/intent.js';\nimport type { SingleChainOrder } from '../orders/single-chain.js';\nimport type { CrossChainOrder } from '../orders/cross-chain.js';\nimport type { DcaSingleChainOrder } from '../orders/dca-single-chain.js';\nimport type { ExtraTransfer, StopLossType } from '../orders/common.js';\nimport { getSolanaCrossChainOrderInstructions, getSolanaSingleChainOrderInstructions } from './order-instructions.js';\nimport { getSolanaDcaSingleChainOrderInstructions } from './dca/create-order.js';\nimport { prepareDcaSecretData } from './dca/single-chain-dca-order.js';\nimport { prepareSecretData } from './dca/single-chain-limit-order.js';\nimport { generateExecutionDetailsHash } from '../../utils/generate-execution-details-hash.js';\nimport { Parsers } from '../../utils/parsers.js';\n\nexport type CreateSolanaSingleChainLimitOrderIntentParams = {\n user: string;\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n orderPubkey?: string;\n secretNumber?: string;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n takeProfitMinOut?: bigint;\n};\n\nexport type CreateSolanaSingleChainDcaOrderIntentParams = {\n user: string;\n tokenIn: string;\n tokenOut: string;\n amountInPerInterval: bigint;\n totalIntervals: number;\n intervalDuration: number;\n amountOutMin: bigint;\n destinationAddress: string;\n extraTransfers?: ExtraTransfer[];\n deadline: number;\n startTime: number;\n orderPubkey?: string;\n secretNumber?: string;\n};\n\nexport type CreateSolanaCrossChainOrderIntentParams = {\n user: string;\n sourceChainId: number;\n sourceTokenAddress: string;\n sourceTokenAmount: bigint;\n destinationChainId: number;\n destinationTokenAddress: string;\n destinationTokenMinAmount?: bigint;\n destinationAddress: string;\n minStablecoinAmount?: bigint;\n deadline: number;\n extraTransfers?: ExtraTransfer[];\n orderPubkey?: string;\n stopLossType?: StopLossType;\n stopLossTriggerPrice?: string;\n takeProfitMinOut?: bigint;\n};\n\n/**\n * Creates a Solana single-chain limit order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSolanaSingleChainLimitOrderIntentRequest(\n params: CreateSolanaSingleChainLimitOrderIntentParams,\n): SingleChainUserIntentRequest {\n const secretNumber = params.secretNumber || generateSolanaRandomSecretNumber();\n\n const order: SingleChainOrder = {\n user: params.user,\n chainId: ChainID.Solana,\n amountIn: params.amountIn,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountOutMin: params.amountOutMin,\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n takeProfitMinOut: params.takeProfitMinOut,\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n } as SingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n Solana: {\n secretNumber,\n orderPubkey: params.orderPubkey || 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc',\n },\n },\n };\n}\n\n/**\n * Creates a Solana single-chain DCA order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSolanaSingleChainDcaOrderIntentRequest(\n params: CreateSolanaSingleChainDcaOrderIntentParams,\n): DcaSingleChainUserIntentRequest {\n const secretNumber = params.secretNumber || generateSolanaRandomSecretNumber();\n\n const order: DcaSingleChainOrder = {\n user: params.user,\n chainId: ChainID.Solana,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n destinationAddress: params.destinationAddress,\n startTime: params.startTime,\n amountInPerInterval: params.amountInPerInterval,\n totalIntervals: params.totalIntervals,\n intervalDuration: params.intervalDuration,\n amountOutMin: params.amountOutMin,\n extraTransfers: params.extraTransfers,\n deadline: params.deadline,\n } as DcaSingleChainOrder;\n\n return {\n genericData: order,\n chainSpecificData: {\n Solana: {\n secretNumber,\n orderPubkey: params.orderPubkey || 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc',\n },\n },\n };\n}\n\n/**\n * Creates a Solana cross-chain order intent request\n * @param params Parameters for creating the intent request\n * @returns Formatted intent request ready to send to auctioneer\n */\nexport function createSolanaCrossChainOrderIntentRequest(\n params: CreateSolanaCrossChainOrderIntentParams,\n): CrossChainUserIntentRequest {\n const executionDetails = {\n destChainId: params.destinationChainId,\n tokenOut: params.destinationTokenAddress,\n amountOutMin: params.destinationTokenMinAmount?.toString() || '1',\n destinationAddress: params.destinationAddress,\n extraTransfers: params.extraTransfers,\n stopLossType: params.stopLossType,\n stopLossTriggerPrice: params.stopLossTriggerPrice,\n takeProfitMinOut: params.takeProfitMinOut?.toString(),\n };\n const executionDetailsString = JSON.stringify(executionDetails, Parsers.bigIntReplacer);\n\n // Hash the exact string we send; the auctioneer recomputes sha256 over it and rejects on mismatch\n const executionDetailsHash = generateExecutionDetailsHash(executionDetailsString);\n\n const genericData = {\n user: params.user,\n srcChainId: params.sourceChainId,\n tokenIn: params.sourceTokenAddress,\n amountIn: params.sourceTokenAmount,\n minStablecoinsAmount: params.minStablecoinAmount || 1n,\n deadline: params.deadline,\n executionDetailsHash: executionDetailsHash as `0x${string}`,\n extraTransfers: params.extraTransfers,\n };\n\n return {\n genericData,\n executionDetails: executionDetailsString,\n chainSpecificData: {\n Solana: {\n orderPubkey: params.orderPubkey || 'DFNAjFAvS4GF98Tp1kiyLvEHM3wjGXibCfF86nnmhuVc',\n },\n },\n };\n}\n\n/**\n * Generates instruction bytes for Solana single-chain limit orders\n * @param order The single-chain order\n * @returns Promise resolving to instruction bytes\n */\nexport async function generateSolanaSingleChainLimitOrderInstructions(order: SingleChainOrder) {\n return getSolanaSingleChainOrderInstructions(order);\n}\n\n/**\n * Generates instruction bytes for Solana single-chain DCA orders\n * @param order The DCA order\n * @returns Promise resolving to instruction bytes\n */\nexport async function generateSolanaSingleChainDcaOrderInstructions(order: DcaSingleChainOrder) {\n return getSolanaDcaSingleChainOrderInstructions(order);\n}\n\n/**\n * Generates instruction bytes for Solana cross-chain orders\n * @param order The cross-chain order\n * @returns Promise resolving to instruction bytes\n */\nexport async function generateSolanaCrossChainOrderInstructions(order: CrossChainOrder) {\n return getSolanaCrossChainOrderInstructions(order);\n}\n\n/**\n * Generates secret data for Solana single-chain limit orders\n * @param tokenOut Output token mint address\n * @param receiver Receiver public key\n * @param secretNumber Secret number (optional, generates random if not provided)\n * @param extraTransfers Extra transfers array\n * @returns Object containing secret number and prepared secret data\n */\nexport function generateSolanaLimitOrderSecretData(\n tokenOut: string,\n receiver: string,\n secretNumber?: string,\n extraTransfers?: ExtraTransfer[],\n): { secretNumber: string; secretData: any } {\n const secret = secretNumber || generateSolanaRandomSecretNumber();\n\n const { PublicKey } = require('@solana/web3.js');\n const secretData = prepareSecretData(\n new PublicKey(tokenOut),\n new PublicKey(receiver),\n extraTransfers?.map((t) => ({\n token: new PublicKey(t.token),\n receiver: new PublicKey(t.receiver),\n amount: t.amount.toString(),\n })) || [],\n );\n\n return {\n secretNumber: secret,\n secretData,\n };\n}\n\n/**\n * Generates secret data for Solana single-chain DCA orders\n * @param tokenOut Output token mint address\n * @param receiver Receiver public key\n * @param secretNumber Secret number (optional, generates random if not provided)\n * @param extraTransfers Extra transfers array\n * @returns Object containing secret number and prepared secret data\n */\nexport function generateSolanaDcaOrderSecretData(\n tokenOut: string,\n receiver: string,\n secretNumber?: string,\n extraTransfers?: ExtraTransfer[],\n): { secretNumber: string; secretData: any } {\n const secret = secretNumber || generateSolanaRandomSecretNumber();\n\n const { PublicKey } = require('@solana/web3.js');\n const secretData = prepareDcaSecretData(\n new PublicKey(tokenOut),\n new PublicKey(receiver),\n extraTransfers?.map((t) => ({\n token: new PublicKey(t.token),\n receiver: new PublicKey(t.receiver),\n amount: t.amount.toString(),\n })) || [],\n );\n\n return {\n secretNumber: secret,\n secretData,\n };\n}\n\n/**\n * Generates a random secret number for Solana orders\n * @returns Random secret number as string\n */\nexport function generateSolanaRandomSecretNumber(): string {\n return String(Math.floor(Math.random() * 10000000));\n}\n"],"mappings":"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","names":["ChainType","ChainID","IntentsOrderType","import_client","import_utils","import_transactions","import_js_sha3","pkg","import_viem","address","import_viem","import_viem","address","address","isEvmAddress","import_kit","address","isSolanaAddress","address","import_viem","Parsers","import_viem","import_viem","import_kit","import_kit","import_accounts","address","import_addresses","import_codecs","import_addresses","kitIsTransactionSigner","import_addresses","import_codecs","import_instructions","import_signers","import_addresses","import_codecs","import_instructions","import_signers","import_accounts","import_addresses","import_codecs","address","import_accounts","import_addresses","import_codecs","address","import_addresses","import_codecs","import_addresses","import_instructions","import_signers","expectAddress","getAccountMetaFactory","expectAddress","isTransactionSigner","kitIsTransactionSigner","import_addresses","import_codecs","import_instructions","import_signers","getAccountMetaFactory","import_addresses","import_codecs","import_instructions","import_signers","getAccountMetaFactory","import_addresses","import_codecs","import_instructions","import_signers","expectAddress","getAccountMetaFactory","import_addresses","import_codecs","import_instructions","import_signers","expectAddress","getAccountMetaFactory","BN","sha3","import_utils","import_api","import_viem","import_viem","import_web3","import_bn","BN","import_kit","import_kit","import_kit","import_token","_","compareAddresses","address","compareAddresses","compareAddresses","getSuiSingleChainLimitOrderTransaction","import_kit","import_token","import_system","import_accounts","import_viem","import_kit","import_kit","import_token","collateralTokenMint","collateralTokenMintProgram","import_viem","import_kit","import_token","import_transactions","import_viem","import_kit","import_bcs","import_utils","import_transactions","import_js_sha3","keccak256","pkg","import_ethers","import_permit2_sdk","import_bn","import_web3","import_js_sha3","keccak256","pkg","import_bn","import_web3","import_js_sha3","keccak256","pkg","PublicKey"]}
|