# Contract Audit Funding: TimelockNFTSwapper

## TLDR

Asking for 8,000 USDC to fund an audit conducted by [0x52](https://twitter.com/iam0x52) of the [TimelockNFTSwapper](https://github.com/papercliplabs/noun-swap/blob/main/contracts/src/TimelockNFTSwapper.sol) contract.

## Context

Feedback from NounSwap v1 proposals ([453](https://www.nouns.camp/proposals/453), [454](https://www.nouns.camp/proposals/454), [541](https://www.nouns.camp/proposals/541), [566](https://www.nouns.camp/proposals/566), [571](https://www.nouns.camp/proposals/571)) highlighted that Nouners felt that voting on each swap proposal created voter fatigue and preferred a model that does not rely on governance. To solve this, we built the TimelockNFTSwapper contract to enable permissionless swaps.

## TimelockNFTSwapper

The TimelockNFTSwapper is a generalized, non-upgradable contract that is a public good that can be deployed by any DAO. In the context of Nouns, it introduces:

1. **Permissionless Swapping:** Enables swapping of treasury Nouns without individual proposals, avoiding governance fatigue, and saving time and gas fees. 
2. **New Revenue Source:** Each swap incurs a fee directed to the DAO based on a price curve outlined in the section below.  
3. **Timelock Mechanism:** A two-step process with a timelock to prevents misuse and interference with Nouns governance. 

For more information, please refer to the detailed [spec document](https://github.com/papercliplabs/noun-swap/blob/main/contracts/specs/TimelockNFTSwapper/TimelockNFTSwapperSpec.md) and [implementation](https://github.com/papercliplabs/noun-swap/blob/main/contracts/src/TimelockNFTSwapper.sol).

## Swap Price Curve

The swap price is based on the difference between the input and output Noun ID’s, and is determined by the *swapPriceCurveBase* and *swapPriceCurveSlope* which are DAO configurable. We will work with the community to select agreeable parameters before deployment. 

Curve:

```
ageDiff = inputTokenId - outputTokenId
price = swapPriceCurveBase + swapPriceCurveSlope * max(0, ageDiff)
```

Here are some examples of how this looks with a few different parameter sets:

![image](https://hackmd.io/_uploads/S1d8DVQdR.png)

This pricing model is a compromise between fixed pricing (which is possible by setting the slope to 0), and auction based price discovery. Auction based price discovery adds significant contract complexity, and we feel there won't be sufficient demand to have this play out in practice.

## Audit Plan

We plan to undergo a 3 day audit by [0x52](https://twitter.com/iam0x52). The audit will ensure the security and functionality of the TimelockNFTSwapper contract.

We have reserved an audit spot for July 26, pending this proposal's approval.

## Next Steps

Once we receive the audit results, and review/implement any necessary fixes, we will:

1. Deploy the TimelockNFTSwapper for Nouns. 
2. Create another proposal to approve this deployment for all treasury Nouns which will enable permissionless swapping. 

## Transactions

Similar to the [Verbs Client Incentive Audit Proposal](https://www.nouns.camp/proposals/505), this proposal's single transaction approves the Paperclip Labs multisig to spend the requested budget. 

## Conclusion

TimelockNFTSwapper enables permissionless swapping, and unlocks a new revenue stream for the DAO. It allows Nouners to acquire their "forever Noun", which will help increase DAO satisfaction and engagement. We appreciate the community consideration in reviewing this proposal, and hope we can move forward with the audit.

## Team

- [Spencer Perkins](https://warpcast.com/spencerperkins.eth) - Co-Founder at Paperclip Labs 
- [Cole Perkins](https://warpcast.com/coleperkins) - Co-Founder at Paperclip Labs 
- [Michael Gingras](https://warpcast.com/frog) - Engineer at Agora

Outcome: DEFEATED