While Anonymity Mining v1 (AMv1) was used to launch the first anonymity pools on IoTeX, we are aware a limitation of AMv1 - the number of CYC tokens a user mined (by putting her asset into the anonymity pool) is not proportional to how long he locks her asset in the pool, which is not the most effective way to reward long-term anonymity providers.
In AMv2, we redesigned the anonymity mining to achieve the following two properties:
The number of CYC mined is proportional to how long one locks one's asset in the pool - the longer the asset stays in the pool, the more CYC anonymity providers obtains;
Enforce the life span of each anonymity pool (usually 90 days) to encourage anonymity providers to shuffle their assets and deposit into a new pool, to further improve the degree of privacy (since a pool with many long-term deposits but lacks short-term deposits/withdraws offers very limited degree of privacy).
When interacting with anonymity pools, one needs to understand the terminology the pools use to characterize themselves:
Asset Denomination is the number of coins or ERC20/XRC20/BEP20 tokens the pool provides anonymity. For example, the C3PO pool's primary asset is BNB, and its denomination is
100, meaning each deposit/withdrawal is
100 BNB, exactly.
Coin Denomination describes an auxiliary feature for better usability. When a user deposits an asset such as BUSD into a pool, a small amount of native currency (e.g.,
0.1 BNB) of the underlying blockchain will be deposited with the asset into the pool, which will be fully refunded to the withdrawal address as the gas fee for the user. For example, with
0.1 BNB deposited to her new address upon withdrawal, Alice can further transfer her BEP20 asset or invoke other smart contracts from this new address.
CYC Denomination is a small dynamic amount of CYC, which ensures the amount of CYC Alice earns is proportional to how long her asset stays in the pool while not disclosing how long her asset remains in the pool to others. This sounds contradicting but can be viewed through an example. When Alice deposits her asset +
0.1 BNB to the pool, she deposits
X CYC according to CYC Denomination; she lets the asset stay in the pool and assumes
Y CYC has been mined. Upon withdrawal,
(X + Y) CYC will be sent back to Alice. Of course, Alice knows she earns
Y CYC. Thanks to zkSNARK that disconnects the withdraw tx from the deposit tx, no one (except for Alice) knows that the upfront deposit is
X CYC, and no one can calculate
(X+Y). Therefore, no one knows how long the asset has been stay in the pool. Isn't it cool?
The following pools are launched using AMv2.
CYC per Day via AM
Total CYC via AM
A fixed amount of CYC such as
0.25 is given to all anonymity providers in each pools on a daily basis.
Deposit BNB (or BUSD or IOTX) into C3PO (or R2D2, BB8) pool, optionally deposit X CYC
Let BNB stays in the pool for N days
Withdraw BNB from the pool and obtain Y CYC (of course Y > X)
Below is an example demonstrating how AMv2 works. We ignore all fees for now to simplify this example.
Total CYC in Pool
Total BUSD in pool
Upon the withdrawal of asset, the following will be charged:
1.5% of the CYC obtained is charged and burned immediately
0.5% of the CYC obtained is given to relayer to compensate for the gas cost of the withdraw tx