rSURF — A Reflective Token with a Spin

Yostari
13 min readMay 23, 2021

--

Frictionless yield is a blockchain innovation continuing to take DeFi by storm. A well known early implementation of this concept is Reflect (RFI). As stated on the the Reflect website:

“RFI works by applying a 1% fee to each transaction and instantly splitting that fee among all holders of the token.

Holders do not need to stake or wait for fees to be delivered. Fees are awarded by the smart contract and are immediately reflected in the holders balance.”

This feature in a token is referred to as “frictionless” because it automatically and seamlessly “reflects” the redistribution to the applicable addresses.

Reflective redistributions do not necessarily have to be an allocation to all token holders. A reflective deflationary token will often uses transaction fees to send tokens to a burn address, permanently removing them from supply.

SURF itself has reflective properties. SURF has a 1% transaction fee* that is rewarded to all users staking ETH-SURF LP tokens to the Whirlpool through a reflective mechanism built into the token.

* Note: a) SURF 1% transaction fee is not taken from transfers involving the Whirlpool contract; and b) SURF 1% transaction fee only applies to transactions on the Ethereum network.

Reflective redistributions can also be applied to specific transaction types, and allocated to multiple different buckets. rSURF is a reflective token that does just that. rSURF applies a different 1% reflective redistribution for three different transaction types (wrapping, unwrapping, and transfers), that are allocated in three different ways to two different buckets (all holders/liquidity).

reflectorSURF (rSURF)

rSURF is a wrapped version of SURF taking the reflective token concept to another level. rSURF has the following reflective properties:

  • 1% Wrapping Fee (.25% goes to all holders and .75% to liquidity)
  • 1% Unwrapping Fee (.5% goes to all holders and .5 %to liquidity)
  • 1% Transfer Fee (.8% goes to all holders and .2% goes to liquidity)

As complicated as this may all seem, the seamless integration of rSURF’s reflective features into the operation of the token make its utility easily realized. There really are only three transactions types (wrapping, unwrapping, and transfers) that redistribute a varying allocation of a 1% fee to two buckets (pro-rata redistribution to all other token holders, and stored to purchase and lock additional liquidity into the token).

These combinations of reflective redistribution allocations for specific transaction types build the following auto features into the rSURF token.

Auto-Stake: All rSURF transactions (wrapping, unwrapping, and transfers) redistribute (reward) a portion of the transaction back to all other rSURF holders.

Auto-Liquidity Lock: Reflective redistribution on wrapping, unwrapping, and transfer fees continually bolsters locked liquidity.

Auto-Arbitrage: The dynamics of rSURF will automatically create arbitrage opportunities with SURF.

Learn | Arb | Earn

The core features of rSURF, it’s direct ties to SURF, and the dynamics of the macro token environment, create continual opportunities to arbitrage and earn.

To get started, you need to have both SURF and rSURF on the xDAI STAKE network. This will require you to know how to:

  1. Use cross-chain bridges;
  2. Setup Metamask to interact with the xDAI STAKE network; and
  3. Use Honeyswap.

If you are unfamiliar with how to do any of these things, please see my article Traversing the ETH<>Polygon<>xDAI<>BSC Cross-Chain Bridges.

To buy SURF and rSURF on the xDAI STAKE network, go to the Honeyswap DEX here. When swapping for rSURF, be sure to set your slippage to 1.1% to account for the token’s 1% reflective properties. The xDAI STAKE address for the two tokens are as follows:

SURF (on xDAI): 0xc12956b840b403b600014a3092f6ebd9259738fe

rSURF (on xDAI): 0x5c8c83e5d5f7be815863b810d45d7bc706d7b15b

You can also wrap SURF into rSURF or unwrap rSURF back into SURF using the rSURF Dashboard. There are three gateways to the rSURF Dashboard. All three take users to the same same hash/file destination. Below a links to all three gateways:

rSURF Dashboard Gateway 1

rSURF Dashboard Gateway 2

rSURF Dashboard Gateway 3

There are three sections to the rSURF Dashboard: Wrap SURF, Unwrap rSURF, and My Wallet. To better understand the operation of each section, it is important to understand the three token types, SURF, Wrapped rSURF, and Unwrapped rSURF (urSURF):

My Wallet

The My Wallet section is further broken down into three more sections:

  • The first section summarizes rSURF’s reflective redistributions properties, as well as indicating a maximum wrap/unwrap amount of 50,000 rSURF per transaction.
  • The next section indicates how much SURF and rSURF is in the users connected wallet address (i.e., your connected wallet).
  • The last section indicates the Total rSURF, Total rSURF Wrapped, and Total Wrapped Excess. Below this, is a tangerine colored button that executes the Spin Wrapper function.

We will circle back to the Spin Wrapper feature, but first, let’s apply the rSURF supply statistics in the above screenshot of the rSURF Dashboard to the Wrap SURF and Unwrap rSURF features.

The above screenshot of the rSURF Dashboard indicates 67,893 “Total SURF Wrapped”. This would mean the following breakdown of tokens in the rSURF ecosystem:

  • SURF: 67,893 SURF are locked in the wrapper contract as a result of using the wrap function to create rSURF.
  • rSURF: 67,893 rSURF are in circulation as a result of SURF being locked in the wrapper contract in exchange for rSURF.
  • urSURF: 932,107 urSURF are in the wrapper contract, representing the unwrapped portion of the 1,000,000 rSURF supply not in circulation.

Wrap SURF

To perform the Wrap SURF function, you will need to input a whole number of SURF to wrap. When this function is executed, that SURF will be locked into the wrapper contract in exchange for rSURF. However, the rSURF received will be adjusted by the 1% wrapping fee. Thus, 99% of the equivalent number of rSURF tokens will be sent to your wallet, .25% goes to all holders, and .75% goes to liquidity

As an example, based on the above breakdown of tokens in the rSURF ecosystem, wrapping 100 SURF would look something like this.

The above diagram illustrates what occurs when 100 SURF is wrapped into rSURF.

  1. 100 SURF gets locked in the wrapper contract.
  2. 100 rSURF is sent out of the wrapper contract. This rSURF gets allocated according the reflective redistribution properties of the wrap function (99% goes back to the user, .25% goes the all holders, and .75% goes to liquidity). Note: The bucket in the wrapper contract sending out the rSURF is labeled urSURF because it only become rSURF (i.e., wrapped) when this function is called by the user.
  3. .233 of the .25 rSURF allocation to all holders is sent back the wrapper contract, but to the rSURF bucket instead. This is because the 932,107 unwrapped rSURF (urSURF) held by the wrapper contract, are taken into account for purposes of the .25% reflective redistribution to all holders. This .233 rSURF is will added to “Total Wrapper Excess”, and can be redistributed back into the ecosystem via the Spin Wrapper function. (see below for details on the Spin Wrapper function).

Unwrap SURF

To perform the Unwrap rSURF function, you will need to input a whole number of rSURF to unwrap. When this function is executed, that rSURF will be allocated back into the rSURF ecosystem based on the reflective properties of the 1% unwrapping fee. Thus, 99% will go back into the urSURF bucket of the wrapper contract, effectively becoming unwrapped, .5% goes to all holders, and .5% goes to liquidity. The user will receive SURF equal to the amount of rSURF deposited back into the urSURF bucket of the wrapper contract (i.e., 99%).

As an example, based on the above breakdown of tokens in the rSURF ecosystem, unwrapping 100 rSURF would look something like this.

The above diagram illustrates what occurs when 100 rSURF is unwrapped:

  1. 100 rSURF is sent from the user’s wallet and allocated to the rSURF protocol according the reflective redistribution properties of the unwrap function (99% goes back into the urSURF bucket of the wrapper contract, .5% goes the all holders, and .5% goes to liquidity). Note: The wrapper bucket receiving the rSURF is labeled urSURF because the rSURF sent to it becomes unwrapped, and therefore urSURF, when this function is called by the user.
  2. 99 SURF gets releases from the wrapper contract and is sent to the user’s wallet address.
  3. .466 of the .5 rSURF allocation to all holders is sent to the rSURF bucket of the wrapper contract. This is because the 932,107 unwrapped rSURF (urSURF) held by the wrapper contract are taken into account for purposes of the .5% reflective redistribution to all holders. This .466 rSURF is added to “Total Wrapper Excess”, and can be redistributed back into the ecosystem via the Spin Wrapper function. (see next section for details on the Spin Wrapper function).

Spin Wrapper

The total supply of rSURF tokens is 1,000,000. Of those 1,000,000 tokens, the number of rSURF tokens in circulation is always changing. This is because, for every rSURF token released into circulation, a SURF token must be locked into the wrapper contract. rSURF tokens in circulations are also referred to as wrapped rSURF.

rSURF tokens in the wrapper contract that are not in circulations are unwrapped rSURF tokens, also referred to as urSURF. The rSURF token and the urSURF are the same token, the distinction is that they are in two different states; rSURF is in circulation, urSURF is not.

Even though urSURF tokens are not in circulation, they are still taken into account for purposes of rSURF’s reflective features. When there is a reflective redistribution to all token holders, the wrapper contract receives an allocation for all urSURF tokens in the contract. For example, if there are 100,000 rSURF tokens in circulation, than 900,000 urSURF tokens (90% of the total supply) will be in the wrapper contract. In this circumstance, a reflective redistribution to all token holders will allocate 90% of that redistribution to the rSURF bucket of the wrapper contract.

The wrapper contract does not own rSURF tokens reflectively allocated to it. Thus, a mechanism is need to redistribute the “excess” rSURF back into the ecosystem. This is what the Spin Wrapper function does. Whenever a user calls the Spin Wrapper function, the contract disperses all excess rSURF, with 50% going to all holders and 50% to liquidity. If the majority of 1,000,000 supply of rSURF tokens are urSURF tokens (i.e., not in circulation), the majority of the 50% to all holders will make its way back into the wrapper contract.

Every time a user calls the Spin Wrapper function, the wrapper contract will perform this redistribution until the sooner of two events: 1) the excess rSURF drops below 10, or 2) it goes through 3 cycles of redistributions.

The above diagram illustrates one spin wrapper cycle, where there is 100,000 rSURF in circulation, 900,000 urSURF in the wrapper contract, and 100 excess rSURF in the wrapper contract. When the spin wrapper function is called, 100 rSURF is dispersed from the wrapper contract, with 50 rSURF going to the liquidity bucket, and 50 rSURF redistributed to all token holders. Since the wrapper contract’s 900,000 urSURF account for 90% of the rSURF supply, it receives 45 of the 50 rSURF to all token holders. After one cycle, the wrapper contract would have 45 rSURF. Since this is above the 10 excess rSURF minimum, the smart contract would automatically repeat the cycle, redistributing 45 rSURF instead of 100.

When the wrapper contract accounts for a majority of the rSURF supply, the majority of reflective redistributions will eventually make their way to liquidity due to the wrapper contract continually redistributing excess rSURF through the Spin Wrapper function.

Locked Liquidity

A significant percentage of reflective fees goes to locked liquidity: 75% for wrapping, .5% for unwrapping, and .2% for transfers. In addition, are the reflective fees to all holders that go into the wrapper contract. The wrapper contract currently holds nearly 94% of the rSURF supply in the form of urSURF. Thus, nearly 94% of the reflective fees to all holders, will also eventually makes their way to locked liquidity via the Spin Wrapper function.

Reflections redistributed to liquidity accumulate in a contract until there are at least 500 rSURF tokens. Once this threshold is reached, 250 rSURF tokens are swapped for xDAI, and that xDAI, plus 250 more rSURF tokens, are added to, and locked into rSURF-xDAI LP tokens.

This has several affects:

  1. It permanently increases the liquidity for rSURF.
  2. It permanently increases the amount of rSURF in circulation, by having more tokens permanently locked into the liquidity pool.
  3. It causes some downward pressure on price due to having to sell rSURF to buy xDAI.

The downward pressure on price as a result of selling xDAI to increase liquidity is good for rSURF. It helps create more arbitrage opportunities as rSURF can always be converted back to or traded for SURF, and SURF can always be converted into or traded for rSURF.

Arbitrage

Between it’s reflective properties and its 1:1 ratio with SURF, rSURF is designed to create arbitrage opportunities.

To find an arbitrage opportunity, simply add both SURF and rSURF to a swap transaction on Honeyswap. If trading one token for another yields a higher number of one of the other token, there is an arbitrage opportunity. To do this, you can paste the xDAI STAKE token addresses for SURF and rSURF at the beginning of the article, go directly to the Honeyswap page for a SURF — rSURF swap here, or simply scroll down to it on the rSURF Dashboard.

rSURF Dashboard has SURF — rSURF swap on Honeyswap embedded into it

Alternatively, you can access the SURF — rSURF swap on the DeBank DEX aggregator here.

When determining whether to do an arbitrage, keep in mind that all transactions involving rSURF are subject to a 1% reflective fee. Even though transfer fees are .8% beneficial to all holders, it still makes sense to only arbitrage if there is a greater than 1% discrepancy between token prices. If the intent is to go full circle by wrapping or unwrapping the purchased token, a 2% minimum difference in price would be required to cover the two transactions required to do this.

Here is an example of an arbitrage opportunity:

On Honeyswap, 100 SURF can be traded for 103 rSURF. This is a 3% discrepancy, presenting a good arbitrage opportunity.

As can be seen by the above image, only 102.03 rSURF is recieved, not the 103.065 that was indicated. This is because of the reflective transfer fee. 99% of 103.065 = 102.03. The other 1.03 rSURF is reflectively redistributed, with .82 rSURF going to all holders, and .21 rSURF going to liquidity.

The liquidity for rSURF is still relatively small, so after swapping 100 SURF for 103 rSURF, another 100 SURF for rSURF swap is not nearly as appealing.

Due to the 1% transfer fee, swapping 100 SURF for 100.777 rSURF would net only 99.77 rSURF (99% of 100.777). This is no longer a viable arbitrage opportunity.

For a more sophisticated arbitrage, you could use the Price of 1 SURF across all chains website here to find a cross-chain SURF arbitrage that creates an additional SURF — rSURF arbitrage.

For example, the price of SURF is what is shown above on ETH, BSC, Polygon, and xDAI, and SURF on xDAI and rSURF are both $0.4149. A couple big SURF buys on BSC and Polygon occur, causing the price of SURF on BSC and Polygon to go up to $0.50 on both those networks. This creates an arbitrage opportunity, by selling SURF on BSC and Polygon, and then buying SURF on xDAI. Doing this causes the price of SURF on BSC, Polygon, and xDAI to reach a parity at $0.47 across the three networks. This cross-chain arbitrage changed the price of SURF on xDAI to $0.47, creating another arbitrage opportunity with rSURF. rSURF is still at price parity with the old SURF on xDAI STAKE price of $0.4149. SURF can now be swapped for rSURF driving the price of rSURF back up to parity with SURF on xDAI STAKE.

An rSURF Arbitrage Adventure

On May 3, 2021, 1,000 SURF and 1,000 rSURF were added to an address, for a combined balance of 2,000 SURF/rSURF tokens.

Initial SURF/rSURF Balance as of May 3, 2021

Since that initial 2,000 SURF/rSURF deposit, no other transactions with regards to these two tokens have occurred other than swapping one for another for arbitrage.

As of May 23, 2021 (20 days later), the same address has 1,054.86 SURF and 1,001.6 rSURF, for a total of 2,056.5 SURF/rSURF. This 56.5 increase in SURF/rSURF came solely through arbitrage and receiving allocations of reflective redistribution to all token holders.

Conclusion

Next generation reflective token rSURF is a great addition to the SURF Finance ecosystem. It’s reflective attributes both bolster liquidity, and serve as a self staking option for SURF outside the Whirlpool. In a sense, owning rSURF acts as a stake in the volatility/trading volume of SURF. Like the Whirlpool, rSURF creates an opportunity for long-term SURF holders to capture value from transitory SURF users.

For rSURF, this is only the start. We can expect further integration into other DApps as well as sister tokens with the same dynamics as rSURF wrapping other upcoming SURF Finance tokens on other networks.

To learn more about SURF Finance and rSURF the best place to start is by joining the SURF Finance Discord channel here.

To follow me on Twitter click here. I often post charts and and other information related to blockchain.

--

--

Yostari

Avid Gamer | Economics Geek | Decentralization Enthusiast