<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Terrarium Club</title>
        <link>https://paragraph.com/@mushr00ms</link>
        <description>つ◕_◕つ 🍄 CC0 collection of Space Mushrooms with some hidden secrets and magic. For the web3 community, with love.</description>
        <lastBuildDate>Fri, 04 Sep 2026 04:07:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Terrarium Club</title>
            <url>https://storage.googleapis.com/papyrus_images/194eeac144cb1b28632763ce4f03ac1164903691ecd153d991713e50b7cea474.gif</url>
            <link>https://paragraph.com/@mushr00ms</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Terrarium Club Overview]]></title>
            <link>https://paragraph.com/@mushr00ms/terrarium-club-overview</link>
            <guid>kkrOjTjfcA3g4dvdiq2H</guid>
            <pubDate>Tue, 12 Jul 2022 14:30:10 GMT</pubDate>
            <description><![CDATA[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 mushroomsAs you know from the website - the owners of some public domain collections (Loot, HyperLoot, Genesis Adventurers, Goblintown, Cryptoadz, Blitnauts, Chainrun...]]></description>
            <content:encoded><![CDATA[<p>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.</p><p><em>These features were not advertised and did not have an interface on the website.</em></p><blockquote><p>つ◕_◕つ🍄</p></blockquote><h1 id="h-1-sporiferous-mushrooms" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Sporiferous mushrooms</h1><p>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.</p><p>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.</p><p>This property is the <strong>spore</strong> flag: <code>sporeMushrooms[shroomId] = true;</code></p><p>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. <strong>No fees, just gas.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b4b1fd773ada960608e46c92721028af2da3611af076aac049f251d2af91cf20.png" alt="Spore dropping" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Spore dropping</figcaption></figure><p>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.</p><pre data-type="codeBlock" text="// for cc0 frens つ◕_◕つ 🍄
function claimMushroom() external nonReentrant {
   uint256 shroomId = totalSupply();
   ...
   sporeMushrooms[shroomId] = true;
}
"><code><span class="hljs-comment">// for cc0 frens つ◕_◕つ 🍄</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">claimMushroom</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title">nonReentrant</span> </span>{
   <span class="hljs-keyword">uint256</span> shroomId <span class="hljs-operator">=</span> totalSupply();
   ...
   sporeMushrooms[shroomId] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
}
</code></pre><pre data-type="codeBlock" text="// 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], &quot;no spores in ur shroom&quot;);
        _safeMint(fren, 1);
        sporeMushrooms[shroomId] = false;
}
"><code><span class="hljs-comment">// in case of mushroomed ser want to send a shroom to fren つ◕_◕つ 🍄</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">dropSporeToFren</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> fren, <span class="hljs-keyword">uint256</span> shroomId</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title">nonReentrant</span> <span class="hljs-title">mintConditions</span>(<span class="hljs-params"><span class="hljs-number">1</span></span>) </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> fren);
        <span class="hljs-built_in">require</span>(ownerOf(shroomId) <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
        <span class="hljs-built_in">require</span>(sporeMushrooms[shroomId], <span class="hljs-string">"no spores in ur shroom"</span>);
        _safeMint(fren, <span class="hljs-number">1</span>);
        sporeMushrooms[shroomId] <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
}
</code></pre><h1 id="h-2-rebirth-of-the-dead" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. Rebirth of the Dead</h1><p>Not so long ago there was a project called <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/wagdie_eth">𝔚𝔢 𝔞𝔯𝔢 𝔄𝔩𝔩 𝔊𝔬𝔦𝔫𝔤 𝔱𝔬 𝔇𝔦𝔢</a>, and some holders of this project, began to burn their NFT (no one knows where this will lead).</p><p><code>💡 &quot;Burning&quot; – is the sending of an NFT to an address outside of anyone&apos;s control, which takes the NFT out of circulation.</code></p><p>The cycle of life is designed so that the death of one gives the beginning of life to someone else. That&apos;s why we implemented the feature to mint a <strong>free mushroom</strong> for each <strong><em>burned wagdie</em></strong>. You can track burned wagdies on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/token/0x659A4BdaAaCc62d2bd9Cb18225D9C89b5B697A5A?a=0x000000000000000000000000000000000000dead">etherscan</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cec11a40939c4cb2d78469636c9731ddf050a26ce17cd8d1769b68630e1e15f8.png" alt="Rebirth of the WAGDIE" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Rebirth of the WAGDIE</figcaption></figure><pre data-type="codeBlock" text="// つ◕_◕つ 🍄💀
function rebirthTheDead() external nonReentrant mintConditions(1) {
        require(!claimStatuses[msg.sender], &quot;Mushroom already claimed&quot;);
        require(
            grewUpOnTheDead &lt; IToken(wagdie_address).balanceOf(fertile_ground),
            &quot;All the dead already reborn.&quot;
        );
        _safeMint(msg.sender, 1);
        grewUpOnTheDead += 1;
        claimStatuses[msg.sender] = true;
}
"><code><span class="hljs-comment">// つ◕_◕つ 🍄💀</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">rebirthTheDead</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title">nonReentrant</span> <span class="hljs-title">mintConditions</span>(<span class="hljs-params"><span class="hljs-number">1</span></span>) </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-operator">!</span>claimStatuses[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>], <span class="hljs-string">"Mushroom already claimed"</span>);
        <span class="hljs-built_in">require</span>(
            grewUpOnTheDead <span class="hljs-operator">&#x3C;</span> IToken(wagdie_address).balanceOf(fertile_ground),
            <span class="hljs-string">"All the dead already reborn."</span>
        );
        _safeMint(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-number">1</span>);
        grewUpOnTheDead <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        claimStatuses[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
}
</code></pre><p><code>💡 You can directly interact with the smart-contracts on etherscan website, even if you don’t know programming.</code></p><p>Try here: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a#writeContract">https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a#writeContract</a></p><h1 id="h-3-royal-mushrooms" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Royal Mushrooms</h1><p>In addition to spore-bearing mushrooms, the contract also includes the possibility of creating another special mushrooms - 👑 <strong>The Royal Mushrooms</strong>.</p><p>These mushrooms are also created with a separate function - <strong>mintRoyal()</strong> and have an increased cost - <strong>0.31337 eth</strong>. In total <strong>10</strong> such mushrooms can exist (at the moment of writing <strong>9 of 10</strong> mushrooms are minted).</p><p>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 - <strong><em>Broadcast Mycelial Message()</em></strong> Also, royal mushrooms have metaphysical meaning, but their role on the future of mycelium has yet to be determined (royal mushrooms themselves).</p><p><code>🍄 Mycelian Truth</code></p><p><code>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.</code></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xc8d5517fd038206a65263bc25b230f6809ac7e3a?method=Broadcast__Mycelial__Message~0x44365db1">History</a> of mycelian truth:</p><ol><li><p><em>Initial</em>: つ◕_◕つ 🍄</p></li><li><p><em>By 👑#925 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x2b6e43db72cfcaff9b39b57a25fcc2bf6c1b26a866c8588cc4f6de32d1302b55"><em>tx</em></a><em>):</em> <strong>co DEMON key</strong></p></li><li><p><em>By 👑#1014 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xd3c164d496ba8fba0c1f7e51234f498ccfc0cc01a00e6492fff3065989c9deaf"><em>tx</em></a><em>):</em> 🌝</p></li><li><p><em>By 👑#1389 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x5685122c6d61bbe36b3eb65b347179f3d7761a453dc8a3e7eda14bc651dfe1e4"><em>tx</em></a><em>):</em> つ◕_◕つ ⛓🍄⛓</p></li><li><p><em>By 👑#1463 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x2d37701f80184f035bcbf4afe273215dfd52b1edc2bb1f5bb87a64a93cdeff1f"><em>tx</em></a><em>):</em> つ◕_◕つ QED 🍄</p></li><li><p><em>By 👑#1568 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x266c66da534deeb0a9787bb79573adbe9d942c18908c1c5c070754effaa7a0d7"><em>tx</em></a><em>):</em> ☠️ 🥛</p></li><li><p><em>By 👑#1014 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x28e97fb438bebfae529f5b2d18ed1e85fd2906a35f8be0931b1e8510448033ac"><em>tx</em></a><em>):</em> gm 🍄</p></li><li><p><em>By 👑#1527 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x121b30d808d9406e7cb63912405fd4521920847f806c049863dfb44c9958d6b2"><em>tx</em></a><em>):</em> つ◕_◕つ per aspera ad astra 🍄</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x29d9d243f5de595f2eb0aa2b1be6a002506c32dc7ff2b7e352594eb666ea3bd0"><em>tx</em></a><em>):</em> What is the mission of mushrooms?🍄👁⃤</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xbc6b1ae6a76263fe6fc9690475b85d3d11e58a7e0137adbd68aa70181462f89c"><em>tx</em></a><em>):</em> reply with mushroom 🍄 if you hearing this</p></li><li><p><em>By 👑#1757 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xd5c000eb1f555dddab2572d0ba34fd798e2bc08a8f6055789b68822981bd80d2"><em>tx</em></a><em>):</em> 🍄</p></li><li><p><em>By 👑#1014 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x256d784781b97f7792bf408175ccf77028aa412b1e684463f107f277be824656"><em>tx</em></a><em>):</em> 🍄</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x78dfebb0bb601b0e13673018f5b17e8eeb7f591ad2d60c6035c14cb1307c1c08"><em>tx</em></a><em>):</em> HyperLoot#9913 + 🍄 = ♥️</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xd6f66ccd51400263a1cfbf9d8e9ccda605dab32cf3ab21e1997b127c52dda00a"><em>tx</em></a><em>):</em> ようこそキノコ仲間 つ◕_◕つ🍄</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xacf14d509ee4340f0ca6a23c373984c8a2205e7e13d57e0d9a6c328171a7e9d9"><em>tx</em></a><em>):</em> think we should buidl a 🍄 treasury つ◕_◕つ💎</p></li><li><p><em>By 👑#1014 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x8e45537a3cb7dd59e4579611fc9df2e9f595ea478e9498d18b64b3f606867b6f"><em>tx</em></a><em>):</em> 👍</p></li><li><p><em>By 👑#1568 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x4679cbd538e38d12d280b16f976aac000d10a26b0f10380ee726a82ee11f4da1"><em>tx</em></a><em>):</em> つ◕_◕つ 🔮 wen magic</p></li><li><p><em>By 👑#1527 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x289d9e17464327f2ca75d3f6e4089f3e92f5b4c196864e09dc853322ff71d19e"><em>tx</em></a><em>):</em> You are not a drop in the ocean. You are the entire ocean in a drop. つ◕_◕つ 🍄</p></li><li><p><em>By 👑#499 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x140a6903641cb57b03a072da2752fed7ea66eaa5239c84b18618e47400a6f3b9"><em>tx</em></a><em>):</em> つ◕_◕つ🔮 calmit ada sin <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spells.quest/?z=1kyguzi1Kof5">https://spells.quest/?z=1kyguzi1Kof5</a></p></li><li><p><em>By 👑#1757 (</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x682fc96c6a6a277f35ae5a53459bdf90615ca0aa87999e71e703c4945652fb7d"><em>tx</em></a><em>):</em> つ◕_◕つ💫💫💫 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spells.quest/?z=chc3KxunkR7P">https://spells.quest/?z=chc3KxunkR7P</a></p></li></ol><pre data-type="codeBlock" text="// つ◕_◕つ 🍄👑
function mintRoyal() external payable nonReentrant {
        uint256 shroomId = totalSupply();
                ...
        require(msg.value &gt;= LEET_PRICE, unicode&quot;Royal Shrooms requiring つ◕_◕つ 0.31337 ether&quot;);
        _safeMint(msg.sender, 1);
        royalSpores -= 1;
        isRoyal[shroomId] = true;

}
"><code><span class="hljs-comment">// つ◕_◕つ 🍄👑</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mintRoyal</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> <span class="hljs-title">nonReentrant</span> </span>{
        <span class="hljs-keyword">uint256</span> shroomId <span class="hljs-operator">=</span> totalSupply();
                ...
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> LEET_PRICE, <span class="hljs-string">unicode"Royal Shrooms requiring つ◕_◕つ 0.31337 ether"</span>);
        _safeMint(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-number">1</span>);
        royalSpores <span class="hljs-operator">-</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        isRoyal[shroomId] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;

}
</code></pre><pre data-type="codeBlock" text="// つ◕_◕つ 💬
function broadcastMycelialMessage (uint256 shroomId, string calldata message) public {
        require(msg.sender == ownerOf(shroomId), &quot;Mushrooms: sender not owner&quot;);
        require(isRoyal[shroomId], &quot;Mushroom isn&apos;t royal&quot;);
        mycelianTruth = message;
}
"><code><span class="hljs-comment">// つ◕_◕つ 💬</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">broadcastMycelialMessage</span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span> shroomId, <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> message</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> ownerOf(shroomId), <span class="hljs-string">"Mushrooms: sender not owner"</span>);
        <span class="hljs-built_in">require</span>(isRoyal[shroomId], <span class="hljs-string">"Mushroom isn't royal"</span>);
        mycelianTruth <span class="hljs-operator">=</span> message;
}
</code></pre><h1 id="h-4-magic-of-eip5050" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. Magic of EIP5050</h1><p>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&apos;s going on.</p><blockquote><p>We want to create a world that is fun, exciting, and <em>magical</em>. We believe magic is most powerful when it is created together.</p></blockquote><blockquote><p>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.</p></blockquote><p>– <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spells.quest/">spells.quest</a></p><p>So, Terrarium is the first project implementing this standard and compatible with spells.</p><p>We decided to implement two functions - Spells <code>cast()</code> handling and <code>eatMushroom()</code> handling.</p><h2 id="h-41-spells" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.1. Spells</h2><blockquote><p>Spells are on-chain magic. <em>Functional</em> ERC-721 tokens that can be <code>cast()</code> over the blockchain on other NFTs and addresses.</p></blockquote><p>The Spells project is currently in development and is scheduled to launch shortly. You can learn more about this project on the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spells.quest/">website.</a></p><p>In the near future, when Spells project is launched, each mushroom holder will be able to <code>cast()</code> a spell on his mushroom, which will make your mushroom magical and lead to some ✨<em>changes</em>, which we will not talk about now, let it be a <strong>surprise</strong> つ◕_◕つ 🔮</p><p>There are only <strong>420🍀</strong> magic mushrooms possible. So don’t miss the moment.</p><pre data-type="codeBlock" text="if (action.selector == CAST_SELECTOR){
        require(action.from._address == spells, &quot;Mushrooms: invalid action.from&quot;);
        require(action.user == ownerOf(action.to._tokenId), &quot;Mushrooms: sender not owner of this mushroom&quot;);
        require(!magicMushrooms[action.to._tokenId], &quot;Only one cast per tokenID&quot;);
        require(myceliumMana &gt; 0, &quot;No mana left&quot;);
        magicMushrooms[action.to._tokenId] = true;
        myceliumMana -= 1;
}
"><code><span class="hljs-keyword">if</span> (action.<span class="hljs-built_in">selector</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> CAST_SELECTOR){
        <span class="hljs-built_in">require</span>(action.from._address <span class="hljs-operator">=</span><span class="hljs-operator">=</span> spells, <span class="hljs-string">"Mushrooms: invalid action.from"</span>);
        <span class="hljs-built_in">require</span>(action.user <span class="hljs-operator">=</span><span class="hljs-operator">=</span> ownerOf(action.to._tokenId), <span class="hljs-string">"Mushrooms: sender not owner of this mushroom"</span>);
        <span class="hljs-built_in">require</span>(<span class="hljs-operator">!</span>magicMushrooms[action.to._tokenId], <span class="hljs-string">"Only one cast per tokenID"</span>);
        <span class="hljs-built_in">require</span>(myceliumMana <span class="hljs-operator">></span> <span class="hljs-number">0</span>, <span class="hljs-string">"No mana left"</span>);
        magicMushrooms[action.to._tokenId] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
        myceliumMana <span class="hljs-operator">-</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
}
</code></pre><h2 id="h-42-eating-mushrooms" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.2. Eating Mushrooms</h2><p>つ◕_◕つ 🍄</p><p>Terrarium contract includes the feature to <strong>eat a mushroom</strong> once per <strong>5000</strong> blocks through handling EIP5050 <code>eat_shroom</code> action.</p><p>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&apos;ll be one of those who will come up with some interesting project and implement this feature!</p><pre data-type="codeBlock" text="if (action.selector == EAT_SHROOM_SELECTOR){
    require(action.user == ownerOf(action.to._tokenId), &quot;Mushrooms: sender not owner of this mushroom&quot;);
    require(eatCooldown[action.to._tokenId] - block.number &lt; 5000, &quot;You can eat mushrooms only once per 5000 blocks&quot;);
    emit MushroomEaten(action.to._tokenId);
    eatCooldown[action.to._tokenId] = block.number;
}
"><code><span class="hljs-keyword">if</span> (action.<span class="hljs-built_in">selector</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> EAT_SHROOM_SELECTOR){
    <span class="hljs-built_in">require</span>(action.user <span class="hljs-operator">=</span><span class="hljs-operator">=</span> ownerOf(action.to._tokenId), <span class="hljs-string">"Mushrooms: sender not owner of this mushroom"</span>);
    <span class="hljs-built_in">require</span>(eatCooldown[action.to._tokenId] <span class="hljs-operator">-</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">number</span> <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">5000</span>, <span class="hljs-string">"You can eat mushrooms only once per 5000 blocks"</span>);
    <span class="hljs-keyword">emit</span> MushroomEaten(action.to._tokenId);
    eatCooldown[action.to._tokenId] <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">number</span>;
}
</code></pre><h1 id="h-5-whats-next" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. What’s next?</h1><p>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&apos;s no limit to our imagination, so we don&apos;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.</p><p>Let&apos;s go! 🍄</p><p>Everyone who has read to this point is welcome to join the 👾<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/JDJvxJDkKQ">Mycelium Discord</a> (still not announced in public), get to know each other and take part in the brainstorming!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8ad206035c872ad98b6e2c2b75f900f148c061cab642aa19601a1e46708aed93.png" alt="Some concepts" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Some concepts</figcaption></figure>]]></content:encoded>
            <author>mushr00ms@newsletter.paragraph.com (Terrarium Club)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4a224f51a77ca161d187aef0b72d429235a43cd36788b81106c3789827127029.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>