Terrarium Clubย Overview

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
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 ๐”š๐”ข ๐”ž๐”ฏ๐”ข ๐”„๐”ฉ๐”ฉ ๐”Š๐”ฌ๐”ฆ๐”ซ๐”ค ๐”ฑ๐”ฌ ๐”‡๐”ฆ๐”ข, 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.

Rebirth of the WAGDIE
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

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 of mycelian truth:

  1. Initial: ใคโ—•_โ—•ใค ๐Ÿ„
  2. By ๐Ÿ‘‘#925 (tx): co DEMON key
  3. By ๐Ÿ‘‘#1014 (tx): ๐ŸŒ
  4. By ๐Ÿ‘‘#1389 (tx): ใคโ—•_โ—•ใค โ›“๐Ÿ„โ›“
  5. By ๐Ÿ‘‘#1463 (tx): ใคโ—•_โ—•ใค QED ๐Ÿ„
  6. By ๐Ÿ‘‘#1568 (tx): โ˜ ๏ธ ๐Ÿฅ›
  7. By ๐Ÿ‘‘#1014 (tx): gm ๐Ÿ„
  8. By ๐Ÿ‘‘#1527 (tx): ใคโ—•_โ—•ใค per aspera ad astra ๐Ÿ„
  9. By ๐Ÿ‘‘#499 (tx): What is the mission of mushrooms?๐Ÿ„๐Ÿ‘โƒค
  10. By ๐Ÿ‘‘#499 (tx): reply with mushroom ๐Ÿ„ if you hearing this
  11. By ๐Ÿ‘‘#1757 (tx): ๐Ÿ„
  12. By ๐Ÿ‘‘#1014 (tx): ๐Ÿ„
  13. By ๐Ÿ‘‘#499 (tx): HyperLoot#9913 + ๐Ÿ„ = โ™ฅ๏ธ
  14. By ๐Ÿ‘‘#499 (tx): ใ‚ˆใ†ใ“ใใ‚ญใƒŽใ‚ณไปฒ้–“ ใคโ—•_โ—•ใค๐Ÿ„
  15. By ๐Ÿ‘‘#499 (tx): think we should buidl a ๐Ÿ„ treasury ใคโ—•_โ—•ใค๐Ÿ’Ž
  16. By ๐Ÿ‘‘#1014 (tx): ๐Ÿ‘
  17. By ๐Ÿ‘‘#1568 (tx): ใคโ—•_โ—•ใค ๐Ÿ”ฎ wen magic
  18. By ๐Ÿ‘‘#1527 (tx): You are not a drop in the ocean. You are the entire ocean in a drop. ใคโ—•_โ—•ใค ๐Ÿ„
  19. By ๐Ÿ‘‘#499 (tx): ใคโ—•_โ—•ใค๐Ÿ”ฎ calmit ada sin https://spells.quest/?z=1kyguzi1Kof5
  20. By ๐Ÿ‘‘#1757 (tx): ใคโ—•_โ—•ใค๐Ÿ’ซ๐Ÿ’ซ๐Ÿ’ซ 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

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.

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 (still not announced in public), get to know each other and take part in the brainstorming!

Some concepts
Some concepts
Subscribe to Terrarium Club
Receive the latest updates directly to yourย inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.