# Terrarium Club Overview

By [Terrarium Club](https://paragraph.com/@mushr00ms) · 2022-07-12

---

Since our site does not have much information about the details of the project, and not everyone is able to read and understand the source code of the contract - we have made an overview of the features of the Terrarium project.

_These features were not advertised and did not have an interface on the website._

> つ◕\_◕つ🍄

1\. Sporiferous mushrooms
=========================

As you know from the website - the owners of some public domain collections (Loot, HyperLoot, Genesis Adventurers, Goblintown, Cryptoadz, Blitnauts, Chainrunners, Nouns, Wagdie) have an option to mint one mushroom for free.

This functionality is implemented in a separate function in the contract, which not only removes the cost of the mint from 0.042 eth to 0, but also sets an additional property for the minted NFT in the contract-level metadata.

This property is the **spore** flag: `sporeMushrooms[shroomId] = true;`

This means that this mushroom has a spore, and the owner of this mushroom can create another mushroom from it (but only one), for example for his friend. **No fees, just gas.**

![Spore dropping](https://storage.googleapis.com/papyrus_images/b4b1fd773ada960608e46c92721028af2da3611af076aac049f251d2af91cf20.png)

Spore dropping

However, if another mushroom is minted with this mushroom, this mushroom will no longer be spore-bearing. So, if spore-bearing mushrooms in the future will have features in the derivative projects, this mushroom will no longer belong to them.

    // for cc0 frens つ◕_◕つ 🍄
    function claimMushroom() external nonReentrant {
       uint256 shroomId = totalSupply();
       ...
       sporeMushrooms[shroomId] = true;
    }
    

    // in case of mushroomed ser want to send a shroom to fren つ◕_◕つ 🍄
    function dropSporeToFren(address fren, uint256 shroomId) external nonReentrant mintConditions(1) {
            require(msg.sender != fren);
            require(ownerOf(shroomId) == msg.sender);
            require(sporeMushrooms[shroomId], "no spores in ur shroom");
            _safeMint(fren, 1);
            sporeMushrooms[shroomId] = false;
    }
    

2\. Rebirth of the Dead
=======================

Not so long ago there was a project called [𝔚𝔢 𝔞𝔯𝔢 𝔄𝔩𝔩 𝔊𝔬𝔦𝔫𝔤 𝔱𝔬 𝔇𝔦𝔢](https://twitter.com/wagdie_eth), and some holders of this project, began to burn their NFT (no one knows where this will lead).

`💡 "Burning" – is the sending of an NFT to an address outside of anyone's control, which takes the NFT out of circulation.`

The cycle of life is designed so that the death of one gives the beginning of life to someone else. That's why we implemented the feature to mint a **free mushroom** for each **_burned wagdie_**. You can track burned wagdies on [etherscan](https://etherscan.io/token/0x659A4BdaAaCc62d2bd9Cb18225D9C89b5B697A5A?a=0x000000000000000000000000000000000000dead).

![Rebirth of the WAGDIE](https://storage.googleapis.com/papyrus_images/cec11a40939c4cb2d78469636c9731ddf050a26ce17cd8d1769b68630e1e15f8.png)

Rebirth of the WAGDIE

    // つ◕_◕つ 🍄💀
    function rebirthTheDead() external nonReentrant mintConditions(1) {
            require(!claimStatuses[msg.sender], "Mushroom already claimed");
            require(
                grewUpOnTheDead < IToken(wagdie_address).balanceOf(fertile_ground),
                "All the dead already reborn."
            );
            _safeMint(msg.sender, 1);
            grewUpOnTheDead += 1;
            claimStatuses[msg.sender] = true;
    }
    

`💡 You can directly interact with the smart-contracts on etherscan website, even if you don’t know programming.`

Try here: [https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a#writeContract](https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a#writeContract)

3\. Royal Mushrooms
===================

In addition to spore-bearing mushrooms, the contract also includes the possibility of creating another special mushrooms - 👑 **The Royal Mushrooms**.

These mushrooms are also created with a separate function - **mintRoyal()** and have an increased cost - **0.31337 eth**. In total **10** such mushrooms can exist (at the moment of writing **9 of 10** mushrooms are minted).

The appearance of royal mushrooms, like the others, is chosen at random. Therefore, royal mushrooms have no visual differences from ordinary mushrooms. But they, like the spore-bearing ones, have a difference in metadata at the contract-level and the ability to use an additional function - **_Broadcast Mycelial Message()_** Also, royal mushrooms have metaphysical meaning, but their role on the future of mycelium has yet to be determined (royal mushrooms themselves).

`🍄 Mycelian Truth`

`There is a text field in the contract (called mycelianTruth) that displays the current truth expressed by the mycelium. This field can only be changed by royal mushrooms, by sending a new mushroomed message to the contract.`

[History](https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a?method=Broadcast__Mycelial__Message~0x44365db1) of mycelian truth:

1.  _Initial_: つ◕\_◕つ 🍄
    
2.  _By 👑#925 (_[_tx_](https://etherscan.io/tx/0x2b6e43db72cfcaff9b39b57a25fcc2bf6c1b26a866c8588cc4f6de32d1302b55)_):_ **co DEMON key**
    
3.  _By 👑#1014 (_[_tx_](https://etherscan.io/tx/0xd3c164d496ba8fba0c1f7e51234f498ccfc0cc01a00e6492fff3065989c9deaf)_):_ 🌝
    
4.  _By 👑#1389 (_[_tx_](https://etherscan.io/tx/0x5685122c6d61bbe36b3eb65b347179f3d7761a453dc8a3e7eda14bc651dfe1e4)_):_ つ◕\_◕つ ⛓🍄⛓
    
5.  _By 👑#1463 (_[_tx_](https://etherscan.io/tx/0x2d37701f80184f035bcbf4afe273215dfd52b1edc2bb1f5bb87a64a93cdeff1f)_):_ つ◕\_◕つ QED 🍄
    
6.  _By 👑#1568 (_[_tx_](https://etherscan.io/tx/0x266c66da534deeb0a9787bb79573adbe9d942c18908c1c5c070754effaa7a0d7)_):_ ☠️ 🥛
    
7.  _By 👑#1014 (_[_tx_](https://etherscan.io/tx/0x28e97fb438bebfae529f5b2d18ed1e85fd2906a35f8be0931b1e8510448033ac)_):_ gm 🍄
    
8.  _By 👑#1527 (_[_tx_](https://etherscan.io/tx/0x121b30d808d9406e7cb63912405fd4521920847f806c049863dfb44c9958d6b2)_):_ つ◕\_◕つ per aspera ad astra 🍄
    
9.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0x29d9d243f5de595f2eb0aa2b1be6a002506c32dc7ff2b7e352594eb666ea3bd0)_):_ What is the mission of mushrooms?🍄👁⃤
    
10.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0xbc6b1ae6a76263fe6fc9690475b85d3d11e58a7e0137adbd68aa70181462f89c)_):_ reply with mushroom 🍄 if you hearing this
    
11.  _By 👑#1757 (_[_tx_](https://etherscan.io/tx/0xd5c000eb1f555dddab2572d0ba34fd798e2bc08a8f6055789b68822981bd80d2)_):_ 🍄
    
12.  _By 👑#1014 (_[_tx_](https://etherscan.io/tx/0x256d784781b97f7792bf408175ccf77028aa412b1e684463f107f277be824656)_):_ 🍄
    
13.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0x78dfebb0bb601b0e13673018f5b17e8eeb7f591ad2d60c6035c14cb1307c1c08)_):_ HyperLoot#9913 + 🍄 = ♥️
    
14.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0xd6f66ccd51400263a1cfbf9d8e9ccda605dab32cf3ab21e1997b127c52dda00a)_):_ ようこそキノコ仲間 つ◕\_◕つ🍄
    
15.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0xacf14d509ee4340f0ca6a23c373984c8a2205e7e13d57e0d9a6c328171a7e9d9)_):_ think we should buidl a 🍄 treasury つ◕\_◕つ💎
    
16.  _By 👑#1014 (_[_tx_](https://etherscan.io/tx/0x8e45537a3cb7dd59e4579611fc9df2e9f595ea478e9498d18b64b3f606867b6f)_):_ 👍
    
17.  _By 👑#1568 (_[_tx_](https://etherscan.io/tx/0x4679cbd538e38d12d280b16f976aac000d10a26b0f10380ee726a82ee11f4da1)_):_ つ◕\_◕つ 🔮 wen magic
    
18.  _By 👑#1527 (_[_tx_](https://etherscan.io/tx/0x289d9e17464327f2ca75d3f6e4089f3e92f5b4c196864e09dc853322ff71d19e)_):_ You are not a drop in the ocean. You are the entire ocean in a drop. つ◕\_◕つ 🍄
    
19.  _By 👑#499 (_[_tx_](https://etherscan.io/tx/0x140a6903641cb57b03a072da2752fed7ea66eaa5239c84b18618e47400a6f3b9)_):_ つ◕\_◕つ🔮 calmit ada sin [https://spells.quest/?z=1kyguzi1Kof5](https://spells.quest/?z=1kyguzi1Kof5)
    
20.  _By 👑#1757 (_[_tx_](https://etherscan.io/tx/0x682fc96c6a6a277f35ae5a53459bdf90615ca0aa87999e71e703c4945652fb7d)_):_ つ◕\_◕つ💫💫💫 [https://spells.quest/?z=chc3KxunkR7P](https://spells.quest/?z=chc3KxunkR7P)
    

    // つ◕_◕つ 🍄👑
    function mintRoyal() external payable nonReentrant {
            uint256 shroomId = totalSupply();
                    ...
            require(msg.value >= LEET_PRICE, unicode"Royal Shrooms requiring つ◕_◕つ 0.31337 ether");
            _safeMint(msg.sender, 1);
            royalSpores -= 1;
            isRoyal[shroomId] = true;
    
    }
    

    // つ◕_◕つ 💬
    function broadcastMycelialMessage (uint256 shroomId, string calldata message) public {
            require(msg.sender == ownerOf(shroomId), "Mushrooms: sender not owner");
            require(isRoyal[shroomId], "Mushroom isn't royal");
            mycelianTruth = message;
    }
    

4\. Magic of EIP5050
====================

A member of the Loot community developed a new standard for interaction between tokens and gamification, which we used in the Terrarium project. Check out a couple of quotes that describes it very well and help you understand what's going on.

> We want to create a world that is fun, exciting, and _magical_. We believe magic is most powerful when it is created together.

> EIP-5050 is the metaverse standard for truly decentralized game building, where the game world is the blockchain itself, and anyone can build on top of it. Any smart contract can become castable just by adding a receiver.

– [spells.quest](https://spells.quest/)

So, Terrarium is the first project implementing this standard and compatible with spells.

We decided to implement two functions - Spells `cast()` handling and `eatMushroom()` handling.

4.1. Spells
-----------

> Spells are on-chain magic. _Functional_ ERC-721 tokens that can be `cast()` over the blockchain on other NFTs and addresses.

The Spells project is currently in development and is scheduled to launch shortly. You can learn more about this project on the [website.](https://spells.quest/)

In the near future, when Spells project is launched, each mushroom holder will be able to `cast()` a spell on his mushroom, which will make your mushroom magical and lead to some ✨_changes_, which we will not talk about now, let it be a **surprise** つ◕\_◕つ 🔮

There are only **420🍀** magic mushrooms possible. So don’t miss the moment.

    if (action.selector == CAST_SELECTOR){
            require(action.from._address == spells, "Mushrooms: invalid action.from");
            require(action.user == ownerOf(action.to._tokenId), "Mushrooms: sender not owner of this mushroom");
            require(!magicMushrooms[action.to._tokenId], "Only one cast per tokenID");
            require(myceliumMana > 0, "No mana left");
            magicMushrooms[action.to._tokenId] = true;
            myceliumMana -= 1;
    }
    

4.2. Eating Mushrooms
---------------------

つ◕\_◕つ 🍄

Terrarium contract includes the feature to **eat a mushroom** once per **5000** blocks through handling EIP5050 `eat_shroom` action.

At the moment this feature is not used anywhere, but it is implied that in the future, perhaps someone will implement a project in which the characters or anyone else can eat mushrooms. Feel free to be imaginative, maybe you'll be one of those who will come up with some interesting project and implement this feature!

    if (action.selector == EAT_SHROOM_SELECTOR){
        require(action.user == ownerOf(action.to._tokenId), "Mushrooms: sender not owner of this mushroom");
        require(eatCooldown[action.to._tokenId] - block.number < 5000, "You can eat mushrooms only once per 5000 blocks");
        emit MushroomEaten(action.to._tokenId);
        eatCooldown[action.to._tokenId] = block.number;
    }
    

5\. What’s next?
================

We are driven by a desire to learn, teach and explore the possibilities and limits of composable and expandable systems, the world of blockchain and the web3, and we encourage everyone to join us. There's no limit to our imagination, so we don't even know what the future holds - a game, a cartoon, a quest, a community-club or anything else (a lot of ideas for development in our heads). This is a story that is being written right now by all of us in blockchain.

Let's go! 🍄

Everyone who has read to this point is welcome to join the 👾[Mycelium Discord](https://discord.gg/JDJvxJDkKQ) (still not announced in public), get to know each other and take part in the brainstorming!

![Some concepts](https://storage.googleapis.com/papyrus_images/8ad206035c872ad98b6e2c2b75f900f148c061cab642aa19601a1e46708aed93.png)

Some concepts

---

*Originally published on [Terrarium Club](https://paragraph.com/@mushr00ms/terrarium-club-overview)*
