# Transfer

`TransferTaker` implementation of taker provides an ability to take available asset from pool *after* giving asset on another chains though. The give operation is performed via `TransferGiver` contract, that emits `TransferGive` event that is verified by the taker.

> `TransferTaker` keep record of already `taken` operation so double-takes are not possible. The records are per take asset `receiver` (i.e. taker's `caller`) and `nonce`.
>
> Managing `nonce`s is `receiver`'s responsibility and should be done with *caution*. Sending asset via *two or more* `give` (or `giveHold`) functions with *the same* `takeChain`, `takeReceiver` and `takeNonce` params will result in only *one* take possible (since subsequent ones will be blocked after the record of a first one).

### Relief Giver

There is another variant of `TransferGiver`: `TransferReliefGiver`. It works similarly to the original one, except it's aware of its `IExtraRelief`-capable tuner (such as `ElasticTuner`). After providing asset to pool, the giver collects *possible* surplus assets for the rebalance-beneficial action and sends them back to the caller.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.swaps.io/flex-liquidity-pools/takers/transfer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
