# Protocol Interactions

There are five main contract interactions in the RARA protocol:&#x20;

* Comment/React on a NFT
* Sell Curator Tokens&#x20;
* Register an NFT for use as a reaction&#x20;
* Withdraw Royalties&#x20;
* Withdraw Taker Rewards&#x20;

### Comment/React to an NFT&#x20;

The main interaction in the RARA protocol is reacting to NFTs. This is a two-step process: 1) buying reactions using USDC, and 2) spending reactions. When a reaction is spent the underlying USDC is moved into the curated NFT’s bonding curve and the user is issued CuratorVault tokens.

* Contract Source Code: [ReactionVault](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol)
* ABI: [ReactionVault.json](https://github.com/rara-social/rara-protocol/blob/main/deployments/polygon/ReactionVault.json)&#x20;
* Chain: Polygon (137)&#x20;
* Deployed Address: [0xE5BA5c73378BC8Da94738CB04490680ae3eab88C](https://polygonscan.com/address/0xE5BA5c73378BC8Da94738CB04490680ae3eab88C)
* Functions&#x20;
  * [buyReaction()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol#L115-L138)
  * [spendReaction()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol#L348-L379)
  * [react()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol#L575-L626)

### Sell Curator Tokens

Users can redeem curator tokens for USDC.

* Contract Source Code: [SigmoidCuratorVault](https://github.com/rara-social/rara-protocol/blob/main/contracts/SigmoidCuratorVault/SigmoidCuratorVault.sol)&#x20;
* ABI: [SigmoidCuratorVault.json](https://github.com/rara-social/rara-protocol/blob/main/deployments/polygon/SigmoidCuratorVault.json)&#x20;
* Chain: Polygon (137)&#x20;
* Deployed Address: [0x7D278Aa2d95ABa7C969c9F316be6f0cFE0D18A50](https://polygonscan.com/address/0x7D278Aa2d95ABa7C969c9F316be6f0cFE0D18A50)&#x20;
* Functions&#x20;
  * [sellCuratorTokens()](https://github.com/rara-social/rara-protocol/blob/main/contracts/SigmoidCuratorVault/SigmoidCuratorVault.sol#L175-L220)&#x20;

### Register an NFT to use as a Reaction

NFTs owners can register their NFTs to be sold as Reactions. The MakerRegistrar contract will attempt to use the royalty registry contracts (EIP2981) to honor creator royalties. The MakerRegistrar contract registerNFT function also includes optional parameters to set creator addresses and royalty amounts; these values will be used if the NFT is not present in the royalty registry.

Polygon NFT’s:&#x20;

* Contract Source Code: [MakerRegistrar](https://github.com/rara-social/rara-protocol/blob/main/contracts/Maker/MakerRegistrar.sol)&#x20;
* ABI: [MakerRegistrar.json](https://github.com/rara-social/rara-protocol/blob/main/deployments/polygon/MakerRegistrar.json)&#x20;
* Chain: Polygon (137)&#x20;
* Deployed Address: [0x47CD3266FA94E40613B37a88D98196325Cd28412](https://polygonscan.com/address/0x47CD3266FA94E40613B37a88D98196325Cd28412)&#x20;
* Functions&#x20;
  * [registerNFT()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Maker/MakerRegistrar.sol#L78-L116)&#x20;
  * [deregisterNFT()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Maker/MakerRegistrar.sol#L217-L232)

Ethereum Mainnet NFT’s:&#x20;

* Contract Source Code: [RootRegistrar](https://github.com/rara-social/rara-protocol/blob/main/contracts/Bridge/RootRegistrar.sol)&#x20;
* ABI: [RootRegistrar.json ](https://github.com/rara-social/rara-protocol/blob/main/deployments/mainnet/RootRegistrar.json)
* Chain: Ethereum Mainnet (1)&#x20;
* Deployed Address: [0x2665Aa3846EC61e6D28A0d9F76b70047719F3664](https://etherscan.io/address/0x2665aa3846ec61e6d28a0d9f76b70047719f3664)&#x20;
* Functions&#x20;
  * [registerNFT()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Bridge/RootRegistrar.sol#L43-L91)&#x20;
  * [deregisterNFT()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Bridge/RootRegistrar.sol#L93-L113)&#x20;

### Withdraw Royalties&#x20;

Royalties are generated by protocol activity. There are three types of royalties: “Maker rewards” are paid to the owner of the reaction when a reaction is sold, “Creator rewards” which are paid to the creator of the reaction when a reaction is sold, and “Referrer rewards”, which are paid to the referrer of the transaction when a reaction is sold or spent.

* Contract Source Code: [ReactionVault](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol)&#x20;
* ABI: [ReactionVault.json](https://github.com/rara-social/rara-protocol/blob/main/deployments/polygon/ReactionVault.json)&#x20;
* Chain: Polygon (137)&#x20;
* Deployed Address: [0xE5BA5c73378BC8Da94738CB04490680ae3eab88C](https://polygonscan.com/address/0xE5BA5c73378BC8Da94738CB04490680ae3eab88C)&#x20;
* Functions&#x20;
  * [withdrawErc20Rewards()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol#L590-L612)&#x20;

### Withdraw Taker Rewards

When a reaction is spent a portion of the reaction’s underlying USDC is spent on curator tokens that are reserved for the owner of the curated NFT (the “Taker”). The Taker can redeem their curator tokens for USDC using the function below. Note: the curated NFT must be registered via the MakerRegistrar contract in order to prove ownership before the withdrawTakerRewards() function is called.

* Contract Source Code: [ReactionVault](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol)&#x20;
* ABI: [ReactionVault.json](https://github.com/rara-social/rara-protocol/blob/main/deployments/polygon/ReactionVault.json)&#x20;
* Chain: Polygon (137)&#x20;
* Deployed Address: [0xE5BA5c73378BC8Da94738CB04490680ae3eab88C](https://polygonscan.com/address/0xE5BA5c73378BC8Da94738CB04490680ae3eab88C)&#x20;
* Functions&#x20;
  * [withdrawTakerRewards()](https://github.com/rara-social/rara-protocol/blob/main/contracts/Reactions/ReactionVault.sol#L624-L734)


---

# 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.rara.social/integration/protocol-interactions.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.
