How the project works

Introduction

On the challenges facing esports link, we mentioned that the key pillar in the Slips solution is the tokenization of players. This page will discuss why we tokenize players and how the project works.

Most Esports competitions send out SOS messages to existing teams. They need big name players to give them an air of legitimacy. Since Slips aims to empower players, our model invites players to join the league individually instead. Players prefer to join as teams but as soon as financial incentives are introduced, these short term bonds can be quickly shredded.

When a player expresses an interest in joining the league, we launch a token for them. This token, based on the ERC-721 specification contains three pieces of information related to the player:

  • The player's Gamer IDs (Steam, Xbox, PSN accounts)
  • The player's current status (rank) in the game
  • The player's contractual information: their current valuation, wage and whether they are owned by any team/investor

  function createPlayer(
      string memory tokenURI,
      string memory gamerId,
      uint8 platform,
      string memory rank,
      uint256 division,
      uint16 mmr
      ) public returns (uint256) {

      // ... omitted for clarity

      // create the token
      _mint(leagueAddress, newItemId);
      _setTokenURI(newItemId, tokenURI);
      _setPlayerDetails(newItemId, pDetails);
      _setContractDetails(newItemId, cDetails);

      emit PlayerCreated(msg.sender, newItemId, gamerId, platform);

      return newItemId;
  }
  

We built an oracle that queries data from public APIs for the game the league is based on. When a player token is launched, as shown above the PlayerCreated event is emitted. Our Oracle listens for this event and uses the information from the event to query multiple trackers to verify the player.

Players have a reason to lie, so once the Oracle has retrieved the information for the player, it will send a PlayerVerified transaction to the contract with the data from the trackers. This is used to replace the initial contract details set in the token which might be based on faulty data from the player.

We also have a League contract deployed, every single player token launched is initially owned by this contract. Below we will explain how a player contract can be "obtained" from the league through our drafting system. Once the token is released from the league, it is tradeable between teams and agents.


Drafting players from the league and trading player tokens


  /**
   * @dev Internal function to return the base valuation of a player which will be
   * calculated by their rank and division
   * @param rank rank of the player (bronze1...4, silver1...4, gold1...4 etc)
   * @param division division of the player (1,2,3,4)
   */
  function _calculateInitialBaseValue(string memory rank, uint256 division) internal view returns(uint256) {
      string memory concatRankDiv = string(abi.encodePacked(rank, '_', division.toString()));
      uint256 baseValuation = _initialPlayerValuations[concatRankDiv];
      require(baseValuation > 0, "Trying to retrieve a base valuation for a rank/div that doesn't exist");
      return baseValuation;
  }
  

How a player token is exchanged and the setting of an initial valuation

When the PlayerVerified transaction is sent to the contract, the initial valuation of the player is set in the token's contract. This valuation is based on the player's rank and MMR. To obtain a player from the league, you need to transfer this amount to the token's releasePlayerContract() function.

Once the amount has been transferred to the token, you have a period of 24 hours in which to agree a contract with a player. This involves both parties sending a signed message to the agreeContract() function. If you fail to agree a contract, the player remains with the league or their existing owner.

The initial valuation is only the baseline for a player. The player's performances in the league also contributes towards their valuation. At the end of each round, the results of the matches are fed into the contract and the updateValuation() function will take into account whether the player was on the winning team and how many goals they scored/saved and update the valuation of the player.

Note: Drafts take place before the start of the season and teams owners are allowed to pick from the free agent pool in reverse order of how their team finished in the league the previous season.

Prior to teams getting to pick, the owners of the $SLOC governance tokens get their picks, based on how much of $SLOC they have accumulated. Learn more in our section on governance.

Trading player tokens

When a player is drafted from the league, the trader only needs to pay the buyout fee which is the initial valuation of the player. The league earns money each time a player is drafted. Getting a player from the league is also mostly a profitable trade because good performances will only increase the player's valuation from the base line valuation which is derived from their rank.

Please see the section below to learn more about how the $SLCC (Slips League Championship Credit) token is used in the league. You may also be interested in reading about why we added rebasing to $SLCC.

In addition, when you draft a player, you only need to agree a new contract with the player. That is basically agreeing to pay them X $SLCC for Y rounds. However once a player has been drafted, a further exchange will need to both pay the current valuation of the player and also buyout the contract the player currently has: wage_per_round * rounds_contracted_for.

As described above, if this amount is transferred to the releasePlayerContract() function, the new owner has 24 hours to agree a new contract to finalize the transfer. Anyone in the Slips ecosystem can trade players - you don't have to own a team, you can act as an agent for the player and purchase contract rights as long as a player is willing to sign for you.

For some traders, this will be an interesting option - since it relies upon the ability to scout good players before others and being able to find underperforming players in poor form. Also remember that players can and should improve with good coaching. So you have an incentive to invest in the training of players you represent.

The quality of players will increase with time

When a Slips league is first launched, a certain type of player will be attracted to the league because of the novelty of the concept. The sale of the team franchises will allow the league to bootstrap itself. As more players join and get drafted away, the income from the player sales will allow the league to offer better prize pools.

Better players will be attracted to the league as the prize pool steadily improves. If the governance token holders act in the best interest of the league, it can only lead to prosperous outcomes for players, team owners and speculators.

Why would players want to be tokenized?

It's great that we have a system that allows contracts to players being bought and sold like trading cards and there is clearly benefits for team owners and full time traders.. but what about the players themselves? Why would they consent to be tokenized and what benefits would they accrue from doing so?

Pro gamers are frequently exploited through predatory contracts but lower down the rungs, the challenges gamers face breaking into eSports are just as trying. The tokenization process addresses a lot of the issues players face.

We explained above why teams and even speculators have an incentive to invest in the training of players. This is one advantage for players but it's not the only benefit.

Creative and smart developers are continually pushing the boundaries of the DeFi ecosystem. For example, Alex Masmej is currently working on a project to allow NFT token holders to take out uncollateralized loans called Rocket. Such projects could allow players to leverage the contract details in their tokens to take out loans against their future earnings.


Teams and Format of the League

The default setting of a Slips league is to have two divisions with space for 12 teams in each division. This is of course configurable but at the very least this means a total of 24 seats will be available. The scarcity of teams means that eventually like players, traders will buy and sell teams as well.

Teams will compete to win their respective leagues. Before the inagural season of the league, the teams will be auctioned and sold off to the highest bidders. Teams in the top division will have a higher auction price than the second division teams.

Once a team is bought from the league, it remains the property of the team owner until it is sold to another entity. If the team runs into financial difficulties and the owner can no longer meet their obligations, the league will reclaim the team and re-auction it at the first available moment.

Prize Pools

All the teams receive a participation bonus at the start of the season. Being part of the top division yields a bigger bonus. At the end of the season, the league winners are crowned and receive a prize (50% of the prize pool for winner of the top division, 25% for the winner of the bottom division).

The finals of a knockout competition between all the teams in the league will be played at the end of the season with the winner receiving the remaining 25% of the prize pool.

As mentioned in the graphic above, there is promotion and relegation between the two divisions which is an incentive for team owners to invest in their rosters to remain competitive. Dropping down a league could have serious financial ramifications for a team. Likewise the goal of being promoted to the top table is a strong driver to acquire better players.

Benefits of team ownership

Unless you are yield farming the $SLOC governance token or actively trading player tokens as an agent, the best way to profit from the Slips platform is to own a team. Just passive ownership of a team would net you an $SLCC participation bonus every season.

Obviously as with every other scarce commodity, teams are only going to get more valuable with time so investing in a team early is a smart strategy but there is something else to consider as well. A team owner could be in possession of the contracts of ~5-6 players.

We hope to upgrade Slips to provide multiple contract types. For now the default is "an agreement to pay a specified amount of tokens per round for a duration". We could also have contracts which lock up an amount of tokens and automatically pay out per round.

This would allow a team to leverage it's roster in other areas of the DeFi ecosystem. For example, you could take out a loan using your player tokens as collatoral.


Further Reading

Hopefully this page has given you a basic understanding of how the Slips project works. If you want to dive further. please check out the following links: