What’s an “active user”? Clarifying PSP token distribution filtering logic

Published in
8 min readNov 15, 2021


Aka measuring engagement: the journey from >1.3M “unique users” to 20 000 “active users”

When a project that was live for years finally launches a token, it’s a critical step in its development and decentralization journey. There are tons of things to get right to make sure the token indeed serves its intended purpose: they won’t be detailed in this article. If that’s what you are looking for, please refer to:

Introducing the PSP token to make ParaSwap even more efficient and decentralized

In this piece, we would like to take the time to explain the PSP initial distribution filtering logic. Indeed, we decided to reward “active users” instead of going for a volume-based distribution like it’s usually done.

We’ve established the distribution mechanism to target to the best of our ability genuine ParaSwap users that were not simply trying to game a potential token drop. Out of a starting pool of more than a million unique addresses that have swapped on ParaSwap so far, around 20 000 are eligible for the PSP distribution.

Let’s explain the choices that were made with the filtering logic, and how it works.

The ParaSwap team worked hard on the logic, yet we’ve received a significant amount of attention from airdrop hunters and had to make tradeoffs; and there might be genuine users left out, we’ve double checked our logic to make sure it’s minimized.

Find the list of all eligible addresses here

The risks of volume-based airdrops

Volume-based airdrop distributions are hard to get right, as they require a lot of filtering to remove all the various attempted users, and even potential investors and other insiders try to game potential airdrops.

While this might seem far-fetched, it might actually be much more common than we think. Ribbon, a protocol streamlining investing in options, recently launched their RBN token and suffered such an attack: Divergence Ventures got caught gaming the Ribbon airdrop. After the public outrage, they decided to reimburse the RBN tokens. But what about those who don’t get caught?

Considering that with ParaSwap’s, the PSP holders play a critical role with the private market makers of the ParaSwapPool, we couldn’t take any chance of having something similar happening to our initial distribution.

So we looked at what happens with various token launches, how fair the distributions were and what happened with their governance. In our case, more than the volume of utilization that can easily be inflated with wash trading or using several addresses, we decided to look at and reward engagement.

An engagement-based airdrop

Why should a random whale who came one day before the snapshot date to swap 1000 ETH at once get more tokens than an average user making frequent 1–5 ETH swaps on ParaSwap for more than two years?

We found no credible answer to this question, and so we decided it should not be as such, despite the volume-based approach behind so common (used for Uniswap, Pooltogether, etc.)

So with the initial distribution, amounting for 150M PSP tokens (7.5% of the total supply), the usage volume is only a small factor. Instead, we look at the time the user first interacted with ParaSwap, if and how frequently he came back and how savvy the swaps were. There’s a lot that can be inferred from onchain data, and that’s precisely what we did.

The goal was to find out our most engaged users: users of ParaSwap that were not here just to game a drop, but actually making sensible token swaps. So the 150M PSP allocated to this drop are allocated depending on your activity level, with up to three tiers.

Just so we’re explicit about our tiers: the top tier, receiving the largest part of the PSP drop, is made of the most active users. Someone who found out about ParaSwap in 2019 and has been frequently swapping on it since, even small amounts, do qualify for this tier and will receive the maximum amount of PSP tokens.

Identifying airdrop hunters

Let’s dive into the details of our search for airdrop hunters: this next section is almost straight from the developers who spent almost a week on the sorting logic.

Lately, we have seen a rise in Airdrop Hunters. These are users who create multiple wallets and perform transactions on a protocol for the sole incentive of getting a future airdrop. These users can be standard DeFi users, sophisticated or power defi users, or even hedge funds.

We were highly alarmed by the recent case with RibbonFinance where an investor exploited $2.5M in airdrop rewards using multiple wallets. Hence, we wanted to come up with a mechanism to filter such scenarios to the best of our ability.

Getting the raw data

Around a month ago, we began collecting data for all the swaps that have happened on ParaSwap. We fetched these swaps via the different ParaSwap Subgraphs deployed for each network (chain). We then matched these swaps with the appropriate historical price of the tokens via CoinGecko.

  • The raw data, as well as the final snapshot, can be found here.
  • The final snapshot was taken on 8th October (Timestamp: 1633730399).

We started by looking at various key metrics in the raw data. For example, we found that ~500K unique Externally Owned Addresses that have triggered one or more transactions on ParaSwap’s contracts, the number of unique tokens traded on the Ethereum chain is ~2.3K, on Polygon is ~1K, on BSC is ~2.8K, on Avalanche C-Chain is ~100. It was surprising to find that BSC had the most unique tokens traded.

Filtering out the obviously suspicious transactions

We then decided to filter for more obvious transactions; i.e: we didn’t want to consider transactions in which the native tokens were wrapped/unwrapped (eg: ETH <> WETH, BNB <> WBNB, etc). Also, as ParaSwap supports swaps of any arbitrary token, we wanted to remove any potential wash-trading using random tokens.

We decided to filter transactions where both the underlying tokens had trading volumes greater than $1m on ParaSwap. This narrowed our search to 200 tokens on Ethereum, 58 on Polygon, 43 on BSC, and 20 on Avalanche C-Chain.

Looking at the wallet

We then looked into the behavior of a random user address that has traded on ParaSwap. Because of the sheer number of airdrop hunter addresses we quickly stumbled upon suspicious addresses, such as:

It became quite clear that these addresses were not real users but were most likely operated by Airdrop Hunters. There are quite some projects like Zapper, Zerion, MetaMask, etc. that have integrated us but don’t have a token yet; interestingly, airdrop hunters who try to become eligible for rewards in such projects also end up becoming eligible for our community rewards.

If you look at the above sample transactions, you’ll see that the airdrop hunting pattern was similar:

  1. Start with a parent address
  2. => transfer funds to multiple EOAs either sequentially or simply using a multi-send contract
  3. => do a few transactions on ParaSwap and/or our partner projects
  4. => finally, transfer the funds back to the parent address.

These addresses would also not have any historical identity of using other projects. Hence two patterns were clearly evident: Dummy wallets operated by Airdrop Hunters don’t hold funds for a longer duration and have very few transactions on the address.

We wrote a simple script to fetch native token balances and nonces of all the user addresses in the respective chains that performed the ParaSwap transaction; we then filtered the user addresses with at least 50 txs on the respective networks or have a minimum native token balance.

The minimum token balance was set to 0.028 ETH for Ethereum, 0.25 BNB for BSC, 20 Matic for Polygon, and 0.9 AVAX for Avalanche C-Chain. We also decided that we only wanted to distribute rewards to the users who had used ParaSwap at least 6 times in the last 6 months.

Swaps from projects integrating ParaSwap

As a lot of projects that integrated Uniswap weren’t happy that their users didn’t receive the airdrop, we wanted to make sure all users from our known project integration were also taken into consideration.

The initial idea of simply using the txOrigin parameter was not enough as we have integrations such as Argent and CowSwap which use relayers. For transactions that occurred via the Argent wallets, (which could be distinguished with the referrer code) we decided to use the msgSender (WalletAddress) as the user address.

CowSwap transactions were quite tricky since neither the msgSender nor the txOrigin was the user address. To solve this, we looked at their Dune Analytics dashboard which had a list of all transactions on CowSwap along with the respective traderAddresses. Now the hard part was to filter the transactions done on ParaSwap out of all the CowSwap transactions.

After a few unsuccessful tries, we were able to match CowSwap transactions with the ParaSwap transactions using txHash and the srcToken parameters.

The last combing

After all the above data cleaning and filtration, we now had 26K addresses. Surprisingly these 26K users conducted 80% of the total volume at the snapshot time. This wasn’t enough, we started to manually look into those 26K addresses and were able to find airdrop hunters who passed the above requirements.

We again tried to leverage the common patterns between hunters. Hunters with multiple addresses eligible for airdrop usually do transfers between their accounts. We wrote a script to divide eligible addresses into blobs (groups) of addresses that have done transfers between them. A user could have had 3–5 addresses that they used to trade and we didn’t want to eliminate that case.

We started inspecting blobs of size > 5. It was clear that big blobs > 60 were hunter addresses. We decided to also fetch the wallet balance (Native Tokens + ERC20 tokens). We then decided to filter all addresses which were a part of blob size > 5 and had a wallet balance of less than 200$. This filtered around 6K addresses and we had 19K user addresses who were noteworthy of the community rewards.

Finally, we decided to assign each eligible user points, based on the following criteria:

  • If total transaction count > 10 => +1 pt.
  • If Max USD value in a single transaction > 100$ => +1 pt, > 1K$ => +2 pts, > 10K$ => +3 pts, > 100K => +4pts.
  • If total volume done on ParaSwap > 100$ => +1 pt, > 1K$ => +2 pts, > 10K$ => +3 pts, > 100K => +4pts.
  • If used ParaSwap in more than 1 network: +1pt.

All the users who received more than 7pts received 10.4K tokens, the users who received points more than 3 and less than or equal to 7, received 7.8K tokens and other users with points less than or equal to 3, received 5.2k tokens.

Hopefully, with these harsh filters, we were able to filter out a majority of airdrop hunters. We are aware that these filters might have also filtered some genuine users. We are positive that true ParaSwapers will anyways be incentivized in the longer run!

Final thoughts on the volume > active user switch

Token distributions are tricky to get right, and only time will tell if our decisions were for the best. The mentalities are barely starting to evolve on this topic, but we’d like to mention and thank the ENS team for their courageous approach: they trailblazed the engagement-based logic by rewarding their most committed users before the ones owning the most amount of ENS NFTs.

Seeing a project of this magnitude “risking it” proved to us that it was a relevant path forward. The ENS token initial distribution is one of the fairest we’ve ever seen in the space, boasting a Gini coefficient previously unheard of. With the introduction of the PSP token, we’re convinced we can achieve and sustain a similar if not even greater fairness in the distribution.

The initial distribution is engagement-based, but what happens now is dictated by the markets. The PSP tokens you received today are yours fully. If you’re unconvinced, feel free to capitulate out of the box and dump them right away.

However, since you’ve been using ParaSwap and drawing value from it for months if not years, we’re convinced you’ll see the importance and value of the PSP and cherish it as your very own part of a critical piece of DeFi infrastructure.

Game on swappers: ParaSwap’s odds are now in your hands!




FR/EN | Enthralled by decentralised finance & playing my part to bring it to mainstream My content lives here 👉 http://tokenbrice.xyz