Lair of Wisdom — On-chain Co-Op & PvP MMO Game: Guide & Rules

Nour Haridy
5 min readSep 13, 2021


This is the first release of an untested and experimental game. It may simply be broken. There may be other releases in the future. Please proceed with no expectations, including expectations of joy.

Lair Contract: 0x83633dca596E741c80f4FA032C75518CC251B09b

Lair of Wisdom is a pure experiment in on-chain multiplayer game design, deployed on Fantom. The goal of the experiment is to explore new game mechanics and player incentives apart from familiar on-chain concepts such as ownership, assets and trading. In this game, each player is a cog in the machine. Cooperation and team strategy are heavily rewarded while individualistic gameplay is penalized.

The game is fully autonomous. There are no special roles or admin keys. The rules can never be changed and the game cannot be stopped except as a result of player actions and only according to the pre-defined rules.

Game Overview

There are 4 types of entities in the game: Trainers, Eggs, Dragons and the Lair.

All players are trainers.

The lair is where all dragons and eggs live. Its contract provides a registry of all available eggs and dragons in the game. It also creates the first two eggs in the game as soon as it is deployed.

Eggs simply give birth to a new dragon. They can only be laid by breeding two dragons. Eggs cannot be killed.

Dragons are owner-less living beings that take the form of an on-chain contract. They have many characteristics such as:

  • They’re born only by eggs
  • Any 2 dragons can breed to lay a new egg
  • They can die due to natural causes
  • They can fight and kill other dragons
  • They can be healed by trainers
  • They trust different trainers based on their actions
  • Their stats can be upgraded by trainers

Beginning and End

The game starts with only 2 parentless eggs and no living dragons. Within 24 hours of game launch, the eggs will hatch to give birth to the first 2 dragons: Pleasr and Leshner. These dragons can breed and lay a new egg and so on. Alternatively, Pleasr and Leshner may immediately start fighting and try to kill one another. The future of dragons is dependent on your choices.

The game can only end if there are no living eggs or dragons left. In this case, the game cannot be restarted and the species of dragons will become extinct.

Trainer Guide

General Basics

The current version of the game takes place on Fantom mainnet. However, future releases of the game may also be launched on other chains based on player feedback.

There is no official interface. All interactions with the game are done through the block explorer You are free and encouraged to make and publish your own interfaces or scripts.

The main entry point to the game is the lair contract. You can find a list of all eggs and dragons’ addresses there. Any future newborn eggs or dragons will be instantly added to the list.

Lair Contract: 0x83633dca596E741c80f4FA032C75518CC251B09b

Visit each egg and dragon’s contract address on Ftmscan in order to interact with it and view its stats and historical events. If you visit an address and find no code or functions there, this is because the dragon is dead and its contract was destroyed.


Eggs hatch after 24 hours since they’re laid. After the duration elapses, anyone can call giveBirth() in order for the egg to create a new dragon.

The hatching duration can be reduced by 100 seconds each time someone calls giveTribute().

Caretaking and Earning Trust

Each dragon assigns a different amount of trustfor different trainers. To earn a dragon’s trust, you can use the sleep(), clean(), play() and feed() functions based on the dragon’s current caretaking stats. If used appropriately, each call will earn you 1 trust point for this particular dragon.

These points can be consumed when performing some other actions related to this dragon. However, trust is non-transferrable.

If a dragon’s stat is at 5% or under, you may not call its function. For example, if getBoredom() is at 75%, the dragon is very bored. You may call play() to reset its boredom to 0. However, if it is only 2% bored, the transaction will fail.

If another stat is over 80%, you’re required to prioritize it over other stats.

If all 4 caretaking stats are at 100%. The dragon will die due to your negligence and its contract will be permanently destroyed.

Slaying Dragons

Only dragons can attack other dragons. Trainers can demand the dragon to attack an enemy dragon of their choice using the attack(address) function.

Attacks consume 5 trust points from the caller and are subject to an attackCooldown duration. If another trainer has recently demanded the same dragon to attack, you must wait until the cooldown duration elapses.

If the attack reduces the victim’s health to 0, the victim dragon will be slain and its contract will be permanently destroyed. The attacking dragon will also consume 25% of the victim’s maxHealth and damage.

Healing Dragons

If your dragon has been attacked, you may call the heal() function to restore some of its health.

Heals consume 1 trust points from the caller but are not subject to any cooldowns.


Dragons have 5 battle-related stats:

  • maxHealth: maximum amount of health points (default: 1,000,000)
  • health: current amount of health points (default: 1,000,000)
  • damage: amount of damage per attack (default: 20,000)
  • attackCooldown: cooldown between attacks in seconds (default: 1 hour)
  • healthRegeneration: health points restored per heal (default: 2,000)

You may improve any of the above stats (except health) by 1% of its current value by calling the relevant upgrade function.

All upgrades cost 5 trust points from the caller and are subject to the same 1-hour cooldown. If another trainer has recently upgraded any battle stat of the same dragon within the past hour, you must wait until the cooldown duration elapses.


A trainer can ask a dragon to propose to breed with another dragon using the proposeBreeding(address,string) function. The trainer gets to pick the name of the potential child.

At any point during the next 7 days, a trainer of the other parent dragon may accept the invitation and lay an egg by calling the breed(address,string) function using the same child name.

Both proposing and accepting breeding invitations cost 10 trust points.

Accepting breeding invitations is subject to an exponential cooldown starting with 24 hours. Breeding proposals are not subject to cooldowns.

Trust Management

Coordination of trust management is the most important aspect of gameplay. Trainers of each dragon must work together to coordinate their dragon towards their common goals. To do this, they must agree on and successfully implement a collective strategy.

For example, if the goal is survival. A dragon may focus on upgrading maxHealth and/or healthRegeneration while keeping some trust reserves for healing. If the goal is dominance or deterrence, then it may focus on damage and/or attackCooldown upgrades while keeping a relatively large budget for attacking. Some may opt for a balanced build. Others may not spend on upgrades at all and hoard trust for future healing and attacking only.

As the number of dragons grows, unique new strategies may involve alliances of multiple dragons with different but complimentary builds.

Play with us

If you have some questions or if you’re looking to talk to other trainers of your dragon, join the Discord server.

May the best dragon win