<?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>agrimony</title>
        <link>https://paragraph.com/@agrimony</link>
        <description>undefined</description>
        <lastBuildDate>Fri, 24 Jul 2026 12:22:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[In 2025, we go higher still]]></title>
            <link>https://paragraph.com/@agrimony/in-2025,-we-go-higher-still</link>
            <guid>E9Ii6CYq0sxEn6GzKDkX</guid>
            <pubDate>Tue, 31 Dec 2024 15:46:14 GMT</pubDate>
            <description><![CDATA[Higher is a lifestyle. Or so they say. Yet few understand what it is, for better or worse. To the ardent critic, Higher is a unsupervised jumble. Decentralized yes, autonomous maybe, but organized? Definitely not. How does higher move as a coordinated unit, or maybe a better question - should higher move as a coordinated unit? IMO higher should not strive for top-down coordination, because that eventually burns out; instead, we should strive for self-organized alignment. But what does that actua]]></description>
            <content:encoded><![CDATA[<div class="relative header-and-anchor"><h3 id="h-higher-is-a-lifestyle">Higher is a lifestyle</h3></div><p>Or so they say. Yet few understand what it is, for better or worse. To the ardent critic, Higher is a unsupervised jumble. <em>Decentralized </em>yes, <em>autonomous </em>maybe, but <em>organized</em>? Definitely not. How does higher move as a coordinated unit, or maybe a better question - <em>should</em> higher move as a coordinated unit?</p><p>IMO higher should not strive for top-down coordination, because that eventually burns out; instead, we should strive for self-organized alignment. But what does that <em>actually</em> mean? Here I argue that aligning oneself with the network is actually pretty straightforward. <strong>Higher is the dreamers' network</strong> <strong>and $higher incentivizes dreams</strong>. If one aligns themselves with the token, then they automatically align themselves with the network.</p><p>For this to work, we need both sides of the equation to believe in something.</p><ol><li><p><strong>Builders</strong> commit to aligning themselves with the token when striving for their dreams - either by providing utility, or by pledging to buy back tokens with fees taken.</p></li><li><p><strong>Members </strong>commit to supporting aligned builders in achieving their dreams - either by collecting art /music / writing, or by using apps and sharing with others.</p></li></ol><div class="relative header-and-anchor"><h3 id="h-a-playbook-to-going-higher">A playbook to going higher</h3></div><blockquote><p>"How do I join higher?"</p></blockquote><p>There is no process, just do it. </p><p><em>Do what?</em> - Think of what you want to achieve or become better at, then go do it.</p><p><em>And what about the network?</em> - You can give back to the network through token buybacks or providing token utility (e.g., selling art denominated in $higher, airdropping music nfts to $higher holders)</p><blockquote><p>"Why should I join higher?"</p></blockquote><p>Higher is the dreamers' network. Its mission is to support aspirations and connect aspirants together. That's what higher together means.</p><p>By plugging into a network of higher-minded individuals, you leveraging the strength of the community. The higher network enhances distribution and encourages new forms of art not otherwise possible. For this reason, it is important that you support open-source and cc0. Permissionless building makes it easier for the network to self-coordinate without restriction.</p><div class="relative header-and-anchor"><h3 id="h-what-does-this-look-like-for-you">What does this look like for you?</h3></div><p>In 2025, I aspire to improving my illustration skills. Have been inspired (you really thought my whole <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/agrimony.eth/0x418b36d7">quote thread </a>was for show?) by 80s anime style, and really want to be able to use more stylized brushes, color palettes, dynamic action poses etc.</p><p>I will be exploring and practicing these styles throughout 2025, posting my works-in-progress on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zora.co/@agrimony">zora </a>or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rodeo.club/@agrimony.eth">rodeo</a>. You can support me by minting some of the works there!</p><p>In return, I publicly commit to buying back $higher from any fees used to mint these works. My goal is to earn 1M $higher in 2025 and demonstrate how you can join the higher network from scratch. </p><p>In addition, I will support the higher network by featuring any Higher themed merch in my illustrations, all of which will be offered as CC0 for anyone to use. Together, we can bring more recognition to Higher-aligned brands.</p><div class="relative header-and-anchor"><h3 id="h-this-must-be-the-work-of-higher">"This must be the work of HIGHER!" </h3></div><p>In 2025, we go higher still. </p><p></p><p></p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7b4a2078d4d8ebff23462d271cf472c7.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Welcome to Paragraph!]]></title>
            <link>https://paragraph.com/@agrimony/welcome-to-paragraph</link>
            <guid>Yi2hMTjbECacI9W8Rxlw</guid>
            <pubDate>Sun, 04 Feb 2024 17:21:33 GMT</pubDate>
            <description><![CDATA[This post teaches you everything you need to know about getting started with Paragraph.]]></description>
            <content:encoded><![CDATA[<p>Paragraph lets you create and share beautifully crafted posts - just like this one. </p><p>Write anything - from your smallest paragraph to your grandest masterpiece - and publish it online or send it as email newsletters directly to your readers.</p><p>Your Paragraph publication is blazing-fast, SEO optimized, and combines the best parts of both web2 and web3 to help you create content and grow your community better than ever. </p><h2>Getting started</h2><p>What you&apos;re looking at right now is the Paragraph editor. We support markdown, callouts, code, and rich media embeds like Twitter and YouTube.</p><div data-type="twitter" tweetid="1560419350976221185">   <div class="twitter-embed embed">    <div class="twitter-header">        <div style="display:flex">          <a target="_blank" href="https://twitter.com/paragraph_xyz">              <img alt="User Avatar" class="twitter-avatar" src="https://pbs.twimg.com/profile_images/1521582712527548416/VaZi_24t_normal.jpg">            </a>            <div style="margin-left:4px;margin-right:auto;line-height:1.2;">              <a target="_blank" href="https://twitter.com/paragraph_xyz" class="twitter-displayname">paragraph.xyz</a>              <p><a target="_blank" href="https://twitter.com/paragraph_xyz" class="twitter-username">@paragraph_xyz</a></p>                </div>            <a href="https://twitter.com/paragraph_xyz/status/1560419350976221185" target="_blank">              <img alt="Twitter Logo" class="twitter-logo" src="https://paragraph.xyz/editor/twitter/logo.png">            </a>          </div>        </div>          <div class="twitter-body">      On <a class="twitter-content-link" href="https://t.co/BbYULfPfbU" target="_blank">paragraph.xyz</a>, all posts are stored on <a class="twitter-content-link" href="https://twitter.com/ArweaveTeam" target="_blank">@ArweaveTeam</a>. This means they&apos;re immutable, uncensorable, permanent, and composable <img class="twitter-emoji" draggable="false" alt="✨" src="https://twemoji.maxcdn.com/v/14.0.2/72x72/2728.png">                    <a class="twitter-card-link" href="https://t.co/BbYULfPfbU" target="_blank">          <div class="twitter-media twitter-summary-large-image">            <img src="https://pbs.twimg.com/card_img/1747066277238108161/waMOL0FA?format=jpg&name=800x320_1">            <div class="twitter-summary-card-text">              <span>paragraph.xyz</span>              <h2>Paragraph | all-in-one publishing &amp; newsletter platform</h2>              <p>Create, publish and share web3-native blogs &amp; newsletters.</p>            </div>          </div>        </a>           </div>         <div class="twitter-footer">          <a target="_blank" href="https://twitter.com/paragraph_xyz/status/1560419350976221185" style="margin-right:16px; display:flex;">            <img alt="Like Icon" class="twitter-heart" src="https://paragraph.xyz/editor/twitter/heart.png">            16          </a>          <a target="_blank" href="https://twitter.com/paragraph_xyz/status/1560419350976221185"><p>7:12 PM • Aug 18, 2022</p></a>        </div>      </div>   </div><p>When you publish a post, you&apos;ll have the option of sending it as a newsletter or storing it in the permanent &amp; uncensorable Arweave. </p><h2>Helpful links</h2><p>Here&apos;s a few helpful pointers to customize your publication &amp; get the most out of Paragraph:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://paragraph.xyz/settings/publication/theme">Theming &amp; customization</a>. Change your publication&apos;s font &amp; colors; truly make this space your own.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://paragraph.xyz/settings/publication/emails">Set up a welcome email</a>. This is the email your readers receive when they subscribe to your newsletter. </p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://paragraph.xyz/settings/publication/blog">Configure your publication&apos;s settings</a>. Add links to your homepage, set up a custom domain, configure Google Analytics &amp; more. </p></li></ul><h2>Need help or have feedback?</h2><p>We&apos;ve put together some documentation <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://docs.paragraph.xyz">here</a>, but if you still have questions you&apos;d like answered we’d love to hear from you. </p><p>You can reach us via email at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="mailto:hello@paragraph.xyz">hello@paragraph.xyz</a> or subscribe to our newsletter <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://paragraph.xyz/@blog">here</a>. We&apos;re also pretty active on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out " href="https://paragraph.xyz/discord">Discord</a>. </p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <category>tutorial</category>
            <enclosure url="https://paragraph.xyz/covers/welcome_to_paragraph_modern.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Manual Unstaking from the deprecated AST Staking contract]]></title>
            <link>https://paragraph.com/@agrimony/manual-unstaking-from-the-deprecated-ast-staking-contract</link>
            <guid>ca9UtsYaS2KAcjSeHTjM</guid>
            <pubDate>Sat, 23 Dec 2023 13:32:44 GMT</pubDate>
            <description><![CDATA[I wrote this tutorial as a guide to those who are stuck on the deprecated AST contract.Manual UnstakingNavigate to the deprecated staking contract in...]]></description>
            <content:encoded><![CDATA[<p>I wrote this tutorial as a guide to those who are stuck on the deprecated AST contract.</p><div class="relative header-and-anchor"><h2 id="h-manual-unstaking">Manual Unstaking</h2></div><p>Navigate to the deprecated staking contract in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x704c5818b574358dfb5225563852639151a943ec#readContract">etherscan</a> (or the V2 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x579120871266ccd8de6c85ef59e2ff6743e7cd15#code">contract</a>) -&gt; contract -&gt; read contract</p><div class="relative header-and-anchor"><h3 id="h-check-the-ast-balance-in-the-contract">Check the AST balance in the contract</h3></div><p>Under <code>balanceOf</code>, input your <code>address</code> and click query (querying the chain does not require gas)</p><p>Check to ensure that the amount tallies with the amount of AST you have staked</p><p><em>Note: The amount displayed is multiplied by 10,000 to account for the decimal places</em></p><img src="https://storage.googleapis.com/papyrus_images/55a89859447d3756ad2c38ab39a2b4f6.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAFCAIAAACreXkmAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAYUlEQVR4nGNgAIPi4pL16zfMn7+Quqi2ro6hqKiIgYFBRFTs3Llz76gN7t9/wDB7zhw3d/faurr16zd8/vSJ6nYwJCQmurm7v3v37j8NAMiCc+fOTZw4af36DbSw4P///wCyC5W//6vgegAAAABJRU5ErkJggg==" nextheight="219" nextwidth="1351" class="image-node embed"><div class="relative header-and-anchor"><h3 id="h-check-the-balance-available-to-unstake">Check the balance available to unstake</h3></div><p>Under <code>available</code>, input your <code>address</code> and under <code>index</code>, input <code>0</code></p><p>This number represents the amount of AST available to be unstaked currently. Make sure that this number tallies with the number of AST in <code>balanceOf</code> if you want to withdraw the full amount.</p><p><em>Note: If you have made multiple stakes into this contract, you can check the balance available for each staking event by changing</em> <code>index</code><em>.</em></p><img src="https://images.mirror-media.xyz/publication-images/Tvhu5f4a-BMZ5dbmBTGMR.png?height=288&amp;width=1352" alt="Check your AST balance available to unstake. If you have made multiple stakes, you can change the index to cycle through the various stakes" title="null" class="image-node embed"><p>If the number does not tally, either, you have to wait longer to unstake the full amount (20 weeks), or you had staked in multiple batches. Check your historical interactions with this contract in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/token/0x704c5818b574358dfb5225563852639151a943ec#balances">etherscan </a>to find out when you staked, and how many stakes you had made.</p><div class="relative header-and-anchor"><h3 id="h-unstake">Unstake</h3></div><p>Finally, to unstake, head to <code>write contract</code> and scroll to the <code>unstake</code> function.</p><p>Input the amount you wish to unstake (it has to be less than the <code>available</code> balance from above). If you had staked multiple times, you can batch unstake by providing the input in an array format <code>[unstake1,unstake2,unstake3...]</code>.</p><p>Sign the transaction with your web3 wallet and pay the gas fee to unstake.</p><p><em>Note: Remember to multiply the AST you wish to unstake by 10,000 to account for decimals!</em></p><img src="https://images.mirror-media.xyz/publication-images/b6BNwycTu-By4cpU2GGW_.png?height=167&amp;width=765" alt="Connect your wallet to etherscan" title="null" class="image-node embed"><img src="https://images.mirror-media.xyz/publication-images/ZRF1M0t-HHp6xQj7uS7JT.png?height=197&amp;width=1351" alt="Enter the amount you wish to unstake, and hit &quot;Write&quot;. You will have to pay a gas fee to unstake" title="null" class="image-node embed">]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/55a89859447d3756ad2c38ab39a2b4f6.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Efficient Staking Protocols]]></title>
            <link>https://paragraph.com/@agrimony/efficient-staking-protocols</link>
            <guid>dBwnIdKWnNZyMVZzGDOq</guid>
            <pubDate>Sat, 23 Dec 2023 02:13:27 GMT</pubDate>
            <description><![CDATA[BackgroundToo often I get asked, “How do you start contributing to a DAO?“ Most people assume you need to be a dev to contribute to a DAO, but code i...]]></description>
            <content:encoded><![CDATA[<div class="relative header-and-anchor"><h2 id="h-background">Background</h2></div><p>Too often I get asked, “<em>How do you start contributing to a DAO?</em>“ Most people assume you need to be a dev to contribute to a DAO, but code is just one of the many things which DAOs need. Crucial to DAO operations is figuring out what needs to be done to get our functions as decentralized, as autonomous, and as organized as possible. One such task was to design the AirSwap V4 staking contract.</p><div class="relative header-and-anchor"><h1 id="h-introduction">Introduction</h1></div><p>The AirSwap protocols consist of DAO and DEX components. The DAO builds the DEX, which then funds the DAO. Core to the AirSwap DAO protocol is the staking contract. By staking AST, members signal their intent to participate in governance and help steer the protocol to become the standard peer-to-peer trading system. A good staking contract design needs to be intuitive and accessible (gas-wise) to enable smaller stakers to participate in the AirSwap ecosystem as well.</p><img src="https://storage.googleapis.com/papyrus_images/141987380783902919308551734e1cb5.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAsTAAALEwEAmpwYAAADh0lEQVR4nI1VPWwcRRR+FUUkJBoQFBSI2oEmQigIIUSBBHSAhRIrFKFIQ2kUZJQgfiIcUeGgRElkUiIKJCsJCkphkQsgTuEuh8XZd+fDsi/2rcc7O7uzM7M7Oz9oZy4bJzg2n14xO3o733vve/MGgiBgDsKBMUYp9Tt+QR2cA+cs5SxlLK18Kkgp1V1Ya5VSQgiEEFBKlVKU0k2EMMaMMe/EReEtl4VSSkoZRmkYsTBiOOH+FA+/vnzl6vnzF9rtxZ+vX/+jXr9Rq/lwSwIp5cZweKNW63Q6hEQ+ImulNylLP0LInwu92q3ur43u8hr6L8Hs7KXjH099M3Nmevr0F1+emp4+TSkVQpQE1lqfh4/UWkNZfvDYd/uPXnh8fObkuXlrjdaGEFJVxv4/jDLwK0KI+5cXMh8MI4BxZ2/Ay59ZKylNK5F2JKgEcFEWLlBLaXofQeVhtOGCRySOk8S7euxCsHcGvmRV/2widLu10O31Q4x9ZQihISZxwuKEjqK2Ni+0tz0IIkIiQhBC2+KVxnBjhLVlFzkltbVGqZyx8pdSFiWtzbwZXUpduPoopXJZjAhSSoUsVjeGnf5ab2VtM4yN1mGUwutfwSufwwufTJz40VqTZfmzh8/CiyfgwNST4zPK2mRj9a33z8AzH8Jzx2FscqnecIGWrTwMYxynQhYppcBYykWxhdPbS+v/rEcBijlLe/11eOoDePoYPHIY3vxaKxERAmOT5ee+CRibxHGKV5bgtVMAb8OjRwDe++XqvDJqCyfLa+jmrSWccCYkY3dFlrLQ2khZFNsa/IEmsaVbLmVe1sfaIstEHPJoGA76GQ0lHykvpfRn+u6Hh7WElzpOEi6E0UYp9fvC4Idrf33/U6u5OPQ+PC9Imm3imHJZqFJnpRQhJAgCIcRuBFqbXm+5Xq83ms1Op5skcdnRjx0BeLW0fROlwEqFEbszjBf7QRilK6sbQoitMAyCoNVqEUJGo+JhGVBKsQN3sSilrt3szs41Ls015+YXtTZlBqIoJUURZXmW5UbrLMsJIdh19h4l2lEDIbjPffv+LifcI/C0burmfj57Me09GDgwBfAOwLuw/yPvTOlobu9BIKVsNJu12m+DwR2Mcbvd/rvdxhg/QPD80Ytw8CS89OkTh77lInOXbjT9dyNACAkh/HPhx5l0qMZGNTyUEv7Sust833O0IxhjCKF/AfL2EYeQV4mgAAAAAElFTkSuQmCC" nextheight="1080" nextwidth="1920" class="image-node embed"><div class="relative header-and-anchor"><h1 id="h-designing-the-contract">Designing the Contract</h1></div><div class="relative header-and-anchor"><h3 id="h-simple-staking">Simple staking</h3></div><p>Staking in AirSwap is a linear vesting over a period of 20 weeks. This logic is pretty simple, until you consider multiple stakes being vested at the same time. For example, Alice stakes 100 AST at week 0, 200 AST at week 1 and 500 AST at week 7. How many tokens are unlocked at week 10?</p><img src="https://images.mirror-media.xyz/publication-images/wJ38AfqZW99HRFETFpnDR.png?height=259&amp;width=929" alt="Alice vesting stakes" title="null" class="image-node embed"><p>To allow the contract to unlock the correct number of tokens would require looping over each stake and calculating how much tokens are vested as a function of</p><ol><li><p>Initial staked amount</p></li><li><p>Initial time of stake</p></li><li><p>Current block time</p></li></ol><p>Each loop requires additional gas each time the function is called. This means small stakers cannot slowly accumulate their positions without requiring a huge amount of gas to unstake later.</p><div class="relative header-and-anchor"><h3 id="h-dynamic-staking">Dynamic staking</h3></div><p>Over the course of spring 2023, I worked with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/SmartContrart">smartcontrart</a> to radically redesigned the staking contract based on a set of heuristics that the user would expect.</p><ol><li><p><strong>Max duration = 20 weeks</strong>.</p></li><li><p><strong>Deposits should not change available staking balance.</strong></p></li><li><p><strong>Deposits should increase the time left to unstake</strong>.</p></li><li><p><strong>Withdrawals should decrease the available staking balance.</strong></p></li><li><p><strong>Withdrawals should NOT change the time left to unstake.</strong></p></li></ol><p>Our final design tracked 3 variables for each staking address (vs 2 variables <em>per</em> staking tx): Staked balance, time of initial stake, time of full vest. Instead of creating a new stake for each tx, additional stakes simply increase the time to full vest (up to 20 weeks) based on the additional amount staked relative to its current balance.</p><img src="https://images.mirror-media.xyz/publication-images/auCEnpqdCjc-te16dgR_Z.png?height=158&amp;width=929" alt="Alive vesting stakes under the new contract" title="null" class="image-node embed"><p>With the changes, we no longer need to loop over every single staking tx made but can simply update 3 variables. Our new dynamic staking contract has now been implemented in AirSwap V4, resulting in significant gas savings to DAO members!</p><div class="relative header-and-anchor"><h2 id="h-conclusion">Conclusion</h2></div><p>You don’t need to be a dev to help out in DAOs! In AirSwap we had marketers, operations, designers, and devs all working together to promote our mission of fully decentralized peer-to-peer swap protocols.</p><p>It’s fun and you get to learn loads! If anyone wants to check out what AirSwap is doing, head over to our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chat.airswap.io">discord</a> and just chat with the folks there</p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/141987380783902919308551734e1cb5.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Dying of the Lights]]></title>
            <link>https://paragraph.com/@agrimony/dying-of-the-lights</link>
            <guid>y4LJ3LlotqM4e0cPnmPI</guid>
            <pubDate>Fri, 26 Aug 2022 14:53:54 GMT</pubDate>
            <description><![CDATA[Dying of the Lights envisions a futurescape where ancient civilizations have built megalithic structures to harness the power of the stars. These civ...]]></description>
            <content:encoded><![CDATA[<p><em>Dying of the Lights</em> envisions a futurescape where ancient civilizations have built megalithic structures to harness the power of the stars. These civilizations have long since passed away, but the ruins of these structures remain forever locked in a state of uncompletion.</p><p>The project explores the relationship of structure and color to create otherworldly scenes. The code generates systems of swirling particles, with relationships first being defined by an underlying data structure tying both their physical and color space together before being deconstructed during the render. The final chaotic explosions hints at their original construction, encouraging the viewer to create their own stories about the Dying of the Light.</p><div class="relative header-and-anchor"><h2 id="h-underlying-structures">Underlying Structures</h2></div><p>DOTL uses a simple data structure primitive - a recursive quadtree (there are many <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=OJxEcs0w_kE">tutorials</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mattdesl.substack.com/p/subscapes-part-3?s=r">guides</a> for it). <code>split()</code> is called recursively, with the split axis and length randomly determined.</p><img src="https://storage.googleapis.com/papyrus_images/889a210c48591c98d25101e4c936ab0a.png" blurdataurl="data:image/png;base64,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" nextheight="548" nextwidth="547" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-parent-child-hierarchy">Parent-child hierarchy</h2></div><p>Quadtrees have an interesting hierarchy to the nodes. These hierarchies allow traits to be inherited from parent to child. For example, in DOTL, certain sections of the quadtree are filtered out based on their aspect ratios, which (1) limits the particle sizes and (2) generates a city-like structure with clusters of objects being formed.</p><img src="https://images.mirror-media.xyz/publication-images/-zKwSkQP4_Aax5LyLtQuq.png?height=720&amp;width=1097" alt="Some early renders which removed sections of the tree produces a very interesting aesthetic" title="null" class="image-node embed"><p>Traits can not just be inherited but also evolved as the tree is generated. Color is one such trait in DOTL. Evolution of the color trait is tied to their relationship in the quadtree. Every time the recursive <code>split()</code> is called, a new color is generated by applying a shift from the parent color. The shift itself is controlled by a perlin noise field dependent on the size of the node. Larger splits = larger shifts.</p><p>Thus, child nodes which are more closely related along the quadtree end up with more similar colors. This allows for larger sections of color to be formed and clustered in certain regions of the tree.</p><img src="https://images.mirror-media.xyz/publication-images/pa1JEqHB8YdAVt8jT04S9.png?height=586&amp;width=580" alt="An early iteration of the quad tree which paints blobs of color rather than draw rectangles" title="null" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-final-constructions">Final Constructions</h2></div><p>The structure &lt;&gt; color relationship is further exposed by applying a set of rotations to the system as the tree is rendered. Particles closer in hierarchy form layers of colored geometric objects, with the end result a seemingly chaotic explosion of colors. The rotations are randomly determined, introducing variance in the final megalithic structure of each piece.</p><img src="https://images.mirror-media.xyz/publication-images/EiJZnNZwfNe7bq6GVGE5a.png?height=600&amp;width=600" alt="Early iterations of a Dying Light explosion" title="null" class="image-node embed"><p>The final piece is held together by a central light source which (in most cases) provides the bulk of the illumination in the scene. The environmental palettes in DOTL typically play instead with levels of illumination and contrast to achieve images which pay homage to the sci-fi classics which inspired this project. In rare cases, a more rigid color palette is applied (e.g. white-on-black) to achieve the intended aesthetics.</p><div class="relative header-and-anchor"><h2 id="h-thanks-for-tuning-in">Thanks for tuning in</h2></div><p>Hope you enjoyed the creation process! Here are some curated renders of the various environmental palettes available in DOTL.</p><p>In the meantime, you can also generate your own Dying Lights over at my <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dyinglights-web.agrimony.repl.co/">repl</a>. Have fun exploring!</p><img src="https://images.mirror-media.xyz/publication-images/bUblp2hTzFM4EICF_CBC2.png?height=907&amp;width=1592&amp;&amp;&amp;&amp;size=medium" alt="Harsh lighting and saturated colors for that otherworldly effect" title="null" class="image-node embed"><img src="https://images.mirror-media.xyz/publication-images/pbP2iPf9_tnVyvLTN7Fuj.png?height=940&amp;width=1609&amp;&amp;&amp;&amp;size=medium" alt="Soft pastel palettes for its comic book vibes" title="null" class="image-node embed"><img src="https://images.mirror-media.xyz/publication-images/L-aaD4w0en8BwB_h-fg66.png?height=903&amp;width=1511&amp;&amp;&amp;&amp;size=medium" alt="Black and white palettes inspired by manga art" title="null" class="image-node embed"><img src="https://images.mirror-media.xyz/publication-images/gfuIq-UUzVwRPys9pEnCs.png?height=930&amp;width=1572&amp;&amp;&amp;&amp;size=medium" alt="Black-on-light resembles a screen print" title="null" class="image-node embed"><img src="https://images.mirror-media.xyz/publication-images/aMKn4RdGCAihsCnEMqtCZ.png?height=927&amp;width=1920&amp;&amp;&amp;size=medium" alt="Light-on-light is a special palette which creates splashes of limited color only on a single face" title="null" class="image-node embed">]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/889a210c48591c98d25101e4c936ab0a.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Nishikigoi]]></title>
            <link>https://paragraph.com/@agrimony/nishikigoi</link>
            <guid>HKXz1ztPoHdeA1XgFOJc</guid>
            <pubDate>Sat, 14 May 2022 08:09:18 GMT</pubDate>
            <description><![CDATA[Some time back I started to learn some p5.js to create a generative art project which I had intended to publish on ArtBlocks. The premise was simple,...]]></description>
            <content:encoded><![CDATA[<p>Some time back I started to learn some p5.js to create a generative art project which I had intended to publish on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.artblocks.io/">ArtBlocks</a>. The premise was simple, a basic life simulator, not unlike Conway’s <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">game of life</a>, but focusing more on the animation of the animal itself. The lifeform I chose to emulate was a koi fish which would swim around in a pond.</p><p>This article is meant to be a walk through the creation process.</p><div class="relative header-and-anchor"><h2 id="h-starting-out">Starting out</h2></div><p>ArtBlocks has some pretty useful code on their <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ArtBlocks/artblocks-docs">github docs</a>. The code takes in a randomly generated hash string (e.g. <code>&quot;0x11ac128f8b54949c12d04102cf…&quot;</code>) and uses that to seed the random number generator (RNG). The RNG is then used to define various parameters of the generative artwork.</p><div class="relative header-and-anchor"><h2 id="h-lets-make-some-fish">Let’s make some fish</h2></div><p>The hardest part is starting. In order to draw a fish using nothing but native shapes, I decided to go with a circle. Lots of circles. Each time it draws a new circle, it moves 1 step to the right and draws a new slightly bigger circle. I had to play around with several formulas for the radius of the circle before I could settle on something vaguely fish shaped.</p><img src="https://storage.googleapis.com/papyrus_images/551e856d26b801e5b78aedd684ddc569.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAKCAIAAABaL8vzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVR4nMWSMQ6EIBBFmYED2Nl6AbkFzcTOQ1hzFk08h7UdJYmNp+AEdDqbOMlmi91iDZt91QTCf4GPUt8DAKogiKhfQERZlOEnIGKZS0hKXddE5L0fx3FZlhDCvu/rulprRXYzXWutlCIivjjPUwZmPo6DmbdtM8bcr0SONU0zz3OMMaWUcxaNCKZpKlY4AFRV1batc67v+2EYuq4rUzIAyFu93SogeGYBgPxXc/HJ+gceybtF9/z/iDAAAAAASUVORK5CYII=" nextheight="218" nextwidth="702" class="image-node embed"><p>After that I manually defined several fin and tail looking shapes just to make it look a bit more like a fish. I wanted the fins and tail to be able to wiggle as the fish swims, so it was important to get the rigging set up right. The connection points between the fins / tail and the body of the fish were all manually defined by trial and error.</p><img src="https://images.mirror-media.xyz/publication-images/BTY-U9ZYkS34aUSTmHZ5U.png?height=232&amp;width=666" alt="Now that looks more like a fish." title="null" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-animating-the-fish">Animating the fish</h2></div><p>There were 2 animations I wanted the fish to be able to do. <strong>Swim</strong> and <strong>turn</strong>. Swimming was pretty straight forward, since it just meant redrawing the fish at position <code>x+1</code> each frame. Turning would be a bit more tricky since the body of the fish would have to bend.</p><p>This was achieved by drawing each circle slightly bent away from the middle segment of the fish to generate the illusion of turning. Next, I added two parameters which defined the positional <code>(x,y)</code> coordinates of the fish and the <code>angle</code> of facing. With these in place, it is now possible to define the position and heading of each fish.</p><img src="https://images.mirror-media.xyz/publication-images/dMu-MOftKYJoy6o4JZrP7.gif?height=210&amp;width=675" alt="Testing out the turning animation." title="null" class="image-node embed"><p>The animations were done in a simple draw loop to start, but there was still something lacking. I needed a way to govern <em>why</em> the fish would move the way they did. My first attempts used a random dice roll to determine when the fish would turn, and by how much - but it didn’t feel quite right.</p><p><code>for fish in fishes fish.display fish.move if random() &gt; 0.5 fish.turn(random()) end</code></p><p>Going back to the drawing board, the solution I came up with is to introduce points of interest which the fish would swim towards. Limiting their rate of turning would allow them to keep swimming towards their goal. In my mind, these points might relate to a feeding event, or perhaps just a raindrop hitting the surface of the pond would be enough to pique the interest of the fish.</p><p>I animated this as a ripple on the surface of the water. In addition, it allowed me to include a limited form of interactivity - where once every so often you would be able to “feed“ the fish by clicking on a location and the fish would (slowly) react to it.</p><p><code>point = random(x,y) for fish in fishes fish.display fish.move fish.turn(angleBetween(fish, point)) end</code></p><div class="relative header-and-anchor"><h2 id="h-making-each-fish-unique">Making each fish unique</h2></div><p>Now that we have gotten the basic fish animation down, it’s time to put the final aesthetics into place. We need a way to make each fish uniquely generated!</p><p>I adapted some code for making generative Rorschach patterns from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://openprocessing.org/sketch/541006/">openprocessing</a> in order to (a) contain the pattern within the fish itself, and (b) to break the symmetry as needed.</p><p>I also created a color palette which I think best reflected the colors of Koi fish, and placed a drop shadow beneath each one to give it a more 3-dimensional feel. If you notice carefully, there are also alternative fin patterns which I built into the program as well to increase the variance.</p><img src="https://images.mirror-media.xyz/publication-images/Dzpb-InbU8Y7kfCeNIRUO.png?height=478&amp;width=817" alt="Curated set of generated Koi fish" title="null" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-putting-it-all-together">Putting it all together</h2></div><p>Finally, I wanted to give the piece a bit more atmosphere - so I included some lotus leaves which could float on the top of the pond. The leaves would slowly collide and bounce off each other as they float around the pond. Here’s an easy <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?time_continue=61&amp;v=LO3Awjn_gyU&amp;feature=emb_logo">tutorial</a> to learn how to make something similar!</p><p>Similarly, I created several environmental palettes which would be randomly generated depending on the initial seed. There are a total of 4 environmental palettes and 4 Koi palettes which could be combined, together with the practically infinite number of body patterns on each fish.</p><img src="https://images.mirror-media.xyz/publication-images/nZsvQKI3FxoMvrNw8ejT0.png?height=603&amp;width=897" alt="Snapshots of different environments and fish palettes which could be generated" title="null" class="image-node embed"><p>The end piece is intended to be something you could display on your wall as a zen statement piece. The artwork is also theoretically scalable to any display size and aspect ratio, although currently it works best at 800x800 (otherwise filling the space would require rendering too many objects and slows down the animation!).</p><img src="https://images.mirror-media.xyz/publication-images/fXf7BX9W7x-mgBrfilARH.gif?height=786&amp;width=784" alt="Sample output generated" title="null" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-closing-thoughts">Closing thoughts</h2></div><p>One thing I was not too satisfied with is the need to hard code in rarity tables. This stops it from being truly generative in my opinion. For example, some palettes are harder to find than others, also the number of fish generated is hard coded according to a rarity table.</p><p>I’m hoping to improve how rarities are generated in future projects. But for now, I have hard coded in an additional surprise as an “ultra-rare“ attribute. Once in a while you might spot a rare lotus flower among the leaves!</p><img src="https://images.mirror-media.xyz/publication-images/mHK2zp_I6NaEhhwGA4_-j.png?height=789&amp;width=786" alt="A rare lotus flower has bloomed!" title="null" class="image-node embed"><div class="relative header-and-anchor"><h2 id="h-et-voila">Et Voila</h2></div><p>I hope you enjoyed the run through. While there currently does not exist any NFT for these, I have set up a web server (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://replit.com/@agrimony/nishikigoi-web">full codebase</a> is open source under CC BY-SA3.0) as an additional utility for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metajam.asia/">metajam</a> METAPASS holders in order to showcase how NFTs allows anyone to build on each other in a completely open and permissionless manner.</p><p>The server generates the fish based on the <code>tokenID</code> of the METAPASS NFT(s) held in the connected wallet (in the same idea of <em>synthetic loot</em>). These are <strong>not</strong> NFTs, but you can play with them all the same.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nishikigoi-web.agrimony.repl.co/">https://nishikigoi-web.agrimony.repl.co/</a></p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/551e856d26b801e5b78aedd684ddc569.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[zkSanta - An idea for a Web3 Secret Santa project]]></title>
            <link>https://paragraph.com/@agrimony/zksanta-an-idea-for-a-web3-secret-santa-project</link>
            <guid>rhzMaExSQEaP4PFEc879</guid>
            <pubDate>Wed, 15 Dec 2021 13:00:09 GMT</pubDate>
            <description><![CDATA[This idea just popped into my head, so I’m trying to get it all down before I forget. My web3 dev skills are sorely inadequate for building such a pr...]]></description>
            <content:encoded><![CDATA[<img src="https://storage.googleapis.com/papyrus_images/7ea5183d5b6b1dd3292118a15d7902df.png" blurdataurl="data:image/png;base64,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" nextheight="408" nextwidth="612" class="image-node embed"><p>This idea just popped into my head, so I’m trying to get it all down before I forget. My web3 dev skills are sorely inadequate for building such a project, so I’m leaving this as an open call to any web3 developer who wants to take it up and attempt to build it before Christmas.</p><p>I will gladly be the first participant to join in.</p><div class="relative header-and-anchor"><h2 id="h-summary">Summary</h2></div><p>zkSanta is a smart contract which opens 1 month before Christmas.</p><p>Anyone can deposit an NFT into the contract using <code>depositPresent()</code> until 25/12 @ 00:00 UTC.</p><p>After 25/12 00:00 UTC, all addresses which have deposited NFTs into the contract can call <code>getPresent()</code> which will transfer a random NFT from the contract into their wallet.</p><p><strong>As per the traditional rules of Secret Santa, the random generator should not allow for the wallet to get back the same NFT which was deposited. Furthermore, the contract will need to hide the address from which this present originated (hence the zk bit).</strong></p><p>I have no idea if this is even feasible, or if there are security exploits to watch out for.</p><p>I just want to play zkSanta.</p><p><em>Bonus points if you can make the contract automated every year. Also, if it could be deployed as a factory contract for communities to organize private zkSanta events.</em></p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7ea5183d5b6b1dd3292118a15d7902df.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Hello World]]></title>
            <link>https://paragraph.com/@agrimony/hello-world</link>
            <guid>yLwbsqPt25XG7Dl0IJrD</guid>
            <pubDate>Sun, 07 Nov 2021 10:48:51 GMT</pubDate>
            <description><![CDATA[Starting up a mirror account to explore using this medium as a way to write down some thoughts.Generally interested in building on the web3 space. So...]]></description>
            <content:encoded><![CDATA[<p>Starting up a mirror account to explore using this medium as a way to write down some thoughts.</p><p>Generally interested in building on the web3 space. So far, I’ve helped to build a new community-based DEX with other contributors on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.airswap.io">AirSwap</a>. You can also find me helping out the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zapper.fi">Zapper</a> community.</p><p>I’m also currently exploring the world of coding and generative art, and most likely going to be using this as a way to journal some tutorials and learnings from my experiments.</p><p>Will also leave some of my tests up as NFTs which people can mint if they are interested!</p>]]></content:encoded>
            <author>agrimony@newsletter.paragraph.com (agrimony)</author>
        </item>
    </channel>
</rss>