Skip to content

Commit

Permalink
quick n dirty guide on subscribers
Browse files Browse the repository at this point in the history
  • Loading branch information
saucepoint committed Sep 18, 2024
1 parent 84403e3 commit 5c18f62
Showing 1 changed file with 41 additions and 3 deletions.
44 changes: 41 additions & 3 deletions docs/contracts/v4/guides/05-subscriber.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,46 @@
title: Subscriber
---

(TODO: explain ISubscriber)
# Context

(TODO: unsubscribe gas limit)
For developers looking to support custom _liquidity mining_, subscriber contracts receive notifications about a position.
Rewards can be issued proportional to the liquidity's fee revenue, without the need of custodying the position.

(TODO: explain how LP tokens need to subscribe)
---

# Guide

## 1. Inherit `ISubscriber`

Please see [`ISubscriber`](https://github.com/Uniswap/v4-periphery/blob/main/src/interfaces/ISubscriber.sol) for the interface definition

```solidity
import {ISubscriber} from "v4-periphery/src/interfaces/ISubscriber.sol";
contract MySubscriber is ISubscriber {
// Implement the ISubscriber interface
}
```

Developers should implement each function, and do proper accounting for rewards -- rewards should be proportional
to a position's liquidity or fee-revenue.

## 2. A note on `unsubscribe()`

Unsubscribe has a gas limit to prevent griefing. The value is determined at deployment, and is readable via `unsubscribeGasLimit()` on `PositionManager`

If `notifyUnsubscribe()` reverts, the position will still successfully unsubscribe.

## 3. Opt-in to a subscriber contract

To opt-in to a subscriber contract, call `subscribe()` on the `PositionManager` contract.

```solidity
import {IPositionManager} from "v4-periphery/src/interfaces/IPositionManager.sol";
IPositionManager posm = IPositionManager(<address>);
ISubscriber mySubscriber = ISubscriber(<address>);
bytes memory optionalData = ...;
posm.subscribe(tokenId, mySubscriber, optionalData);
```

0 comments on commit 5c18f62

Please sign in to comment.