# Introduction to Paintswap

<figure><img src="/files/hjULpTdfIMF0ZNpyw7R1" alt=""><figcaption></figcaption></figure>

## What is Paintswap?

[Paintswap](https://Paintswap.io) is the leading NFT marketplace on Sonic. It provides feature rich platform for NFT collectors/traders and creator/artists and takes your NFT experience to the next level. Paintswap also is the pioneer in the financial (fNFTs) trading. Here is a quick summary of what you can do with Paintswap:

* Explore hundreds of beautiful, curated collections
* Buy, sell, offer, bid or swap (p2p) on thousands of NFTs on the open marketplace
* Create your own NFT through factory contracts.
* Launch your NFT collection through Paintswap Launchpad
* Trade fNFTs and track them using the features designed specifically for fNFTs

{% content-ref url="/pages/-Mg-dGBXj-LulpsGU2dT" %}
[NFT Marketplace](/paintswap-dapp-suite/nft-marketplace)
{% endcontent-ref %}

## Want to learn more?

**Twitter:** [**https://twitter.com/paint\_swap**](https://twitter.com/paint_swap)

**Discord:** [**https://discord.gg/Uc95pS8GrP**](https://discord.gg/Uc95pS8GrP)

**Medium:** [**https://medium.com/paint-swap-finance**](https://medium.com/paint-swap-finance)

**Reddit:** [**https://reddit.com/r/paintswap**](https://reddit.com/r/paintswap)


# Create a Wallet

Creating your Wallet

As with any other dApp, you'll need a wallet to start interacting with Paintswap. Paintswap is compatible will most popular wallet providers, however, we recommend Rabby Wallet due to its simplicity and ease of use.

If this is your first time creating a wallet, **be sure to write down and/or backup your recovery phrase.**  Otherwise, you are at risk of losing access to your funds permanently.  With that taken care of, look down and you'll find links to the Rabby and MetaMask. Both these wallets comes with Sonic network prelisted.

## Rabby Destopp Wallet

{% embed url="<https://rabby.io/>" %}

## MetaMask Desktop Wallet

{% embed url="<https://metamask.io/>" %}


# Bridging Funds to Sonic

There are various options to bridge your funds to Sonic. Here some of the most popular bridges to Sonic:

## FTM to Sonic Bridge

{% embed url="<https://my.soniclabs.com/upgrade>" %}

## Sonic Gateway Bridge

{% embed url="<https://gateway.soniclabs.com/>" %}

## deBridge Ethereum and other EVM chains

{% embed url="<https://app.debridge.finance/>" %}

Note: These bridges are operated by third parties and may carry risks. Paintswap does not control any of these bridges nor holds responsibility in case of loss of funds


# NFT Marketplace

NFTs finally meet their match in Paintswap, where you can mint your own, sell, offer and bid on others' NFTs, all at very competitive prices, as well as manage your own collections, effortlessly.

<figure><img src="/files/IzRKuKKoU75el6HqXPhp" alt=""><figcaption></figcaption></figure>

## Introduction

{% embed url="<https://www.youtube.com/watch?v=K07BRNtpCgU>" %}
NFT Marketplace
{% endembed %}

## Paintswap History and Evolution

* In early September of 2021, a **world-first multi-standard** **secondary NFT marketplace** NFT marketplace is introduced with Paintswap. Leveraging Fantom's combination of [high throughput, low latency, and low costs](https://fantom.foundation/fantom-faq/), the NFT community can now find a place for all their needs without worrying about gas wars, failed bids, and auctions.
* Only one month later, with more than 1 million FTM traded, version 2 of the NFT marketplace was released. The main change has been to switch the main currency from $BRUSH to FTM, with the goal of staying as the #1 NFT marketplace on the Fantom Opera Network.&#x20;
* In July-August 2022, we released version 3 of the NFT marketplace, which was a revolution in the space. From fan-favorite features such as batch minting, bulk transfers and offers, checkout cart, and being able to offer on any NFT of a collection, to novel features like the NFT vaults to manage custody when necessary, ability to one-click liquidate your NFTs. Along with the financial NFT (fNFT) marketplace allowing for safer trading of locked assets behind NFTs.
* In December of 2024, Paintswap **started the Sonic era** with a new refreshing look. Paintswap remains the #1 NFT market place on Sonic and continues to lead and innovate NFT space.

{% embed url="<https://www.paintswap.io>" %}

## Main Features

Paintswap's NFT marketplace provides feature rich platform for both Creators and Collectors. Paintswap is known to implement innovations which are often first in the industry. Below is the quick summary of the features of Paintswap:

#### Creators:

* Create your NFT from media you own, at a low cost. From JPEG to NFT in seconds, with support for metadata. Storage is managed through IPFS with reproducible ownership proofs. GIFs, video and even 3D formats are supported.
* Easily create your own NFT collection all on Paintswap in the [NFT Creator](https://paintswap.io/sonic/factory/info) section
* Support for [ERC2981](https://eips.ethereum.org/EIPS/eip-2981) NFT royalties on-chain. Earn royalties on every sale of your minted NFT on Paintswap.
* A marketplace to sell or auction any NFTs you own, not just the ones obtained through Paintswap. Sonic's low gas costs allow the sale of low price NFTs.
* Featured collections, with additional optional royalties on all NFTs from the collection. NFT contract developers on Sonic now have a one-stop-shop to advertise and sell their collection.

#### NFT Traders/Collectors:

* My NFTs" page to view NFTs owned or listed by you. Also, explore your activities (offers, bids etc)
* Explore NFTs across various collections. Paintswap provides ability to explore both Approved and Unapproved collections&#x20;
* Ability to offer on listed or unlisted NFTs on any collection. Payment is only put in escrow in case of an auction. Uses Wrapped Sonic ($WS) as means of payment for NFTs, however, the seller will always receive the payment in native $S.
* Bulk list/transfer/auction/offer ERC1155 & ERC721 NFT actions, all via our UI
* Initiate and accept P2P Swap of NFTs&#x20;
* Sonic’s  first secondary market supporting both [ERC721](https://eips.ethereum.org/EIPS/eip-721) & [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) NFTs. Mint or sell multiple of the same ERC1155 NFT without having separate entries.
* Discounts for owners of a copy of official Paintswap NFTs.

#### Financial NFTs (fNFT):

* Explore fNFTs leveraging special feature such as Token types, Locked token amount and Expiry.
* Make your fNFT trades profitable my exploring fNFT listings based on the discount

#### Statistics and Monitoring:

* An API for other platforms to use and retrieve NFT ownership data.
* Track Users, activity, statistics (volume etc.) across collections

## For NFT contract developers

View your individual NFTs at:

*paintswap.io/\<network?>/assets/\<collection address>/\<tokenId>*

* [Example](https://paintswap.io/sonic/assets/0x8500d84b203775fc8b418148223872b35c43b050/1)

Check out our support for rich metadata

{% content-ref url="/pages/zBxzscMG4nNpHDuxTaZp" %}
[Metadata](/nft-marketplace-1/minting/metadata)
{% endcontent-ref %}

Want your collection featured on Paintswap? You will need to [reach out to the team](/nft-marketplace-1/collections#submit-your-own).

## Getting Started

{% content-ref url="/pages/-MiKos\_GRsdph4YqyTvr" %}
[Introduction & Fees](/nft-marketplace-1/introduction)
{% endcontent-ref %}

{% content-ref url="/pages/-Mg-fgCW0yUxskBKCcJp" %}
[Creating NFTs](/nft-marketplace-1/minting)
{% endcontent-ref %}

{% content-ref url="/pages/uEeH1OgcAXDo4UrJkNBP" %}
[NFT Vaults](/nft-marketplace-1/nft-vaults)
{% endcontent-ref %}

{% content-ref url="/pages/-MiKpCFR6c-k-Y6SOBkj" %}
[Trading NFTs](/nft-marketplace-1/trading)
{% endcontent-ref %}

{% content-ref url="/pages/-MiGfUMwwLcWKcQyNr-i" %}
[Collections](/nft-marketplace-1/collections)
{% endcontent-ref %}


# NFT Launchpad

<figure><img src="/files/GDmvdauwHIQL9BImG0T0" alt=""><figcaption></figcaption></figure>

Paintswap Launchpad is a platform that enables creators to launch and mint their own NFTs on the Sonic blockchain. Our user friendly interface and comprehensive tools make it easy for you to bring your NFT vision to life. Paintswap Launchpad supports a variety of NFT collection types, including traditional single-token collections and collections with multiple tokens for each NFT. Our goal is to support a wide range of creator types and projects.&#x20;

Paintswap Launchpad currently supports the Sonic blockchain, but we are working on adding support for more blockchains in the future. If you have a blockchain that you would like to see supported, please let us know!

{% embed url="<https://launchpad.paintswap.io>" %}


# Launching your collection

To apply, simply fill out the form after clicking 'Apply for Launchpad'. Provide all the necessary details about your project, and our team will review your application. We will contact you shortly after reviewing your submission.

### Fees

We charge a one-time fee of 250 $S on submission of the project. This fee is used to cover the cost of the infrastructure and services required to launch your NFT collection on the Sonic blockchain. There is also a fee of 5% of the mint price for each NFT that is minted.

Same as the Paintswap marketplace fees, 50% of all fees are used to buy brush and burn it on the open marketplace. 4% to Beardies/Colorful Coal holders. The rest is used for infrastructure to keep the launchpad running!&#x20;

### Whitelist

The whitelist feature allows creators to set up a whitelist for their NFT collection. This means that only a limited number of addresses are allowed to mint NFTs for your collection. This is a great way to ensure that select community members have a chance to mint NFTs for your collection before the public. Platform also provides ability to set special pricing for whitelist mint

<figure><img src="/files/VEdGspAQtkXq1qm0snDG" alt=""><figcaption></figcaption></figure>

### Structuring NFT Collection&#x20;

Either the metadata file should be a single valid JSON file with an array of your metadata and named metadata.json, or alternatively individual JSON files for each NFT. The image field should use the placeholder 1.png, 2.png, 3.png, etc. so that once images are uploaded we can replace with the IPFS CID. animation\_url is not currently supported for our hosting.

### Referral&#x20;

The referral program is a way for you to incentivize users to refer others to your project. When a user is referred, the referrer will receive a finder's fee from the sale that you can set. You can add up to 100 referral addresses.

<figure><img src="/files/80CcWMOED7bbgOgNzc1t" alt=""><figcaption></figcaption></figure>

* Only Allowed Referrers: You can added up to 100 addresses. This prevent users from referring themselves&#x20;
* Any Referrers: There will be no restriction on who can refer others to your project

### Restrictions

Launching NSFW material through Paintswap Launchpad is not permitted. This includes but is not limited to: adult content, explicit content, gore, or any other content that is considered NSFW.

{% hint style="success" %}
You can go to [https://launchpad-beta.paintswap.io](https://launchpad-beta.paintswap.io/) and test launch your collection. Your IPFS files will be removed after a few days.
{% endhint %}


# Estfor Kingdom

[Estfor](https://estfor.com) is an award winning P2E (play-to-earn) MMORPG on Sonic. Offers 100% blockchain-based gameplay, NFTs, chainlink oracles $BRUSH deflationary in-game economy and a lot of fun! Kill monsters, loot, gather resources and level up your character to become the most powerful in the kingdom.

{% embed url="<https://youtu.be/5kJTjqpTL3c>" %}

The game is made for ESTFORIANS to become strongest, find friends, climb leaderboards, and join competitions to win various rewards. Choose your Hero to become the strongest in the Kingdom. Choose to master physical, ranged and magical arts. Prepare for Battle: Discover monsters and find their weaknesses. Level up your combat powers and be rewarded! Join clans and fight alongside your clubmates to win BRUSH. Discover new hidden items and add them to your collection. Trade items with others using a real on-chain order book with real monetary value.

Check out the[ Estfor wiki](https://wiki.estfor.com/) for more information on the game.

{% embed url="<https://estfor.com>" %}


# Sonic Airdrop Order Book

<figure><img src="/files/ev4ZPOYcT0GXVnrm9wd9" alt=""><figcaption></figcaption></figure>

Paintswap Sonic Airdrop Order Book is the dApp designed exclusively for claiming and trading Sonic Airdrop fNFTs. It pairs ERC-1155 fNFT with an advanced order book, a first-of-its-kind venture. Mint, transfer, and claim airdrop NFTs; fulfill multiple orders in 1 TX; get real-time order notifications.

{% hint style="success" %}
Sonic airdrop season 1 will get allocation of 80,778,181.95 $S which is 42.40% of the total airdrop distribution.
{% endhint %}

## What is Sonic Airdrop?

The $S airdrop will distribute 190,500,000 $S tokens to incentivize users of Sonic. The airdrop will be distributed using Sonic Points, Sonic Gems, and Game Gems.

The $S airdrop spans multiple seasons, with an undisclosed amount of the total airdrop allocated to each season.

**User Claim Mechanics**\
25% of your airdrop is claimable immediately as $S. The remaining 75% is vested over 270 days as a tradable NFT.

**Timeline**\
Season 1 Claim - The claim portal will go live a few weeks after June 18 2025, following a review period to filter bots and sybils, ensuring rewards go to real users.

Season 2 - Will start immediately after the end of Season 2 (Jun 18 2025)

**Read More Information**

{% embed url="<https://docs.soniclabs.com/funding/sonic-airdrop>" %}


# Claiming Sonic Airdrop fNFT

Claim and manage your airdrop fNFT

{% hint style="success" %}
The Sonic Airdrop can exclusively be claimed on paintswap dApp! Beware of scams!
{% endhint %}

### Claim your Airdrop

Claim at your airdrop at following link:

**Claim Link**: <https://airdrop.paintswap.io/my-fnfts>&#x20;

**Contract Address**: 0xE1401171219FD2fD37c8C04a8A753B07706F3567

### Airdrop Format

25% of your airdrop is claimable immediately as $S. The remaining 75% is vested over 270 days as a tradable NFT. Therefor, on claim, 25% $S token will immediately be credited to your wallet. You will receive ERC1155 NFT for the remaining 75%

#### fNFT vesting schedule

The following image shows the linear vesting of fNFT position over 270 days:

<figure><img src="/files/0QHjDpNuLTZE6t9RkNjz" alt=""><figcaption></figcaption></figure>

Formula;\
T = total tokens earned (e.g., 100)\
U = upfront % claimable on day 1 (e.g., 0.25)\
D = total vesting duration in days (e.g., 270)\
C = day of early claim (e.g., 135)

<div align="left"><figure><img src="/files/r1MRk4Iyaqxgo6f3njI5" alt="" width="563"><figcaption></figcaption></figure></div>

The image below illustrates the claim, vesting and unlock at 135 days (50% into vesting duration):

<figure><img src="/files/G9WVQbAmHQyLcmQJppLx" alt=""><figcaption></figcaption></figure>

### Claim Guide

{% tabs %}
{% tab title="1. Check Eligibility" %}

<figure><img src="/files/JmWflRnQLXUPLGJPpA7P" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="2. Mint Airdrop fNFT" %}

<figure><img src="/files/LJQxeZpGucXdo3QB9awJ" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="3. Unlock fNFT" %}
{% hint style="warning" %}
Warning - Unlocking will result in burning part of your Airdrop! Instead, trade your fNFT position for maximum benefits
{% endhint %}

**Step 1:**

<figure><img src="/files/glCjiEgjrKbQwxsHyt0c" alt=""><figcaption></figcaption></figure>

**Step 2:**

<figure><img src="/files/jhOxiMdwar9zItXrF4ch" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}


# Order Book - Trade Airdrop fNFTs

Paintswap Sonic Airdrop Order Book provides CEX like experience on-chain for trading your fNFTs. Sonic's unmatched speed makes this possible!

As with CEX order books, your buy and sells orders are closed as per the price priority.&#x20;

## Trading Currency

The Order Book lets you place orders in $S, $USDC and $scUSD based on your requirement.

## Order Types

### **Limit Orders :**&#x20;

* A limit order allows you to specify the exact price at which you want to buy or sell your fNFT. The order is filled only if the market reaches the set price.
* Appropriate when you want price control and are willing to wait for execution.

### **Market Orders :**

* A market order executes immediately at the best available price based on the total set cost. The order is filled regardless of price fluctuations.
* Appropriate when you want quick execution of the order and willing to compromise on the price.

## Fees

Trading fee of 1% of the executed order value will be charged.&#x20;

* **50% is used to** **buy back and burn $BRUSH**
* 3% is sent to all 2048 [Beardies](https://paintswap.io/sonic/collections/0x31911223bb3ff5b773af3e677fc0ac5760215e4e/)
* 1% is sent to all 2048 [Colorful Coal](https://paintswap.io/sonic/collections/0xfbdb4e2e7271f37714c4000814ce2487da57f925/)
* 46% is distributed between the DAO fund and main project contributors

## How to trade your fNFT

### Simple Mode

Simple trading mode provides DEX like simplified experience for buying or selling fNFT. Requested swap is executed as a market order against the available order liquidity.

#### Guide for trading fNFT through the simple mode:

{% tabs %}
{% tab title="1. Select Simple Mode" %}

<figure><img src="/files/T0lv9clZ9FiRYkVER8vJ" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="2. Select Trading Currency" %}
**To Buy fNFT:**

<figure><img src="/files/mxkZXURDg8FTsgISKgvT" alt=""><figcaption></figcaption></figure>

**To Sell fNFT:**

<figure><img src="/files/HeUYdqgCX0wCsqpzOEQy" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="3. Select and Review Amounts " %}

<figure><img src="/files/ortcu0QBR4IMtJlqhXDD" alt=""><figcaption></figcaption></figure>

**Note**: Carefully review the estimated amount to be received! The amount is dependent on the current open buy/sell orders and may be highly volatile based on Order Book depth.&#x20;
{% endtab %}
{% endtabs %}

**Effective APR** - This is the estimated APR considering the 100% unlocked value of fNFT you are buying

{% hint style="warning" %}
If there isn't enough Order Book liquidity for your trade, your swap will be executed partially. Remaining amount will be refunded
{% endhint %}

### Advanced Mode

Advanced Mode provides more detailed Order Book experience.&#x20;

{% hint style="warning" %}
Please review the Order Book depth and projected trade Quantity for Market Orders carefully before placing the order!
{% endhint %}

#### Buy orders:

1. Decide the trading currency and ensure that you have enough tokens in your wallet
2. Decide the type of order (Limit or Market) and select Amount and Price/Cost accordingly.
3. Place the Buy Order and sign the transaction.&#x20;
4. Executed orders will be listed in "My Completed Orders" and "Global Trade History". Open orders can be cancelled any time. &#x20;

#### Sell orders:

1. Decide the trading currency. Make sure that the fNFT amount you want to sell is in your wallet.
2. Decide the type of order (Limit or Market) and select Amount and Price/Cost accordingly.
3. Place the Sell Order and sign the transaction.&#x20;
4. Executed orders will be listed in "My Completed Orders" and "Global Trade History". Open orders can be cancelled any time. &#x20;
5. Once the order is filled/executed, claim the traded amount through "Claim All" button in Open Order section.&#x20;

**Order Book Glossary**:

* **Price** - The specific value at which you are willing to buy or sell the fNFT. In typical order book, this is also called as the **bid** (buy) or **ask** (sell) price
* **Amount** - The quantity of fNFT units involved in the order or trade.
* **Cost** - The total value of a order/trade, calculated as `Price × Amount`.&#x20;

#### Guide for trading fNFT through the advance mode:

{% tabs %}
{% tab title="1. Select Advance Mode" %}

<figure><img src="/files/lwvxaO1FYUNv2eYFoX1L" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="2. Select Trading Currency" %}
Decide the trading currency and ensure that you have enough tokens (for Buy Order) or fNFT (for Sell Order) in your wallet

<figure><img src="/files/mGgPtqWR58I4m9nnLt1y" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="3. Select Type of Order" %}
Decide the type of order (Limit or Market) and select Amount and Price/Cost accordingly.

<figure><img src="/files/xiFHRsTUPNZoWdBjicD5" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="4. Place Order" %}
Place the Order and sign the transaction.&#x20;

**Buy**

* Limit:&#x20;

  <figure><img src="/files/bbBGAoWv3ebYud1nEczN" alt=""><figcaption></figcaption></figure>
* Market:

  <figure><img src="/files/HlR8P8CJkxEphotR1Mm2" alt=""><figcaption></figcaption></figure>

**Sell**

* Limit

  <figure><img src="/files/J4XxZFhaSdhAQHAUJQKs" alt=""><figcaption></figcaption></figure>
* Market

  <figure><img src="/files/V56eNr8RWHkAnmGTSlyu" alt=""><figcaption></figcaption></figure>

{% endtab %}

{% tab title="5. Review Orders" %}
Executed orders will be listed in "My Completed Orders" and "Global Trade History". Open orders are listed in "Open Orders". Open orders can be cancelled any time.

Once sell order is filled/executed, claim the traded amount through "Claim All" button in Open Order section.&#x20;

<figure><img src="/files/bSpHxLWR6Yd0a1lzgEEr" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}


# Contracts and Audits

## Contracts

* **Season1 FNFT**: [0xE1401171219FD2fD37c8C04a8A753B07706F3567](https://sonicscan.org/address/0xE1401171219FD2fD37c8C04a8A753B07706F3567)
* **Season1 S Order Book:** [0x9a7e4c8fe2679D43145Da69ff191a5C9F841996b](https://sonicscan.org/address/0x9a7e4c8fe2679D43145Da69ff191a5C9F841996b)
* **Season1 USDC Order Book:** [0xed286fd8f8364058778B80D69b2158Dd09edb634](https://sonicscan.org/address/0xed286fd8f8364058778B80D69b2158Dd09edb634)
* **Season1 SCUSD Order Book:** [0x575a809Ccc7d1e90D717b4E66928289F2d09db8F](https://sonicscan.org/address/0x575a809Ccc7d1e90D717b4E66928289F2d09db8F)
* **Sonic Order Book Helper**: [0xfffE8dc191E3B1ac07228105eF0b9730D8a78Ce3](https://sonicscan.org/address/0xfffE8dc191E3B1ac07228105eF0b9730D8a78Ce3)

## Audits

The Airdrop Order Book and fNFT is fully audited and secured by Cantina.

#### Audit Reports:

{% embed url="<https://cantina.xyz/portfolio/d306a20a-009b-41ff-85b0-fcc5d862325b>" %}

{% embed url="<https://cantina.xyz/portfolio/75a94cca-697c-48e7-8679-9b8280bed8ea>" %}

{% embed url="<https://cantina.xyz/portfolio/80b2fc65-3c2e-4ae7-8e48-6383fa936e6d>" %}


# VRF

<figure><img src="/files/KNWc4Uj6ChXCoZfx9p5d" alt=""><figcaption></figcaption></figure>

## How Paintswap VRF Works

Paintswap VRF (Verifiable Random Function) provides secure, provably fair random numbers for smart contracts on the Sonic blockchain. Unlike traditional RNG services, Paintswap VRF uses cryptography and Web3 using Sonic's distributed ledger to prove that the output was determined by the inputs that no one could have manipulated the results.

Thanks to Sonic's innovative Fee Monetization model, we provide secure random number generation with no additional costs beyond standard gas fees.

## Comparison With Traditional Oracle Models

| Feature                     | Traditional VRF                                                    | Paintswap VRF                                                  |
| --------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
| **Fee Structure**           | <mark style="color:red;">Gas fees + ERC20/native token fees</mark> | <mark style="color:green;">Gas fees only</mark>                |
| **Tokens Required**         | Must hold specific tokens                                          | <mark style="color:green;">Just network gas token</mark>       |
| **Fulfillment Time**        | Multiple blocks/minutes                                            | <mark style="color:green;">Sub-second response possible</mark> |
| **Subscription Management** | Complex subscription system                                        | <mark style="color:green;">No subscriptions needed</mark>      |
| **Cost Predictability**     | Variable based on token prices                                     | <mark style="color:green;">Predictable gas costs only</mark>   |

## System Flow

1. #### Request Random Numbers

   Consumer contract calls `requestRandomnessPayInNative()` and calculates fee using the Paintswap VRF Coordinator contract.
2. #### Event Detection

   VRF Listener detects the `RandomWordsRequested` event and stores request details in a queue where they can be processed at Sonic speed.
3. #### Proof Generation

   A VRF Oracle worker generates a VRF proof using the oracle's private key and prepares the cryptographic verification parameters.
4. #### Fulfillment Submission

   Oracle submits the `fulfillRandomWords()` transaction to the Paintswap VRF contract with the request ID and VRF proof.
5. #### On-Chain Verification

   VRF contract verifies the proof, confirms it matches the commitment, and derives provable random word values.
6. #### Random Numbers Delivered

   Consumer's `rawFulfillRandomWords()` callback receives the verified random words and executes logic.

## Technical Details

**Smart Contract Architecture**

* PaintswapVRFCoordinator: Core coordinator contract with UUPS upgradeability
* PaintswapVRFConsumer: Abstract base class for contracts requesting randomness
* VRF library: Implements cryptographic functions using Secp256k1 and SHA256
* Owner Controls: Oracle registration, fee management, parameter tuning

**Oracle Worker System**

* VRF Listener: Monitors blockchain events for randomness requests
* VRF Processor: Generates cryptographic proofs and submits transactions
* Queue: Maintains workers, request state, and status tracking
* Heartbeat System: Ensures oracle health with periodic checks

**Security Properties**

* Cryptographic Verification: Elliptic curve based VRF with on-chain validation
* Distributed Processing: Multiple oracles can process requests with locking mechanism
* Retry Mechanism: Handles temporary failures with backoff strategy

## Integration Steps

1. Import `PaintswapVRFConsumer` base contract and inherit from it
2. Implement `_fulfillRandomWords()` callback
3. Store request context to match responses with requests
4. Request randomness by calling `_requestRandomnessPayInNative()`
5. Process delivered random words in your callback function

| Network       | Chain ID | VRF Coordinator                            |
| ------------- | -------- | ------------------------------------------ |
| Sonic Mainnet | 146      | 0x6E3efcB244e74Cb898A7961061fAA43C3cf79691 |
| Blaze Testnet | 57054    | 0x6E3efcB244e74Cb898A7961061fAA43C3cf79691 |

## npm Package

{% embed url="<https://www.npmjs.com/package/@paintswap/vrf>" %}

## Painswap VRF Portal

{% embed url="<https://vrf.paintswap.io/>" %}

## Media Kit

{% content-ref url="/pages/JqukDSpdf2jgd5RA1T7N" %}
[Media Kit](/misc/media-kit)
{% endcontent-ref %}


# Beardies

<figure><img src="/files/EzbYF85bitp1e5Yxf0Hl" alt=""><figcaption></figcaption></figure>

Beardies is the next-gen NFT with utility created by the Paintswap team. Beardies make YOU part of Paintswap success. The collection gets a **share of 3%** of the daily NFT marketplace (2.5%) fees. Each Beardie in your possession gives you share of fees in return, in $S! More Beardies >> More Reward, No Limits. They also give you access to a secret Discord channel.&#x20;

{% embed url="<https://paintswap.io/sonic/collections/beardies/>" %}

### Colorful Coal

Special colorful coal airdropped to all Beardies holders as a Xmas present (2021). The ID matches the Beardie ID. Coal colors are randomly generated from the holder address, token ID and previous block hashes, each one is unique. These are eligible for **addition 1% share** of marketplace sales fees in $S if the holder has the matching Beardie ID.

{% embed url="<https://paintswap.io/sonic/collections/colorful-coal/>" %}


# Click royale

<figure><img src="/files/cwrqht3J9EREDl5Nyzyf" alt=""><figcaption></figcaption></figure>

Click Royale, a Stress Test on the Sonic Network, is a coordinated event where our Click Royale community deliberately subjects the network to a high volume of transactions to evaluate how minting and associated operations perform under real-world heavy load conditions.

## Rewards

Each click will generate up to 10K POINTS per clicker account, meaning up to 100K POINTS per click. Some may fail due to network conditions.

When the event is over, you will redeem your POINTS for $S to your main account. Then withdraw any remaining $S gas and your're all set!

## Event Dates

### **Blaze Testnet Runs:**

* 27th March @ 7pm UTC - Completed&#x20;

### **The Main Event:**

* 7th May @ 11:35 AM UTC - A full 1-minute mint on Sonic Mainnet - Completed

### **Results:**

* Total Transactions: 65,838
* Total Gas Spent: 702.28
* TPS: 1115.90
* Block Analyzed: 112
* Total 20K $S distributed to the participants for simply clicking for one minute

Watchout for future events!

{% embed url="<https://click.paintswap.io/>" %}


# $BRUSH

**TICKER:** $BRUSH

**Contract Address:** 0xE51EE9868C1f0d6cd968A8B8C8376Dc2991BFE44

**Total Minted:** 430,659,006 $BRUSH

**Burnt:** 23,184,919 $BRUSH\*

**Circulating Supply:** 407,474,087 $BRUSH\*

**Chain:** Sonic - Chain ID 146

{% hint style="success" %}
\* Updated on Jan 15th 2026. For the latest $BRUSH statistics please visit the Dashboard accessible using the following link:
{% endhint %}

{% embed url="<https://paintswap.io/dashboard>" %}

## What is $BRUSH?

$BRUSH is the token that brings Paintswap ecosystem to life. It acts as a protocol token and is used across the many services offered by Paintswap, like spending it on fees within the Paintswap platform. &#x20;

$BRUSH is utilized as the in-game token for [Estfor Kingdom](https://estfor.com/) the award-winning game from the Paintswap team. $BRUSH is used to buy items from the in-game shop, The in-game treasure is used for players to earn $BRUSH by selling their items (NFTs) back to the in-game shop.

$BRUSH will also be the governance token of Paintswap - fully allowing the $BRUSH holders to guide where Paintswap will go.

### Supply

Originally, $BRUSH max supply was planned as 450 MM, however,  with the move to Sonic we have decided to **stop $BRUSH emissions.** The remaining supply has effectively be burnt, leaving **total supply = circulating supply = \~416M $BRUSH**. No more $BRUSH will ever be minted/emitted.

### **Deflationary $BRUSH** <a href="#id-9c70" id="id-9c70"></a>

The $BRUSH token will continue to be burned through the many Paintswap projects, **giving $BRUSH a deflationary supply**. Following are the ways $BRUSH is bough-back/burned:

#### Paintswap:

* $BRUSH gets bought and burned using the fees from the sales in the NFT Marketplace.&#x20;
* 50% of the fees generated by fNFT sales on Paintswap
* 50% of all fees generated by Launchpad is used to buy $BRUSH and burn it on the open marketplace.

#### Estfor Kingdom:

* $BRUSH is used to buy items from the in-game shop, of which 25% is burned, 25% goes to the DAO and 50% goes to the in-game treasure.&#x20;
* Clans within Estfor Kingdom also utilize $BRUSH with creation and upgrades costs, 25% is burned, 50% to the treasure, and the remaining 25% goes to the DAO.
* Clan names and player Names are the same as clan creation and upgrades with 25% of every purchase is burned, 50% feeds the treasure, and the remaining 25% goes to the development fund.
* The Wishing Well also utilizes $BRUSH by allowing players to donate to the well in return for a temporary XP boost, 100% of this goes to the treasure pool.
* Clan Wars burn $BRUSH every time a Clan Vault is successfully defended.
* NFT royalties from secondary marketplace sales of 3%. 2% of this goes to buy $BRUSH and add it to the in-game treasure fund and 1% goes to the DAO.

Looking forward, we have many more goals and aspirations for what $BRUSH and Paintswap can accomplish and contribute to the Sonic Network.  We'll be sure to share our ideas with the community as they come closer to fruition!


# LP/Staking

:man\_artist: +:art: =:man\_farmer:  Who knew painters could be farmers?!

Primary liquidity for $BRUSH-$S is hosted on [Shadow](https://shadow.so/) and [Equalizer](https://equalizer.exchange/) exchanges on Sonic.&#x20;

## Shadow's x(3,3) model for LP  <a href="#id-321d" id="id-321d"></a>

In the SHADOW model, liquidity providers stake their $BRUSH-$S LP tokens  in a SHADOW gauge to earn a portion of the swap fees along with emissions in the form of SHADOW tokens.&#x20;

The more votes allocated to a liquidity pair by xSHADOW voters, the more SHADOW that will be emitted to the $BRUSH-$S gauge in the following epoch.&#x20;

{% embed url="<https://www.shadow.so/liquidity/0xb8bda81eccb1a21198899ac8f1f2f73c82bd7695>" %}

## Equalizer's ve(3,3) model for LP <a href="#id-321d" id="id-321d"></a>

Brush liquidity is also hosted on Equalizer ve(3,3) dex. The $BRUSH/$WS LP receives $EQUAL emissions based on veEqual votes received by the pool every week.

{% embed url="<https://equalizer.exchange/liquidity/0x38cFA6cB37d074B6E954C52d10a4cf0e4268607b/add>" %}

### **Rewards for** $BRUSH-$S **LP providers** <a href="#id-321d" id="id-321d"></a>

Paintswap community’s liquidity has traditionally been the highest(!) of any Fantom ecosystem token in a 50–50 pool. This continues on Sonic. Following are the ways $BRUSH LP holders are rewarded:

* **Superior APR**: As the result of our partnership with Shadow, the protocol offers direct incentives to $BRUSH-$S liquidity providers through their voting weight. We also utilize our protocol fees to offer bribes where needed to boost this even further hence maintaining **sustained higher APR**.
* **Sonic Airdrop points for BRUSH liquidity**: Sonic labs has confirmed that $BRUSH/$S LP holders will receive Sonic points (user points) for the $S portion of the LP! For all the details read their post [Sonic Points and Gems Explained — \~200 Million S Airdrop](https://blog.soniclabs.com/sonic-points-and-gems-explained-200-million-s-airdrop/).
* **Using FeeM for Bribes**: Paintswap has been either 1st or 2nd in the rankings for every quarterly [fee monetization leaderboard](https://earngas.fantom.network/) in past years. This additional revenue is used for bribing votes on pools to incentivize liquidity for the $BRUSH-$S pair on Shadow exchange.

### Alternative to Single Side Staking <a href="#dc32" id="dc32"></a>

Our 80–20 $BRUSH-$scUSD pool on [beets.fi](https://beets.fi/pools/sonic/v2/0xc5ab8d98f959453e416b2f15848a02cc99bc695e000200000000000000000022) replaces the traditional single side staking for $BRUSH.  The 80-20 balanced pool incentivizes lower impermanent loss LP strategies. Hence making it close to the single-sided staking. The rewards include:

* LP trading fees.&#x20;
* BEETs emissions from bribing voters.&#x20;
* Potential $S & $BRUSH rewards from our DAO&#x20;

{% embed url="<https://beets.fi/pools/sonic/v2/0xc5ab8d98f959453e416b2f15848a02cc99bc695e000200000000000000000022>" %}


# Early Distribution

* **Distribution:** 70% yield farming, 10% airdrops, 10% team allocation (90% vested, 10% initial mint) , 5% BRUSHdao fund, 5% Initial Farming Offering
* **Initial Farm Offering:** 22,500,000 $BRUSH (5% of $BRUSH total supply).


# Emissions History

With migration to Sonic in December 2024, emissions for $BRUSH has been stopped. The total supply of $BRUSH is restricted to \~416 Million. The following section provides an overview of how $BRUSH emissions evolved till the time it was halted.&#x20;

### History

Emissions was how $BRUSH was distributed outside of the initial airdrops. By farming and staking $BRUSH, users used to get additional $BRUSH as rewards, proportionally to their staked amounts.

### Original Emission schedule

![$BRUSH Emission Schedule](/files/-Ma7dK_5HUAdRJDFF1HU)

&#x20; The following chart helps to better visualize how we forecasted the long-term emission schedule.

![](/files/-Ma7MeH9rSuiu2tBNya3)


# Introduction & Fees

## Summary

Read a quick summary of the NFT marketplace features in the following page:

{% content-ref url="/pages/-Mg-dGBXj-LulpsGU2dT" %}
[NFT Marketplace](/paintswap-dapp-suite/nft-marketplace)
{% endcontent-ref %}

## Fee structure

Paintswap wants the NFT market to thrive in the ecosystem we are apart of, as such our fees are competitive.

* FREE to start a sale or auction on verified collections
* 0.1 $S to mint on a Paintswap Factory contract
* 2.5% commission on other successful NFT sales
  * **50% is used to** **buy back and burn $BRUSH**
  * 3% is sent to all 2048 [Beardies](https://paintswap.io/sonic/collections/0x31911223bb3ff5b773af3e677fc0ac5760215e4e/)
  * 1% is sent to all 2048 [Colorful Coal](https://paintswap.io/sonic/collections/0xfbdb4e2e7271f37714c4000814ce2487da57f925/)
  * 46% is distributed between the DAO fund and main project contributors
* 0.25 $S to list an unverified NFT

Fees going to Paintswap DAO fund so Paintswap can continue to develop new features.

Gas fees are in addition to any of the above.


# Creating NFTs

Creating NFTs has never been easier, with the new NFT Creation section featuring all an artist needs to get started

## Choosing where to Mint

{% hint style="success" %}
The most up-to-date information can be seen on the [Paintswap NFT Factory](https://paintswap.io/sonic/factory/info)
{% endhint %}

Paintswap offers two alternatives to start minting your own NFTs, to accommodate all kinds of creators.

For creators looking to deploy a **collection** of NFTs, Paintswap offers the possibility of [easily deploying your own contract](/nft-marketplace-1/minting/contract-factory), which you can then later [submit as a featured collection](/nft-marketplace-1/collections#featured-collections).

## Create your own Contract

At Paintswap we made NFT contract creation a very simple process. Contracts created here will be immediately tracked by Paintswap! See all the details on the following pages:

{% content-ref url="/pages/FzFljWFZq0Gut5LyhJJh" %}
[Contract Factory](/nft-marketplace-1/minting/contract-factory)
{% endcontent-ref %}

## Mint your own NFT

{% hint style="info" %}
Bulk minting is now supported! Check out the next page
{% endhint %}

{% content-ref url="/pages/QN9210WfkLbqd19QkOqZ" %}
[Bulk Mint](/nft-marketplace-1/minting/bulk-mint)
{% endcontent-ref %}

{% hint style="success" %}
Paintswap is not responsible for your media and does not host the media or metadata. Provide only media for which you are the copyright owner and ensure it does not contain any illegal material.
{% endhint %}

{% hint style="warning" %}
Paintswap reserves the right to block sales of NFTs containing illegal material
{% endhint %}


# Contract Factory

The Paintswap contract factory deploys an ERC1155 contract that is owned by the user. The minting can be done the same way as the community contract, directly on Paintswap, but with lower fees.

<figure><img src="/files/OBhNMFeDVarBMlW6YNJ1" alt=""><figcaption><p>Process for creating NFT contracts on Paintswap</p></figcaption></figure>

### Paintswap User Contract

<details>

<summary>Paintswap User Contract Functionality</summary>

* ERC2981 standard royalties for any compatible NFT marketplace
* ERC1155 based, meaning on every mint you can choose how many of that NFT to create. This supports both fungible and non-fungible tokens
* User-chosen name
* TokenID auto increment
* Burn functionality
* Batch minting and batch transfer functions for gas efficiency
* Minting can be done on the PaintSwap site or by contract calls
* Lower fees than the Paintswap community contract, see [Introduction & Fees](/nft-marketplace-1/introduction)

</details>

<figure><img src="/files/f0RbfH0zWePuR6mnjRgf" alt=""><figcaption><p>The form to deploy a ERC1155 contract to the Sonic network</p></figcaption></figure>

<table><thead><tr><th width="173.33333333333331">Option</th><th width="431.93023255813955">Description</th><th data-type="checkbox">Required</th></tr></thead><tbody><tr><td>Project Name</td><td>Name of your contract this can be changed at a later date.</td><td>true</td></tr><tr><td>Get royalty on sales</td><td>Check box if you'd like to add ERC2981 royalties to your contract. With this option every compatible marketplace (such as PS) will pay the royalties.</td><td>false</td></tr><tr><td>Total Supply</td><td>This is the maximum number of NFTs that can be minted to this contract, leave as 0 for unlimited. Each tokenID uses 1 towards the total supply. On each mint you can choose how many copies.</td><td>true</td></tr></tbody></table>

{% hint style="info" %}
**Contract Owner**

The address you are connected to on the website will become the creator and owner of the contract. Make sure your wallet is connected with the correct one.
{% endhint %}

{% hint style="warning" %}
**Burning NFTs**

Each NFT you mint to your contract will incrementally increase the tokenID. When burning one, you will not be able to re-use the same ID and Total Supply will not change. For example, if Total Supply is 6, you minted 5 and burned 4, then you can only mint one more NFT.
{% endhint %}

Once you have finished minting all the NFTs you want to your contract you can submit it as a collection as usual via the form on PaintSwap.

{% content-ref url="/pages/-MiGfUMwwLcWKcQyNr-i" %}
[Collections](/nft-marketplace-1/collections)
{% endcontent-ref %}

&#x20;See all of the factory, minting & collection options [here](https://paintswap.io/sonic/factory/info).

<br>


# Bulk Mint

In order to mint in bulk, data is uploaded to a Paintswap server, processed and then uploaded with IPFS.

## Introduction

{% hint style="success" %}
Bulk mint is available for [Factory Contracts](/nft-marketplace-1/minting/contract-factory).
{% endhint %}

Bulk minting requires uploading data in a structured format. This data is then processed by Paintswap and uploaded with IPFS. This process can take some time, so be sure to:

* Validate all data is according to the format requirements in this page
* Have patience when uploading data
* Test first with a single item to have faster back-and-forth testing if something is not working

{% hint style="info" %}
This page is currently being improved. If you have a question or recommendation, come talk to us on [Discord](https://discord.com/invite/G4ZgtP52JK).
{% endhint %}

### Required Reading

To fully understand this page you should first read on the Supported NFTs, and Metadata within Paintswap.

{% content-ref url="/pages/QtQxITFpmVAlBy7dIz4x" %}
[Supported NFTs](/nft-marketplace-1/minting/supported-nfts)
{% endcontent-ref %}

{% content-ref url="/pages/zBxzscMG4nNpHDuxTaZp" %}
[Metadata](/nft-marketplace-1/minting/metadata)
{% endcontent-ref %}

## Data Format

{% hint style="info" %}
In addition to reading this section, make sure to have full knowledge on specific fields by checking out the Creating NFTs page
{% endhint %}

> any-name.zip
>
> > nfts.csv
> >
> > media
> >
> > > resource 01.jpg
> > >
> > > second\_video.mp4
> > >
> > > ...

A CSV file with the exact filename `nfts.csv` must be on the root folder of the zip to be uploaded. Also on the root of the zip a folder with name `media` , inside of which will go the media resources.

Each line in the CSV file must have the following structure:

`name,description,nft_type,media,high_res_media,external_uri,quantity,attributes`

Where:

* `nft_type` should be one of image/video/audio/3d/interactive . Read more in the [Supported NFTs](/nft-marketplace-1/minting/supported-nfts) page.
* `media` is the filename of a resource inside the media folder that is placed in the zip. This is equivalent to the **image** in the [Metadata](/nft-marketplace-1/minting/metadata) page.
* `high_res_media` is the filename of another resource inside the media folder that is placed in the zip. This is equivalent to the **animation\_url** in the [Metadata](/nft-marketplace-1/minting/metadata) page.
* `attributes` currently attributes are limited to key-value pairs, this is being worked on to support complex attributes, including rarity. Example, **including the quotes** if multiple attributes are needed:\
  `"type1=value1,type2=value2"`
* Other fields should be according to the [Metadata](/nft-marketplace-1/minting/metadata) page.\
  \
  An example .zip file contains the appropriate structure can be downloaded here:\
  <https://s3.amazonaws.com/bulk.paintswap.finance/paintswap_bulk_mint_test.zip>


# Interactive NFTs

Find out everything about this new kind of NFT, now available to create and trade on Paintswap.

## What is an Interactive NFT

A regular NFT is based on predictable static or dynamic content such as images, animated images, audio files or videos. In contrast, an interactive NFT (**iNFT**) usually refers to web content of some kind, that changes based on your inputs. It can feature almost anything supported by a web browser. For example, a game, an app, tool or why not interactive art or music? Only the sky is the limit here.

The interaction is limited to what is supported by the main website.

## Interactive NFTs at Paintswap

At Paintswap we run the iNFT in a sandboxed *iframe* which allows scripts and forms, but not popups or access to web extensions. The NFT content is typically an html file that can contain CSS, SVG, JavaScript, Base64 encoded image URLs and more.

### Creating an Interactive NFT

You can create your own contract/collection or mint iNFTs directly on Paintswap.

{% content-ref url="/pages/-Mg-fgCW0yUxskBKCcJp" %}
[Creating NFTs](/nft-marketplace-1/minting)
{% endcontent-ref %}

If minting outside Paintswap, just make sure to stick to the metadata standard.

{% content-ref url="/pages/zBxzscMG4nNpHDuxTaZp" %}
[Metadata](/nft-marketplace-1/minting/metadata)
{% endcontent-ref %}

### Paintswap metadata injection

Part of the NFT metadata is injected into the *iframe* as a global variable, meaning anything your NFT contains in its metadata can be accessed within the iNFT code itself.

In the iNFT javascript code, the injected metadata can be accessed as such:

```javascript
var metadata = window?.context?.nftData?.metadata
```

For a list of the supported metadata which will be injected see the [Standard Metadata](/nft-marketplace-1/minting/metadata#standard-metadata) page. In addition, the `properties` field is also injected.

The properties can further enhance the iNFT as part of a collection where you want to use the same code for all NFTs but have it act differently depending on which NFT (tokenID) is loaded.

`nftData.metadata.properties` | json dictionary {} containing any other structure

Also exposed on the `window.context`:

* `nftData.address` | contract address
* `nftData.tokenId`| contract token ID
* `nftData.paintswap.soldAmounts` | e.g. `["3", "1", "10"]` (important for ERC1155)
* `nftData.paintswap.soldPrices` | in the `wei` unit
* `nftData.paintswap.soldTimestamps` | as unix epoch in seconds
* `nftData.paintswap.history` | an array with marketplace events
* `nftData.paintswap.onSale` | true or false if the asset is on sale

### Designing Interactive NFT

Paintswap uses a responsive design. To get the best out of your iNFT, make sure to do the same. A good practice is using width and height as 100% of the root component instead of fixed pixels. The *iframe* should be able to change size without destroying your work. You can validate it on the minting page where there also is a button to expand the view.

**Paintswap only supports a single HTML page** so if you have several files you need to find a way to combine them. If you have a React app, there are different ways to do that. See this:&#x20;

{% embed url="<https://stackoverflow.com/a/69594493>" %}

## Godot games & apps -> iNFTs <a href="#f6ba" id="f6ba"></a>

Read our medium article on how to turn a Gotdot game or app into an iNFT fully compatible with Paintswap.

{% embed url="<https://medium.com/paint-swap-finance/turning-godot-games-apps-into-infts-on-paintswap-a40009dd0399>" %}


# Metadata

Describes the rich metadata support for NFTs on Paintswap

## Standard Metadata

Paintswap follows the [metadata standard](https://docs.opensea.io/docs/metadata-standards) defined by OpenSea. Currently, the following fields from this standard are supported:

* `name`
* `description`
  * Basic markdown syntax is supported, such as `**bold**`, `*italic*`, `[link](https://site.com)` or `* bullets.` See <https://www.markdownguide.org/basic-syntax/>
  * Line breaks (`\r\n or <br>`) is supported. We recommend using `<br>` where `<br><br>` produces an empty line.
  * We do NOT support headers, images, block quotes or multiple empty lines.
* `image`
  * A link to an image (jpg, png, gif, svg, etc), audio (mp3) or a video (mp4). Used as the preview image on the marketplace. Also used on the NFT page if the `animation_url` is not found. **It's required** even when using the `animation_url`**, or the NFT won't load**. If you want a preview image for an audio NFT, link the image here and the audio file on the `animation_url`.
* `animation_url`
  * The main content of the NFT if it differs from `image`. It varies according to the kind of NFT. It can be a high-resolution image, audio, video, 3D or html. It must exist for 3D and html, otherwise optional. Remember to also set `animation_type` (see [below](#3d-and-interactive-nfts)).&#x20;
* `external_uri`
  * The link to an external page. If `{id}` is included in this field, we replace it with the hex-padded token ID, so you don't have to generate a different `external_uri` for each asset of your collection.
* `attributes`
* `background_color`
  * A hex color code such as #FFF or #6fcc45. Will replace the default transparent background for certain image types (png, svg), 3D model viewer or iNFT (html) if not specified in the html already. The user can still access the original media file without the background color.

## Audio, 3D and Interactive NFTs

{% content-ref url="/pages/bFSfzSOZaufzjOLNzn4Y" %}
[Interactive NFTs](/nft-marketplace-1/minting/interactive-nfts)
{% endcontent-ref %}

Make sure to set the following fields:

* `animation_type` - Helps the site determine the format as quickly as possible on any page and may not work without it. It should be:
  * `"animation_type": "interactive"` for iNFT
  * `"animation_type": "3d"` for 3D files
  * `"animation_type": "audio"` for audio files (needed if using the `animation_url`)
* `animation_url` -  For iNFT it should be a link to your single html file, which will be loaded as an iframe where it is allowed. For 3D it's a link to the 3D file. For audio it's a link to the audio file.

Optional:

* `background_color` - See [above](#standard-metadata)

## Attibute rarity and frequency

We have also added custom support for displaying rarity/frequency for attributes:

```json
{
    "attributes": [
    {
        "trait_type": "Background",
        "value": "Line Orange",
        "count": 28,
        "average": 0.013671875,
        "frequency": "1.367%"
    },
    {
        "trait_type": "Body",
        "value": "Beach",
        "count": 135,
        "average": 0.06591796875,
        "frequency": "6.592%"
    },
    {
        "trait_type": "Eyes",
        "value": "Gaze",
        "count": 148,
        "average": 0.072265625,
        "frequency": "7.227%"
    },
    {
        "trait_type": "Hair",
        "value": "Blonde",
        "count": 410,
        "average": 0.2001953125,
        "frequency": "20.020%"
    },
    {
        "trait_type": "Mouth",
        "value": "Frown",
        "count": 125,
        "average": 0.06103515625,
        "frequency": "6.104%"
    },
    {
        "trait_type": "Shoes",
        "value": "Clogs",
        "count": 145,
        "average": 0.07080078125,
        "frequency": "7.080%"
    }
],
    "rarity": {
        "rank": 395,
        "total": 2048,
        "rarest": {
            "score": "1.367%",
            "rank": 136
        },
        "arithmetic": {
            "score": "24.731%",
            "rank": 261
        },
        "geometric": {
            "score": "0.023736563129%",
            "rank": 376
        },
        "harmonic": {
            "score": "4.327%",
            "rank": 395
        }
    }
}
```

<figure><img src="/files/Qlvgeg0BWNLMblkLM4WH" alt=""><figcaption><p>Attribute with Rank and Rarity frequency</p></figcaption></figure>


# Supported NFTs

<table><thead><tr><th width="150">NFT Type</th><th width="150">Files &#x26; Sizes</th><th width="150" data-type="checkbox">View &#x26; Trade</th><th data-type="checkbox">Mint User</th><th data-hidden data-type="checkbox">Mint Community</th></tr></thead><tbody><tr><td>Image</td><td>15MB<br>jpg png gif jfif svg</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Video</td><td>15MB<br>mp4</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Audio</td><td>15MB<br>mp3 flac opus ogg oga</td><td>true</td><td>true</td><td>false</td></tr><tr><td>3D</td><td>50MB<br>glb gltf</td><td>true</td><td>true</td><td>true</td></tr><tr><td><a href="/pages/bFSfzSOZaufzjOLNzn4Y">Interactive</a></td><td>50MB<br>html</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Financial</td><td>-</td><td>true</td><td>false</td><td>false</td></tr></tbody></table>


# NFT Vaults

## NFT Vaults on Paintswap

{% embed url="<https://medium.com/paint-swap-finance/nft-vaults-for-custodial-sales-on-paintswap-fde45ee93c13>" %}

A vault is a contract each user generates for their wallet address, which they are the owner of. This contract can hold NFTs and fNFTs in a custodial state for both sales and auctions. An individual's vault its owner to sell their NFTs from the vault if they wish as well as withdraw any NFTs/tokens received from airdrops at any time as well as making things simpler to grab information like the number of unique holders & true owners of NFTs.

NFT Vaults on Paintswap allow the platform to have the best of both worlds of custodial and non-custodial listings. For NFTs with changing values and underlying assets the NFT vault allows a safe and secure way for buyers to know the NFT hasn't been changed or had value removed in between its listing and the sale.

Vault usage is optional, except for auctions, but is recommended for fNFTs. They can also be used for peace of mind knowing that you will not be susceptible to a bad sale when transferring a listed NFT without cancelling the listing, and then receiving it again later down the road where it could be snapped up if the old listing has not expired.

| Sale Type              | With Vault | Without Vault     |
| ---------------------- | ---------- | ----------------- |
| Auction & fNFT auction | Yes        | No                |
| Sale                   | Yes        | Yes               |
| fNFTs sale             | Yes        | Yes - not advised |

Each user will generate their own vault contract the first time they interact with the Paintswap marketplace. This gives the user access to their vault and any items in them be it NFTs or tokens that have been airdropped to holders.


# Trading NFTs

Discover, collect, and sell extraordinary NFTs

## Marketplace

<figure><img src="/files/sLagZMDYqMZ21sFDp1sq" alt=""><figcaption></figcaption></figure>

The [Paintswap NFT Marketplace](https://paintswap.io/sonic/) is a hub to buy, bid, and sell NFTs. $S is used as the main currency, and some of the fees are used to buy $BRUSH.

{% hint style="warning" %}
Not all NFTs on the marketplace were minted in Paintswap. NFTs are simply smart contracts, and they can hide functionality that could, for example, self-destruct or transfer to a third party after some time. Beware of this risk, and prefer buying verified NFTs looking for a :white\_check\_mark:symbol on their page and check the contract, or NFTs from [featured collections](/nft-marketplace-1/collections#featured-collections).
{% endhint %}

## NFT Sales

NFTs can be sold via direct sales or auctions. The mechanics of both are described in more detail in [Marketplace Mechanics](/nft-marketplace-1/trading/marketplace-mechanics), but in summary, a sale goes through three phases:

* The seller puts the NFT up for sale, interacting with the NFT marketplace contract.
* Potential buyers make their offers and (if a direct sale) can buy it immediately. Offers are done in wS.
* The sale is concluded: fees and royalties are taken from the sale price and distributed. The NFT and currency are transferred to the new respective wallets. Any user can conclude a sale, but it needs to be called manually. We run a script that completes concluded sales after no more than 1 hour (except if gas is too high on the network).

{% content-ref url="/pages/-MiL17Oe\_piX3upD78s4" %}
[Marketplace Mechanics](/nft-marketplace-1/trading/marketplace-mechanics)
{% endcontent-ref %}

### Initiating the sale

When putting an NFT up for sale, you will need to provide:

* How many to sell, of the same NFT
* How long to keep it for sale
* Sale price
  * Reserve price (minimum) for auctions
* NSFW check

<figure><img src="/files/1IE94ZOPqpuMWJqhpSOI" alt=""><figcaption></figcaption></figure>

### Cancelling a sale

Cancelling a marketplace sale is possible in all cases except the following. If a bid is placed on an auction, the auction can no longer be cancelled, unless the auction is less than 2 hours old.

Note that cancellations offer no refund of the listing fee.


# Marketplace Mechanics

## Listings for Sale and Offers

### Listing Mechanics

* The seller can choose to put the NFT in a custodial vault (which they own) acting as escrow, temporarily holding the NFT. This is the preferred option in many cases. See [NFT Vaults](/nft-marketplace-1/nft-vaults) for details.
* Alternatively, the user can keep holding the NFT on their wallet.
* Buying for the requested price does not require approval
* For non-custodial listings, the NFT could be transferred away, or token approval removed. In this case, the listing is temporarily invalidated, but could become valid again (see next section)
* Listings can be cancelled at any point
* The price of a listing can be changed at any point. However, purchases are protected against front-running by ensuring the value paid is never more than the buyer agreed to initially.

### Offer Mechanics

* **Offers can be done on listings or on assets**. Listing offers are particularly useful for fNFTs and custodial listings in general (see [NFT Vaults](/nft-marketplace-1/nft-vaults) for details on that) to ensure the underlying assets are not changed before the offer is accepted.
* Offers are in $wS which stays in your wallet, and the seller can optionally accept it
* Not having enough $wS invalidates an offer. Similarly, removing the $wS approval from the marketplace contract will also temporarily invalidate an offer, but it could become valid again (see next section)
* Offers can only be increased in value
* Offers can be cancelled
* Offers can have a time limit, after which point they are no longer valid

### Validity of Listings and Offers

It is possible to see invalid listings and offers by selecting *Invalidated* on filters.

{% hint style="warning" %}
**Offer Validity**

It is important to be aware of the concept of validity of an offer. As mentioned above, a lower than necessary $wS balance (or not enough approved $wS) will invalidate an offer. However, that is **not permanent**. That is, if the balance is restored or re-approved, the **offer becomes valid again** and could be accepted. Make sure to cancel any offers you no longer want to be active.
{% endhint %}

{% hint style="warning" %}
**Listing Validity**

Similarly to offers and as mentioned above, a **non-custodial** (i.e. not using a vault) listing can become invalid if the token approval is removed or the NFT is transferred. However, this is **not permanent**. That is, if the token is re-approved or the account receives the NFT again, the **listing becomes valid again**. Make sure to cancel any listings you no longer want to be active.
{% endhint %}

### Special Offers

Offers can be made on any and all assets whether they are listed for sale or not. This can be done via the asset page of each NFT. Moreover, some special offer types exist:

#### Collection Offer

An offer is made such that anyone with an NFT from that collection can accept it for their NFT. This can be useful if you're trying to trade the floor, but can have other uses.

#### Filtered Collection Offer

This is similar to trait filtered collection offers on other marketplaces, but more flexible. Any NFTs in a collection can form a filtered collection offer, and the offer stands as "i want **one** of any of these NFTs". There are some gas optimization techniques that need attention as it can affect editing later:

* Expiry time is shared on all NFTs, so editing any of these will change all others as well.
* When creating them, if they all share the same price they will continue to share the same price when editing as well (a single offer is stored to lower required gas).
* If different prices are used for different NFTs within the same collection, then they will be separate and editing will affect only the specific NFT.
* If more than one collection is used, multiple filtered collection offers will be created.

## Auctions

* Automatically ends and prevents new bids
* The sale must be triggered (by anyone) to complete after the auction is finished. A script is run by Paintswap every hour
* Bids are escrowed by the marketplace contract
* 1% bidding increment minimum
* Auctions can be cancelled in two cases:
  * Within their grace period (see below, depends on type of auction)
  * At any point, if there are no bids
* The reserve price of an auction can be changed if there are no bids

There are two types of auctions on Paintswap

* Flash auctions - minimum auction time 5 mins. Can be cancelled in the first 90 seconds.
* Normal auction - minimum auction time 30 mins. Can be cancelled in the first 10 minutes.

In addition, sellers can enable anti-snipe, which sets remaining time back to X minutes if a bid is made with less than X minutes remaining on the auction. X is 3 minutes for normal auctions and 90 seconds for flash auctions.

## Wrapped Sonic ($wS)

On the NFT marketplace all offers and sales are made in $wS. Required native $S is automatically converted via the contracts when making offers and bids. $wS is then auto converted back to native $S to the seller when the sale is completed.


# Bulk / Batch Actions

### Bulk List

Users can select multiple NFTs and use the bulk list button on the "My NFTs" page to list multiple assets for sale or auction at once. Users can then adjust of each sale details, within one simple transaction.

### Bulk Transfer

In the same screen on "My NFTs" users can also bulk transfer NFTs to multiple or one address you can send ERC721 and ERC1155 in one batch! It will even use ERC1155 batch contract methods for lower gas costs.

### Bulk Liquidate

Users can use the same screen again on "My NFTs" to bring up a new page with the best offers currently available on their assets and liquidate/sell them all in one simple process.

Liquidating NFTs will never change the offers during execution, if any are no longer valid then the transaction will fail, and offer prices cannot be lowered, which prevents front-running.

### Other Bulk Actions

{% content-ref url="/pages/QN9210WfkLbqd19QkOqZ" %}
[Bulk Mint](/nft-marketplace-1/minting/bulk-mint)
{% endcontent-ref %}


# Royalties

Two types of royalties are supported:

* ERC2981 royalties, capped at 7.5%. These are standard for NFTs minted in Paintswap but other contracts can implement them as well by adding the ERC2981 interface.
* There are also [featured collection](/nft-marketplace-1/collections#featured-collections) royalties, capped at 7.5%. You can [submit your own](/nft-marketplace-1/collections#submit-your-own) featured collection to Paintswap if you own the contract.

All royalties are capped at 7.5% in the smart contract itself. If present, featured collections royalties are used over ERC2981 royalties.


# Collections

Tracked collections are featured in the marketplace and they provide additional functionality to users. They are shown in the "My Collection" page even if they were never sold on Paintswap

## Tracked Collections

We constantly update our website to track new collections showing up on the market. If you own an NFT and don't see it in the "My Assets", shoot us a message on [Discord](https://discord.com/invite/G4ZgtP52JK) and we'll see about tracking it!

## Featured Collections

[Featured collections](https://paintswap.io/sonic/collections) are prominently visible on Paintswap, and they can contain collection-wide royalties.

### Submit your own

Want your collection featured on Paintswap? Please fill out the [Featured Collection Form](https://paintswap.io/sonic/factory/collection) and we will get to your request as soon as possible.

Reach out to the team on [Discord](https://discord.com/invite/G4ZgtP52JK) or <admin@paintswap.finance> for any further assistance.


# Contracts

## **Token**

* **BRUSH:** [0xe51ee9868c1f0d6cd968a8b8c8376dc2991bfe44](https://sonicscan.org/token/0xe51ee9868c1f0d6cd968a8b8c8376dc2991bfe44)

## **LP addresses**

* **Shadow BRUSH/S:** [0xb8bda81eccb1a21198899ac8f1f2f73c82bd7695](https://sonicscan.org/address/0xb8bda81eccb1a21198899ac8f1f2f73c82bd7695)
* **Equalizer BRUSH/WS:** [0x38cFA6cB37d074B6E954C52d10a4cf0e4268607b](https://sonicscan.org/address/0x38cFA6cB37d074B6E954C52d10a4cf0e4268607b)
* **Beets BRUSH/scUSD:** [0xc5ab8d98f959453e416b2f15848a02cc99bc695e](https://sonicscan.org/address/0xc5ab8d98f959453e416b2f15848a02cc99bc695e)

## Sonic NFT Marketplace:

* **ExistingNFTContractPayment** : [0x75e9b169ea55d07be503e71da8b5ae66056bea8a](https://sonicscan.org/address/0x75e9b169ea55d07be503e71da8b5ae66056bea8a)&#x20;
* **PaintswapLibrary** : [0xe0cb467a1a46d29682332e0ba8099aee26dee620](https://sonicscan.org/address/0xe0cb467a1a46d29682332e0ba8099aee26dee620)
* **MarketplaceWhitelist** : [0xc1dd8640b3acbc34a228f632ef9bea39dcc7b0ce](https://sonicscan.org/address/0xc1dd8640b3acbc34a228f632ef9bea39dcc7b0ce)&#x20;
* **FeePercentage** : [0x32b38b299fe1c67e8f2196cb34eb43be0ddfbf37](https://sonicscan.org/address/0x32b38b299fe1c67e8f2196cb34eb43be0ddfbf37)&#x20;
* **CollectionRoyalties** : [0xd9d0f181252d9c2a103be3af0d8f86afedb89561](https://sonicscan.org/address/0xd9d0f181252d9c2a103be3af0d8f86afedb89561)&#x20;
* **NFTVault beacon** : [0x09c271b80d35693f1e969c1b1ed0aa2b8176c723](https://sonicscan.org/address/0x09c271b80d35693f1e969c1b1ed0aa2b8176c723)&#x20;
* **NFTVaultRegistry** : [0x63b5e3871d7df6813660360035a21204554be8e0](https://sonicscan.org/address/0x63b5e3871d7df6813660360035a21204554be8e0)&#x20;
* **NFTVaultFactory** : [0x711c1e2a7aeeafa08b63fda68fb4d76b371efe0a](https://sonicscan.org/address/0x711c1e2a7aeeafa08b63fda68fb4d76b371efe0a)&#x20;
* **PaintswapMarketplace** : [0x0c558365eeff4b057fdbed91bc3650e1a00018b4](https://sonicscan.org/address/0x0c558365eeff4b057fdbed91bc3650e1a00018b4)&#x20;
* **CompleteSalesHelper** : [0xCE00C3E03722c99cBf1519946ba31B4A24A7D52e](https://sonicscan.org/address/0xCE00C3E03722c99cBf1519946ba31B4A24A7D52e)&#x20;
* **PaintswapUserNFT beacon** : [0x327b016094C853751e8354F037239eCd5b4cEEd9](https://sonicscan.org/address/0x327b016094C853751e8354F037239eCd5b4cEEd9)&#x20;
* **PaintswapUserNFTERC2981 beacon** : [0xB0679BA295fDBB3d084a7d76fd4d21FA60Ce5b05](https://sonicscan.org/address/0xB0679BA295fDBB3d084a7d76fd4d21FA60Ce5b05)&#x20;
* **PaintswapContractFactory** : [0xEcfCD5D06715B530a431367d0D411827d60Eed97](<https://sonicscan.org/address/0xEcfCD5D06715B530a431367d0D411827d60Eed97 >)
* **RoyaltySplitter** : [0xb20842fe0fb339fa2f57da490e7acd6ab89fa7c5](https://sonicscan.org/address/0xb20842fe0fb339fa2f57da490e7acd6ab89fa7c5)
* **Beardies** : [0xF20bd8B3A20a6d9884121d7a6e37a95a810183E2](https://sonicscan.org/address/0xF20bd8B3A20a6d9884121d7a6e37a95a810183E2)&#x20;
* **ColorfulCoal** : [0xa852dD704D8C91BFbBa450d23D7813a935008421](https://sonicscan.org/address/0xa852dD704D8C91BFbBa450d23D7813a935008421)
* **BeardiesFeeClaiming** : [0xa2be7A4dE66B3f319Ab6E90fDB4aaF1C3A32e51b](https://sonicscan.org/address/0xa2be7A4dE66B3f319Ab6E90fDB4aaF1C3A32e51b)
* **ColorfulCoalFeeClaiming** : [0xd4A60BE89C79c042E6DAa2a68b7a0AfC240E8e66](https://sonicscan.org/address/0xd4A60BE89C79c042E6DAa2a68b7a0AfC240E8e66)
* **FeeSplitter** : [0x7c22aa14C76E461e11eAE56Dd69cB61B8E0e2DAc](https://sonicscan.org/address/0x7c22aa14C76E461e11eAE56Dd69cB61B8E0e2DAc)

## NFT Launchpad:

* **Registry Address :** [0x19604b5249ef54a37739a12f90ad06d143d06ab3](https://sonicscan.org/address/0x19604b5249ef54a37739a12f90ad06d143d06ab3)
* **NFT Factory Address :** [0xf4d3e689cb1cc71c635fe0e56f5377c343ec3796](https://sonicscan.org/address/0xf4d3e689cb1cc71c635fe0e56f5377c343ec3796)
* **Launchpad Address :** [0x088e5d8fddee0d4fcdda68cfc1a578d1d8aa37e9](https://sonicscan.org/address/0x088e5d8fddee0d4fcdda68cfc1a578d1d8aa37e9)
* **ERC721 Beacon :** [0x50d16738f991028bcf9a010da67dc9bbf60920e8](https://sonicscan.org/address/0x50d16738f991028bcf9a010da67dc9bbf60920e8)
* **ERC1155 Beacon :** [0xffe7cb448f510525c942734ecccc67e9b597c2bf](https://sonicscan.org/address/0xffe7cb448f510525c942734ecccc67e9b597c2bf)
* **ERC404 Beacon :** [0xc2b63ddb645d42a897e1d6fb15b3e5f5f5709be9](https://sonicscan.org/address/0xc2b63ddb645d42a897e1d6fb15b3e5f5f5709be9)

## Estfor Kingdom:

* **Bridge** : [0x551944b340a17f277a97773355f463beefea7901](https://sonicscan.org/address/0x551944b340a17f277a97773355f463beefea7901)
* **World** **Actions** : [0x9e1275dd55e9623dc8f1673fc3c94cf1176a2816](https://sonicscan.org/address/0x9e1275dd55e9623dc8f1673fc3c94cf1176a2816)
* **Randomness** **Beacon** : [0x9b4ba31bf6031d9304c5d4487c3b30d58cef49a3](https://sonicscan.org/address/0x9b4ba31bf6031d9304c5d4487c3b30d58cef49a3)
* **Daily Rewards Scheduler** : [0x56ddffd7126b55883b603c4c5f33c639dfa424bc](https://sonicscan.org/address/0x56ddffd7126b55883b603c4c5f33c639dfa424bc)
* **Treasury** : [0x50b64112cc5af4ff4f8e079143c5b19decddaf03](https://sonicscan.org/address/0x50b64112cc5af4ff4f8e079143c5b19decddaf03)
* **Shop** : [0x80b78e431b6e52027debe297cd8ba614820a2f1b](https://sonicscan.org/address/0x80b78e431b6e52027debe297cd8ba614820a2f1b)
* **Royalty** **Receiver** : [0x6c01e51d7254e5d3a3d844d2d56c35dd8abfa753](https://sonicscan.org/address/0x6c01e51d7254e5d3a3d844d2d56c35dd8abfa753)
* **Admin** **Access** : [0x3977a0e1a9f7564ce20cd88a22ae76d13386087a](https://sonicscan.org/address/0x3977a0e1a9f7564ce20cd88a22ae76d13386087a)
* **Item NFT Library** : [0xe5440a37964fdfb7456c292d31471d80d7f6046b](https://sonicscan.org/address/0xe5440a37964fdfb7456c292d31471d80d7f6046b)
* **Item NFT** : [0x8970c63da309d5359a579c2f53bfd64f72b7b706](https://sonicscan.org/address/0x8970c63da309d5359a579c2f53bfd64f72b7b706)
* **Bazaar** : [0x0d6d3794c858b512716e77e05588d4f1fc264319](https://sonicscan.org/address/0x0d6d3794c858b512716e77e05588d4f1fc264319)
* **Estfor Library** : [0xe3223eaf0e260b54a8ce777ac9f4a972310370c0](https://sonicscan.org/address/0xe3223eaf0e260b54a8ce777ac9f4a972310370c0)
* **Player NFT** : [0x076aeec336f5abbdf64ba8ddf96fc974b0463528](https://sonicscan.org/address/0x076aeec336f5abbdf64ba8ddf96fc974b0463528)
* **Quests** : [0x193ecbc093f3bcf6ae6155c9f1bd7c963af6b8d2](https://sonicscan.org/address/0x193ecbc093f3bcf6ae6155c9f1bd7c963af6b8d2)
* **Clans** : [0xbc6ed9e6cb54661ed9682c5055a6631d92e9e1d0](https://sonicscan.org/address/0xbc6ed9e6cb54661ed9682c5055a6631d92e9e1d0)
* **Wishing Well** : [0x1207d2f1dc47a9228f20e9d0ce5094ff08bcb00b](https://sonicscan.org/address/0x1207d2f1dc47a9228f20e9d0ce5094ff08bcb00b)
* **Bank** : [0x144884e1b42ccc9c648adee9b5dc1479ce1c8fe3](https://sonicscan.org/address/0x144884e1b42ccc9c648adee9b5dc1479ce1c8fe3)
* **Pet NFT Library** : [0xdb24883dee4100a98bfec32ad95b9abf87c1a32f](https://sonicscan.org/address/0xdb24883dee4100a98bfec32ad95b9abf87c1a32f)
* **Pet NFT** : [0xe97f8165d9d8d6835abdf7a814ba55dd09b7b1ed](https://sonicscan.org/address/0xe97f8165d9d8d6835abdf7a814ba55dd09b7b1ed)
* **Players Library** : [0x480c3e2c73173b25caebc50bf188e984743f52c4](https://sonicscan.org/address/0x480c3e2c73173b25caebc50bf188e984743f52c4)
* **Players impl Queue Actions** : [0x80ca34d47090080159db46409ef7868df88f464e](https://sonicscan.org/address/0x80ca34d47090080159db46409ef7868df88f464e)
* **Players impl Process Actions** : [0x129149ff66bc70bb884efa99b0ae31df3c92e0d6](https://sonicscan.org/address/0x129149ff66bc70bb884efa99b0ae31df3c92e0d6)
* **Players impl Rewards** : [0xe83f7057066f165bbf0590efa50d6dbb544b8a91](https://sonicscan.org/address/0xe83f7057066f165bbf0590efa50d6dbb544b8a91)
* **Players impl Misc** : [0xee6fc8e098fdee9ac4275ca3ece9bafe451ae57e](https://sonicscan.org/address/0xee6fc8e098fdee9ac4275ca3ece9bafe451ae57e)
* **Players impl Misc1** : [0xa3686c30a3af31659f3661fffc645bf9354c2aa7](https://sonicscan.org/address/0xa3686c30a3af31659f3661fffc645bf9354c2aa7)
* **Players** : [0xefa670aad6d5921236e9655f346ca13a5c56481b](https://sonicscan.org/address/0xefa670aad6d5921236e9655f346ca13a5c56481b)
* **Promotions Library** : [0x201ffa5be3886d19ef2f18da877ff3b9e34d10c9](https://sonicscan.org/address/0x201ffa5be3886d19ef2f18da877ff3b9e34d10c9)
* **Promotions** : [0xaf48a8a12f29e30b3831392aa2ee6344d07d188b](https://sonicscan.org/address/0xaf48a8a12f29e30b3831392aa2ee6344d07d188b)
* **Passive** **Actions** : [0x72bb8faee4094d5a701faa26f9f442d32dfe53b6](https://sonicscan.org/address/0x72bb8faee4094d5a701faa26f9f442d32dfe53b6)
* **Instant** **Actions** : [0x765f7068c3cd210b52374498f3ce01617667aed0](https://sonicscan.org/address/0x765f7068c3cd210b52374498f3ce01617667aed0)
* **VRF** **Request Info** : [0x4875572c5d0910fdc19a193e38c3eb1113e28218](https://sonicscan.org/address/0x4875572c5d0910fdc19a193e38c3eb1113e28218)
* **Instant** **VRF Actions** : [0x1ea4b1fa7f069b89eb8cceee30bfb24945e4d638](https://sonicscan.org/address/0x1ea4b1fa7f069b89eb8cceee30bfb24945e4d638)
* **Generic Instant VRF Action Strategy** : [0x05cd907e6ad6cad21ab2a39e49c68b110be7189a](https://sonicscan.org/address/0x05cd907e6ad6cad21ab2a39e49c68b110be7189a)
* **Egg Instant VRF Action Strategy** : [0x231363f40693698df92354275e2bcc4cbe48aa56](https://sonicscan.org/address/0x231363f40693698df92354275e2bcc4cbe48aa56)
* **Bank Relay** : [0x0df55b940e993f8d3b06a64212962c3d0fef8cba](https://sonicscan.org/address/0x0df55b940e993f8d3b06a64212962c3d0fef8cba)
* **PVP Battleground** : [0x679193f35e696651e125b2851ee7c4e44bf40a18](https://sonicscan.org/address/0x679193f35e696651e125b2851ee7c4e44bf40a18)
* **Raids** : [0xec57b7988ee3344bcf4ce64e5d11f495df7cd951](https://sonicscan.org/address/0xec57b7988ee3344bcf4ce64e5d11f495df7cd951)
* **Clan Battle Library** : [0x10a540055069172cf74bb7e06133d887a7e3a3d8](https://sonicscan.org/address/0x10a540055069172cf74bb7e06133d887a7e3a3d8)
* **Locked Bank Vaults Library** : [0x10de14eafea8f841689b01fa682c63e52255b148](https://sonicscan.org/address/0x10de14eafea8f841689b01fa682c63e52255b148)
* **Locked Bank Vaults** : [0xfaa31b6ddb7e07cae5ff15475b3966d78d660240](https://sonicscan.org/address/0xfaa31b6ddb7e07cae5ff15475b3966d78d660240)
* **Territories** : [0x5a6d80bb035318d2a24c1fdfd055032a15f11b12](https://sonicscan.org/address/0x5a6d80bb035318d2a24c1fdfd055032a15f11b12)
* **Combatants Helper** : [0xc754d621239b5830264f8c8e302c21ffe48625fc](https://sonicscan.org/address/0xc754d621239b5830264f8c8e302c21ffe48625fc)
* **Territory Treasury** : [0x4b1da5984c89312f852c798154a171a5ddc07d43](https://sonicscan.org/address/0x4b1da5984c89312f852c798154a171a5ddc07d43)
* **Bank** **Registry** : [0xf213febd3889c5bf18086356e7eff79e2a9fe391](https://sonicscan.org/address/0xf213febd3889c5bf18086356e7eff79e2a9fe391)
* **Bank** **Factory** : [0x76af5869f1b902f7a16c128a1daa7734819ec327](https://sonicscan.org/address/0x76af5869f1b902f7a16c128a1daa7734819ec327)


# API Endpoints

List of endpoints used by the client application to communicate with the Paintswap API and contracts

### Full Paintswap API Documentation:

{% embed url="<https://api.paintswap.finance/docs/>" %}

### General notes

Endpoints are subject to change during the ongoing development of our platform, for support please visit our discord.

All prices are reported in the `wei` unit.


# Discord Sales Bot

Invite our Paintswap Sales bot to your discord channel to receive messages when sales, listings, offers or bids are made on selected NFT collections

What is the Paintswap Sales Bot

It is a public discord bot that sends messages about events that happen on Paintswaps NFT Marketplace. The most common use case is tracking the sales for a particular NFT collection but you can do much more.

### Intro

The bot is self-service and customizable by admins of each discord server. It can run in multiple channels with its own settings. Track one or more collections, configure minimum $S and listen to events like sales, listings, bids and offers.

<figure><img src="/files/0S6anSsoVHCJAdskg8JE" alt=""><figcaption></figcaption></figure>

### How to get the bot in your discord channel

Invite link below:

<https://discord.com/api/oauth2/authorize?client_id=914241476253339668&permissions=2048&scope=bot%20applications.commands>

### Getting started

The bot uses the discord's command (`/`) feature. Once you have invited the bot. Type `/help` or `/commands` to get more information.

#### Example

Let's look at an example command to receive the sales for a particular collection. This is all you have to run if you only want to track one particular collection in the channel.

`/track_collection Sale 0x31911223bb3ff5b773af3e677fc0ac5760215e4e`

* `/track_collection` is the name of the command you are running
* `Sale` is the event you want to listen for. Others include Listing, Bid or Offer
* `0x3191...` is the contract/collection address. If you don't know what the collection address is, you can find it either on paintswap.finance/marketplace/collections or sonicscan.com by searching by name of the collection

You can check your channel settings any time with:

`/show_channel_settings`

#### Testing

Once you have the bot set up to track the collections you want, it's nice to know if it is going to work or not, this is where `/test` comes in.

`/test Sale`

This will test if the bot has permissions to send in your channel and optionally it's always a great way to see what your collection or a specific NFT will look by passing the collection and or tokenID to the test command too.

<figure><img src="/files/Un2YP0hu49qs40RzCCG4" alt=""><figcaption></figcaption></figure>

### Settings

Tracking and untracking specific collections tells the bot which collections to send. If you are showing all collections you can ignore specific collections with `/untrack_collection` .

Settings are like checkpoints that an NFT has to meet in order to be sent to you. We have minimum $S and NSFW as the current checkpoints. By default NSFW NFTs will not be sent and any above 0 $S will be sent (So all of them).

If you want your channel to have a higher $S threshold for example you only want sales above or equal to 100 $S.

`/default_minftm Sale 100`

The above command will mean any NFTs below 100 $S will be ignored. A sale for 50 $S will not be sent to that channel.

NSFW (Not Suitable For Work) is disabled by default but if you want to enable it for your channel:

`/defaultNSFW true`

The reason those settings above use the word default is because you can override those values with specific collection settings. For example, if you are tracking all collections but 'LowCost MassSales' collection is spamming your sales too much. You can set a minimum $S just for that collection eg\
\
`/collection_minftm Sale 0x319... 50`

To see your channel settings at any time `/show_channel_settings`

### Permissions

When you invite the bot with the link at the top. It will ask for commands and send message permissions. Those are the only permissions the bot needs.

The bot will not have permission to send to all channels, any private channels or channels which do not allow members to send in will prevent the bot from sending events. You will need to give the bot send permissions in those instances.

### List of commands

#### Info

`/help` Instructions on how to use the bot

`/commands` List of commands

`/test` Test what an event will look like

#### Tracking

`/track_all_collection` Get event for all collections

`/untrack_all_collection` No longer track all of the collection

`/track_collection` Add a specific collection to track

`/untrack_collection` Remove and ignore a specific collection

#### Settings

`/show_channel_settings` Display the current channel settings

`/default_minftm` Set the default minimum $S value in this channel

`/default_nsfw` Set whether you want NSFW (18+) on by default in this channel

`/collection_minftm` Set the minimum $S override for a specific collection

`/collection_nsfw` Set whether a collection should show NSFW NFTs

#### Restarting (Wiping your settings to start again)

`/reset_channel` This will irreversibly remove all settings on the channel

`/reset_server` This one affects the whole server. It irreversibly removes all settings on all channels. As if inviting the bot for the first time.


# Media Kit

{% file src="/files/G0zRK3i4oVbPYUT6Vv5e" %}

{% file src="/files/D9L50Qw4wa6fyDxiU3i8" %}

{% file src="/files/3n9hO9JHKrYb0oIDFS2R" %}

{% file src="/files/9iZZkNbzM2ZDMh6DzTQI" %}

### Paintswap VRF

{% file src="/files/YWLa7GHnH6EOTKPkY0tZ" %}

{% file src="/files/0lA1vRaawZkKc0Yrf7ST" %}

{% file src="/files/pVZpZkprNUFpKDv6ZIcQ" %}

{% file src="/files/TMBCfVGOlWWNMwtBtglJ" %}


# Bugs & Reports

**Bug Program** \
\
Paintswap offer rewards for bugs or exploits found on our platform. These scale with the severity of the issues and the solutions provided. Please send any bugs or issues to <admin@paintswap.finance> with the following format:\
\
**Subject:** Bug Program \
**Content:** One sentence overview of the bug or issue. Further details of how to re-produce the bug or issue. Including detailed descriptions & images where applicable. A Sonic compatible address for any rewards to be sent. \
\
Rewards are paid in our native token of BRUSH and the value and lock time will be dependent on severity of the bug or issue and at the teams desecration. You may be asked to provide further information about the issue you found before rewards are paid. \
\
We will not be held to ransom and attacks where possible should not be performed on the live platform. For example: Please contact us if you need to make performance tests that may affect any of our services and we can provide you with a test environment. Damaging attacks against the live platform may result in no rewards.


