> For the complete documentation index, see [llms.txt](https://docs.swaps.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.swaps.io/flex-liquidity-pools/takers/1inch-fusion+.md).

# 1inch Fusion+

`FusionTaker` implementation of taker provides an ability to take asset using [1inch Fusion+](https://portal.1inch.dev/documentation/apis/swap/fusion-plus/introduction) protocol.

The taker comes with `FusionGiver` contract that serves as starting point of the take process. First, solver calls `fillOrder` contract function, that has the same parameters as the one in `IOrderMixin` interface of Limit Order Protocol. The order must contain post-interaction to deploy `EscrowSrc` via escrow factory with pool asset deposit to it from the maker. The `FusionGiver` becomes 1inch taker of the order, providing the *original* taker with `IEscrowSrc` required functionality - withdraw, cancel, rescue (calls should be to the `FusionGiver` contract). Public phases can be called directly on the escrow contract.

Once source escrow is created, the solver obtains proof of `SrcEscrowCreated` event and calls the `take` function of the pool with `FusionTaker` as `taker` and corresponding `takerData`. After validation, `EscrowDst` deploy is called on factory with `FusionTaker` assigned as 1inch order taker. Pool asset is transferred then to the escrow contract.

Then the order proceeds according to the 1inch Fusion+ protocol. On success, the maker asset in source chain is transferred to the pool (transiting though `FusionGiver` contract if it's a *public* withdraw), on cancel - back to the maker. On destination chain, cancellation returns asset back to pool (possibly though `FusionTaker`), on success - to a specified receiver.
