# Order Delegation

For DAOs, whales, and other investors who want to take a sizable position in an asset, long-term TWAMM trades offer a convenient solution. However, unlike OTC desks that offer white glove services to ensure proper fill, V1: TWAMM requires a more hands-on approach.

Some long-term traders might not have time to monitor a long-term trade and take action if needed. The solution to this problem is order delegation, where a third party is able to cancel orders or withdraw proceeds to your account on your behalf.

{% embed url="<https://twitter.com/iamDCinvestor/status/1600489122153611266>" %}

### Properties

Order delegation permits the owner account of a long-term trade to designate a delegate account for each long-term trade when it is placed. It is impossible to change a delegate once a long-term trade is placed; the only way to remove a delegate account from an order is to cancel the order.

The delegated account is able to perform the following operations on the long-term trade on behalf of the owner account:

* Cancel the long-term trade, refund unsold tokens, and proceed tokens to the owner account.
* Withdraw proceeds to the order account from the long-term trade, during the trade, and until the order expiry and all funds are withdrawn.

{% hint style="info" %}
All funds canceled or withdrawn by the delegate account can only be sent to the long-term order owner account.&#x20;
{% endhint %}

Any attempt to set the long-term order withdrawal or cancel the recipient address to anything but the owner account by delegate results in the transaction reverting.

### Applications

#### Reducing Governance Effort&#x20;

For a DAO placing a long-term order, re-assembling the DAO to vote on whether to cancel the order for a current market condition or to withdraw funds for an expense is a costly proposition in both time and effort. If at the outset of the order, the DAO sets conditions under which the order is to be canceled or funds are withdrawn, a delegate account (treasury managers) may be specified to meet these responsibilities, saving the DAO from having to meet and vote on taking an action and the responsible party.

{% embed url="<https://twitter.com/koheingt/status/1597998143505076226>" %}

#### Automation: Limit Order, Streaming&#x20;

Another application might be assigning a delegate account to automation that watches for certain market conditions under which to cancel the order -- a limit order. Alternatively, the automation can be used to stream withdrawals of proceeds periodically, enabling other users of capital, rather than parking it in the TWAMM pool.

{% embed url="<https://twitter.com/cburniske/status/1525906152881459200>" %}

### How to use

Consider a DAO, with an account *`0xDAO`*, placing a long-term swap selling 1M Token A to a TWAMM pool over 1000 intervals. The DAO wishes to specify a delegate account, *`0xDelegate`*. The code below shows how to perform this swap by calling the TWAMM periphery relayer:

```solidity
(, uint256 orderId) = ICronV1Relayer(0xRelayerAddress).longTermSwap(
  0xTokenA,                             // Token In:  Token A address
  0xTokenB,                             // Token Out: Token B address
  ICronV1PoolEnums.PoolType.Stable,     // Pool type
  1_000_000_000_000_000_000_000_000,    // 1M Token In (18 decimals)
  1_000,                                // 1k Intervals
  0xDelegate
)


// Now if the delegate account wishes to cancel the order, 
// they might issue code like this:

ICronV1Relayer(0xRelayerAddress).cancel(
  0xTokenA,                             // Token In Token A address
  0xTokenB,                             // Token Out: Token B address
  ICronV1PoolEnums.PoolType.Stable,     // Pool type
  orderId,                              // Long-term swap order id from the above code snippet
  0xDAO                                 // Recipient of proceeds and refund. Can only be
	                                // the original owner account.
)
```
