<?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>syskey</title>
        <link>https://paragraph.com/@syskeys</link>
        <description>发掘优质的早期项目
重点参与优质的早期项目
欢迎关注，交流
https://twitter.com/skyMetaverse</description>
        <lastBuildDate>Fri, 10 Jul 2026 18:51:08 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>syskey</title>
            <url>https://storage.googleapis.com/papyrus_images/5af11e4070e404c6937b9daa810c503ffffbe2ba02ee4c785d4414253c24b783.jpg</url>
            <link>https://paragraph.com/@syskeys</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Namada最全面授信仪式交互教程]]></title>
            <link>https://paragraph.com/@syskeys/namada</link>
            <guid>fn43lWoZVKGxFppaAeex</guid>
            <pubDate>Thu, 15 Dec 2022 16:08:15 GMT</pubDate>
            <description><![CDATA[一、项目介绍Namada是一个主权的股权证明区块链，使用Tendermint BFT共识，通过使用源自Sapling电路的多资产隐私池，实现任何本地或非本地资产的多资产隐私转账。Namada的特点是完全支持IBC协议，一个原生集成的以太坊桥，一个具有自动奖励复合和立方体削减的现代股权证明系统，一个股权加权的治理信号机制，以及一个主动/追溯的公共物品资助系统。隐私转账的用户因其对隐私集的贡献而获得原生协议代币形式的奖励。为了促进用户与协议的安全和私密互动，提供了一个多资产的隐私转账钱包。 你可以在这里了解更多关于Namada的信息。二、活动介绍2.1 根据官方推文，现在是直接官方直接免费开放了所有Token，当然虽然说是free但也需要做一些任务才能获得Token。2.2 任务解读根据reddit论坛任务的说明，可以看到具体的要求，建议各位按照自己擅长的方面来选择A/B/C的任务类型。另外特别注意，官方要求的语言必须是英语、必须是原创，直接复制粘贴官方文档是没用的。官方也会在reddit论坛随时更新一些有用的提示。另外根据官方推文可以看到目前C类型的任务做的人很少，那可能不那么卷，...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">一、项目介绍</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/namadanetwork">Namada</a>是一个主权的股权证明区块链，使用Tendermint BFT共识，通过使用源自Sapling电路的多资产隐私池，实现任何本地或非本地资产的多资产隐私转账。Namada的特点是完全支持IBC协议，一个原生集成的以太坊桥，一个具有自动奖励复合和立方体削减的现代股权证明系统，一个股权加权的治理信号机制，以及一个主动/追溯的公共物品资助系统。隐私转账的用户因其对隐私集的贡献而获得原生协议代币形式的奖励。为了促进用户与协议的安全和私密互动，提供了一个多资产的隐私转账钱包。</p><p>你可以在这里了解更多关于<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.namada.net/introducing-namada-interchain-asset-agnostic-privacy/">Namada的信息</a>。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">二、活动介绍</h2><h3 id="h-21-tokenfreetoken" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1 根据官方推文，现在是直接官方直接免费开放了所有Token，当然虽然说是free但也需要做一些任务才能获得Token。</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18d2c8424bbe5cdd8c60908bdaf03e2159a05918cf38601dbc8e37b0361f6ac9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-22" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2 任务解读</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0eac6238133850f5fbf6de9297d35576a5a4e07e36005491359a422b796f801b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>根据<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/Namada/comments/zlpwb1/free_for_all_cohorts_quest/?utm_source=share&amp;utm_medium=web2x&amp;context=3">reddit论坛</a>任务的说明，可以看到具体的要求，建议各位按照自己擅长的方面来选择A/B/C的任务类型。另外特别注意，<strong>官方要求的语言必须是英语、必须是原创，直接复制粘贴官方文档是没用的</strong>。官方也会在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/Namada/comments/zlpwb1/free_for_all_cohorts_quest/?utm_source=share&amp;utm_medium=web2x&amp;context=3">reddit论坛</a>随时更新一些有用的提示。另外根据<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/namadanetwork/status/1603369370683678720">官方推文</a>可以看到目前C类型的任务做的人很少，那可能不那么卷，相对也更容易获得Token。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/258417fd52446119420f1d9c940bd80a13cafd3b47354bfc51f82bcd39c84ff5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>如果你通过发twitter线程或者文章等等方式完成了以上任务，那么你就需要将你贡献的链接通过私聊发给 Namada的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/namadanetwork">官方twitter</a>。然后耐心等待官方的审核即可，审核通过后，官方会发你一个token和参与的队列数。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/615fb378114203fac7610c7f0e4994a6b1e7df6bac7719d54e4ae7b1972f7be7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>在等待官方审核期间可以先完成下面第三步的步骤。</p><h2 id="h-namada-trusted-setup" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">三、安装Namada Trusted Setup程序</h2><h3 id="h-31" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.1 这一块比较简单，另外网上有很多的教程，我就懒得重新写了，发一份我觉得还不错的教程。这篇教程基本和官方教程一模一样，但比官方要详细一些，并且配上了图文。唯一遗憾的地方是，教程的标题还有硬件要求是错的（如果写教程老兄有看到，可以修改下哈），不过这并不影响实际的安装部署。</h3><ul><li><p>官方教程：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/anoma/namada-trusted-setup#1-building-and-contributing-from-source">点我直达</a></p></li><li><p>还不错的教程：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/dapaopao.eth/rkluZH9LnSnI4HFDxipk3RlTqoC5fdyj3lWqR7A1Pis">点我直达</a></p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">四、开始贡献</h2><p><strong>注意：开始此步骤前，必须要完成步骤二、步骤三、并且获得了官方发的Token。</strong></p><h3 id="h-41" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.1 首先确定自己所在的队列是否可以贡献了</h3><p>官方每个队列的持续时间是24小时，开始的时间是 UTC 09:00 AM ~ 次日UTC 09:00 AM 结束。北京时间是：15:00 ~ 次日的15:00结束。具体是否可以贡献，可以看下官方最新推文和reddit论坛的最新消息。或者也可以按照下面的方式确认。</p><p>以27队列为例，那么可以打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ceremony.namada.net/">网站</a>，在Cohort中选择自己的队列数，然后查看下方是否有贡献存在。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/10cdd7e05d7bf5e988561f288d24c2b45948972dd25699fdc66060441e1d4535.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-42-namada-ts" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2 运行namada-ts</h3><p>首先开启下Screen，防止在排队的时候服务器意外断开链接了。</p><pre data-type="codeBlock" text="screen -S Namada
"><code>screen <span class="hljs-operator">-</span>S Namada
</code></pre><p>再运行以下指令，<strong>注意将命令最后的Token替换为官方发你的，不要直接复制教程里的。</strong></p><pre data-type="codeBlock" text="namada-ts contribute default https://contribute.namada.net Token
"><code>namada-ts contribute <span class="hljs-keyword">default</span> https:<span class="hljs-comment">//contribute.namada.net Token</span>
</code></pre><p>输入完上面的命令后，直接按键盘回车即可，相应的会出现下图内容，按照下图说明填写即可，应该是比较详细了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b0f6cafdb121a043e041a0782cc7d1cc277a45bdc91262d10a15e505f1ad34f3.png" alt="注意保存好助记词不要泄露了" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">注意保存好助记词不要泄露了</figcaption></figure><p>如果你按照上图的步骤，成功进入到了等待队列中，那接下来需要你看下预计等待的时间和在队列中的位置，因为等排到自己的时候还需要输入内容的，如果不输入内容，是不算贡献的。个人建议是每隔10几分钟就看一下。下图就是需要输入内容的时候。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f195ebba2a513e9623845ef67e718fc2788bbc2a63f9ad2c3ab2c463daadd346.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>要输入的内容都在上图中了，具体看图片文字描述操作就行。至此整个贡献过程就完成了，来到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ceremony.namada.net/">官方贡献网站</a>也可以查看到自己做的贡献了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b658e6af8e1576b7e2b7c1c637f8804675efdf6978f225b86fbed21136da903e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">最后</h2><p>教程到此就结束了，如果对你有所帮助请一键三连支持下。最后也奉劝下那些Ctrl + C、 Ctrl + V的人，耗子尾汁。</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">文章引用</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.namada.net/">官方blog</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/Namada/comments/yxvpo4/prepping_for_the_namada_trusted_setup_ceremony/">官方reddit</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/namadanetwork">官方twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/anoma/namada-trusted-setup">官方github</a></p></li></ul><div data-type="subscribeButton" class="center-contents"><a class="email-subscribe-button" href="null">Subscribe</a></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/114c11cab86886fadf8812710789dcb0aa55db381d4d6143a65d23eaf41631ba.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Chainflip:可能是最详细的validator节点搭建教程]]></title>
            <link>https://paragraph.com/@syskeys/chainflip-validator</link>
            <guid>v9SitOf5eEJ3733ZeGsP</guid>
            <pubDate>Sat, 19 Nov 2022 05:27:22 GMT</pubDate>
            <description><![CDATA[项目介绍Chainflip 是一种去中心化、无需信任的协议，可实现不同区块链之间的跨链交换。 我们消除了任何类型的用户障碍或繁重的权衡，因此无需以前的加密知识，只需点击几下即可交换您的代币。项目融资600W美元 由 Framework Ventures 领投。1000W美元 由 Framework Ventures、Blockchain Capital 和 Pantera Capital 领投。测试网节点介绍详细的官方介绍可以查看官方推文线程，我这里简单说下： 1、这是个长期运行的测试网，如果要运行验证节点，要做好长期运行的准备，并且目前不是激励性测试网。 2、运行测试网验证器，最好是具备一些Linux系统的基础知识。 3、虽然说不是激励性测试网，但官方twitter说了，虽然不会立即受到激励，但我们会在未来为大家提供许多惊喜，以奖励大家的参与。Validator(验证器)搭建教程在教程开始之前非常感谢小师妹的提醒，要不我就可能错过了。第一步：准备工作1.1 服务器要求操作系统：Ubuntu 20.04 - 请仅使用此操作系统CPU：4 GHz | 4+ 核心，专用更好内存：8G...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目介绍</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Chainflip">Chainflip</a> 是一种去中心化、无需信任的协议，可实现不同区块链之间的跨链交换。</p><p>我们消除了任何类型的用户障碍或繁重的权衡，因此无需以前的加密知识，只需点击几下即可交换您的代币。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目融资</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.coindesk.com/markets/2021/08/19/cross-chain-protocol-chainflip-raises-6m-to-fund-growth-security-audits/">600W美元</a> 由 Framework Ventures 领投。</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theblock.co/post/146223/chainflip-labs-secures-10-million-for-cross-chain-dex">1000W美元</a> 由 Framework Ventures、Blockchain Capital 和 Pantera Capital 领投。</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">测试网节点介绍</h2><p>详细的官方介绍可以查看<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Chainflip/status/1593194901529059328">官方推文线程</a>，我这里简单说下：</p><p>1、这是个长期运行的测试网，如果要运行验证节点，要做好长期运行的准备，并且目前不是激励性测试网。</p><p>2、运行测试网验证器，最好是具备一些Linux系统的基础知识。</p><p>3、虽然说不是激励性测试网，但官方<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Chainflip/status/1593194909821206533?s=20&amp;t=Uz7fkpBqOvucuqZ2IGlN9g">twitter说了</a>，虽然不会立即受到激励，但我们会在未来为大家提供许多惊喜，以奖励大家的参与。</p><h2 id="h-validator" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Validator(验证器)搭建教程</h2><p>在教程开始之前非常感谢<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Monica_xiaoM">小师妹</a>的提醒，要不我就可能错过了。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一步：准备工作</h3><p><strong>1.1 服务器要求</strong></p><ul><li><p>操作系统：Ubuntu 20.04 - 请仅使用此操作系统</p></li><li><p>CPU：4 GHz | 4+ 核心，专用更好</p></li><li><p>内存：8GB</p></li><li><p>磁盘：50 GB（这可能会随着时间的推移而增加）</p></li><li><p>带宽：推荐 1GBps 连接，每月 100 GB 组合上行/下行带宽</p></li></ul><p>该机器必须 24/7 全天候可用，因此建议您仅在具有稳定可靠的互联网连接的机器上尝试此操作，例如 VPS 或专用服务器。</p><p><strong>1.2 服务器必须开放以下端口</strong></p><ul><li><p>30333 (TCP)</p></li><li><p>8078 (TCP)</p></li></ul><p><strong>1.3 必须准备两个以太坊钱包（请一定要用新的钱包地址，因为需要用到钱包私钥）</strong></p><ul><li><p>Stake wallet : 用来质押的钱包 （也需要测试网 Goerli ETH，数量够发起交易就行，需要用此钱包地址到官方discord中领水）</p></li><li><p>Validator wallet : 操作验证器的钱包 (钱包内请提前准备至少0.1 Goerli ETH的测试币)</p></li></ul><p><strong>1.4 Alchemy Goerli测试网的RPC链接</strong></p><p>这一块就不详细的介绍了，网上有很多教程，这里附上<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.alchemy.com/docs/how-to-develop-an-nft-smart-contract-erc721-with-alchemy#create-a-free-alchemy-account">申请RPC的官方教程</a>。最终我们需要的是HTTPS和WEBSOCKETS的链接地址。注意：key别泄露了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/626db5ba9e55976f4b7ff883b9719467e8517026c59b73a000f57ef49ebcb8a5.png" alt="https和wss链接信息" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https和wss链接信息</figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第二步：开始搭建</h3><p>正式开始之前，先说明下，我的教程和官方有些不太一样，主要是我没有创建验证器专用的账号，我是直接在root用户下进行安装的。当然为了安全来说，创建专用账户会好些，但都是相对的。不啰嗦了，正式开始。</p><p><strong>2.1 获取Validator软件</strong></p><pre data-type="codeBlock" text="sudo mkdir -p /etc/apt/keyrings \
&amp;&amp; curl -fsSL repo.chainflip.io/keys/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/chainflip.gpg
"><code>sudo mkdir <span class="hljs-operator">-</span>p <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>keyrings \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> curl <span class="hljs-operator">-</span>fsSL repo.chainflip.io/keys<span class="hljs-operator">/</span>gpg <span class="hljs-operator">|</span> sudo gpg <span class="hljs-operator">-</span><span class="hljs-operator">-</span>dearmor <span class="hljs-operator">-</span>o <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>keyrings<span class="hljs-operator">/</span>chainflip.gpg
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ee8ca21daa2492d882c685cea1aca1a716bbe5771485558a457c995735867936.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>2.2 添加源信息</strong></p><pre data-type="codeBlock" text="echo &quot;deb [signed-by=/etc/apt/keyrings/chainflip.gpg] https://repo.chainflip.io/perseverance/ focal main&quot; | sudo tee /etc/apt/sources.list.d/chainflip.list
"><code>echo <span class="hljs-string">"deb [signed-by=/etc/apt/keyrings/chainflip.gpg] https://repo.chainflip.io/perseverance/ focal main"</span> <span class="hljs-operator">|</span> sudo tee <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>sources.list.d/chainflip.list
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7e9bd09f13186dfd0d396ec7ac405783c443165ac71e20df052014089fc8043e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>2.3 更新系统，并安装Validator软件</strong></p><pre data-type="codeBlock" text="sudo apt-get update \
&amp;&amp; sudo apt-get install -y chainflip-cli chainflip-node chainflip-engine
"><code>sudo apt<span class="hljs-operator">-</span>get update \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> sudo apt<span class="hljs-operator">-</span>get install <span class="hljs-operator">-</span>y chainflip<span class="hljs-operator">-</span>cli chainflip<span class="hljs-operator">-</span>node chainflip<span class="hljs-operator">-</span>engine
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/860356917981efd990ea512f6a9c73094b9bbe1bb95238121aad3e86b98b3ff6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>这一步更新可能会慢些，耐心等待完成。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第三步：配置和生成验证器密钥</h3><p><strong>3.1 创建密钥保存的目录,并进入此目录</strong></p><pre data-type="codeBlock" text="sudo mkdir /etc/chainflip/keys \
&amp;&amp; cd /etc/chainflip/keys
"><code>sudo mkdir <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>keys \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> cd <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>keys
</code></pre><p><strong>3.2 还记的在1.3步骤中提前准备的两个钱包地址吗？现在就需要用到Validator wallet的私钥了，将验证器钱包的私钥导出，并运行下面的命令(注意将“你的验证器钱包私钥”替换为自己的钱包私钥)。注意：如果私钥前面有0x，请删除0x。</strong></p><pre data-type="codeBlock" text="YOUR_VALIDATOR_WALLET_PRIVATE_KEY=你的验证器钱包私钥 \
&amp;&amp; echo -n &quot;YOUR_VALIDATOR_WALLET_PRIVATE_KEY&quot; |  sudo tee /etc/chainflip/keys/ethereum_key_file
"><code>YOUR_VALIDATOR_WALLET_PRIVATE_KEY<span class="hljs-operator">=</span>你的验证器钱包私钥 \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> echo <span class="hljs-operator">-</span>n <span class="hljs-string">"YOUR_VALIDATOR_WALLET_PRIVATE_KEY"</span> <span class="hljs-operator">|</span>  sudo tee <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>keys<span class="hljs-operator">/</span>ethereum_key_file
</code></pre><p><strong>3.3 生成验证器Key</strong></p><pre data-type="codeBlock" text="chainflip-node key generate
"><code>chainflip-node <span class="hljs-keyword">key</span> generate
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/45209606e13d1a4620a86b23f9c72055ced2fa7b19e00b9e3f396e81f7859d9b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ul><li><p>Secret phrase：验证器的助记词（不要泄露）</p></li><li><p>Secret seed：验证器私钥（不要泄露）</p></li><li><p><strong>Public key (SS58)：验证器公钥（stake时需要此地址）</strong></p></li></ul><p><strong>3.3.1 将验证器私钥写入到文件，需要把下面命令中的YOUR_CHAINFLIP_SECRET_SEED替换为3.3步骤中Secret seed显示的内容（包含0x）。</strong></p><pre data-type="codeBlock" text="SECRET_SEED=YOUR_CHAINFLIP_SECRET_SEED \
&amp;&amp; echo -n &quot;${SECRET_SEED:2}&quot; | sudo tee /etc/chainflip/keys/signing_key_file
"><code>SECRET_SEED<span class="hljs-operator">=</span>YOUR_CHAINFLIP_SECRET_SEED \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> echo <span class="hljs-operator">-</span>n <span class="hljs-string">"${SECRET_SEED:2}"</span> <span class="hljs-operator">|</span> sudo tee <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>keys<span class="hljs-operator">/</span>signing_key_file
</code></pre><p><strong>3.4 生成节点密钥</strong></p><pre data-type="codeBlock" text="sudo chainflip-node key generate-node-key --file /etc/chainflip/keys/node_key_file
"><code>sudo chainflip<span class="hljs-operator">-</span>node key generate<span class="hljs-operator">-</span>node<span class="hljs-operator">-</span>key <span class="hljs-operator">-</span><span class="hljs-operator">-</span>file <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>keys<span class="hljs-operator">/</span>node_key_file
</code></pre><p>已经过以上步骤后，你应该能在<code>/etc/chainflip/keys</code>目录中看到如下三个文件。<strong>（请不要向任何人共享这些文件，绝对私密文件。）</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f61eea274178d0fa5faa4d4cefb8df2e5abfaafd4ddff4489ee37aab14d9b5a6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第四步：创建配置文件</h3><p><strong>4.1 创建配置文件目录及文件</strong></p><pre data-type="codeBlock" text="sudo mkdir -p /etc/chainflip/config \
&amp;&amp; sudo touch /etc/chainflip/config/Default.toml
"><code>sudo mkdir <span class="hljs-operator">-</span>p <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> sudo touch <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config<span class="hljs-operator">/</span>Default.toml
</code></pre><p><strong>4.2 执行下面的命令，在执行之前，需要先将IP_ADDRESS_OF_YOUR_NODE字段修改为自己的服务器公网IP，将1.4步骤中申请的RPC链接分别替换WSS_ENDPOINT_FROM_ETHEREUM_CLIENT和HTTPS_ENDPOINT_FROM_ETHEREUM_CLIENT字段，其他内容不需要修改，然后执行即可。</strong></p><pre data-type="codeBlock" text="cat&gt;/etc/chainflip/config/Default.toml&lt;&lt;EOF
#Default configurations for the CFE
[node_p2p]
node_key_file = &quot;/etc/chainflip/keys/node_key_file&quot;
ip_address=&quot;IP_ADDRESS_OF_YOUR_NODE&quot;
port = &quot;8078&quot;

[state_chain]
ws_endpoint = &quot;ws://127.0.0.1:9944&quot;
signing_key_file = &quot;/etc/chainflip/keys/signing_key_file&quot;

[eth]
#Ethereum RPC endpoints (websocket and http for redundancy).
ws_node_endpoint = &quot;WSS_ENDPOINT_FROM_ETHEREUM_CLIENT&quot;
http_node_endpoint = &quot;HTTPS_ENDPOINT_FROM_ETHEREUM_CLIENT&quot;

#Ethereum private key file path. This file should contain a hex-encoded private key.
private_key_file = &quot;/etc/chainflip/keys/ethereum_key_file&quot;

[signing]
db_file = &quot;/etc/chainflip/data.db&quot;
EOF
"><code>cat>/etc/chainflip/config/Default.toml&#x3C;&#x3C;EOF
<span class="hljs-comment">#Default configurations for the CFE</span>
<span class="hljs-section">[node_p2p]</span>
<span class="hljs-attr">node_key_file</span> = <span class="hljs-string">"/etc/chainflip/keys/node_key_file"</span>
<span class="hljs-attr">ip_address</span>=<span class="hljs-string">"IP_ADDRESS_OF_YOUR_NODE"</span>
<span class="hljs-attr">port</span> = <span class="hljs-string">"8078"</span>

<span class="hljs-section">[state_chain]</span>
<span class="hljs-attr">ws_endpoint</span> = <span class="hljs-string">"ws://127.0.0.1:9944"</span>
<span class="hljs-attr">signing_key_file</span> = <span class="hljs-string">"/etc/chainflip/keys/signing_key_file"</span>

<span class="hljs-section">[eth]</span>
<span class="hljs-comment">#Ethereum RPC endpoints (websocket and http for redundancy).</span>
<span class="hljs-attr">ws_node_endpoint</span> = <span class="hljs-string">"WSS_ENDPOINT_FROM_ETHEREUM_CLIENT"</span>
<span class="hljs-attr">http_node_endpoint</span> = <span class="hljs-string">"HTTPS_ENDPOINT_FROM_ETHEREUM_CLIENT"</span>

<span class="hljs-comment">#Ethereum private key file path. This file should contain a hex-encoded private key.</span>
<span class="hljs-attr">private_key_file</span> = <span class="hljs-string">"/etc/chainflip/keys/ethereum_key_file"</span>

<span class="hljs-section">[signing]</span>
<span class="hljs-attr">db_file</span> = <span class="hljs-string">"/etc/chainflip/data.db"</span>
EOF
</code></pre><p>完成后的样子大概如下图所示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1d673b33587a525a34d722419f92f775d0ffb84bd196a9b528ce075cbe66d298.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第五步：启动节点</h3><p><strong>5.1 启动验证节点</strong></p><pre data-type="codeBlock" text="sudo systemctl start chainflip-node
"><code>sudo systemctl <span class="hljs-keyword">start</span> chainflip<span class="hljs-operator">-</span>node
</code></pre><p><strong>5.1.1 查看验证节点状态（active (running) 代表运行正常）</strong></p><pre data-type="codeBlock" text="sudo systemctl status chainflip-node
"><code>sudo systemctl <span class="hljs-built_in">status</span> chainflip-node
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ce29bc0d6aeeb2c9f4c6c853cd8efc60387e27324e28cf2e22fbae207f2be939.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>5.1.2 设置chainflip-node开机启动</strong></p><pre data-type="codeBlock" text="sudo systemctl enable chainflip-node
"><code>sudo systemctl <span class="hljs-built_in">enable</span> chainflip-node
</code></pre><p><strong>5.1.3 查看同步日志，整个同步速度还是很快的基本上半个小时左右就能同步完成了。</strong></p><pre data-type="codeBlock" text="tail -f /var/log/chainflip-node.log
"><code>tail <span class="hljs-operator">-</span>f <span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>log<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">-</span>node.log
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0adbb1eb36bfb1841e4a05300d4e12cf979f4169eadc563909aba25405d82915.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ul><li><p>Syncing：代表正在同步</p></li><li><p>target：当前网络高度</p></li><li><p>best：当前同步进度</p></li><li><p>finalized：当前已同步完成</p></li><li><p><strong>Idle： 代表当前节点已经同步完成</strong></p></li></ul><p>退出查看日志按键盘<code>ctrl/control + c</code>即可。</p><p><strong>5.2 启动chainflip-engine</strong></p><p><strong>重要说明：要运行此步骤必须要等待节点同步完成才可以，不然会报错。</strong></p><p><strong>重要说明：要运行此步骤必须要等待节点同步完成才可以，不然会报错。</strong></p><p><strong>重要说明：要运行此步骤必须要等待节点同步完成才可以，不然会报错。</strong></p><pre data-type="codeBlock" text="sudo systemctl start chainflip-engine
"><code>sudo systemctl <span class="hljs-keyword">start</span> chainflip<span class="hljs-operator">-</span>engine
</code></pre><p><strong>5.2.1 查看chainflip-engine状态（active (running) 代表运行正常）</strong></p><pre data-type="codeBlock" text="sudo systemctl status chainflip-engine
"><code>sudo systemctl <span class="hljs-built_in">status</span> chainflip-engine
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7cd60a4c021aa9af2765af95899dc66e02f011b7eb6d2bde5e20e6805ab03d37.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>5.2.2 设置chainflip-engine开机启动</strong></p><pre data-type="codeBlock" text="sudo systemctl enable chainflip-engine
"><code>sudo systemctl <span class="hljs-built_in">enable</span> chainflip-engine
</code></pre><p><strong>5.2.3 查看chainflip-engine日志</strong></p><pre data-type="codeBlock" text="tail -f /var/log/chainflip-engine.log
"><code>tail <span class="hljs-operator">-</span>f <span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>log<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">-</span>engine.log
</code></pre><p>日志会显示我们当前还没有质押的警告，这个我们接下来操作质押。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第六步：质押</h3><p><strong>6.1 在质押之前，我们需要先到</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/fV963ApV5U"><strong>官方discord</strong></a><strong>中领水，进入discord中后先在join-testnet频道点击按钮才能显示出来faucet频道。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c7979f052820756de472b208feed8099b901bece13b2f72bd34a121b852b7e26.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>6.2 在faucet频道，发送</strong> <code>!drip stake钱包地址</code><strong>即可领取官方发的测试币TFLIP。stake钱包就是我们在1.3步骤中提前准备的钱包。</strong></p><p><strong>6.3 打开</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://stake-perseverance.chainflip.io/auctions"><strong>官方stake网站</strong></a><strong>，使用我们的stake钱包链接网站。然后点击Add node按钮，在弹出的输入框中填写我们的验证器公钥（就是3.3步骤中生成的SS58类型的公钥），填写质押的数量，最后点击下方按钮即可。这里需要两次操作approval和stakes因为我操作过了， 所以只显示了stakes。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8357b58974fe088a69d87b5ced9458cece0e7fa1aa49a41ed87b7df2aed455a9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>6.4 当我们在网站上质押完成后，可以在My nodes页面查看验证器信息。你现在查看到的状态可能和我显示的不一样，这是因为在网站上质押之后，还需要到服务器上设置验证器的其他信息。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/669d07141b8bc7f9d7379b2b45e29d7a81eaf23a46dd8f2e87b51e1e47edff39.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第七步：在服务器上上设置验证器的其他信息</h3><p><strong>7.1 注册验证器密钥</strong></p><pre data-type="codeBlock" text="sudo chainflip-cli \
      --config-path /etc/chainflip/config/Default.toml \
      register-account-role Validator
"><code>sudo chainflip<span class="hljs-operator">-</span>cli \
      <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config<span class="hljs-operator">-</span>path <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config<span class="hljs-operator">/</span>Default.toml \
      register<span class="hljs-operator">-</span>account<span class="hljs-operator">-</span>role Validator
</code></pre><p><strong>7.2 激活验证器</strong></p><pre data-type="codeBlock" text="sudo chainflip-cli \
    --config-path /etc/chainflip/config/Default.toml \
    activate
"><code>sudo chainflip<span class="hljs-operator">-</span>cli \
    <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config<span class="hljs-operator">-</span>path <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config<span class="hljs-operator">/</span>Default.toml \
    activate
</code></pre><p><strong>7.3 开启rotate</strong></p><pre data-type="codeBlock" text="sudo chainflip-cli \
    --config-path /etc/chainflip/config/Default.toml rotate
"><code>sudo chainflip<span class="hljs-operator">-</span>cli \
    <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config<span class="hljs-operator">-</span>path <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config<span class="hljs-operator">/</span>Default.toml rotate
</code></pre><p><strong>7.4 可选，设置验证器的名字，将下面命令中的</strong><code>my-name</code><strong>修改为其他任何你想显示的名字</strong></p><pre data-type="codeBlock" text="sudo chainflip-cli \
    --config-path /etc/chainflip/config/Default.toml \
    vanity-name my-name
"><code>sudo chainflip<span class="hljs-operator">-</span>cli \
    <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config<span class="hljs-operator">-</span>path <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>chainflip<span class="hljs-operator">/</span>config<span class="hljs-operator">/</span>Default.toml \
    vanity<span class="hljs-operator">-</span>name my<span class="hljs-operator">-</span>name
</code></pre><p><strong>7.5 当运行完上面的命令后，还需要重启下chainflip-engine，稍等片刻后，再到stake网站上查看验证器状态就会发生变化了。</strong></p><pre data-type="codeBlock" text="sudo systemctl restart chainflip-engine
"><code>sudo systemctl restart chainflip<span class="hljs-operator">-</span>engine
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">最后</h2><p>整个教程基本到这里就结束了，如果你在运行过程中有什么问题，请到官方Discord中询问。</p><p>如果觉得教程还不错，请多多点赞关注转发哈。</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">文章引用</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.chainflip.io/cn/">官方blog</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/chainflip">官方twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/fV963ApV5U">官方discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.chainflip.io/perseverance-validator-documentation/">官方节点运行文档</a></p></li></ul>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/00df9a279a02e1e845ac5c114184b850f67c94da8f76281757786361b34c91fd.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[【激励测试网】Exorde节点运行教程]]></title>
            <link>https://paragraph.com/@syskeys/exorde</link>
            <guid>xb0RbGnKKsohAbDaTiNZ</guid>
            <pubDate>Wed, 09 Nov 2022 08:33:13 GMT</pubDate>
            <description><![CDATA[项目介绍Exorde是一个运行在Skale网络的协议，Exorde 协议接收公共信息的输入：url、社交网络帖子、新闻文章、照片、视频...... 这些内容在分散的数据管道中处理，作为输出数据图，链接所有相似的数据和事实。项目融资A轮：120万美元Exorde Labs 是 Coinlist 2022 年冬季种子的首批项目空投条件由于官方并未针对此激励活动发表文章，这里直接贴官方Discord的截图。简单描述下，就是运行官方的节点程序，持续为项目做贡献，就可以获得激励测试网的奖励。节点教程第一步：节点硬件要求CPU（2-4核）CPU核数太少可能会影响投票的进度，也可能会错过奖励。内存（2-4GB）磁盘（大于1GB即可）硬盘需求很小。可以注意这个配置要求很低，如果用服务器跑的话，成本也不会很高。第二步： 安装并运行官方节点程序在正式开始之前，先说下我是在Ubuntu 20.04上运行，如果你想在windows或MAC上运行，可能用此教程行不通。 2.1 安装dockercurl -fsSL get.docker.com -o get-docker.sh \ &#x26;&#x26;...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目介绍</h1><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ExordeLabs">Exorde</a>是一个运行在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://skale.network/">Skale</a>网络的协议，Exorde 协议接收公共信息的输入：url、社交网络帖子、新闻文章、照片、视频...... 这些内容在分散的数据管道中处理，作为输出数据图，链接所有相似的数据和事实。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目融资</h1><ul><li><p>A轮：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://exorde.network/blog/exorde-labs-raises-1-2-million">120万美元</a></p></li><li><p>Exorde Labs 是 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://exorde.network/blog/we-are-part-of-the-coinlist-seed-winter-2022-batch">Coinlist 2022 年冬季种子的首批项目</a></p></li></ul><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">空投条件</h1><p>由于官方并未针对此激励活动发表文章，这里直接贴<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/exordelabs">官方Discord</a>的截图。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/14e67c09038c992086852b4ec81dd37fbe91125fbfa9a1c4e72ec62bc43f883b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/07f583756651bca55a2de0b169a1616d8b6490320c3cac0859299d8aa2d7ff47.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>简单描述下，就是运行官方的节点程序，持续为项目做贡献，就可以获得激励测试网的奖励。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">节点教程</h1><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一步：节点硬件要求</h3><ul><li><p>CPU（2-4核）CPU核数太少可能会影响投票的进度，也可能会错过奖励。</p></li><li><p>内存（2-4GB）</p></li><li><p>磁盘（大于1GB即可）硬盘需求很小。</p></li></ul><p>可以注意这个配置要求很低，如果用服务器跑的话，成本也不会很高。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第二步： 安装并运行官方节点程序</h3><p>在正式开始之前，先说下我是在Ubuntu 20.04上运行，如果你想在windows或MAC上运行，可能用此教程行不通。</p><p><strong>2.1 安装docker</strong></p><pre data-type="codeBlock" text="curl -fsSL get.docker.com -o get-docker.sh \
    &amp;&amp; sh get-docker.sh \
    &amp;&amp; systemctl enable docker \
    &amp;&amp; systemctl start docker
"><code>curl <span class="hljs-operator">-</span>fsSL get.docker.com <span class="hljs-operator">-</span>o get<span class="hljs-operator">-</span>docker.sh \
    <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> sh get<span class="hljs-operator">-</span>docker.sh \
    <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> systemctl enable docker \
    <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> systemctl start docker
</code></pre><p>执行完成后，运行下面的命令，查看是否安装成功。</p><pre data-type="codeBlock" text="docker version
"><code></code></pre><p><strong>2.2 安装screen和git</strong></p><pre data-type="codeBlock" text="sudo apt-get install screen git -y
"><code>sudo apt<span class="hljs-operator">-</span>get install screen git <span class="hljs-operator">-</span>y
</code></pre><p><strong>2.3 克隆官方节点仓库并构建docker镜像</strong></p><pre data-type="codeBlock" text="git clone https://github.com/exorde-labs/ExordeModuleCLI.git
cd ExordeModuleCLI
docker build -t exorde-cli . 
"><code>git <span class="hljs-built_in">clone</span> https://github.com/exorde-labs/ExordeModuleCLI.git
<span class="hljs-built_in">cd</span> ExordeModuleCLI
docker build -t exorde-cli . 
</code></pre><p>这一步花费时间的长短会根据服务器的配置来计算，输出以下内容代表构建镜像成功。</p><pre data-type="codeBlock" text="Successfully built **********
Successfully tagged exorde-cli:latest
"><code>Successfully built <span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span>
Successfully tagged exorde<span class="hljs-operator">-</span>cli:latest
</code></pre><p><strong>2.4 运行节点程序</strong></p><pre data-type="codeBlock" text="screen -S exorde 
docker run -it exorde-cli -m YOUR_MAIN_ADDRESS -l LOGGING
"><code>screen <span class="hljs-operator">-</span>S exorde 
docker run <span class="hljs-operator">-</span>it exorde<span class="hljs-operator">-</span>cli <span class="hljs-operator">-</span>m YOUR_MAIN_ADDRESS <span class="hljs-operator">-</span>l LOGGING
</code></pre><p>示例</p><pre data-type="codeBlock" text="screen -S exorde 
docker run -it exorde-cli -m 0xE2027B05D620c0109e2d8e751A10A2aAda3e490A -l 2
"><code>screen <span class="hljs-operator">-</span>S exorde 
docker run <span class="hljs-operator">-</span>it exorde<span class="hljs-operator">-</span>cli <span class="hljs-operator">-</span>m <span class="hljs-number">0xE2027B05D620c0109e2d8e751A10A2aAda3e490A</span> <span class="hljs-operator">-</span>l <span class="hljs-number">2</span>
</code></pre><p>需要注意的地方是，钱包地址是EVM兼容链的，最后一个参数代表了日志的级别，这里写2就可以了。</p><p>离开screen让节点程序保持后台运行，只需同时按下键盘Ctrl + A + D即可。</p><p>如果需要查看日志，只需执行下面的命令即可重新进入screen</p><pre data-type="codeBlock" text="screen -r exorde
"><code>screen <span class="hljs-operator">-</span>r exorde
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第三步： 查看自己的奖励</h3><p><strong>3.1 如果在2.4步骤中执行成功后，我们大概会看到下方的图片，这里需要关注的地方是REP和EXDT Rewards这连个值都是影响个人最终能获得多少奖励的关键。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/21490c593a2c507d798abb2037c1dfea91b242f7e7bc37b43e97c3e3d2263809.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>3.2 运行大概几十分钟后就能看到奖励。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef4bd0a699913b0888c618ccff93c8b9e1e6d018f779db1d7572602034010ecf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">最后</h2><p>教程到这里就结束，建议不要fomo，根据个人风险偏好以及实力来选择是否运行节点。</p><p>如果觉得教程还不错，请多多点赞关注转发哈。</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">文章引用</h1><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ExordeLabs">官方twitter</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/exordelabs">官方discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/exorde-labs/ExordeModuleCLI">官方github</a></p></li></ul>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/20d30867d761e944433d485ac09f57b1eccfdeffef909c7af5f19a56decb2586.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[【名牌空投】FomoSports激励测试网交互教程]]></title>
            <link>https://paragraph.com/@syskeys/fomosports</link>
            <guid>qGODee0Gn2ATxxY7kdYj</guid>
            <pubDate>Fri, 04 Nov 2022 07:01:45 GMT</pubDate>
            <description><![CDATA[项目介绍FomoSports将实施Sport Metaverse计划，并加快与各个体育项目（足球、篮球、橄榄球等）的合作，发布Sport NFT流动性。体育NFT一站式解决方案也将实施，并逐步将体育NFT市场上线。奖励介绍总奖金高达：33000USDT奖励1：时间：11/4 12:00 - 11/14 16:00（北京时间）；奖励：28000USDT & 白名单100个；奖励2：时间：11/4 12:00 - 11/14 24:00（北京时间）；奖励：5000USDT & 白名单*300个；奖励规则奖励1规则游戏模拟世界杯比赛进行，模拟随机抽出被淘汰队伍和获胜队伍。11月8日16:00（UTC+8），模拟随机抽出16支队伍淘汰，关闭16支队伍mint，同时开启第一轮回购。回购持续3小时，用户可自行决定参不参与此轮回购。11月14日16:00（UTC+8）,模拟随机抽出一支队伍作为冠军队伍。关闭32支队伍mint，同时开启第二轮回购。回购持续3小时。游戏上线即开始24小时倒计时，玩家每mint一张NFT，倒计时增加60s，上限24小时。同一支队伍，每mint一张，价格增加0.1% ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目介绍</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FomoSportsnft">FomoSports</a>将实施Sport Metaverse计划，并加快与各个体育项目（足球、篮球、橄榄球等）的合作，发布Sport NFT流动性。体育NFT一站式解决方案也将实施，并逐步将体育NFT市场上线。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">奖励介绍</h2><p>总奖金高达：33000USDT</p><h3 id="h-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">奖励1：</h3><ul><li><p>时间：11/4 12:00 - 11/14 16:00（北京时间）；</p></li><li><p>奖励：<strong>28000USDT &amp; 白名单100个；</strong></p></li></ul><h3 id="h-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">奖励2：</h3><ul><li><p>时间：11/4 12:00 - 11/14 24:00（北京时间）；</p></li><li><p>奖励：<strong>5000USDT &amp; 白名单*300个；</strong></p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">奖励规则</h2><h3 id="h-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">奖励1规则</h3><p>游戏模拟世界杯比赛进行，模拟随机抽出被淘汰队伍和获胜队伍。</p><ul><li><p>11月8日16:00（UTC+8），模拟随机抽出16支队伍淘汰，关闭16支队伍mint，同时开启第一轮回购。回购持续3小时，用户可自行决定参不参与此轮回购。</p></li><li><p>11月14日16:00（UTC+8）,模拟随机抽出一支队伍作为冠军队伍。关闭32支队伍mint，同时开启第二轮回购。回购持续3小时。</p></li><li><p>游戏上线即开始24小时倒计时，玩家每mint一张NFT，倒计时增加60s，上限24小时。同一支队伍，每mint一张，价格增加0.1% 游戏24小时倒计时结束，或者到11月/14日 16:00（UTC+8）截止，最后一手交易的用户，分走1000U。</p></li><li><p>收益排名【1-100名】 平分12,000U &amp;白名单100</p></li><li><p>收益排名【101-1000】 平分15000U</p></li></ul><h3 id="h-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">奖励2规则</h3><ul><li><p>内测期间，向FomoSports提交产品反馈，包括bug、产品建议等，一经核实或采纳，奖励10U，共1000U;内测Bug提交通道：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLScGu5TlvnKXV9TW-Wq18PP_KNw8NWFDlVwp5mky7hu3gePTZg/viewform">点我直达</a></p></li><li><p>内测期间，根据内测情况，和官方公布的世界杯NFT的活动规则，在Medium、Reddit、mirror、YouTube或其他平台为FomoSports SportCards进行宣传，介绍游戏玩法、攻略、收益分析等。 发布后，将链接提交到：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLScl0ZcGFXFhs211kvnkH4o9aWSYW-3jQQGcjEOPe-PK2ZK3ZQ/viewform">点我直达</a>，官方将进行审核。视频长度大于5min； 文章包含内测截图，且表述清晰、完整。</p></li><li><p>通过审核的发布者： 前200名将平分4000U ； 前300名将获得白名单。</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">交互教程</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一步：领水（注意和其他项目领水方式不同，一定要按照教程操作）</h3><p>1.1 首先加入<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/pydRMEzn7y">项目方Discord</a>中，然后进入 #Verify频道，点击大拇指进行验证。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b713f4694ab16fe7b1e0020dc752ebe6c683bc30194a191b8a3c572111c27480.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.2 打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dyno.gg/form/d2eeefa5">官方领水链接</a>，使用discord登录网站，填写钱包地址，然后提交即可。这里重要说明下：</p><p><strong>每位申请参与内测的用户，向我们官方提交测试钱包地址，官方将向每个地址内打2个GoerliETH测试币。11/2-11/6，申请的用户可以获得测试币，但1个用户&amp;1个地址只能申请1次。</strong></p><p><strong>❗️❗️为了公平起见，申请时请确保自己的钱包没有测试币，或者将测试币打到别的钱包！！否则会被取消参赛资格！！重要❗️❗️</strong></p><p><strong>❗️❗️为了公平起见，申请时请确保自己的钱包没有测试币，或者将测试币打到别的钱包！！否则会被取消参赛资格！！重要❗️❗️</strong></p><p><strong>❗️❗️为了公平起见，申请时请确保自己的钱包没有测试币，或者将测试币打到别的钱包！！否则会被取消参赛资格！！重要❗️❗️</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8d055710ab34b18727079de637c537f5025c62f3d8dcb461c6c85244285ab83b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>根据官方消息填完表格后大概晚上会收到领的水。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4f0eeed24a97a3285f46a6ef57d054bc21accd2946d6f6934434690151b74cd4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">第二步：正式交互</h2><p>2.1 在上一步收到领的水之后，打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://test.fomosports.io/9ee7bcd6/home">官方测试网站</a>，按照下图所示链接钱包（<strong>一定要使用领水的钱包链接</strong>）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/016d08255a8c68fe029081caea3e12ee7d4a896c23caf782ff856babbfd3e96e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.2 链接钱包完成后，点击导航栏的WordCup，进入当前测试页面。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1a0b5427dc0970255ae3d71a6569daa980373d4d80b90a719ac01fb63b5e112f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.3 这里可以选择个人喜欢的球队进行mint，或者随机在32个球队中mint16只队伍的NFT。也可以所有球队都mint一份NFT。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/48b951f55a152fa12138f4baafbf004f7132553dc9b89d1e773b8be3d7afdabc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.4 在NFT页面可以查看已经mint的NFT。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/95eb7a5b6ff1372fe2c97d5698995ecb3c7bbf4dc9027397d0126ce807eb0174.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.5 在邀请页面可以查看自己已经邀请的成员，有能力搞小号的，可以邀请自己的小号，可以获得小号mintNFT价格的18%。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d9ae74852bdcf7402fa8d29066933aed2706ef698d3ab78e7253465d709ff399.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.6 最后就是挖矿奖励页面，这里可以查看自己当前挖了多少ETH，也是最终排名的判断依据。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3bdbee137ca6da5f5a9e31bad07b68e9933ce7ab6f8bc19933d8be4cc519f644.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">第三步：总结</h2><p>说实话，这个测试项目还是有些烧脑的，有些规则我也不是很明白，如果有什么不对的欢迎交流。最后预祝大家都能撸到这33000USDT。</p><p>如果觉得教程还不错，请多多点赞关注转发哈。</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">文章引用：</h2><ol><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.fomosports.io/game-rules/sportcard-intro">sportcard-intro</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/pydRMEzn7y">官方discord</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FomoSportsnft">官方twitter</a></p></li></ol><div data-type="subscribeButton" class="center-contents"><a class="email-subscribe-button" href="null">Subscribe</a></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4685d7a4a4a40dc05ba8d8b7e597b397e2eb427308d410fac060c94eeb165f96.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Golden Protocol常见问题解答]]></title>
            <link>https://paragraph.com/@syskeys/golden-protocol-2</link>
            <guid>2NMzYVKZvUABQWN3e8Bn</guid>
            <pubDate>Wed, 02 Nov 2022 06:51:46 GMT</pubDate>
            <description><![CDATA[引言鉴于我了《Golden Protocol:全网最详细的中文交互教程》之后，很多朋友私信问问题，而我个人是没有太多的精力和时间来一一回答，所以就有了这篇文章。希望能解答一些大家在交互项目时的疑问。 重要说明：以下问题都是根据我个人对项目的理解，不代表是100%正确，如果你有不同的理解，以你为准。问题目录Q1：需要做多少次正确的验证？ A1：没有固定需要做多少次，越多越好。 Q2：为什么我做了很多次验证，但积分一直不见增加？ Q2：首先，做完验证后，需要等共识机制算出是否正确，而共识机制出结果是很慢的，因为需要投票。只有共识机制出了结果后，才会根据个人的验证情况发放积分。 Q3：收到给访问权限的邮件后，需要做什么？ A3：这就代表你可以做验证来赚取积分了，按照教程做验证就行了。 Q4：为什么我用google浏览器/其他等等浏览器打开网站乱码？ A4：这种情况一般都是由于缓存或者静态资源没有加载成功导致的。解决办法可以清理下缓存或更换个更好的代理IP。windows系统也可以F5强制刷新下网页尝试。 Q5：收到访问权限的邮件后并没有增加初始的500积分？ A5：首先，请先到下图页面...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">引言</h2><p>鉴于我了《<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/syskeys.eth/G8kmnWkkCp4MLewtdpqlzOAzrONLl-DhCNzsExMN2dA">Golden Protocol:全网最详细的中文交互教程</a>》之后，很多朋友私信问问题，而我个人是没有太多的精力和时间来一一回答，所以就有了这篇文章。希望能解答一些大家在交互项目时的疑问。</p><p><strong>重要说明：以下问题都是根据我个人对项目的理解，不代表是100%正确，如果你有不同的理解，以你为准。</strong></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">问题目录</h2><p><strong>Q1：需要做多少次正确的验证？</strong></p><p>A1：没有固定需要做多少次，越多越好。</p><p><strong>Q2：为什么我做了很多次验证，但积分一直不见增加？</strong></p><p>Q2：首先，做完验证后，需要等共识机制算出是否正确，而共识机制出结果是很慢的，因为需要投票。只有共识机制出了结果后，才会根据个人的验证情况发放积分。</p><p><strong>Q3：收到给访问权限的邮件后，需要做什么？</strong></p><p>A3：这就代表你可以做验证来赚取积分了，按照教程做验证就行了。</p><p><strong>Q4：为什么我用google浏览器/其他等等浏览器打开网站乱码？</strong></p><p>A4：这种情况一般都是由于缓存或者静态资源没有加载成功导致的。解决办法可以清理下缓存或更换个更好的代理IP。windows系统也可以F5强制刷新下网页尝试。</p><p><strong>Q5：收到访问权限的邮件后并没有增加初始的500积分？</strong></p><p>A5：首先，请先到下图页面查看是否是真的没有收到，如果真的没有收到，请到官方discord中联系项目方询问缘由。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fb8f9c1915896f847805f3a29f9fd6495d25b734522476e9f42a5466c050b2b9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Q6：为什么我一直再扣分而不增加积分？</strong></p><p>A6：扣分是因为你做的验证选择是错误的。据我所知官方会在验证中，插入100%是错误的内容，如果你选择了接受，那么就要扣分。并且是不需要经过共识运算。增加积分查看Q2。</p><p><strong>Q7：怎么添加三元组？看了教程也不会，求帮助？</strong></p><p>A7：这…..我真的是不知怎么说才好啊，可能我写的教程还不够小白。可以看下<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Monica_xiaoM">加密小师妹|Monica</a>的教程再学习下。<s>如果还是不会，请给我打钱，我来帮你做。</s></p><p><strong>Q8：我提交的三元组没有通过，这影响我未来的可能有的空投吗？</strong></p><p>A8：如果验证权限没有收回，还能继续做验证，那么个人觉得是不影响的。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">最后</h2><p>这些问答可能并不能解答所有人的疑问，但也希望能解答一部分人的疑惑吧。</p><p>说实话写教程真的很累，特别是遇到不好好看教程还提各种疑问的，真的头疼。其实，大部分朋友的问题，都是可以在官方文档、官方教程中找到的。但大部分人都是不愿意去动手也不愿意思考。</p><p>最最最最后，希望大家能把官方的这篇<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities">激励性测试网的文章</a>好好仔细看下。</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5159d7f7cccb495003b7bc4d2430720d2cca481e4d2fc0a3ca4c08c59dbe0497.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Golden Protocol:全网最详细的中文交互教程]]></title>
            <link>https://paragraph.com/@syskeys/golden-protocol</link>
            <guid>nWzPSoxr1B7nuugVnusx</guid>
            <pubDate>Fri, 21 Oct 2022 12:39:00 GMT</pubDate>
            <description><![CDATA[项目介绍这里就不COPY官方的话了，说下我个人的理解。Golden Protocol就是一个“特别版”的维基百科，但和维基百科又有着本质的区别这里拿维基百科做类比主要是为了方便读者理解Golden Protocol是在做什么。具体想了解项目的可以看下官方这篇博客，从创立的初衷到使命以及和维基百科的对比都有介绍到。项目融资A轮融资1450W美元，B轮融资4000W美元。并且两轮融资都是由A16z领投，其他的投资机构也是异常强大。通过Aptos的空投，相信大家都知道A16z投资的项目的潜力了。空投条件提交实体或三元组验证三元组开发者贡献数据集贡献安全漏洞赏金协议、治理及模式贡献本交互教程主要以提交实体或三元组和验证三元组这两种方式来获取空投。交互教程教程开始之前，先提前预警，教程会比较长，并且会涉及到大量的图片来辅助说明。并且十分考验动手和思考能力，难度还是有些的。第一步：获取访问测试网的权限1.1 打开Golden Protocol官网，进行注册账号。1.2 输入姓名、邮箱、密码。最好使用gmail邮箱，减少不必要的麻烦。1.3 点击注册按钮后，来到邮箱检查收到的验证码，并将验证填...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目介绍</h2><p>这里就不COPY官方的话了，说下我个人的理解。Golden Protocol就是一个“特别版”的维基百科，但和维基百科又有着本质的区别这里拿维基百科做类比主要是为了方便读者理解Golden Protocol是在做什么。具体想了解项目的可以看下<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://golden.com/blog/introducing-golden/">官方这篇博客</a>，从创立的初衷到使命以及和维基百科的对比都有介绍到。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目融资</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://golden.com/blog/golden-raises-14-5m-series-a-led-by-a16z/">A轮融资1450W美元</a>，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://golden.com/blog/golden-raises-40m-series-b/">B轮融资4000W美元</a>。并且两轮融资都是由A16z领投，其他的投资机构也是异常强大。通过Aptos的空投，相信大家都知道A16z投资的项目的潜力了。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">空投条件</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#entity-and-triple-submission">提交实体或三元组</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#triple-validation">验证三元组</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#developer-contributions">开发者贡献</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#dataset-contribution">数据集贡献</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#security-bug-bounties">安全漏洞赏金</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/incentivized-testnet-activities#protocol-governance-and-schema-contributions">协议、治理及模式贡献</a></p></li></ul><p>本交互教程主要以<strong>提交实体或三元组</strong>和<strong>验证三元组</strong>这两种方式来获取空投。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">交互教程</h2><p><strong>教程开始之前，先提前预警，教程会比较长，并且会涉及到大量的图片来辅助说明。并且十分考验动手和思考能力，难度还是有些的。</strong></p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一步：获取访问测试网的权限</h3><p>1.1 打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://golden.com/">Golden Protocol</a>官网，进行注册账号。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e63debbaa9b3cc16b99cdc9b3113cc7de9cc5639cd1df31f5025d71b13ef5611.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.2 输入姓名、邮箱、密码。最好使用gmail邮箱，减少不必要的麻烦。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e438ca5f1ca18b5624e9f31af4813131a3264357cd077073ee66fbdacbb92d24.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.3 点击注册按钮后，来到邮箱检查收到的验证码，并将验证填写。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/76432106d249bbb507b869899edd77e3f6cd2ffcf07d8b3eab2581b8952abb86.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.4 验证码填写完毕后，会来到个人资料页设置，这里的设置具体看下面图片说明。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1799946274ab5628043614e501be72e2517ba735a8be32084b0a75fd5ff85af3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.5 接着会来到个人账号计划页面，我们直接选择free。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/175931e9af88e95b9196c29355f5ff339540d52731b33c9a85fc3906fa41e14d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.6 最后，下图就是注册账号成功后的样子了</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0e1b52958fea6a48d54aaa6c7edfc5eefa4b2326578e4e5b916835426c7f31c6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.7 接下来要介绍一些概念性的东西了，理解了这些概念，将有助于完成后面的任务。</p><p>1.8 <strong>什么是Triples（三元组） ？简单来说就是由三个要素组成的句子，并且可以根据语义来判断是真是假。这样说可能比较抽象，举例说明下：</strong>“Apple公司成立于1976年。”这个句子就是由<strong>Apple</strong>、<strong>成立于</strong>、<strong>1976年</strong>、这三个要素组成的。我们也可以通过搜索引擎来判断这句话的真假。</p><p>1.8.1 概念介绍完了，接下来介绍如何向Golden协议添加正确的三元组。为什么一定要添加三元组呢？因为目前想要参与必须要先向Golden协议添加至少一个<strong>正确的三元组</strong>才能获取访问权限。</p><p>1.8.2 来到1.6步骤中的网站主页，**我这里主要是以Web3的项目为例来进行演示，大家在实际操作时可以根据自己擅长的能力/项目来进行操作。**操作案例(实际操作请根据个人情况选择)：搜索“subspace”关键词，进入到subspace主题页面。（如果你搜索没有找到具体的内容，那么你也可以自己创建主体）。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a872ddba1f109e7df8fcd672859cacbc858e44a382d0b155a55430bd1def4939.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.3 进入到subspace主体页面后，先点击Structured Data标签，然后再点击Edit按钮。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/64e5de9f0b16eb162a28a7a11e5f23b24143814afd8f2cbb0166f241c7f5dd72.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.4 点击Edit按钮后会弹出警告内容，大致意思是编辑后的内容要符合规范，不然会面临账号封禁或者不能获得空投的情况。我们点击OK，I understand按钮即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9f6c399a081a2bcba670c073dc21f57294d2495dccaa5d68fad4454280887031.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.5 接着还会出现下图，这是让选择你想编辑什么类型的数据，第一个是结构化数据，并且可以获取空投，第二个是散文，没有空投奖励，我们肯定是选择第一个啦。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/72de651339892d76be0c075c0b3686778469afe2312d002528d7daec27ed11a7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.6 选择之后我们就来到了subspace这个主体的编辑页面了，下图简单介绍了这个页面的具体内容。因为都是英文，大家如果不明白，可以直接浏览器翻译下。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b1a6854aaa58a9db5491f48cecbdb6d312ff35791fd8327feec908b59c1a05de.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.7 那么我们该如何添加三元组？这就需要我们的知识和个人擅长的事情了。比如subspace这个项目现在再运行激励性测试网，推出了一个新的区块链浏览器，那么我就看下现在这个主题中有没有这个新的区块链浏览器的网址。</p><p>1.8.8 首先在Add a new field to the entity搜索explorer，查看是否已经添加了这个子选项，这里是已经添加了，如果没有添加前面会没有打钩。再在右侧页面的搜索框中输入explorer定位具体位置。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/50036e429ded49057a6c40a8f1f53480aff371d95616ae50fb3b730035b64d90.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.9 然后点击add value按钮新增一项内容。**注意新增的内容一定要是正确的内容！！！**确定新增的内容没有问题之后，就可以点击右上角的publish按钮发布了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6760de68bcc8bf32c6edab52b13f19ee3d0a1e5cbc4161861c4e6412b49388cd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.10 发布之前会显示修改了什么内容，以及修改的描述信息。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/155c9561a03f63b726c585c9c81234c377008b8892a520f6203936a9f464a393.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.8.11 到这里我们就完成了一个三元组的添加了。回顾以上内容，你知道添加的三元组是什么吗？其实就是“subspace的区块链浏览器是<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://subspace.subscan.io">subspace.subscan.io</a>吗？” <strong>最后，再说明下，整个添加三元组的过程请不要完全按照我的操作步骤来，因为我已经添加过这个条目了，再重复添加也是没有用的，你唯一可以做的是可以参考这个例子，去找其他项目或者自己擅长的内容来进行添加。</strong></p><p>1.9 查看我们的贡献，点击头像---Profile就可以看刚刚编辑的内容了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18e4d40e901d6265203955a97ab59f160fb35f4c00112aed683e68332c0a59bc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>1.10 到这里整个测试网访问权限申请就结束了，为了确保能访问测试网，可以多提交几个三元组，可以是多个项目的。完成提交<strong>至少一个正确的三元组</strong>后，大概会在<strong>一周之内</strong>收到官方的邮件提醒，测试网已经可以访问了。接着你就可以按照教程做下面的验证三元组的任务嘞。</p><h3 id="h-yuan" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第二步：验证三元组来获取空投</h3><p>2.1 经过大概5天的等待，终于收到了官方邮件。可以直接点击邮件的START VALIDATING开始验证，也可以直接打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dapp.golden.xyz/login">官网链接</a>验证。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/530168f52a896200f369736e987ef5840733e2a32f6511ac14c545a96a7f8334.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.2 连接钱包。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/364817b5f2625d644863503282356976535beb8ec4cf9015cf3a72dc20fc4542.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.3 成功连接上钱包后，会自动跳转到验证三元组页面，如下所示。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/850246b585b7c163d0d7c293711202dbd18bbe7e96708185fd0c48d8a5ab6e9f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.3.1 接下来简单说下这个验证是如何做的。如上图所示，这就是一个三元组，还记得在1.8步骤中介绍的三元组概念吧，套用下就可以了。我以上图这个来套用下：**Infinity PAD这个主体/公司的白皮书是这个（daomaker.com/company/infinity-pad）网址吗？**这样就很容易理解了，然后我们可以利用搜索引擎或者自己的技术知识储备来判断这句话是否正确。</p><p>2.3.2 判断是正确就点击接受按钮，判断是错误的就点击拒绝按钮，不确定的也可以点击跳过按钮，不过跳过的次数是有限的。</p><p>2.4 以上就是验证三元组的步骤了，可以看到整体还是比较容易的。但也有需要注意的地方，比如官方会设定一些谓词的规则，这方面还是要遵守的。还有就是默认在你通过审核后，官方会赠送你500积分，当你做的三元组验证经过共识后是正确的，那么你将获得新积分，如果是错误的，那么会被扣5分。当赠送的500积分扣完后，你可能会失去访问权限，也和空投无缘了。</p><p>2.5 简单介绍下登录网站之后页面显示的信息。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8cce3a33548a9793937e12a1654008cd623399062cb9c178d10c0ffb176489c0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第三步：总结</h3><p>到此教程就正式结束了，可以看到整体得到任务难度不是很大，但会很麻烦，也需要检索大量的知识。更重要的是要遵守官方的规则，在规则内做事。最后，祝大家都能撸到Golden的空投。</p><p>如果觉得教程还不错，请多多点赞关注转发哈。</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><div data-type="subscribeButton" class="center-contents"><a class="email-subscribe-button" href="null">Subscribe</a></div><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">文章引用</h2><ol><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://golden.com/blog/introducing-golden/">Introducing Golden</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.golden.xyz/protocol/readme">Golden Protocol Docs</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notion.so/Adding-Structured-Data-Guide-ae657337bf4f4e54ae4402df083c76ac">Adding Structured Data Guide</a></p></li></ol>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e12bf1268a69aaffa0d8fb7cbf5d4c16cc890ec8268b757102882c0c215662e9.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Manta 可信设置登记教程]]></title>
            <link>https://paragraph.com/@syskeys/manta</link>
            <guid>r8AdG50E56Ne97T0IJlm</guid>
            <pubDate>Wed, 12 Oct 2022 09:44:20 GMT</pubDate>
            <description><![CDATA[运行这个有什么奖励？任何参加可信设置注册的社区成员都将获得一枚专属 NFT，并在我们的官方 Discord 中获得特别角色。为什么要运行可信设置？具体可以参考官方发的这篇中文文章，很详细的说明了原由。运行教程说明操作系统：Ubuntu 20.04 或者其他Linux 外网环境教程开始首先安装docker环境，具体安装步骤可以参考我之前写的教程。 安装完docker后，运行下面的命令下载manta的dokcer镜像。（由于按照官方未提供docker版本的程序，所以我自己打包了一份，已上传到Docker Hub仓库） docker pull syskey66/manta:1.0下载镜像完成后，运行下面的命令生成签名信息和公钥。（命令最后面将twitter和email修改为自己的信息） docker run syskey66/manta:1.0 /run.sh twitter email接着打开官方的注册信息链接，将上一步生成的公钥和签名信息填到收集表中。 到此注册就完成了，等待官方审核通过后，可以参与下一步的计划。目前还是注册阶段，下一阶段开始的时候，官方会发公告，另外，我也会更新下...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">运行这个有什么奖励？</h2><p>任何参加可信设置注册的社区成员都将获得一枚专属 NFT，并在我们的官方 Discord 中获得特别角色。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">为什么要运行可信设置？</h2><p>具体可以参考官方发的这篇<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xeB125d270FC135DDD3CC8E1C466873a4f37682d5/3XIDhA8MWBhn9xnRoTnjWmwzcKsZ9PQ0uZeVtwWCZKs">中文文章</a>，很详细的说明了原由。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">运行教程说明</h2><p>操作系统：Ubuntu 20.04 或者其他Linux</p><p>外网环境</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">教程开始</h2><p>首先安装docker环境，具体安装步骤可以参考我之前写的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://syskey.gitbook.io/subspace-network/she-qu-jiao-cheng/ji-li-ce-shi-wang-shuang-zi-zuo-ii-qi-yun-hang-jiao-cheng#docker-yun-hang-jiao-cheng">教程</a>。</p><p>安装完docker后，运行下面的命令下载manta的dokcer镜像。（由于按照官方未提供docker版本的程序，所以我自己打包了一份，已上传到Docker Hub仓库）</p><p><code>docker pull syskey66/manta:1.0</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/20e4b60cc98438ef9b79b88a5e5a98ee5b1ac2cce8117cb587c9ee3923f779c2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>下载镜像完成后，运行下面的命令生成签名信息和公钥。<strong>（命令最后面将twitter和email修改为自己的信息）</strong></p><p><code>docker run syskey66/manta:1.0 /run.sh twitter email</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9f4c9a96b3d9d7ce4f4b6ea433bd47f25982d3cca1e3e266a98919639d9fbdb7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>接着打开官方的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mantanetwork.typeform.com/TrustedSetup">注册信息链接</a>，将上一步生成的公钥和签名信息填到收集表中。</p><p>到此注册就完成了，等待官方审核通过后，可以参与下一步的计划。目前还是注册阶段，下一阶段开始的时候，官方会发公告，另外，我也会更新下一步的教程，欢迎关注。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">官方教程：</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.manta.network/cn/docs/guides/TrustedSetup#registration">https://docs.manta.network/cn/docs/guides/TrustedSetup#registration</a></p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[ZetaChain测试网+快速赚取积分策略]]></title>
            <link>https://paragraph.com/@syskeys/zetachain</link>
            <guid>2sLhUrM7Ow0UIuptyJED</guid>
            <pubDate>Wed, 07 Sep 2022 07:51:46 GMT</pubDate>
            <description><![CDATA[项目信息ZetaChain 是世界上第一个也是唯一一个连接一切的区块链。它促进了跨链和跨层的价值转移、消息传递和智能合约调用——从而首次启用了可以利用多个网络上的流动性并读取和更新所有连接网络上的状态的全链 dApps (odApps) ZetaLabs 允许您通过在 ZetaChain 测试网上构建的全链 dApp 进行测试，为 ZetaChain 区块链开发做出贡献。贡献者可以邀请其他人加入并测试 ZetaLabs 上的各种产品，以获得 ZETA 积分，这些积分可以跟踪您作为测试员的进度。验证twitter和连接钱包打开测试网地址，点击验证twitter，然后授权twitter连接即可。接着是一些提示信息，直接多次点击Continue即可，最后点击Get started接着点击连接钱包获取访问权限（顺便可以关注下项目twitter）选择meatmask连接即可请求测试币钱包连接到网站上后，会直接跳转到请求测试币界面，直接点击请求资产即可。网站提示测试币领取成功设置语言为了测试方便，我们将网站的语言环境设置为中文，直接下拉到网站最下面，选择中文即可。确认钱包地址由于团队将点数、...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目信息</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/zetablockchain">ZetaChain</a> 是世界上第一个也是唯一一个连接一切的区块链。它促进了跨链和跨层的价值转移、消息传递和智能合约调用——从而首次启用了可以利用多个网络上的流动性并读取和更新所有连接网络上的状态的全链 dApps (odApps)</p><p>ZetaLabs 允许您通过在 ZetaChain 测试网上构建的全链 dApp 进行测试，为 ZetaChain 区块链开发做出贡献。贡献者可以邀请其他人加入并测试 ZetaLabs 上的各种产品，以获得 ZETA 积分，这些积分可以跟踪您作为测试员的进度。</p><h2 id="h-twitter" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">验证twitter和连接钱包</h2><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://labs.zetachain.com/leaderboard?code=sBHufFsx4iQCHWByNXo6i">测试网地址</a>，点击验证twitter，然后授权twitter连接即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e3f503da196854fc32bbf1b054314b009cdaba95b0d4d0c7632e3522b4aeb690.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>接着是一些提示信息，直接多次点击<strong>Continue</strong>即可，最后点击<strong>Get started</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/718b025cceb02d38abc69951b4a47953e57a3923834abbf0554f1842f7cb18a9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>接着点击<strong>连接钱包获取访问权限</strong>（顺便可以关注下项目twitter）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e11e3e18fc41d4c684bcf62612705c567bb85b084c4d42b86a1f658bb45d5c0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>选择meatmask连接即可</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2cd64e47675b5ec3c11ff27989b9de36826dcb98af1c609dc0f1382caaf152e5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">请求测试币</h2><p>钱包连接到网站上后，会直接跳转到请求测试币界面，直接点击<strong>请求资产</strong>即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/729c28f94a93492ccf2c9ff5d98fb66cfcdfde784b6ec76e9a7d37c7afd3d1d9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>网站提示测试币领取成功</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/51910f8c879b4949f6b1f09b57b08a648ef9a1aac3016bcf3273b24a0e30c8bc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">设置语言</h2><p>为了测试方便，我们将网站的语言环境设置为中文，直接下拉到网站最下面，选择中文即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/82dd9318bda99132532824c33ec1ea3f4b4527f9bf8f6663975e4660bb25da34.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">确认钱包地址</h2><p>由于团队将点数、twitter、钱包地址绑定在了一起，所以要想获得被邀请的5000点奖励，必须要确认下钱包，否则奖励将不会到账。</p><p>点击导航栏的排行榜，然后点击确认钱包，用钱包签署下签名即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/186f2e16c6e7ae86b91d098deababc0392108c6f5d6f765e3bb0bd3549a8045d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>签署完成之后，即可看到5000点奖励已经到账了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8ff42f750533d8972a54d57355024957e799f3dcf23eb3b4979adf475ec89ac1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-1000" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">交易获取1000点奖励</h2><p>点击导航栏兑换，选择兑出的网络和资产、目标网络和资产，输入相应的数量，最后点击审核订单。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c47d4f803aa69f0f5961bd75f867a47a02d9c2797b3a4066591dd3d8976814c0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>允许交易（就是钱包授权代币允许交易）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9da78da7e6f90e7a97e484dc416129cb6409ccfe099396899f2350c66448991.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>授权完成后，点击兑换，钱包授权后，可以看到交易详情。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c99d7d4f8528c8e2d0548e87df271add92432578fb0e89a45dd269d1de3a8fa0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>最后交易成功，可以看到整个交易过程是先把Goerli网络的资产先发送到ZetaChain中间节点，然后于ZetaChain中间节点将你想兑换的资产，发送进来。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e62efb689f983f31f7fc1af513efcf80bd59136647b47297f68a94ac34c39c08.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>稍等片刻后，重新查看积分，可以看到交易次数是1，并且已经增加了1000分。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d7c5c01a5f590c205f6bdfccdf3ffa9af97a904000e4220832c75b6a8d495209.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>到此整个测试过程就结束了，接下来分享下如何快速的赚取积分。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">赚取积分策略</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a66518a65dae2a59237cee7ca4845ee11d1be4bee30afc30461836cb843f227e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>根据官方规则，可以看到最快赚取积分的策略是邀请好友，但这对于好友人数不多，并且没有很多小号的朋友是非常不友好的，所以我们主要赚取策略不放在这条规则上。</p><p><strong>接下来看第二条和第三条，这将是我们的主要策略：</strong></p><p><strong>1，用大号先邀请自己能力范围内的小号</strong></p><p><strong>2，每天用大号和小号分别交易一次</strong></p><p>以10个小号计算，大号每天可以获得1000+250*10=3500，这样每天大号可以获得3500的积分，还是非常可观的。当然如果你能邀请更多的小号，那么每天的收入也是会更多。</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[How did I get the first place in the TiTi Testnet Championships？]]></title>
            <link>https://paragraph.com/@syskeys/how-did-i-get-the-first-place-in-the-titi-testnet-championships</link>
            <guid>XIRuoLjwAhG8LAsf3BjF</guid>
            <pubDate>Fri, 02 Sep 2022 07:34:54 GMT</pubDate>
            <description><![CDATA[PreambleI am very honored to be invited by the project to share my experience of operating in the testnet with you. First of all, I am not a very strong Defi player, and I am very lucky to win the first place in this TiTi Test Tournament. Secondly, I am writing this article to share my experience in order to introduce some of the highlights of the TiTi Protocol program to you, and also for you to participate better in similar test nets in the future. Due to my limited experience and ability, ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-preamble" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Preamble</h1><p>I am very honored to be invited by the project to share my experience of operating in the testnet with you. First of all, I am not a very strong Defi player, and I am very lucky to win the first place in this TiTi Test Tournament. Secondly, I am writing this article to share my experience in order to introduce some of the highlights of the TiTi Protocol program to you, and also for you to participate better in similar test nets in the future. Due to my limited experience and ability, I am mainly trying to draw inspiration and welcome rational discussion. Finally, I would also like to thank the TiTi Protocol project for providing the motivational test network.</p><p>The article will focus on the following aspects.</p><ul><li><p>TiUSD core principle (How to stabilize at $1?)</p></li><li><p>TiTi test net rules</p></li><li><p>Ways to earn TiTi</p></li><li><p>LP Mining</p></li><li><p>Use-to-Earn</p></li><li><p>TiTi-Staking Pool</p></li><li><p>My Strategy</p></li><li><p>Summary</p></li><li><p>Project Information</p></li></ul><h1 id="h-tiusd-core-principle" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiUSD Core Principle</h1><p>About TiUSD core principle, actually I have written an article &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/syskeys.eth/ur38g-E6jgcPeVIyYCM1dStrRa6ZzEwIw1e-XNLkYhA">TiTi Protocol: How TiUSD is stabilize at $1</a>&quot; before. article, you can read it if you are interested, here I am also summarizing it briefly.</p><p>**There is a protocol to issue TiUSD at a price no less than $1 and to buy back (destroy) TiUSD at a price no more than $1. **For more in-depth content, read the article I wrote above or check out the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-wikipedia/untitled">official documentation</a> titi-stable-theory).</p><h1 id="h-champion-rules" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Champion Rules</h1><p>Before I share my experience, I would like to briefly introduce the rules of TiTi&apos;s incentive test network operation, because only after we really understand the rules can we maximize our benefits (users who already know the rules very well can skip to the next part of the content).</p><ul><li><p>Duration：UTC 12:00:00 08/01/2022 - UTC 12:00:00 08/29/2022</p></li><li><p>Prize Money Pool：$17,000</p></li><li><p>Prize Money Pool:：</p><ul><li><p>1st Place：$500</p></li><li><p>2nd-3rd Place：$200</p></li><li><p>4th-6th Place：$100</p></li><li><p>7th-100th Place：$40</p></li><li><p>101st-400th Place：$20</p></li><li><p>Prize Money Pool：Randomly select 20 participants ranking 1~1000 everyday $10</p></li></ul></li><li><p>The more TiTi you have, the higher you rank and the more you can win the championship.</p></li><li><p>You can claim 10,000 Mock-USDC every 24hrs.</p></li><li><p>In the testnet, TiTi/TiUSD/MockUSDC transfers between users account are banned to make sure the championships is fair for every competitor. There won&apos;t be any such restrictions at mainnet.</p></li></ul><p>According to the above rules, we can understand that to win the grand prize we have to STAKE lots and lots of TiTi and the way to get how much TiTi will determine whether we can rank high or not. According to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-testnet/testnet-champion-contest-items">official test guide</a>, we know there are 4 ways to earn TiTi, they are <strong>MMF</strong>, <strong>LP Mining</strong>, <strong>Use-to-Earn,</strong> and <strong>TiTi-Staking Pool</strong>. Below I will describe how I use each of these four ways to earn TiTi.</p><h1 id="h-ways-to-earn-titi" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Ways to earn TiTi</h1><h2 id="h-mmf-total-reward-1500000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">MMF (Total Reward: 1500000 TiTi)</h2><p>Market Making Fund, the fund are assets portfolio in contract provide by users for unilateral market making without any limit.</p><p>In layman&apos;s terms, this means that users will take other assets into MMF to get the original asset rewards and the TiTi rewards, which is what new users need to do when they first come to the test network.</p><p>I was able to take the 10,000 Mock-USDC test coins that I received through MMF to MMF, and I got a lot of TiTi in a few minutes (the APY was very high when the test network was first launched, up to tens of millions).</p><p>The TiTi gained through MMF is collected in real-time, we can check the reward in the take interface and CLAIM at any time.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8408fd3e8a690f4310ffc5aed02536fd3a3394dc59e1e4eba14649d895c5ca6c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-lp-mining-total-reward-3000000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">LP Mining (Total Reward: 3,000,000 TiTi)</h2><p>This one, which I believe players in the Defi space are familiar with, is to add liquidity to TiTi and TiUSD (TiTi Protocol&apos;s stable coin) in Uniswap and then stake the liquidity into TiTi Protocol&apos;s contract.</p><p>What we need to pay attention to here is the gratuitous loss, because when the price of TiTi fluctuates drastically, we will face a very high gratuitous loss, which I believe you all felt towards the end of the test network.</p><p>The TiTi obtained through LP Mining is available for collection in real-time, we can check the rewards in the take interface and can CLAIM at any time.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/06f784f3e5dd2f290fbf5826a8878036f24bc32ae00f9d1d68ee913832c4cbda.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-use-to-earn-total-reward-2400000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Use-to-Earn (Total Reward: 2400000 TiTi)</h2><p>There are three official Use-to-Earn rewards defined in this module.</p><ol><li><p>Buy TiUSD in MAMM (Total Reward: 800000 TiTi)</p></li><li><p>TiUSD Holder (Total Reward: 800000 TiTi)</p></li><li><p>Buy TiTi in Uniswap (Total Reward: 800000 TiTi)</p></li></ol><p>The first way is to buy TiUSD in MAMM to receive the reward, that is, the website shows the SWAP module and you can swap mUSDC to TiUSD.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8986f4aa4734d9d4401705c677d57600f24b818c43c198b1ada211627142fc20.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The second way is to just hold TiUSD in your wallet. This way was okay when the testnet was first launched, and you could get a few thousand TiTi per day, but as the testnet runs and the rewards get smaller and smaller, I gave up on this way.</p><p>The third way is to swap TiUSD to TiTi in Uniswap, this is also easy to understand, the important thing is that this can repeat the transaction and thus increase the amount of TiTi gained. The picture below shows the TiTi I earned through the Use-to-Earn module.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/491f124afc188c39a80ace55113e49b4e15b0ac8b2e83481208a9c506528e0d8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Finally, TiTi earned through the Use-to-Earn method cannot be CLAIM in real-time and must be CLAIM until the day before the end of the testnet.</p><h2 id="h-titi-staking-pool-total-reward-500000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiTi-Staking Pool (Total Reward: 500,000 TiTi)</h2><p>In this module, we just need to TiTi stake to the TiTi Protocol contract to get the reward. In addition, during the test network operation, there are 3 periods of 7 days each, and the rewards will be issued at the end of the countdown.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bbb0f5ff5f14e169262d89338e9b2898b4a7849d560d6f4d1f63d3bd6b8de197.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The important point to note when participating in this pool is that we should stake 30 TiTi into the TiTi-Staking Pool first, and do not immediately stake any excess TiTi in our wallets, because we still need liquidity to trade. And there is a 7-day challenge period to withdraw it after staking.</p><p>This is the end of the 4 ways to get TiTi, why do I have to spend so much time on this? Back to the beginning, because only when we fully understand the rules can we maximize our benefits. Also to make you less confused when reading the strategies I wrote. So much for rambling, here is my strategy for TiTi testnet.</p><h1 id="h-my-strategy" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">My Strategy</h1><p>Attentive readers will be able to spot my strategy when they see the picture in the Use-to-Earn introduction. That&apos;s right, the strategy I implemented is to earn a lot of TiTi in the <strong>Buy TiUSD in MAMM</strong> and <strong>Buy TiTi in Uniswap</strong> modules. In addition, I earned TiTi by adding liquidity to the <strong>LP Mining</strong> module when the test network was first opened.</p><p>I wrote a program to swap mUSDC to TiUSD and swap TiUSD to mUSDC, so I was able to swap back and forth the trading volume, and at the beginning, I was able to earn TiTi rewards up to 10000+ per day. However, there is a downside to this approach, that is, due to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-wikipedia/titi-stable-theory/m-amm">trade slippage</a>, every time I trade I will face a loss, to solve this problem, I set a loss line. As long as my loss is less than the amount of TiTi I can get, then I still end up making money.</p><p>The <strong>Buy TiTi in Uniswap</strong> module is interesting because we all know that when everyone goes to buy TiTi, the price of TiTi will be very high and the price of TiUSD will be very low, and vice versa. Also, we all know that no one can predict what it will be, so at first, I would face relatively big losses when swapping TiTi to TiUSD and swapping TiUSD to TiTi. But after trading for a while, I noticed that TiTi&apos;s price had a range of variation (which occurred only because of the test network where everyone was swiping trades), so I wrote a program to monitor how TiTi&apos;s price changed during the day. Then I wrote another arbitrage program based on the price change of TiTi during the day so that I can continuously earn TiTi by taking advantage of the spread.</p><p>For example, when the program detects that the price of TiTi is greater than 1000, the program automatically swaps 1000 TiTi to 1000000 TiUSD; when the program detects that the price of TiTi is less than 500, the program automatically swaps 1000000 TiUSD to 2000 TiTi; after one round of swap, the program successfully earns 1000 TiTi.</p><p>By <strong>Buy TiTi in Uniswap,</strong> I earned both the reward in <strong>Use-to-Earn</strong> and the TiTi spread. The last thing is to add part of the earned TiTi spread to <strong>LP Mining</strong> and part of it to the <strong>TiTi-Staking Pool</strong> so that the passive income can be generated continuously.</p><p>Finally, you can receive 10,000 Mock-USDC every 24 hours, which can be fully used for <strong>Buy TiUSD in MAMM</strong> slippage.</p><h1 id="h-summary" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Summary</h1><p>I am very happy to participate in TiTi Testnet Championships, the whole participation process is very comfortable and smooth I didn&apos;t encounter any serious mistakes. Also, it is important to participate early in a test network like this type. This is because the APY at the beginning of the first mining period is frighteningly high, which also lays the foundation for the later operations. There is nothing particularly profound in my strategy. It is simply a matter of familiarizing yourself with the rules and then using them to maximize your profit.</p><p>Finally, I hope you will pay more attention to the TiTi Protocol project, the Discord community often holds various activities that are directly sent U rewards and do not play false, unlike some projects that are PUA users. Finally, the project has received a $3.5 Million investment, which is worth watching.</p><h1 id="h-project-information" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Project Information</h1><p><strong>docs:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/">docs.titi.finance</a> <strong>Homepage:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://titi.finance/">titi.finance</a> <strong>Telegram:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://t.me/titiprotocol">t.me/titiprotocol</a> <strong>Discord:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://discord.gg/UpJkJ95Bvb">discord.gg/UpJkJ95Bvb</a> <strong>Twitter:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://twitter.com/TiTiProtocol">twitter.com/TiTiProtocol</a> <strong>Medium:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://titiprotocol.medium.com/">titiprotocol.medium.com</a> <strong>GitHub:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://github.com/TiTi-Finance/TiTi-Protocol">github.com/TiTi-Finance/TiTi-Protocol</a> <strong>whitepaper:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://docsend.com/view/ut47u5z5p5his8id">docsend.com/view/ut47u5z5p5his8id</a></p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[我是如何在TiTi Testnet锦标赛中获得第一名？]]></title>
            <link>https://paragraph.com/@syskeys/titi-testnet</link>
            <guid>MEGZi8vJ1ky7emKXGukV</guid>
            <pubDate>Fri, 02 Sep 2022 07:24:47 GMT</pubDate>
            <description><![CDATA[序言非常荣幸能应项目方邀请来和大家分享我在测试网的操作经验。首先我不是非常有实力的Defi玩家，能在这次TiTi测试锦标赛中赢得第一名我是十分幸运的。其次，写这篇分享经验的文章主要是为了向大家介绍TiTi Protocol项目的一些亮点创新，也是为大家以后再参与类似的测试网时，能有更好参与进来。由于个人经验有限和能力限制，主要是抛砖引玉，欢迎理性讨论。 最后，也非常感谢TiTi Protocol项目方提供的激励性测试网。 文章将围绕以下几个方面展开：TiUSD核心原理（如何维持在$1？）TiTi 测试网规则赚取TiTi 的方式LP MiningUse-to-EarnTiTi-Staking Pool我的策略总结项目信息TiUSD核心原理关于TiUSD核心原理，其实我之前有写过一篇《TiTi Protocol:TiUSD是如何维持在1$》的文章，感兴趣的可以去阅读下，这里我也在简单总结下。 有一个协议可以通过不低于1美元的价格发行TiUSD，也可以通过不高于1美元的价格回购（销毁）TiUSD。 更多深层次的内容可以阅读上面我写的文章或者查看官方文档。TiTi 测试网规则在分享经验之...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">序言</h1><p>非常荣幸能应项目方邀请来和大家分享我在测试网的操作经验。首先我不是非常有实力的Defi玩家，能在这次TiTi测试锦标赛中赢得第一名我是十分幸运的。其次，写这篇分享经验的文章主要是为了向大家介绍TiTi Protocol项目的一些亮点创新，也是为大家以后再参与类似的测试网时，能有更好参与进来。由于个人经验有限和能力限制，主要是抛砖引玉，欢迎理性讨论。 最后，也非常感谢TiTi Protocol项目方提供的激励性测试网。</p><p>文章将围绕以下几个方面展开：</p><ul><li><p>TiUSD核心原理（如何维持在$1？）</p></li><li><p>TiTi 测试网规则</p></li><li><p>赚取TiTi 的方式</p></li><li><p>LP Mining</p></li><li><p>Use-to-Earn</p></li><li><p>TiTi-Staking Pool</p></li><li><p>我的策略</p></li><li><p>总结</p></li><li><p>项目信息</p></li></ul><h1 id="h-tiusd" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiUSD核心原理</h1><p>关于TiUSD核心原理，其实我之前有写过一篇《<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/syskeys.eth/ur38g-E6jgcPeVIyYCM1dStrRa6ZzEwIw1e-XNLkYhA">TiTi Protocol:TiUSD是如何维持在1$</a>》的文章，感兴趣的可以去阅读下，这里我也在简单总结下。</p><p><strong>有一个协议可以通过不低于1美元的价格发行TiUSD，也可以通过不高于1美元的价格回购（销毁）TiUSD。</strong> 更多深层次的内容可以阅读上面我写的文章或者查看<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-wikipedia/titi-stable-theory">官方文档</a>。</p><h1 id="h-titi" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiTi 测试网规则</h1><p>在分享经验之前，我想先为大家简单介绍下TiTi 的激励测试网的运行规则，因为只有真正了解规则之后才能让我们的利益最大化(已经非常了解规则的用户可以跳到下一部分内容)。</p><ul><li><p>测试网持续时间：UTC 12:00:00 08/01/2022 - UTC 12:00:00 08/29/2022</p></li><li><p>奖金池：$17,000</p></li><li><p>奖金分配：</p><ul><li><p>1st Place：$500</p></li><li><p>2nd-3rd Place：$200</p></li><li><p>4th-6th Place：$100</p></li><li><p>7th-100th Place：$40</p></li><li><p>101st-400th Place：$20</p></li><li><p>幸运奖：每天随机抽取20名参与测试网用户，奖励$10</p></li></ul></li><li><p>stake 的TiTi 越多，排名越靠前，越能问鼎冠军</p></li><li><p>每24小时可领取10000 Mock-USDC</p></li><li><p>在测试网中，禁止用户账户之间的 TiTi/TiUSD/MockUSDC 转账，以确保冠军对每个参赛者都是公平的。主网不会有任何此类限制。</p></li></ul><p>根据以上规则我们可以了解到，要想赢得大奖我们必须要stake 很多很多的TiTi，而获取TiTi多少的方式将决定我们能否排名靠前。根据官方<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-testnet/testnet-champion-contest-items">测试指导</a>，我们知道有4种方式可以赚取TiTi，它们分别是：<strong>MMF</strong>、<strong>LP Mining</strong>、<strong>Use-to-Earn</strong>、<strong>TiTi-Staking Pool</strong>。下面我将分别介绍我是如何利用这四种方式来赚取TiTi的。</p><h1 id="h-titi" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">赚取TiTi 的方式</h1><h2 id="h-mmf1500000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">MMF（总奖励：1500000 TiTi）</h2><p>MMF是做市基金，该基金是用户提供的无限制单边做市的合约资产组合。</p><p>通俗来说就是用户将其他资产stake 到MMF中，可以获取原始资产的奖励和TiTi的奖励，这也是新用户首次来到测试网需要操作的事情。</p><p>我当时就是通过MMF将领取的10000 Mock-USDC测试币，stake 到MMF中，几分钟时间我就获得了很多TiTi（测试网刚启动时APY非常高，高达几千万）。</p><p>通过MMF获得的TiTi 是实时领取的，我们可以在stake 界面查看奖励，并可以随时CLAIM。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/611a807e0fa2a594f361693ed85b41647e2a9581c0f6bda2ed7fa9dd993264d0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-lp-mining3000000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">LP Mining（总奖励：3000000 TiTi）</h2><p>这个相信在Defi领域的玩家都比较熟悉的，就是将TiTi和TiUSD（TiTi Protocol的稳定币）在Uniswap添加流动性，然后将流动性stake 到TiTi Protocol的合约中。</p><p>在这里需要注意的是无偿损失，因为当TiTi的价格剧烈波动时，我们将面临非常高的无偿损失，这点在测试网快结束时相信大家都感受到了。</p><p>通过LP Mining获得的TiTi是可以实时领取的，我们可以在stake 界面查看奖励，并可以随时CLAIM。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/11c8b337b21d2d475168d4a5f83d76659b5da98fe79b13516ca5c50837a69e72.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-use-to-earn2400000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Use-to-Earn（总奖励：2400000 TiTi）</h2><p>在这个模块中官方定义了三种Use-to-Earn的奖励方式：</p><ol><li><p>Buy TiUSD in MAMM （总奖励：800000 TiTi）</p></li><li><p>TiUSD Holder （总奖励：800000 TiTi）</p></li><li><p>Buy TiTi in Uniswap （总奖励：800000 TiTi）</p></li></ol><p>第一种方式是通过MAMM购买TiUSD既可以领取奖励，就是网站上显示SWAP模块，可以将USDC swap TiUSD。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4ea9bcde36aa0be9974ccd5d8316e4825e4847eac65ed7f536e5796ca7f98c60.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>第二种方式是在钱包中持有TiUSD即可，这种方式在测试网刚启动的时候，奖励还可以，每天可以获得几千TiTi，但随着测试网的运行，奖励越来越少，我就放弃这种方式了。</p><p>第三种方式是在Uniswap中用TiUSD swap TiTi，这也很容易理解，重要的是这可以重复交易，从而增加获得的TiTi数量。下图是我通过Use-to-Earn模块赚取的TiTi。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c2b91a7b92082ddf27121f0b46e231ffa8a7e50c47520cc5569c5a76a688d004.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>最后，通过Use-to-Earn方式赚取的TiTi是不能实时CLAIM的，必须要到测试网结束的前一天才能CLAIM。</p><h2 id="h-titi-staking-pool500000-titi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiTi-Staking Pool（总奖励：500000 TiTi）</h2><p>在这个模块中，我们只需要将TiTistake 到TiTi Protocol的合约中就会获得奖励。另外在测试网运行期间分为了3个时期，每个时期7天，倒计时结束后会发放奖励。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/75db84422b91eabb42168e78d03d8107166efc84caf04a75736544fce6741193.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">我的策略</h1><p>其实细心的读者在看到Use-to-Earn介绍中的图片时，就能发现我的策略了。没错我实行的策略就是在<strong>Buy TiUSD in MAMM</strong>和<strong>Buy TiTi in Uniswap</strong>模块中赚取大量的TiTi 。另外在测试网刚开启的时候通过<strong>LP Mining</strong>模块添加流动性来赚取TiTi 。</p><p>我写了一个程序可以将mUSDC swap to TiUSD和将TiUSD swap to mUSDC，就这样来回的刷交易量，刚开始时我每天可以获得的TiTi 奖励数量达到了10000+。不过这种方式有个弊端，那就是由于<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/titi-wikipedia/titi-stable-theory/m-amm">交易滑点</a>的存在，每次交易我都会面临亏损，为了解决这个问题，我就设定了亏损上线。只要我的亏损小于我能获得TiTi 数量，那么最后我还是赚钱的。</p><p>Buy TiTi in Uniswap这个模块比较有趣，因为我们都知道当大家都去购买TiTi 时，TiTi 的价格会非常高，TiUSD价格会非常低，反之亦然。另外大家也都知道没有人能预测是多少，所以刚开始我在将TiTi swap to TiUSD和将TiUSD swap to TiTi时，会面临比较大的亏损。但我在交易一段时间后，发现TiTi 的价格有变化区间（出现情况只是因为测试网，大家都在刷交易），于是我写一个程序来监测TiTi 的价格在一天中的变化情况。然后我根据这一天中TiTi 的价格变化写了另一个套利程序，这样我就可以源源不断的利用差价赚取TiTi 了。</p><p>例如，当程序检测到TiTi 的价格大于1000时，那程序自动将1000 TiTi swap to 1000000 TiUSD; 当程序检测到TiTi 的价格小于500时，那程序自动将1000000 TiUSD swap to 2000 TiTi ;经过一轮swap 成功的赚取了1000 TiTi 。</p><p>通过Buy TiTi in Uniswap 我既赚取了Use-to-Earn中的奖励，也赢得了TiTi 利差。最后就是将赚取的TiTi 利差一部分添加到LP Mining，另一部分stake 到TiTi-Staking Pool中，这样就能源源不断的产生被动收入了。</p><p>最后就是每24小时可领取10000 Mock-USDC，这部分完全可以用在Buy TiUSD in MAMM中的交易滑点。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">总结</h1><p>非常开心能参与到TiTi Testnet Championships，整个参与过程是十分舒适和平滑的，基本没有遇到什么严重的错误。另外，像这种类型的测试网，一定要早早参与。因为刚开始的头矿期APY是高的吓人的，这也为后面的操作奠定的了基础。其实看我的策略也没有什么特别高深，就是简单的熟读规则后，利用规则使自己的获利最大化。</p><p>最后希望大家多多关注TiTi Protocol项目，Discord社区中经常举行各种活动都是直接送U奖励，不玩虚的，而不像有一些项目都是PUA用户。最后项目获得了350W 美元的投资，值得关注。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目资料</h1><p><strong>docs:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance">docs.titi.finance</a> <strong>Homepage:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://titi.finance">titi.finance</a> <strong>Telegram:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://t.me/titiprotocol">t.me/titiprotocol</a> <strong>Discord:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://discord.gg/UpJkJ95Bvb">discord.gg/UpJkJ95Bvb</a> <strong>Twitter:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://twitter.com/TiTiProtocol">twitter.com/TiTiProtocol</a> <strong>Medium:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://titiprotocol.medium.com">titiprotocol.medium.com</a> <strong>GitHub:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://github.com/TiTi-Finance/TiTi-Protocol">github.com/TiTi-Finance/TiTi-Protocol</a> <strong>whitepaper:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://docsend.com/view/ut47u5z5p5his8id">docsend.com/view/ut47u5z5p5his8id</a></p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[明牌空投deepwatersxyz测试网教程]]></title>
            <link>https://paragraph.com/@syskeys/deepwatersxyz</link>
            <guid>t8FhluRy7Zh4ItzMbKOk</guid>
            <pubDate>Thu, 01 Sep 2022 01:58:09 GMT</pubDate>
            <description><![CDATA[项目明牌空投依据请参考达人的twitter 链上达人 @wenxue600 明牌空投，看到就肝 海外撸神@AirdropsCaptain分享的alpha：DeFi项目@deepwatersxyz即将测试，现在进DC自动OG，测试并反馈可得激励： ①加入DC拿OG：discord.gg/qAfUrWzrbF ②【Apply】频道填表申请“SUPER USER”身份 ③私信Community Manager拿大使、贡献者等role 85 5:43 PM • Aug 30, 2022 项目介绍请参与官方文档What is Deepwaters? | Deepwaters PublicDeepwaters is a validated, trustless exchange built with a mission of provable fairness, transparency, protected order flow, and secure custody. Current exchanges place traders at a disadvantage. The probl...]]></description>
            <content:encoded><![CDATA[<h3 id="h-twitter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">项目明牌空投依据请参考达人的twitter</h3><div data-type="twitter" tweetId="1564745700050890752" tweetData="{&quot;__typename&quot;:&quot;Tweet&quot;,&quot;lang&quot;:&quot;zh&quot;,&quot;favorite_count&quot;:85,&quot;possibly_sensitive&quot;:false,&quot;created_at&quot;:&quot;2022-08-30T22:43:41.000Z&quot;,&quot;display_text_range&quot;:[0,183],&quot;entities&quot;:{&quot;hashtags&quot;:[],&quot;urls&quot;:[{&quot;display_url&quot;:&quot;discord.gg/qAfUrWzrbF&quot;,&quot;expanded_url&quot;:&quot;https://discord.gg/qAfUrWzrbF&quot;,&quot;indices&quot;:[97,120],&quot;url&quot;:&quot;https://t.co/vdZALvklDd&quot;}],&quot;user_mentions&quot;:[{&quot;id_str&quot;:&quot;1500149070752591880&quot;,&quot;indices&quot;:[16,32],&quot;name&quot;:&quot;airdropscaptain.lens 🦇🔊&quot;,&quot;screen_name&quot;:&quot;AirdropsCaptain&quot;},{&quot;id_str&quot;:&quot;1486902812445274114&quot;,&quot;indices&quot;:[47,61],&quot;name&quot;:&quot;Deepwaters&quot;,&quot;screen_name&quot;:&quot;deepwatersxyz&quot;}],&quot;symbols&quot;:[],&quot;media&quot;:[{&quot;display_url&quot;:&quot;pic.x.com/yPGuXeLedL&quot;,&quot;expanded_url&quot;:&quot;https://x.com/wenxue600/status/1564745700050890752/photo/1&quot;,&quot;indices&quot;:[183,206],&quot;url&quot;:&quot;https://t.co/yPGuXeLedL&quot;}]},&quot;id_str&quot;:&quot;1564745700050890752&quot;,&quot;text&quot;:&quot;🪂明牌空投，看到就肝\n\n海外撸神@AirdropsCaptain分享的alpha：DeFi项目@deepwatersxyz即将测试，现在进DC自动OG，测试并反馈可得激励：\n\n①加入DC拿OG：https://t.co/vdZALvklDd\n②【Apply】频道填表申请“SUPER USER”身份\n③私信Community Manager拿大使、贡献者等role https://t.co/yPGuXeLedL&quot;,&quot;user&quot;:{&quot;id_str&quot;:&quot;1364886230656114692&quot;,&quot;name&quot;:&quot;链上达人&quot;,&quot;screen_name&quot;:&quot;wenxue600&quot;,&quot;is_blue_verified&quot;:true,&quot;profile_image_shape&quot;:&quot;Circle&quot;,&quot;verified&quot;:false,&quot;profile_image_url_https&quot;:&quot;https://storage.googleapis.com/papyrus_images/67725a6b878146dc85d7ac04440d3ee2633753288ec59f53dfcff4603363c47c.png&quot;},&quot;edit_control&quot;:{&quot;edit_tweet_ids&quot;:[&quot;1564745700050890752&quot;],&quot;editable_until_msecs&quot;:&quot;1661901221000&quot;,&quot;is_edit_eligible&quot;:false,&quot;edits_remaining&quot;:&quot;5&quot;},&quot;mediaDetails&quot;:[{&quot;display_url&quot;:&quot;pic.x.com/yPGuXeLedL&quot;,&quot;expanded_url&quot;:&quot;https://x.com/wenxue600/status/1564745700050890752/photo/1&quot;,&quot;ext_media_availability&quot;:{&quot;status&quot;:&quot;Available&quot;},&quot;indices&quot;:[183,206],&quot;media_url_https&quot;:&quot;https://pbs.twimg.com/media/FbcX1-4akAAmX47.jpg&quot;,&quot;original_info&quot;:{&quot;height&quot;:421,&quot;width&quot;:1274,&quot;focus_rects&quot;:[{&quot;x&quot;:522,&quot;y&quot;:0,&quot;w&quot;:752,&quot;h&quot;:421},{&quot;x&quot;:838,&quot;y&quot;:0,&quot;w&quot;:421,&quot;h&quot;:421},{&quot;x&quot;:864,&quot;y&quot;:0,&quot;w&quot;:369,&quot;h&quot;:421},{&quot;x&quot;:943,&quot;y&quot;:0,&quot;w&quot;:211,&quot;h&quot;:421},{&quot;x&quot;:0,&quot;y&quot;:0,&quot;w&quot;:1274,&quot;h&quot;:421}]},&quot;sizes&quot;:{&quot;large&quot;:{&quot;h&quot;:421,&quot;resize&quot;:&quot;fit&quot;,&quot;w&quot;:1274},&quot;medium&quot;:{&quot;h&quot;:397,&quot;resize&quot;:&quot;fit&quot;,&quot;w&quot;:1200},&quot;small&quot;:{&quot;h&quot;:225,&quot;resize&quot;:&quot;fit&quot;,&quot;w&quot;:680},&quot;thumb&quot;:{&quot;h&quot;:150,&quot;resize&quot;:&quot;crop&quot;,&quot;w&quot;:150}},&quot;type&quot;:&quot;photo&quot;,&quot;url&quot;:&quot;https://t.co/yPGuXeLedL&quot;}],&quot;photos&quot;:[{&quot;backgroundColor&quot;:{&quot;red&quot;:204,&quot;green&quot;:214,&quot;blue&quot;:221},&quot;cropCandidates&quot;:[{&quot;x&quot;:522,&quot;y&quot;:0,&quot;w&quot;:752,&quot;h&quot;:421},{&quot;x&quot;:838,&quot;y&quot;:0,&quot;w&quot;:421,&quot;h&quot;:421},{&quot;x&quot;:864,&quot;y&quot;:0,&quot;w&quot;:369,&quot;h&quot;:421},{&quot;x&quot;:943,&quot;y&quot;:0,&quot;w&quot;:211,&quot;h&quot;:421},{&quot;x&quot;:0,&quot;y&quot;:0,&quot;w&quot;:1274,&quot;h&quot;:421}],&quot;expandedUrl&quot;:&quot;https://x.com/wenxue600/status/1564745700050890752/photo/1&quot;,&quot;url&quot;:&quot;https://storage.googleapis.com/papyrus_images/119f66337c0378865e71911b019ba23933fffcbf4cedb4693794b2d22ff80204.jpg&quot;,&quot;width&quot;:1274,&quot;height&quot;:421}],&quot;conversation_count&quot;:8,&quot;news_action_type&quot;:&quot;conversation&quot;,&quot;isEdited&quot;:false,&quot;isStaleEdit&quot;:false}"> 
  <div class="twitter-embed embed">
    <div class="twitter-header">
        <div style="display:flex">
          <a target="_blank" href="https://twitter.com/wenxue600">
              <img alt="User Avatar" class="twitter-avatar" src="https://storage.googleapis.com/papyrus_images/67725a6b878146dc85d7ac04440d3ee2633753288ec59f53dfcff4603363c47c.png" />
            </a>
            <div style="margin-left:4px;margin-right:auto;line-height:1.2;">
              <a target="_blank" href="https://twitter.com/wenxue600" class="twitter-displayname">链上达人</a>
              <p><a target="_blank" href="https://twitter.com/wenxue600" class="twitter-username">@wenxue600</a></p>
    
            </div>
            <a href="https://twitter.com/wenxue600/status/1564745700050890752" target="_blank">
              <img alt="Twitter Logo" class="twitter-logo" src="https://paragraph.com/editor/twitter/logo.png" />
            </a>
          </div>
        </div>
      
    <div class="twitter-body">
      <img class="twitter-emoji" draggable="false" alt="🪂" src="https://abs-0.twimg.com/emoji/v2/72x72/1fa82.png"/>明牌空投，看到就肝<br /><br />海外撸神<a class="twitter-content-link"  href="https://twitter.com/AirdropsCaptain" target="_blank">@AirdropsCaptain</a>分享的alpha：DeFi项目<a class="twitter-content-link"  href="https://twitter.com/deepwatersxyz" target="_blank">@deepwatersxyz</a>即将测试，现在进DC自动OG，测试并反馈可得激励：<br /><br />①加入DC拿OG：<a class="twitter-content-link" href="https://t.co/vdZALvklDd" target="_blank">discord.gg/qAfUrWzrbF</a><br />②【Apply】频道填表申请“SUPER USER”身份<br />③私信Community Manager拿大使、贡献者等role 
      <div class="twitter-media"><img class="twitter-image" src="https://storage.googleapis.com/papyrus_images/119f66337c0378865e71911b019ba23933fffcbf4cedb4693794b2d22ff80204.jpg" /></div>
      
       
    </div>
    
     <div class="twitter-footer">
          <a target="_blank" href="https://twitter.com/wenxue600/status/1564745700050890752" style="margin-right:16px; display:flex;">
            <img alt="Like Icon" class="twitter-heart" src="https://paragraph.com/editor/twitter/heart.png">
            85
          </a>
          <a target="_blank" href="https://twitter.com/wenxue600/status/1564745700050890752"><p>5:43 PM • Aug 30, 2022</p></a>
        </div>
    
  </div> 
  </div><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">项目介绍请参与官方文档</h3><div data-type="embedly" src="https://deepwaters.gitbook.io/deepwaters-public/" data="{&quot;provider_url&quot;:&quot;https://deepwaters.gitbook.io&quot;,&quot;description&quot;:&quot;Deepwaters is a validated, trustless exchange built with a mission of provable fairness, transparency, protected order flow, and secure custody. Current exchanges place traders at a disadvantage. The problems affecting trading platforms can be separated into two categories: Lack of confidentiality and poor integrity of order flow before it is recorded in the publicly available order book, resulting in: Violations of the custody of customer funds, resulting in rehypothecation and commingling.&quot;,&quot;title&quot;:&quot;What is Deepwaters? | Deepwaters Public&quot;,&quot;mean_alpha&quot;:254.966666667,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://deepwaters.gitbook.io/deepwaters-public&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/4701d7e56cd22ca58283f1008ff865f3cb72a3769f160dbb38b2be547f4299f0.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Gitbook&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/4701d7e56cd22ca58283f1008ff865f3cb72a3769f160dbb38b2be547f4299f0.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/4701d7e56cd22ca58283f1008ff865f3cb72a3769f160dbb38b2be547f4299f0.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://deepwaters.gitbook.io/deepwaters-public/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>What is Deepwaters? | Deepwaters Public</h2><p>Deepwaters is a validated, trustless exchange built with a mission of provable fairness, transparency, protected order flow, and secure custody. Current exchanges place traders at a disadvantage. The problems affecting trading platforms can be separated into two categories: Lack of confidentiality and poor integrity of order flow before it is recorded in the publicly available order book, resulting in: Violations of the custody of customer funds, resulting in rehypothecation and commingling.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://deepwaters.gitbook.io</span></div><img src="https://storage.googleapis.com/papyrus_images/4701d7e56cd22ca58283f1008ff865f3cb72a3769f160dbb38b2be547f4299f0.png"/></div></a></div></div><h2 id="h-step1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step1 领水</h2><p>由于项目方是支持多链同时测试的，所以请根据需要选择要领水的链。</p><p>Goerli：</p><div data-type="embedly" src="https://goerlifaucet.com/" data="{&quot;provider_url&quot;:&quot;https://www.alchemy.com&quot;,&quot;description&quot;:&quot;A fast and reliable Ethereum Sepolia testnet faucet for blockchain developers.&quot;,&quot;title&quot;:&quot;Ethereum Sepolia Faucet&quot;,&quot;mean_alpha&quot;:168.342857143,&quot;thumbnail_width&quot;:2400,&quot;url&quot;:&quot;https://www.alchemy.com/faucets/ethereum-sepolia&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/8c288575eb776a78157dfb34aebbbf0288fbd414d87c0c5184d4f82c1809e1fb.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Ethereum Sepolia Faucet&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1260,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:2400,&quot;height&quot;:1260,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/8c288575eb776a78157dfb34aebbbf0288fbd414d87c0c5184d4f82c1809e1fb.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/8c288575eb776a78157dfb34aebbbf0288fbd414d87c0c5184d4f82c1809e1fb.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://goerlifaucet.com/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Ethereum Sepolia Faucet</h2><p>A fast and reliable Ethereum Sepolia testnet faucet for blockchain developers.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.alchemy.com</span></div><img src="https://storage.googleapis.com/papyrus_images/8c288575eb776a78157dfb34aebbbf0288fbd414d87c0c5184d4f82c1809e1fb.png"/></div></a></div></div><p>Fuji：</p><div data-type="embedly" src="https://faucet.avax.network/" data="{&quot;provider_url&quot;:&quot;https://core.app&quot;,&quot;description&quot;:&quot;Official Testnet recourse for blockchain Developers. Use Avalanche Testnet Faucet, an open platform to claim free AVAX. Add Fuji (C- Chain) to your browser &amp; more.&quot;,&quot;title&quot;:&quot;Avalanche Testnet Faucet&quot;,&quot;author_name&quot;:&quot;Ava Labs&quot;,&quot;url&quot;:&quot;https://core.app/tools/testnet-faucet&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/b206083aaba8df61e06e626936cf483b9bce4f57eca4661b5dcc2daabbea3756.png&quot;,&quot;thumbnail_width&quot;:1200,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Core&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/b206083aaba8df61e06e626936cf483b9bce4f57eca4661b5dcc2daabbea3756.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/b206083aaba8df61e06e626936cf483b9bce4f57eca4661b5dcc2daabbea3756.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://faucet.avax.network/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Avalanche Testnet Faucet</h2><p>Official Testnet recourse for blockchain Developers. Use Avalanche Testnet Faucet, an open platform to claim free AVAX. Add Fuji (C- Chain) to your browser &amp; more.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://core.app</span></div><img src="https://storage.googleapis.com/papyrus_images/b206083aaba8df61e06e626936cf483b9bce4f57eca4661b5dcc2daabbea3756.png"/></div></a></div></div><p>Mumbai：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.polygon.technology/">https://faucet.polygon.technology/</a></p><div data-type="embedly" src="https://mumbaifaucet.com/" data="{&quot;provider_url&quot;:&quot;https://www.alchemy.com&quot;,&quot;description&quot;:&quot;A fast and reliable Polygon PoS Amoy testnet faucet for blockchain developers.&quot;,&quot;title&quot;:&quot;Polygon PoS Amoy Faucet&quot;,&quot;mean_alpha&quot;:159.559722222,&quot;thumbnail_width&quot;:2400,&quot;url&quot;:&quot;https://www.alchemy.com/faucets/polygon-amoy&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/991bbcb4f390ee7050fe0af99996c199ce49f0fc1933912471a7554754b9ae85.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Polygon PoS Amoy Faucet&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1260,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:2400,&quot;height&quot;:1260,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/991bbcb4f390ee7050fe0af99996c199ce49f0fc1933912471a7554754b9ae85.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/991bbcb4f390ee7050fe0af99996c199ce49f0fc1933912471a7554754b9ae85.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://mumbaifaucet.com/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Polygon PoS Amoy Faucet</h2><p>A fast and reliable Polygon PoS Amoy testnet faucet for blockchain developers.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.alchemy.com</span></div><img src="https://storage.googleapis.com/papyrus_images/991bbcb4f390ee7050fe0af99996c199ce49f0fc1933912471a7554754b9ae85.png"/></div></a></div></div><p>BSC Testnet：</p><div data-type="embedly" src="https://testnet.binance.org/faucet-smart" data="{&quot;provider_url&quot;:&quot;https://www.bnbchain.org&quot;,&quot;description&quot;:&quot;BNB Chain is a community-driven and decentralized blockchain ecosystem for Web3 dApps, powered by BNB. Join us for massive Web3 access and a future full of opportunity!&quot;,&quot;title&quot;:&quot;BNB Chain: Build for the Next Billion Web3 Users&quot;,&quot;thumbnail_width&quot;:1920,&quot;url&quot;:&quot;https://www.bnbchain.org/en&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/b0a7d4f5edb16881db538bed4c2993db6d08154fb0a4d97a3cbfaee190c0bd05.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;BNB Chain&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1080,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1920,&quot;height&quot;:1080,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/b0a7d4f5edb16881db538bed4c2993db6d08154fb0a4d97a3cbfaee190c0bd05.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/b0a7d4f5edb16881db538bed4c2993db6d08154fb0a4d97a3cbfaee190c0bd05.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://testnet.binance.org/faucet-smart" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>BNB Chain: Build for the Next Billion Web3 Users</h2><p>BNB Chain is a community-driven and decentralized blockchain ecosystem for Web3 dApps, powered by BNB. Join us for massive Web3 access and a future full of opportunity!</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.bnbchain.org</span></div><img src="https://storage.googleapis.com/papyrus_images/b0a7d4f5edb16881db538bed4c2993db6d08154fb0a4d97a3cbfaee190c0bd05.png"/></div></a></div></div><h2 id="h-step2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step2 领取测试币</h2><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.deepwaters.xyz/">测试网</a>，点击fauect</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b86a5c6702dcbc78740c58e2a7fead050509a6dca2c08655540bd86db0a8da53.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>我这里选择的是Goerli测试网，大家可以按照个人需求选择具体的测试网，勾选全部测试币，最后点击发推。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef7cabcff0d06993b5d5adaeff2820e49d36b6b07acb79029b00cc0d1f382384.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>然后将推文链接和邮箱地址填写到下面的框中，最后提交。（<strong>提交的时候会进行钱包验证</strong>）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c12b356fc82908a4bef69d918ff57a23353769d1e0f48d5ab0d0f36a79d8b064.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>稍等片刻后即可收到测试网代币</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7aaa4fc4f069d8b74d1990726b9bb98a7356d4c6ebb6ffefeb6280c044a2a456.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 3 将测试币存入交易账户</h2><p>点击deposit</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4b464eeb7d5db1f804f9bd07345a4c5f740621b8db5a205735cb533bbb3a9378.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>选择网络，选择要存入的资产，输入数量，最后点击授权</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c672e608cc6f542c64cd7e3f3fddee1299953ea1cea03f98e2ec1bd6e2d6e8ae.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>授权成功后，点击deposit即可存入。（<strong>根据官方教程，实际前端显示可能会有延迟，不过不影响操作</strong>）</p><p>其他类型的资产，建议也通过以上步骤存入到交易账户。</p><h2 id="h-step-4" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 4 进行交易</h2><p>具体看下图即可，图片都有标注。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/44011302db6a8ddd698496d6226ab03125e9f43b7587a417930c10c518303ea6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-5" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 5 将交易账户的资产提现到钱包</h2><p>选择仪表盘，点击withdraw</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dcb4970f1c34105d556fb06fa5684da3fc2b75723d91e9b9fca0234bb88eac53.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>同样选择链，目标资产和数量，最后点击确认即可提现成功。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ca1a98b196f9db4415fe8561af5c07b57aa4d0ba218abea7a464bbab10231f4e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">测试之后的填写反馈表格：</h3><div data-type="embedly" src="https://docs.google.com/forms/d/e/1FAIpQLSdL9dfcjgMPdMFW0C86C6Y_dP6wG0BXRw41pB_14ZQ6jpMrag/viewform" data="{&quot;provider_url&quot;:&quot;http://docs.google.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;height&quot;:675,&quot;width&quot;:760,&quot;html&quot;:&quot;&lt;iframe loading=\&quot;lazy\&quot; class=\&quot;embedly-embed\&quot; src=\&quot;//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fdocs.google.com%2Fforms%2Fd%2Fe%2F1FAIpQLSdL9dfcjgMPdMFW0C86C6Y_dP6wG0BXRw41pB_14ZQ6jpMrag%2Fviewform%3Fembedded%3Dtrue&amp;display_name=Google+Docs&amp;url=https%3A%2F%2Faccounts.google.com%2Fv3%2Fsignin%2Fidentifier%3Fcontinue%3Dhttps%253A%252F%252Fdocs.google.com%252Fforms%252Fd%252Fe%252F1FAIpQLSdL9dfcjgMPdMFW0C86C6Y_dP6wG0BXRw41pB_14ZQ6jpMrag%252Fviewform%26dsh%3DS858767414%253A1761345823402916%26followup%3Dhttps%253A%252F%252Fdocs.google.com%252Fforms%252Fd%252Fe%252F1FAIpQLSdL9dfcjgMPdMFW0C86C6Y_dP6wG0BXRw41pB_14ZQ6jpMrag%252Fviewform%26ifkv%3DARESoU2XVIac9mLEltRUG6asvDPwESAOchLNh-I0cn7F2173UjMT8fBJpFovR6I3KLkYdPQn3oGlEw%26ltmpl%3Dforms%26osid%3D1%26passive%3D1209600%26service%3Dwise%26flowName%3DWebLiteSignIn%26flowEntry%3DServiceLogin&amp;type=text%2Fhtml&amp;scroll=auto&amp;schema=google\&quot; width=\&quot;760\&quot; height=\&quot;675\&quot; scrolling=\&quot;auto\&quot; title=\&quot;Google Docs embed\&quot; frameborder=\&quot;0\&quot; allow=\&quot;autoplay; fullscreen; encrypted-media; picture-in-picture;\&quot; allowfullscreen=\&quot;true\&quot;&gt;&lt;/iframe&gt;&quot;,&quot;provider_name&quot;:&quot;Google Docs&quot;,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><p>到此整个测试网操作就完成了，整体还是比较简单的，但可以看到，网站上有很多功能都是未开启的，这些可以等到后面开启之后再测试。</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[估值102亿融资5.45亿的Alchemy 项目Road to Web3第四周NFT获取教程]]></title>
            <link>https://paragraph.com/@syskeys/102-5-45-alchemy-road-to-web3-nft-3</link>
            <guid>Y2YVuYWkgo7ie9NqtnRS</guid>
            <pubDate>Mon, 15 Aug 2022 09:18:18 GMT</pubDate>
            <description><![CDATA[目录第一周任务教程链接 来源：@Greta0086第二周任务教程链接 来源：@Greta0086挑战任务第三周任务教程链接 来源：@Greta0086挑战任务第四周任务教程链接如何创建 NFT 画廊step 1 创建项目目录1.打开终端运行下面的命令 npx create-next-app -e with-tailwindcss nameoftheproject2.使用vscode打开项目目录，运行下面命令即可 cd nameoftheproject && code . 最终显示项目目录如下图所示step 2 修改文件内容1.修改pages/index.tsx的内容，打开链接复制内容，并粘贴到index.tsx文件中 将第16行和46行的apikey的内容修改为自己的apikey（此apikey是eth主网的apikey，如果没有直接在alchemy官网创建个app即可，不多介绍，具体可参考前几周的教程）46行要修改的内容2.在pages文件夹中新建一个名为components的文件夹，然后在components文件夹中再新建一个名为nftCard.jsx的文件，然后打开链接，将...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">目录</h2><ul><li><p>第一周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/egs3DyvaUmAYlQXrufE55p9sJ80coSDDxOfTCR-7e3o">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li></ul></li><li><p>第二周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/JCRkc6KJPrpJX3A03E0fzF96oNzOY6tCDxn9Duz_p3I">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/xEHeYK2IuWzpsKx0RKtZ8iMiLgbs1bngtenTXkBlnC8">挑战任务</a></p></li></ul></li><li><p>第三周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/kbBuWvxErpmIgOCkI6HyHEb2XDpManoxSTxhV0zTtSQ">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/ZwAcqo5ULBhzMl-AFsOu0b-YfxS6azr8mbHn8z650kU">挑战任务</a></p></li></ul></li><li><p>第四周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/i0pPGkUN_hUbLdp3MA_3mSEXT8kUuOnKnmGpTJkgjXQ">链接</a></p></li></ul></li></ul><h2 id="h-nft" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">如何创建 NFT 画廊</h2><h2 id="h-step-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 1 创建项目目录</h2><p>1.打开终端运行下面的命令</p><p><code>npx create-next-app -e with-tailwindcss nameoftheproject</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/44875b1348307569fde9f93223f8c33312462bdc01bf5ae8d7aa45c5ebeba071.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.使用vscode打开项目目录，运行下面命令即可</p><p><code>cd nameoftheproject &amp;&amp; code .</code></p><p>最终显示项目目录如下图所示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e950fb92b42d9414971dd92bf5a0bcbd6b712cc6d5ffdd0208cc8021ce44f0df.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 2 修改文件内容</h2><p>1.修改pages/index.tsx的内容，打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://raw.githubusercontent.com/skyMetaverse/nameoftheproject/main/pages/index.tsx">链接</a>复制内容，并粘贴到index.tsx文件中</p><p>将第16行和46行的apikey的内容修改为自己的apikey（此apikey是eth主网的apikey，如果没有直接在alchemy官网创建个app即可，不多介绍，具体可参考前几周的教程）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9fceb095119a5ee2e5d401a65b4d12829a8e9a0567b2b2255eb31cc16149007d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>46行要修改的内容</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6f217a2ec0724d68e175b74c5eb7fb38dc1b4fcb7393d05c3a7d229387bcd29e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.在pages文件夹中新建一个名为<code>components</code>的文件夹，然后在<code>components</code>文件夹中再新建一个名为<code>nftCard.jsx</code>的文件，然后打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://raw.githubusercontent.com/skyMetaverse/nameoftheproject/main/pages/components/nftCard.jsx">链接</a>，将内容复制到此文件中保存。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/841200d68d1680e047ff18ac8baecba502cfd7270497d6eb2144797b685faea0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>以上2步修改完成后，运行下面的命令启动项目</p><p><code>npm run dev</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8413ae3ec1ea80d31adc2f7cf0fafe19e353bb4b68704d6111dc3f4d780a151f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>运行成功后，会显示项目运行在本地的那个端口上，直接复制红框链接到浏览器中打开即可。</p><h2 id="h-step-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 3 打开本地测试项目，查询地址测试</h2><p>1.打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://localhost:3000">http://localhost:3000</a>显示如下图所示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b2e58427e32cb0d8103f795acc2902715487d58ccf005b86348f0bcef312cd85.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>第一个红框填写自己的钱包地址，可以查看钱包中都有什么NFT。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a83cd93dcaeb5a2a70085a4aa03fba617b4d779de7824bb92607c5a5e0b18516.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>第二个红框填写NFT的合约地址可以查看当前NFT的所有内容。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1c166d75c48cd98a6f4bc98ea23227c5f5f2ad1d43088affb2127a186d685282.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-4-github" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 4 将代码上传的github</h2><p>1.打开并<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/">登录github</a>，进到主页，点击头像旁边的加号--New repository</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2492c42935fa0b6d887d00858f46492d592b6540ca86191ffb14425f1fc870f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.输入仓库名字（随意命名）和描述信息，最后点击创建仓库</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5d3a85d2b1541e8ae91113da5402e286de0034247587de48fdeb84973140f159.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.仓库创建完成后，会显示仓库的链接，记录下来，后面提交需要用到</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c7d2557f59d67f51944a6b9e58c5eb5e4e2ebcf886ceaef70677de2ab555bac9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>4.回到电脑上，找到我们的项目目录，在空白处右键，选择<code>Git Bash Here</code>(如果电脑未安装git，会有有此选项，直接到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://git-scm.com/">链接下</a>载安装即可)</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/950b9adba1f4eddaa8b67481259cd7aab5d0c47166e810b16be233705d82503d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>5.打开终端之后，依次输入下面命令，将代码上传到仓库中(注意修改链接)</p><pre data-type="codeBlock" text="git remote add origin 填写自己的仓库链接
git add .
git push
"><code>git remote <span class="hljs-keyword">add</span> origin 填写自己的仓库链接
git <span class="hljs-keyword">add</span> .
git push
</code></pre><p>6.上传完成后，大概可以看到下图示例</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5c2e843b722be00ad0fc123d0ba5c966c5dc0056f6398857a45841575788b65a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>7.此仓库的链接复制保存下来，提交任务需要用到。</p><h2 id="h-step-5" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 5 提交任务</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alchemyapi.typeform.com/roadtoweekfour">链接</a></p><p>最后一步提交的任务信息是step4中的仓库链接</p><h2 id="h-step-6-nft" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 6 领取NFT</h2><p>领取NFT，可以直接到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mintkudos.xyz/profile/">mintkudos个人资料页</a>查看。</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[估值102亿融资5.45亿的Alchemy 项目Road to Web3第三周NFT获取教程]]></title>
            <link>https://paragraph.com/@syskeys/102-5-45-alchemy-road-to-web3-nft-2</link>
            <guid>dgqdxHWGeA35kbXEiffi</guid>
            <pubDate>Mon, 15 Aug 2022 07:03:07 GMT</pubDate>
            <description><![CDATA[目录第一周任务教程链接 来源：@Greta0086第二周任务教程链接 来源：@Greta0086挑战任务第三周任务教程链接 来源：@Greta0086挑战任务第三周挑战任务详情：Substitute the current tokenIdToLevels[] mapping with a struct that stores:LevelSpeedStrengthLife这个挑战任务主要是使用结构体来储存NFT的其他属性信息 首先定义结构体struct TokenDetails { uint256 level; uint256 speed; uint256 strength; uint256 life; } 添加映射mapping(uint256 => TokenDetails) public tokenDetails; 最后完整的代码ChainBattles.sol合约代码如下// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ex...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">目录</h2><ul><li><p>第一周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/egs3DyvaUmAYlQXrufE55p9sJ80coSDDxOfTCR-7e3o">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li></ul></li><li><p>第二周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/JCRkc6KJPrpJX3A03E0fzF96oNzOY6tCDxn9Duz_p3I">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/xEHeYK2IuWzpsKx0RKtZ8iMiLgbs1bngtenTXkBlnC8">挑战任务</a></p></li></ul></li><li><p>第三周任务教程</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/kbBuWvxErpmIgOCkI6HyHEb2XDpManoxSTxhV0zTtSQ">链接</a> 来源：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/ZwAcqo5ULBhzMl-AFsOu0b-YfxS6azr8mbHn8z650kU">挑战任务</a></p></li></ul></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">第三周挑战任务详情：</h2><p><strong>Substitute the current tokenIdToLevels[] mapping with a struct that stores:</strong></p><ul><li><p><strong>Level</strong></p></li><li><p><strong>Speed</strong></p></li><li><p><strong>Strength</strong></p></li><li><p><strong>Life</strong></p></li></ul><p>这个挑战任务主要是使用结构体来储存NFT的其他属性信息</p><p>首先定义结构体</p><pre data-type="codeBlock" text="struct TokenDetails {
        uint256 level;
        uint256 speed;
        uint256 strength;
        uint256 life;
    }
"><code><span class="hljs-keyword">struct</span> <span class="hljs-title">TokenDetails</span> {
        <span class="hljs-keyword">uint256</span> level;
        <span class="hljs-keyword">uint256</span> speed;
        <span class="hljs-keyword">uint256</span> strength;
        <span class="hljs-keyword">uint256</span> life;
    }
</code></pre><p>添加映射</p><pre data-type="codeBlock" text="mapping(uint256 =&gt; TokenDetails) public tokenDetails;
"><code><span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">uint256</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> TokenDetails) <span class="hljs-keyword">public</span> tokenDetails;
</code></pre><p>最后完整的代码<code>ChainBattles.sol</code>合约代码如下</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import &quot;@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol&quot;;
import &quot;@openzeppelin/contracts/utils/Counters.sol&quot;;
import &quot;@openzeppelin/contracts/utils/Strings.sol&quot;;
import &quot;@openzeppelin/contracts/utils/Base64.sol&quot;;

contract ChainBattles is ERC721URIStorage  {
    using Strings for uint256;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    // mapping(uint256 =&gt; uint256) public tokenIdToLevels;

    struct TokenDetails {
        uint256 level;
        uint256 speed;
        uint256 strength;
        uint256 life;
    }

    mapping(uint256 =&gt; TokenDetails) public tokenDetails;

    constructor() ERC721 (&quot;syskey Battles&quot;, &quot;SKYB&quot;){
    }

    function generateCharacter(uint256 tokenId) public returns(string memory){
        bytes memory svg = abi.encodePacked(
            &apos;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; preserveAspectRatio=&quot;xMinYMin meet&quot; viewBox=&quot;0 0 350 350&quot;&gt;&apos;,
            &apos;&lt;style&gt;.base { fill: white; font-family: serif; font-size: 14px; }&lt;/style&gt;&apos;,
            &apos;&lt;rect width=&quot;100%&quot; height=&quot;100%&quot; fill=&quot;black&quot; /&gt;&apos;,
            &apos;&lt;text x=&quot;50%&quot; y=&quot;40%&quot; class=&quot;base&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot;&gt;&apos;,&quot;syskey&quot;,&apos;&lt;/text&gt;&apos;,
            &apos;&lt;text x=&quot;50%&quot; y=&quot;50%&quot; class=&quot;base&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot;&gt;&apos;, &quot;Levels: &quot;,getLevels(tokenId),&apos;&lt;/text&gt;&apos;,
            &apos;&lt;text x=&quot;50%&quot; y=&quot;60%&quot; class=&quot;base&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot;&gt;&apos;, &quot;Speed: &quot;,getSpeed(tokenId),&apos;&lt;/text&gt;&apos;,
            &apos;&lt;text x=&quot;50%&quot; y=&quot;70%&quot; class=&quot;base&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot;&gt;&apos;, &quot;Strength: &quot;,getStrength(tokenId),&apos;&lt;/text&gt;&apos;,
            &apos;&lt;text x=&quot;50%&quot; y=&quot;80%&quot; class=&quot;base&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot;&gt;&apos;, &quot;Life: &quot;,getLife(tokenId),&apos;&lt;/text&gt;&apos;,
            &apos;&lt;/svg&gt;&apos;
        );
        return string(
            abi.encodePacked(
                &quot;data:image/svg+xml;base64,&quot;,
                Base64.encode(svg)
            )    
        );
    }

    function getLevels(uint256 tokenId) public view returns (string memory) {
        // uint256 levels = tokenIdToLevels[tokenId];
        uint256 levels = tokenDetails[tokenId].level;
        return levels.toString();
    }

    function getSpeed(uint256 tokenId) public view returns (string memory) {
        uint256 speeds = tokenDetails[tokenId].speed;
        return speeds.toString();
    }

    function getStrength(uint256 tokenId) public view returns (string memory) {
        uint256 strengths = tokenDetails[tokenId].strength;
        return strengths.toString();
    }

    function getLife(uint256 tokenId) public view returns (string memory) {
        uint256 lifes = tokenDetails[tokenId].life;
        return lifes.toString();
    }



    function getTokenURI(uint256 tokenId) public returns (string memory){
        bytes memory dataURI = abi.encodePacked(
            &apos;{&apos;,
                &apos;&quot;name&quot;: &quot;Chain Battles #&apos;, tokenId.toString(), &apos;&quot;,&apos;,
                &apos;&quot;description&quot;: &quot;Battles on chain&quot;,&apos;,
                &apos;&quot;image&quot;: &quot;&apos;, generateCharacter(tokenId), &apos;&quot;&apos;,
            &apos;}&apos;
        );
        return string(
            abi.encodePacked(
                &quot;data:application/json;base64,&quot;,
                Base64.encode(dataURI)
            )
        );
    }
    // 生成随机数
    function random(uint number) public view returns(uint){
        return uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty,  
        msg.sender))) % number;
    }

    function mint() public {
        _tokenIds.increment();
        uint256 newItemId = _tokenIds.current();
        _safeMint(msg.sender, newItemId);
        // tokenIdToLevels[newItemId] = 0;
        tokenDetails[newItemId].level = 0;
        tokenDetails[newItemId].speed = random(100);
        tokenDetails[newItemId].strength = random(1000);
        tokenDetails[newItemId].life = random(500);
        _setTokenURI(newItemId, getTokenURI(newItemId));
    }

    function train(uint256 tokenId) public {
        require(_exists(tokenId));
        require(ownerOf(tokenId) == msg.sender, &quot;You must own this token to train it&quot;);
        // uint256 currentLevel = tokenIdToLevels[tokenId];
        uint256 currentLevel = tokenDetails[tokenId].level;
        // tokenIdToLevels[tokenId] = currentLevel + 1;
        tokenDetails[tokenId].level = currentLevel + 1;
        _setTokenURI(tokenId, getTokenURI(tokenId));
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-keyword">import</span> <span class="hljs-string">"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">"@openzeppelin/contracts/utils/Counters.sol"</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">"@openzeppelin/contracts/utils/Strings.sol"</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">"@openzeppelin/contracts/utils/Base64.sol"</span>;

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">ChainBattles</span> <span class="hljs-keyword">is</span> <span class="hljs-title">ERC721URIStorage</span>  </span>{
    <span class="hljs-keyword">using</span> <span class="hljs-title">Strings</span> <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title"><span class="hljs-keyword">uint256</span></span>;
    <span class="hljs-keyword">using</span> <span class="hljs-title">Counters</span> <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title">Counters</span>.<span class="hljs-title">Counter</span>;
    Counters.Counter <span class="hljs-keyword">private</span> _tokenIds;

    <span class="hljs-comment">// mapping(uint256 => uint256) public tokenIdToLevels;</span>

    <span class="hljs-keyword">struct</span> <span class="hljs-title">TokenDetails</span> {
        <span class="hljs-keyword">uint256</span> level;
        <span class="hljs-keyword">uint256</span> speed;
        <span class="hljs-keyword">uint256</span> strength;
        <span class="hljs-keyword">uint256</span> life;
    }

    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">uint256</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> TokenDetails) <span class="hljs-keyword">public</span> tokenDetails;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) <span class="hljs-title">ERC721</span> (<span class="hljs-params"><span class="hljs-string">"syskey Battles"</span>, <span class="hljs-string">"SKYB"</span></span>)</span>{
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateCharacter</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>)</span>{
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> svg <span class="hljs-operator">=</span> <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(
            <span class="hljs-string">'&#x3C;svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350">'</span>,
            <span class="hljs-string">'&#x3C;style>.base { fill: white; font-family: serif; font-size: 14px; }&#x3C;/style>'</span>,
            <span class="hljs-string">'&#x3C;rect width="100%" height="100%" fill="black" />'</span>,
            <span class="hljs-string">'&#x3C;text x="50%" y="40%" class="base" dominant-baseline="middle" text-anchor="middle">'</span>,<span class="hljs-string">"syskey"</span>,<span class="hljs-string">'&#x3C;/text>'</span>,
            <span class="hljs-string">'&#x3C;text x="50%" y="50%" class="base" dominant-baseline="middle" text-anchor="middle">'</span>, <span class="hljs-string">"Levels: "</span>,getLevels(tokenId),<span class="hljs-string">'&#x3C;/text>'</span>,
            <span class="hljs-string">'&#x3C;text x="50%" y="60%" class="base" dominant-baseline="middle" text-anchor="middle">'</span>, <span class="hljs-string">"Speed: "</span>,getSpeed(tokenId),<span class="hljs-string">'&#x3C;/text>'</span>,
            <span class="hljs-string">'&#x3C;text x="50%" y="70%" class="base" dominant-baseline="middle" text-anchor="middle">'</span>, <span class="hljs-string">"Strength: "</span>,getStrength(tokenId),<span class="hljs-string">'&#x3C;/text>'</span>,
            <span class="hljs-string">'&#x3C;text x="50%" y="80%" class="base" dominant-baseline="middle" text-anchor="middle">'</span>, <span class="hljs-string">"Life: "</span>,getLife(tokenId),<span class="hljs-string">'&#x3C;/text>'</span>,
            <span class="hljs-string">'&#x3C;/svg>'</span>
        );
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">string</span>(
            <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(
                <span class="hljs-string">"data:image/svg+xml;base64,"</span>,
                Base64.encode(svg)
            )    
        );
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getLevels</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>) </span>{
        <span class="hljs-comment">// uint256 levels = tokenIdToLevels[tokenId];</span>
        <span class="hljs-keyword">uint256</span> levels <span class="hljs-operator">=</span> tokenDetails[tokenId].level;
        <span class="hljs-keyword">return</span> levels.toString();
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getSpeed</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>) </span>{
        <span class="hljs-keyword">uint256</span> speeds <span class="hljs-operator">=</span> tokenDetails[tokenId].speed;
        <span class="hljs-keyword">return</span> speeds.toString();
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStrength</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>) </span>{
        <span class="hljs-keyword">uint256</span> strengths <span class="hljs-operator">=</span> tokenDetails[tokenId].strength;
        <span class="hljs-keyword">return</span> strengths.toString();
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getLife</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>) </span>{
        <span class="hljs-keyword">uint256</span> lifes <span class="hljs-operator">=</span> tokenDetails[tokenId].life;
        <span class="hljs-keyword">return</span> lifes.toString();
    }



    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTokenURI</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>)</span>{
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> dataURI <span class="hljs-operator">=</span> <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(
            <span class="hljs-string">'{'</span>,
                <span class="hljs-string">'"name": "Chain Battles #'</span>, tokenId.toString(), <span class="hljs-string">'",'</span>,
                <span class="hljs-string">'"description": "Battles on chain",'</span>,
                <span class="hljs-string">'"image": "'</span>, generateCharacter(tokenId), <span class="hljs-string">'"'</span>,
            <span class="hljs-string">'}'</span>
        );
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">string</span>(
            <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(
                <span class="hljs-string">"data:application/json;base64,"</span>,
                Base64.encode(dataURI)
            )
        );
    }
    <span class="hljs-comment">// 生成随机数</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">random</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> number</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span></span>)</span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">uint</span>(<span class="hljs-built_in">keccak256</span>(<span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(<span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,<span class="hljs-built_in">block</span>.<span class="hljs-built_in">difficulty</span>,  
        <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>))) <span class="hljs-operator">%</span> number;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mint</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        _tokenIds.increment();
        <span class="hljs-keyword">uint256</span> newItemId <span class="hljs-operator">=</span> _tokenIds.current();
        _safeMint(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, newItemId);
        <span class="hljs-comment">// tokenIdToLevels[newItemId] = 0;</span>
        tokenDetails[newItemId].level <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        tokenDetails[newItemId].speed <span class="hljs-operator">=</span> random(<span class="hljs-number">100</span>);
        tokenDetails[newItemId].strength <span class="hljs-operator">=</span> random(<span class="hljs-number">1000</span>);
        tokenDetails[newItemId].life <span class="hljs-operator">=</span> random(<span class="hljs-number">500</span>);
        _setTokenURI(newItemId, getTokenURI(newItemId));
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">train</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(_exists(tokenId));
        <span class="hljs-built_in">require</span>(ownerOf(tokenId) <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-string">"You must own this token to train it"</span>);
        <span class="hljs-comment">// uint256 currentLevel = tokenIdToLevels[tokenId];</span>
        <span class="hljs-keyword">uint256</span> currentLevel <span class="hljs-operator">=</span> tokenDetails[tokenId].level;
        <span class="hljs-comment">// tokenIdToLevels[tokenId] = currentLevel + 1;</span>
        tokenDetails[tokenId].level <span class="hljs-operator">=</span> currentLevel <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        _setTokenURI(tokenId, getTokenURI(tokenId));
    }
}
</code></pre><p>以上代码，只需要修改下图的3个地方即可（合约的名字，符号，还有NFT显示的内容）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0d6452d017b56b0e3dd144790452b6f3c5b564e0c176f692d33b1e32ebd1b644.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>其他文件的内容都不需要修改，然后运行部署合约命令</p><p><code>npx hardhat run scripts/deploy.js --network mumbai</code></p><p>部署完成后会显示合约地址，验证下合约</p><p><code>npx hardhat verify --network mumbai 你自己部署的合约地址</code></p><p>验证完成后，进去<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mumbai.polygonscan.com/">区块链浏览器</a>mintNFT即可，最终mint成功后，进入测试网opensea查看NFT的信息，如果显示类似下图内容，就表示挑战任务完成了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ca5ee0508150e40846a030dc7f4626891f4804ab8f1431f04e5b501a189e4a02.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Ok，本周的挑战任务任务就是这样了，完成之后别忘记<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alchemyapi.typeform.com/roadtoweekthree">提交表单认证</a>，至于领取NFT，可以直接到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mintkudos.xyz/profile/">mintkudos个人资料页</a>查看。</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[估值102亿融资5.45亿的Alchemy 项目Road to Web3第二周NFT获取教程]]></title>
            <link>https://paragraph.com/@syskeys/102-5-45-alchemy-road-to-web3-nft</link>
            <guid>hnTGPJ4Trh2TzcaWV5EP</guid>
            <pubDate>Fri, 12 Aug 2022 08:57:39 GMT</pubDate>
            <description><![CDATA[炼金术是什么项目？2019年12月，Alchemy完成1500万美元A轮融资，方为Pantera Capital，斯坦福大学，Coinbase，三星等。 2021 年 4 月，Alchemy 以 5.05 亿参投组合、K 5 美元完成8000 万B 轮融资，并加入领英，DFJ 成长全球、Chainsmokers（家族鬼）、演员贾里德莱托和格雷泽。 2021 年 10 月，Alchemy 以 35 亿美元的估值完成2.5 美元的 C 轮融资，由 6z 领的。 2022年2月，Alchemy以102亿美元估值完成2亿美元，光速与银奖。 是一个强大的背景、炼金术、没有安排这样的事情、不做任何事情的团队，而是去刷土狗吗？ 并且，Alchemy 计划将新的资金推广使用，这方面的一些活动现在包括大学，在 3 月 3 日的网络活动中，每周 10 天在网上发布一个极少的信息。任务难度大，对方直接放弃，这样的项目有选择的小空投，绝对是大毛。 以上内容来自@Greta0086 官方教程手把手第二周教程开始：如何制作“给我买杯咖啡”的DeFi dappstep 1 准备工作VScode编辑器（下载安装...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">炼金术是什么项目？</h2><p>2019年12月，Alchemy完成<strong>1500万美元A轮融资</strong>，方为Pantera Capital，斯坦福大学，Coinbase，三星等。</p><p>2021 年 4 月，Alchemy 以 5.05 亿参投组合、K 5 美元完成<strong>8000 万B 轮融资</strong>，并加入领英，DFJ 成长全球、Chainsmokers（家族鬼）、演员贾里德莱托和格雷泽。</p><p>2021 年 10 月，Alchemy 以 35 亿美元的估值完成<strong>2.5 美元的 C 轮融资</strong>，由 6z 领的。</p><p>2022年2月，Alchemy以102亿美元估值完成2亿美元，光速与银奖。</p><p><strong>是一个</strong>强大的背景、炼金术、没有安排这样的事情、不做任何事情的团队，而是去刷土狗吗？</p><p>并且，Alchemy 计划将新的资金推广使用，这方面的一些活动现在包括大学，在 3 月 3 日的网络活动中，每周 10 天在网上发布一个极少的信息。任务难度大，对方直接放弃，这样的项目有选择的小空投，绝对是大毛。</p><p>以上内容来自<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Greta0086">@Greta0086</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.alchemy.com/docs/how-to-build-buy-me-a-coffee-defi-dapp">官方教程</a></p><h2 id="h-defi-dapp" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">手把手第二周教程开始：如何制作“给我买杯咖啡”的DeFi dapp</h2><h2 id="h-step-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 1 准备工作</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://code.visualstudio.com/">VScode编辑器</a>（下载安装包安装编辑器）</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nodejs.org/en/">NodeJs v16.13.1</a> (比此版本高也行，教程使用v16.14.1)</p></li></ul><p>以上都是基础环境的搭建，window直接下载安装即可，其他系统可以搜索解决，这一步没什么难度。</p><h2 id="h-step-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 2 创建工作目录，初始化项目，安装包</h2><p>1.在任意磁盘创建名为<code>BuyMeACoffee-contracts</code>的目录，然后使用vscode打开此目录。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9edc80c48180b795b83e38e954674e7d4e35e2cf10feb8e616f76d46099d3b23.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.点击终端--新建终端</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9765f1d9ed952e635521df1559eefbdeb3218fb7e72e0252f0cf747538890857.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>3.在最下面打开的终端中输入<code>npm init -y</code>初始化项目</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9d8bd42f5bf9718bb9bdec30598af4abb974269917827393b20aa9ab023322c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>4.在终端中输入一下命令安装基础包（命令是一行）</p><p><code>npm install --save-dev hardhat@^2.9.3 @nomiclabs/hardhat-waffle@^2.0.0 ethereum-waffle@^3.0.0 chai@^4.2.0 @nomiclabs/hardhat-ethers@^2.0.0 ethers@^5.0.0 dotenv</code></p><p>我这里执行有很多的警告信息，这些不用理会，是因为版本低有些漏洞，因为是测试所以不用修复，生产环境最好还是要修复下的。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/540a0705cc8ae02f9e5312376f4e0a751158ad3f95d3047755d13bd1320f3c43.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>5.在终端中运行<code>npx hardhat</code>创建一个简单的项目（直接回车确认即可）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/868f456c38c1ca7b0e16e2220219402c358cf58a67a9f80b61e1f1ce841c0ca2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>执行完成后，在左侧可以看到目录结构如图所示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a42224f3cdf430b33535dad38d56c90bbb83af078e65855603f85f8c55de09bc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-3-hardhat" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 3 在hardhat本地网络中测试部署合约</h2><p>1.将<code>contract</code>目录中的<code>Greeter.sol</code>重命名为<code>BuyMeACoffee.sol</code>，并将一下内容复制到此文件中保存。</p><pre data-type="codeBlock" text="//SPDX-License-Identifier: Unlicense



// contracts/BuyMeACoffee.sol

pragma solidity ^0.8.0;



// Switch this to your own contract address once deployed, for bookkeeping!

// Example Contract Address on Goerli: 0xDBa03676a2fBb6711CB652beF5B7416A53c1421D



contract BuyMeACoffee {

    // Event to emit when a Memo is created.

    event NewMemo(

        address indexed from,

        uint256 timestamp,

        string name,

        string message

    );

    

    // Memo struct.

    struct Memo {

        address from;

        uint256 timestamp;

        string name;

        string message;

    }

    

    // Address of contract deployer. Marked payable so that

    // we can withdraw to this address later.

    address payable owner;



    // List of all memos received from coffee purchases.

    Memo[] memos;



    constructor() {

        // Store the address of the deployer as a payable address.

        // When we withdraw funds, we&apos;ll withdraw here.

        owner = payable(msg.sender);

    }



    /**

     * @dev fetches all stored memos

     */

    function getMemos() public view returns (Memo[] memory) {

        return memos;

    }



    /**

     * @dev buy a coffee for owner (sends an ETH tip and leaves a memo)

     * @param _name name of the coffee purchaser

     * @param _message a nice message from the purchaser

     */

    function buyCoffee(string memory _name, string memory _message) public payable {

        // Must accept more than 0 ETH for a coffee.

        require(msg.value &gt; 0, &quot;can&apos;t buy coffee for free!&quot;);



        // Add the memo to storage!

        memos.push(Memo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        ));



        // Emit a NewMemo event with details about the memo.

        emit NewMemo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        );

    }



    /**

     * @dev send the entire balance stored in this contract to the owner

     */

    function withdrawTips() public {

        require(owner.send(address(this).balance));

    }

}
"><code><span class="hljs-comment">//SPDX-License-Identifier: Unlicense</span>



<span class="hljs-comment">// contracts/BuyMeACoffee.sol</span>

<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>



<span class="hljs-comment">// Switch this to your own contract address once deployed, for bookkeeping!</span>

<span class="hljs-comment">// Example Contract Address on Goerli: 0xDBa03676a2fBb6711CB652beF5B7416A53c1421D</span>



<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">BuyMeACoffee</span> </span>{

    <span class="hljs-comment">// Event to emit when a Memo is created.</span>

    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">NewMemo</span>(<span class="hljs-params">

        <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> <span class="hljs-keyword">from</span>,

        <span class="hljs-keyword">uint256</span> timestamp,

        <span class="hljs-keyword">string</span> name,

        <span class="hljs-keyword">string</span> message

    </span>)</span>;

    

    <span class="hljs-comment">// Memo struct.</span>

    <span class="hljs-keyword">struct</span> <span class="hljs-title">Memo</span> {

        <span class="hljs-keyword">address</span> <span class="hljs-keyword">from</span>;

        <span class="hljs-keyword">uint256</span> timestamp;

        <span class="hljs-keyword">string</span> name;

        <span class="hljs-keyword">string</span> message;

    }

    

    <span class="hljs-comment">// Address of contract deployer. Marked payable so that</span>

    <span class="hljs-comment">// we can withdraw to this address later.</span>

    <span class="hljs-keyword">address</span> <span class="hljs-keyword">payable</span> owner;



    <span class="hljs-comment">// List of all memos received from coffee purchases.</span>

    Memo[] memos;



    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{

        <span class="hljs-comment">// Store the address of the deployer as a payable address.</span>

        <span class="hljs-comment">// When we withdraw funds, we'll withdraw here.</span>

        owner <span class="hljs-operator">=</span> <span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);

    }



    <span class="hljs-comment">/**

     * @dev fetches all stored memos

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getMemos</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">Memo[] <span class="hljs-keyword">memory</span></span>) </span>{

        <span class="hljs-keyword">return</span> memos;

    }



    <span class="hljs-comment">/**

     * @dev buy a coffee for owner (sends an ETH tip and leaves a memo)

     * @param _name name of the coffee purchaser

     * @param _message a nice message from the purchaser

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buyCoffee</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _name, <span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _message</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{

        <span class="hljs-comment">// Must accept more than 0 ETH for a coffee.</span>

        <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-number">0</span>, <span class="hljs-string">"can't buy coffee for free!"</span>);



        <span class="hljs-comment">// Add the memo to storage!</span>

        memos.<span class="hljs-built_in">push</span>(Memo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        ));



        <span class="hljs-comment">// Emit a NewMemo event with details about the memo.</span>

        <span class="hljs-keyword">emit</span> NewMemo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        );

    }



    <span class="hljs-comment">/**

     * @dev send the entire balance stored in this contract to the owner

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdrawTips</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{

        <span class="hljs-built_in">require</span>(owner.<span class="hljs-built_in">send</span>(<span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span>));

    }

}
</code></pre><p>2.将<code>scripts</code>目录中的<code>sample-script.js</code>重命名为<code>buy-coffee.js</code>，并将一下内容复制到此文件中保存。</p><pre data-type="codeBlock" text="const hre = require(&quot;hardhat&quot;);



// Returns the Ether balance of a given address.

async function getBalance(address) {

  const balanceBigInt = await hre.waffle.provider.getBalance(address);

  return hre.ethers.utils.formatEther(balanceBigInt);

}



// Logs the Ether balances for a list of addresses.

async function printBalances(addresses) {

  let idx = 0;

  for (const address of addresses) {

    console.log(`Address ${idx} balance: `, await getBalance(address));

    idx ++;

  }

}



// Logs the memos stored on-chain from coffee purchases.

async function printMemos(memos) {

  for (const memo of memos) {

    const timestamp = memo.timestamp;

    const tipper = memo.name;

    const tipperAddress = memo.from;

    const message = memo.message;

    console.log(`At ${timestamp}, ${tipper} (${tipperAddress}) said: &quot;${message}&quot;`);

  }

}



async function main() {

  // Get the example accounts we&apos;ll be working with.

  const [owner, tipper, tipper2, tipper3] = await hre.ethers.getSigners();



  // We get the contract to deploy.

  const BuyMeACoffee = await hre.ethers.getContractFactory(&quot;BuyMeACoffee&quot;);

  const buyMeACoffee = await BuyMeACoffee.deploy();



  // Deploy the contract.

  await buyMeACoffee.deployed();

  console.log(&quot;BuyMeACoffee deployed to:&quot;, buyMeACoffee.address);



  // Check balances before the coffee purchase.

  const addresses = [owner.address, tipper.address, buyMeACoffee.address];

  console.log(&quot;== start ==&quot;);

  await printBalances(addresses);



  // Buy the owner a few coffees.

  const tip = {value: hre.ethers.utils.parseEther(&quot;1&quot;)};

  await buyMeACoffee.connect(tipper).buyCoffee(&quot;Carolina&quot;, &quot;You&apos;re the best!&quot;, tip);

  await buyMeACoffee.connect(tipper2).buyCoffee(&quot;Vitto&quot;, &quot;Amazing teacher&quot;, tip);

  await buyMeACoffee.connect(tipper3).buyCoffee(&quot;Kay&quot;, &quot;I love my Proof of Knowledge&quot;, tip);



  // Check balances after the coffee purchase.

  console.log(&quot;== bought coffee ==&quot;);

  await printBalances(addresses);



  // Withdraw.

  await buyMeACoffee.connect(owner).withdrawTips();



  // Check balances after withdrawal.

  console.log(&quot;== withdrawTips ==&quot;);

  await printBalances(addresses);



  // Check out the memos.

  console.log(&quot;== memos ==&quot;);

  const memos = await buyMeACoffee.getMemos();

  printMemos(memos);

}



// We recommend this pattern to be able to use async/await everywhere

// and properly handle errors.

main()

  .then(() =&gt; process.exit(0))

  .catch((error) =&gt; {

    console.error(error);

    process.exit(1);

  });
"><code>const hre <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);



<span class="hljs-comment">// Returns the Ether balance of a given address.</span>

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBalance</span>(<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{

  const balanceBigInt <span class="hljs-operator">=</span> await hre.waffle.provider.getBalance(<span class="hljs-keyword">address</span>);

  <span class="hljs-keyword">return</span> hre.ethers.utils.formatEther(balanceBigInt);

}



<span class="hljs-comment">// Logs the Ether balances for a list of addresses.</span>

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">printBalances</span>(<span class="hljs-params">addresses</span>) </span>{

  let idx <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

  <span class="hljs-keyword">for</span> (const <span class="hljs-keyword">address</span> of addresses) {

    console.log(`Address ${idx} balance: `, await getBalance(<span class="hljs-keyword">address</span>));

    idx <span class="hljs-operator">+</span><span class="hljs-operator">+</span>;

  }

}



<span class="hljs-comment">// Logs the memos stored on-chain from coffee purchases.</span>

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">printMemos</span>(<span class="hljs-params">memos</span>) </span>{

  <span class="hljs-keyword">for</span> (const memo of memos) {

    const timestamp <span class="hljs-operator">=</span> memo.timestamp;

    const tipper <span class="hljs-operator">=</span> memo.<span class="hljs-built_in">name</span>;

    const tipperAddress <span class="hljs-operator">=</span> memo.from;

    const message <span class="hljs-operator">=</span> memo.message;

    console.log(`At ${timestamp}, ${tipper} (${tipperAddress}) said: <span class="hljs-string">"${message}"</span>`);

  }

}



async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{

  <span class="hljs-comment">// Get the example accounts we'll be working with.</span>

  const [owner, tipper, tipper2, tipper3] <span class="hljs-operator">=</span> await hre.ethers.getSigners();



  <span class="hljs-comment">// We get the contract to deploy.</span>

  const BuyMeACoffee <span class="hljs-operator">=</span> await hre.ethers.getContractFactory(<span class="hljs-string">"BuyMeACoffee"</span>);

  const buyMeACoffee <span class="hljs-operator">=</span> await BuyMeACoffee.deploy();



  <span class="hljs-comment">// Deploy the contract.</span>

  await buyMeACoffee.deployed();

  console.log(<span class="hljs-string">"BuyMeACoffee deployed to:"</span>, buyMeACoffee.<span class="hljs-built_in">address</span>);



  <span class="hljs-comment">// Check balances before the coffee purchase.</span>

  const addresses <span class="hljs-operator">=</span> [owner.<span class="hljs-built_in">address</span>, tipper.<span class="hljs-built_in">address</span>, buyMeACoffee.<span class="hljs-built_in">address</span>];

  console.log(<span class="hljs-string">"== start =="</span>);

  await printBalances(addresses);



  <span class="hljs-comment">// Buy the owner a few coffees.</span>

  const tip <span class="hljs-operator">=</span> {<span class="hljs-built_in">value</span>: hre.ethers.utils.parseEther(<span class="hljs-string">"1"</span>)};

  await buyMeACoffee.connect(tipper).buyCoffee(<span class="hljs-string">"Carolina"</span>, <span class="hljs-string">"You're the best!"</span>, tip);

  await buyMeACoffee.connect(tipper2).buyCoffee(<span class="hljs-string">"Vitto"</span>, <span class="hljs-string">"Amazing teacher"</span>, tip);

  await buyMeACoffee.connect(tipper3).buyCoffee(<span class="hljs-string">"Kay"</span>, <span class="hljs-string">"I love my Proof of Knowledge"</span>, tip);



  <span class="hljs-comment">// Check balances after the coffee purchase.</span>

  console.log(<span class="hljs-string">"== bought coffee =="</span>);

  await printBalances(addresses);



  <span class="hljs-comment">// Withdraw.</span>

  await buyMeACoffee.connect(owner).withdrawTips();



  <span class="hljs-comment">// Check balances after withdrawal.</span>

  console.log(<span class="hljs-string">"== withdrawTips =="</span>);

  await printBalances(addresses);



  <span class="hljs-comment">// Check out the memos.</span>

  console.log(<span class="hljs-string">"== memos =="</span>);

  const memos <span class="hljs-operator">=</span> await buyMeACoffee.getMemos();

  printMemos(memos);

}



<span class="hljs-comment">// We recommend this pattern to be able to use async/await everywhere</span>

<span class="hljs-comment">// and properly handle errors.</span>

main()

  .then(() <span class="hljs-operator">=</span><span class="hljs-operator">></span> process.exit(<span class="hljs-number">0</span>))

  .catch((<span class="hljs-function"><span class="hljs-keyword">error</span>) => </span>{

    console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;

    process.exit(<span class="hljs-number">1</span>);

  });
</code></pre><p>3.运行<code>npx hardhat run scripts/buy-coffee.js</code>命令测试，正常是显示如下输出</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c0f29079e593e6d6a9a12a5e80493cd328561f599a97ad7a00b950bdb9897c71.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>4.部署合约脚本</p><p>在<code>scripts</code>目录中新建<code>deploy.js</code>文件，并将一下内容复制到此文件中保存</p><pre data-type="codeBlock" text="// scripts/deploy.js

const hre = require(&quot;hardhat&quot;);

async function main() {
  // We get the contract to deploy.
  const BuyMeACoffee = await hre.ethers.getContractFactory(&quot;BuyMeACoffee&quot;);
  const buyMeACoffee = await BuyMeACoffee.deploy();

  await buyMeACoffee.deployed();

  console.log(&quot;BuyMeACoffee deployed to:&quot;, buyMeACoffee.address);
}

// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
"><code><span class="hljs-comment">// scripts/deploy.js</span>

const hre <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// We get the contract to deploy.</span>
  const BuyMeACoffee <span class="hljs-operator">=</span> await hre.ethers.getContractFactory(<span class="hljs-string">"BuyMeACoffee"</span>);
  const buyMeACoffee <span class="hljs-operator">=</span> await BuyMeACoffee.deploy();

  await buyMeACoffee.deployed();

  console.log(<span class="hljs-string">"BuyMeACoffee deployed to:"</span>, buyMeACoffee.<span class="hljs-built_in">address</span>);
}

<span class="hljs-comment">// We recommend this pattern to be able to use async/await everywhere</span>
<span class="hljs-comment">// and properly handle errors.</span>
main()
  .then(() <span class="hljs-operator">=</span><span class="hljs-operator">></span> process.exit(<span class="hljs-number">0</span>))
  .catch((<span class="hljs-function"><span class="hljs-keyword">error</span>) => </span>{
    console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
    process.exit(<span class="hljs-number">1</span>);
  });
</code></pre><p>5.运行<code>npx hardhat run scripts/deploy.js</code>命令执行部署脚本v</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2d949ba580774d99e7144343ecfda19c0d2235205ad2199e732313c2fd08add4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>多次执行此命令会发现合约地址是一样的，这是为什么？这是因为当您运行脚本时，Hardhat 工具使用的默认设置是本地开发网络，就在您的计算机上。它快速且具有确定性，非常适合进行一些快速的健全性检查。</p><p>以上就是在本地测试网中使用脚本执行合约的步骤，这主要是为了更加方便的开发，因为在本地网络中，可以模拟各种环境，有利于测试合约。</p><h2 id="h-step-4-alchemy-metamask-buymeacoffesol-goerli" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 4 使用 Alchemy 和 MetaMask 将您的 BuyMeACoffe.sol 智能合约部署到Goerli 测试网</h2><p>1.首先，到 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/">alchemy.com </a>点击“登录”并创建一个新帐户，然后创建一个app，选择Goerli测试网，并将API KEY 和HTTPS链接保存下来。（这一步比较简单，如果不会可以参考<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCD0e394639B2D0b159B41F9dBe0583C33d85e874/egs3DyvaUmAYlQXrufE55p9sJ80coSDDxOfTCR-7e3o">@Greta0086</a>的教程）</p><p>2.打开<code>hardhat.config.js</code>文件并用以下内容替换</p><pre data-type="codeBlock" text="// hardhat.config.js

require(&quot;@nomiclabs/hardhat-ethers&quot;);
require(&quot;@nomiclabs/hardhat-waffle&quot;);
require(&quot;dotenv&quot;).config()

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

const GOERLI_URL = process.env.GOERLI_URL;
const PRIVATE_KEY = process.env.PRIVATE_KEY;

/**
 * @type import(&apos;hardhat/config&apos;).HardhatUserConfig
 */
module.exports = {
  solidity: &quot;0.8.4&quot;,
  networks: {
    goerli: {
      url: GOERLI_URL,
      accounts: [PRIVATE_KEY]
    }
  }
};
"><code><span class="hljs-comment">// hardhat.config.js</span>

<span class="hljs-built_in">require</span>(<span class="hljs-string">"@nomiclabs/hardhat-ethers"</span>);
<span class="hljs-built_in">require</span>(<span class="hljs-string">"@nomiclabs/hardhat-waffle"</span>);
<span class="hljs-built_in">require</span>(<span class="hljs-string">"dotenv"</span>).config()

<span class="hljs-comment">// You need to export an object to set up your config</span>
<span class="hljs-comment">// Go to https://hardhat.org/config/ to learn more</span>

const GOERLI_URL <span class="hljs-operator">=</span> process.env.GOERLI_URL;
const PRIVATE_KEY <span class="hljs-operator">=</span> process.env.PRIVATE_KEY;

<span class="hljs-comment">/**
 * @type import('hardhat/config').HardhatUserConfig
 */</span>
module.exports <span class="hljs-operator">=</span> {
  solidity: <span class="hljs-string">"0.8.4"</span>,
  networks: {
    goerli: {
      url: GOERLI_URL,
      accounts: [PRIVATE_KEY]
    }
  }
};
</code></pre><p>3.创建配置文件</p><p>在<code>BuyMeACoffee-contracts</code>目录创建<code>.env</code>文件，并将以下内容复制保存到此文件中</p><h3 id="h-privatekeygithub" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">警告！！！警告！！！警告！！！PRIVATE_KEY字段中填写的是钱包私钥，请注意一定不要泄露，如果需要把代码提交到github中，请注意删除此字段的内容。</h3><pre data-type="codeBlock" text="GOERLI_URL=https://eth-goerli.g.alchemy.com/v2/xxxxxxxxxxxxxxx

GOERLI_API_KEY=xxxxxxxxxxxxxxx

PRIVATE_KEY=0x********************
"><code>GOERLI_URL<span class="hljs-operator">=</span>https:<span class="hljs-comment">//eth-goerli.g.alchemy.com/v2/xxxxxxxxxxxxxxx</span>

GOERLI_API_KEY<span class="hljs-operator">=</span>xxxxxxxxxxxxxxx

PRIVATE_KEY<span class="hljs-operator">=</span>0x<span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span>
</code></pre><h3 id="h-privatekeygithub" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">警告！！！警告！！！警告！！！PRIVATE_KEY字段中填写的是钱包私钥，请注意一定不要泄露，如果需要把代码提交到github中，请注意删除此字段的内容。</h3><p><code>GOERLI_URL</code>和<code>GOERLI_API_KEY</code>字段的内容就是上一步在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/">alchemy.com </a>创建app后显示内容。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">最后，在警告一次，注意不要把私钥泄露了，特别是不经意间的截图，共享代码等等，我可不希望你看了我的教程之后导致私钥泄露了。</h2><p>最后填写好大概是如下图（我分享出来，是因为教程需要，如果有人要你提供打码后的截图，请不要提供，因为有去除打码的技术，虽然不确定真假，但不得不防）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/15a548737d6d67ac0e13decdca74381e80a21afa59ccc5ed83f0c2842b57b15f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>4.我们需要做的最后一件事是确保你有一些 Goerli ETH。这是一个假以太币，可以让你在 Goerli 测试网络上练习做事，这是一种构建以太坊应用程序的练习区。这样你就不必在以太坊主网上花费真金白银。</p><p>去<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.goerlifaucet.com/">https://www.goerlifaucet.com</a>并使用您的 Alchemy 帐户登录以获得一些免费的测试以太币。</p><p>5. 将合约部署到Goerli 测试网</p><p>运行<code>npx hardhat run scripts/deploy.js --network goerli</code>命令将合约部署到Goerli 测试网，部署成功后会显示出合约的地址</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/692f930667877860e06a4432af97943524b261a6c0e986d89bb9842f20968d4b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>6.创建一个收集朋友打赏代币的脚本</p><p>在<code>scripts</code>目录中新建<code>withdraw.js</code>文件并将以下内容复制保存到此文件中</p><p>注意一定要将<code>contractAddress=&quot;0xDBa03676a2fBb6711CB652beF5B7416A53c1421D&quot;;</code>中的合约地址替换为上一步自己部署的合约地址。</p><pre data-type="codeBlock" text="// scripts/withdraw.js



const hre = require(&quot;hardhat&quot;);

const abi = require(&quot;../artifacts/contracts/BuyMeACoffee.sol/BuyMeACoffee.json&quot;);



async function getBalance(provider, address) {

  const balanceBigInt = await provider.getBalance(address);

  return hre.ethers.utils.formatEther(balanceBigInt);

}



async function main() {

  // Get the contract that has been deployed to Goerli.

  const contractAddress=&quot;0xDBa03676a2fBb6711CB652beF5B7416A53c1421D&quot;;

  const contractABI = abi.abi;



  // Get the node connection and wallet connection.

  const provider = new hre.ethers.providers.AlchemyProvider(&quot;goerli&quot;, process.env.GOERLI_API_KEY);



  // Ensure that signer is the SAME address as the original contract deployer,

  // or else this script will fail with an error.

  const signer = new hre.ethers.Wallet(process.env.PRIVATE_KEY, provider);



  // Instantiate connected contract.

  const buyMeACoffee = new hre.ethers.Contract(contractAddress, contractABI, signer);



  // Check starting balances.

  console.log(&quot;current balance of owner: &quot;, await getBalance(provider, signer.address), &quot;ETH&quot;);

  const contractBalance = await getBalance(provider, buyMeACoffee.address);

  console.log(&quot;current balance of contract: &quot;, await getBalance(provider, buyMeACoffee.address), &quot;ETH&quot;);



  // Withdraw funds if there are funds to withdraw.

  if (contractBalance !== &quot;0.0&quot;) {

    console.log(&quot;withdrawing funds..&quot;)

    const withdrawTxn = await buyMeACoffee.withdrawTips();

    await withdrawTxn.wait();

  } else {

    console.log(&quot;no funds to withdraw!&quot;);

  }



  // Check ending balance.

  console.log(&quot;current balance of owner: &quot;, await getBalance(provider, signer.address), &quot;ETH&quot;);

}



// We recommend this pattern to be able to use async/await everywhere

// and properly handle errors.

main()

  .then(() =&gt; process.exit(0))

  .catch((error) =&gt; {

    console.error(error);

    process.exit(1);

  });
"><code><span class="hljs-comment">// scripts/withdraw.js</span>



const hre <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);

const <span class="hljs-built_in">abi</span> <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"../artifacts/contracts/BuyMeACoffee.sol/BuyMeACoffee.json"</span>);



async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBalance</span>(<span class="hljs-params">provider, <span class="hljs-keyword">address</span></span>) </span>{

  const balanceBigInt <span class="hljs-operator">=</span> await provider.getBalance(<span class="hljs-keyword">address</span>);

  <span class="hljs-keyword">return</span> hre.ethers.utils.formatEther(balanceBigInt);

}



async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{

  <span class="hljs-comment">// Get the contract that has been deployed to Goerli.</span>

  const contractAddress<span class="hljs-operator">=</span><span class="hljs-string">"0xDBa03676a2fBb6711CB652beF5B7416A53c1421D"</span>;

  const contractABI <span class="hljs-operator">=</span> <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">abi</span>;



  <span class="hljs-comment">// Get the node connection and wallet connection.</span>

  const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.providers.AlchemyProvider(<span class="hljs-string">"goerli"</span>, process.env.GOERLI_API_KEY);



  <span class="hljs-comment">// Ensure that signer is the SAME address as the original contract deployer,</span>

  <span class="hljs-comment">// or else this script will fail with an error.</span>

  const signer <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.Wallet(process.env.PRIVATE_KEY, provider);



  <span class="hljs-comment">// Instantiate connected contract.</span>

  const buyMeACoffee <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.Contract(contractAddress, contractABI, signer);



  <span class="hljs-comment">// Check starting balances.</span>

  console.log(<span class="hljs-string">"current balance of owner: "</span>, await getBalance(provider, signer.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);

  const contractBalance <span class="hljs-operator">=</span> await getBalance(provider, buyMeACoffee.<span class="hljs-built_in">address</span>);

  console.log(<span class="hljs-string">"current balance of contract: "</span>, await getBalance(provider, buyMeACoffee.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);



  <span class="hljs-comment">// Withdraw funds if there are funds to withdraw.</span>

  <span class="hljs-keyword">if</span> (contractBalance <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"0.0"</span>) {

    console.log(<span class="hljs-string">"withdrawing funds.."</span>)

    const withdrawTxn <span class="hljs-operator">=</span> await buyMeACoffee.withdrawTips();

    await withdrawTxn.wait();

  } <span class="hljs-keyword">else</span> {

    console.log(<span class="hljs-string">"no funds to withdraw!"</span>);

  }



  <span class="hljs-comment">// Check ending balance.</span>

  console.log(<span class="hljs-string">"current balance of owner: "</span>, await getBalance(provider, signer.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);

}



<span class="hljs-comment">// We recommend this pattern to be able to use async/await everywhere</span>

<span class="hljs-comment">// and properly handle errors.</span>

main()

  .then(() <span class="hljs-operator">=</span><span class="hljs-operator">></span> process.exit(<span class="hljs-number">0</span>))

  .catch((<span class="hljs-function"><span class="hljs-keyword">error</span>) => </span>{

    console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;

    process.exit(<span class="hljs-number">1</span>);

  });
</code></pre><p>运行<code>npx hardhat run scripts/withdraw.js</code>测试下取款脚本</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4a3fdc787988c7edffd8209f4b01a9ff62cc0c22ca540008520efdc4555fa7ec.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>运行成功后，可以看到会显示当前钱包余额，合约地址中的钱包余额，还有是否可以提款。</p><h2 id="h-step-5-replitethersjsbuy-me-a-coffeedapp" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 5 用Replit和Ethers.js构建前端Buy Me A Coffee网站dapp</h2><p>1.首先打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://replit.com/@thatguyintech/BuyMeACoffee-Solidity-DeFi-Tipping-app">官方的测试用例</a>，并点击Fork Repl按钮（如果没有repl账户，直接注册一个就行）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9ad0a9c3863b5db1712f61ee1b25a5e9498a58d781ee4fe9bff3c38b938ab3cc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Fork完成后会直接跳转到个人仓库界面，如下图</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a01e387db027753d35d1654dd4ce8a2b0d98e42e7d86e8bd2d61ef51b8f94dda.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.修改配置信息</p><p>将<code>index.jsx</code>中第10行的合约地址修改为上一步中自己部署的合约地址</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/46f6d81110f4c0478b4a09e465154ecf778206353c29b6a797eafa956bf4a51e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>按住Ctrl + F 搜索<code>Albert</code>内容并将此内容替换为自己的昵称或者其他任何自己想要的名字</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bc8f0d7bc2808f7c1118e145b2c057b79e0962404673eaab01242cf94637215a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>在<code>VScode</code>中找到<code>artifacts/contracts/BuyMeACoffee.sol/BuyMeACoffee.json</code>此文件并将内容复制到<code>repl</code>的<code>utils/BuyMeACoffee.json</code>文件中。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/37841bbb1596a5d59a4d98f819063b8a281f4eb86045593a55550191e45d7f51.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9edc091792c94b928d2851208b5c7294f42c01d787a54826ec104abe068441f9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>只需要将以上3个大方面修改即可，修改完成后，可以点击RUN，进行测试。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/167e42769ed39e6299fedb734ca51afb61b701289f8506cf1975d6d0d451514e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>运行没问题之后，点击Publish发布程序</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2b207e4701d758e555e3f6541e2f6b98c3619f7fcaae9c82b969e43be06b8be7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>这一步主要是填写一些项目信息等等，自由发挥，没有定数</p><p>发布完成后会显示项目的链接，然后可以将此链接发给朋友们求打赏，这是做完<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/ZCjSjZblAF">任务时的链接</a></p><p>当用户打开链接点击run就可以运行程序了（非必做任务，主要为了教学怎么使用repl）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e5c5796cb06996026a32a9c41ffdf1ed46abcc4d43802b4c99503fdc3093b597.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>点击connect wallet按钮连接钱包（非必做任务，主要为了教学怎么使用repl）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/36db52fe87798489be81af8438a7fa6792b38429eb426184f272783c2262baba.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>输入用户名和留言信息，点击发送0.001ETH按钮，就可以从将0.001ETH发送到合约中了（非必做任务，主要为了教学怎么使用repl）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/168cbfda093b1838b0e2d66e6a3e2eefeb2c4d3bea958862c1de5f5aef2c4170.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>以上基本上都是官方教程的翻译和实际操作了，下面就是挑战任务的步骤了，也就是完成挑战任务后才能得到NFT奖励。</p><h2 id="h-step-6" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 6 挑战任务</h2><ol><li><p>允许您的智能合约更新提款地址。</p></li><li><p>允许你的智能合约以 0.003 ETH 购买大咖啡，并在前端网站上创建一个按钮，显示“以 0.003 ETH 购买大咖啡”按钮。</p></li></ol><p>将<code>BuyMeACoffee.sol</code>文件的内容修改为下面的内容</p><pre data-type="codeBlock" text="//SPDX-License-Identifier: Unlicense



// contracts/BuyMeACoffee.sol

pragma solidity ^0.8.0;



// Switch this to your own contract address once deployed, for bookkeeping!

// Example Contract Address on Goerli: 0xDBa03676a2fBb6711CB652beF5B7416A53c1421D





contract BuyMeACoffee {

    // Event to emit when a Memo is created.

    event NewMemo(

        address indexed from,

        uint256 timestamp,

        string name,

        string message

    );

    

    // Memo struct.

    struct Memo {

        address from;

        uint256 timestamp;

        string name;

        string message;

    }

    

    // Address of contract deployer. Marked payable so that

    // we can withdraw to this address later.

    address payable owner;

    address admin;

    // List of all memos received from coffee purchases.

    Memo[] memos;



    constructor() {

        // Store the address of the deployer as a payable address.

        // When we withdraw funds, we&apos;ll withdraw here.

        owner = payable(msg.sender);

    }



    /**

     * @dev fetches all stored memos

     */

    function getMemos() public view returns (Memo[] memory) {

        return memos;

    }



    /**

     * @dev buy a coffee for owner (sends an ETH tip and leaves a memo)

     * @param _name name of the coffee purchaser

     * @param _message a nice message from the purchaser

     */

    function buyCoffee(string memory _name, string memory _message) public payable {

        // Must accept more than 0 ETH for a coffee.

        require(msg.value &gt; 0, &quot;can&apos;t buy coffee for free!&quot;);



        // Add the memo to storage!

        memos.push(Memo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        ));



        // Emit a NewMemo event with details about the memo.

        emit NewMemo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        );

    }



    function buyBigCoffee(string memory _name, string memory _message) public payable {

        // Must accept more than 0 ETH for a coffee.

        require(msg.value &gt; 0, &quot;can&apos;t buy coffee for free!&quot;);



        // Add the memo to storage!

        memos.push(Memo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        ));



        // Emit a NewMemo event with details about the memo.

        emit NewMemo(

            msg.sender,

            block.timestamp,

            _name,

            _message

        );

    }



    /**

     * @dev send the entire balance stored in this contract to the owner

     */

    function withdrawTips() public {

        require(owner.send(address(this).balance));

    }



    // 增加可以提款到其他地址的函数

    address payable a;

    function withDrawToOthers(address payable _a) public{

        require(msg.sender == owner, &quot;You are not the admin&quot;);

        require(_a.send(address(this).balance));

    }

}
"><code><span class="hljs-comment">//SPDX-License-Identifier: Unlicense</span>



<span class="hljs-comment">// contracts/BuyMeACoffee.sol</span>

<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>



<span class="hljs-comment">// Switch this to your own contract address once deployed, for bookkeeping!</span>

<span class="hljs-comment">// Example Contract Address on Goerli: 0xDBa03676a2fBb6711CB652beF5B7416A53c1421D</span>





<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">BuyMeACoffee</span> </span>{

    <span class="hljs-comment">// Event to emit when a Memo is created.</span>

    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">NewMemo</span>(<span class="hljs-params">

        <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> <span class="hljs-keyword">from</span>,

        <span class="hljs-keyword">uint256</span> timestamp,

        <span class="hljs-keyword">string</span> name,

        <span class="hljs-keyword">string</span> message

    </span>)</span>;

    

    <span class="hljs-comment">// Memo struct.</span>

    <span class="hljs-keyword">struct</span> <span class="hljs-title">Memo</span> {

        <span class="hljs-keyword">address</span> <span class="hljs-keyword">from</span>;

        <span class="hljs-keyword">uint256</span> timestamp;

        <span class="hljs-keyword">string</span> name;

        <span class="hljs-keyword">string</span> message;

    }

    

    <span class="hljs-comment">// Address of contract deployer. Marked payable so that</span>

    <span class="hljs-comment">// we can withdraw to this address later.</span>

    <span class="hljs-keyword">address</span> <span class="hljs-keyword">payable</span> owner;

    <span class="hljs-keyword">address</span> admin;

    <span class="hljs-comment">// List of all memos received from coffee purchases.</span>

    Memo[] memos;



    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{

        <span class="hljs-comment">// Store the address of the deployer as a payable address.</span>

        <span class="hljs-comment">// When we withdraw funds, we'll withdraw here.</span>

        owner <span class="hljs-operator">=</span> <span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);

    }



    <span class="hljs-comment">/**

     * @dev fetches all stored memos

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getMemos</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">Memo[] <span class="hljs-keyword">memory</span></span>) </span>{

        <span class="hljs-keyword">return</span> memos;

    }



    <span class="hljs-comment">/**

     * @dev buy a coffee for owner (sends an ETH tip and leaves a memo)

     * @param _name name of the coffee purchaser

     * @param _message a nice message from the purchaser

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buyCoffee</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _name, <span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _message</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{

        <span class="hljs-comment">// Must accept more than 0 ETH for a coffee.</span>

        <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-number">0</span>, <span class="hljs-string">"can't buy coffee for free!"</span>);



        <span class="hljs-comment">// Add the memo to storage!</span>

        memos.<span class="hljs-built_in">push</span>(Memo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        ));



        <span class="hljs-comment">// Emit a NewMemo event with details about the memo.</span>

        <span class="hljs-keyword">emit</span> NewMemo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        );

    }



    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buyBigCoffee</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _name, <span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _message</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{

        <span class="hljs-comment">// Must accept more than 0 ETH for a coffee.</span>

        <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-number">0</span>, <span class="hljs-string">"can't buy coffee for free!"</span>);



        <span class="hljs-comment">// Add the memo to storage!</span>

        memos.<span class="hljs-built_in">push</span>(Memo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        ));



        <span class="hljs-comment">// Emit a NewMemo event with details about the memo.</span>

        <span class="hljs-keyword">emit</span> NewMemo(

            <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>,

            <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>,

            _name,

            _message

        );

    }



    <span class="hljs-comment">/**

     * @dev send the entire balance stored in this contract to the owner

     */</span>

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdrawTips</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{

        <span class="hljs-built_in">require</span>(owner.<span class="hljs-built_in">send</span>(<span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span>));

    }



    <span class="hljs-comment">// 增加可以提款到其他地址的函数</span>

    <span class="hljs-keyword">address</span> <span class="hljs-keyword">payable</span> a;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withDrawToOthers</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">payable</span> _a</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> owner, <span class="hljs-string">"You are not the admin"</span>);

        <span class="hljs-built_in">require</span>(_a.<span class="hljs-built_in">send</span>(<span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span>));

    }

}
</code></pre><p>然后重新部署下合约到测试网<code>npx hardhat run scripts/deploy.js --network goerli</code>部署完成后记录下合约地址，下一步要用。</p><p>将withdraw.js文件的内容修改为一下内容</p><p>这里需要修改2个地方</p><p>contractAddress合约地址改为自己部署的</p><p>buyMeACoffee.withDrawToOthers这个函数后面的钱包地址修改为你自己的其他钱包，也就是来测试能否用其他地址接受合约中的ETH的。</p><pre data-type="codeBlock" text="// scripts/withdraw.js

const hre = require(&quot;hardhat&quot;);
const abi = require(&quot;../artifacts/contracts/BuyMeACoffee.sol/BuyMeACoffee.json&quot;);

async function getBalance(provider, address) {
  const balanceBigInt = await provider.getBalance(address);
  return hre.ethers.utils.formatEther(balanceBigInt);
}

async function main() {
  // Get the contract that has been deployed to Goerli.
  const contractAddress=&quot;0x126aC803A58c3182E1149285C7A26E7DFB7503Dd&quot;; // 教程测试合约
  const contractABI = abi.abi;

  // Get the node connection and wallet connection.
  const provider = new hre.ethers.providers.AlchemyProvider(&quot;goerli&quot;, process.env.GOERLI_API_KEY);

  // Ensure that signer is the SAME address as the original contract deployer,
  // or else this script will fail with an error.
  const signer = new hre.ethers.Wallet(process.env.PRIVATE_KEY, provider);

  // Instantiate connected contract.
  const buyMeACoffee = new hre.ethers.Contract(contractAddress, contractABI, signer);

  // Check starting balances.
  console.log(&quot;current balance of owner: &quot;, await getBalance(provider, signer.address), &quot;ETH&quot;);
  const contractBalance = await getBalance(provider, buyMeACoffee.address);
  console.log(&quot;current balance of contract: &quot;, await getBalance(provider, buyMeACoffee.address), &quot;ETH&quot;);

  // Withdraw funds if there are funds to withdraw.
  if (contractBalance !== &quot;0.0&quot;) {
    console.log(&quot;withdrawing funds..&quot;)
    // const withdrawTxn = await buyMeACoffee.withdrawTips();
    const withdrawTxn = await buyMeACoffee.withDrawToOthers(&quot;0xaF38Fc0E5Dc5E9bc3d61fbd93F24DB5e9DA411c0&quot;);
    await withdrawTxn.wait();
  } else {
    console.log(&quot;no funds to withdraw!&quot;);
  }

  // Check ending balance.
  console.log(&quot;current balance of owner: &quot;, await getBalance(provider, signer.address), &quot;ETH&quot;);
}

// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
"><code><span class="hljs-comment">// scripts/withdraw.js</span>

const hre <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);
const <span class="hljs-built_in">abi</span> <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"../artifacts/contracts/BuyMeACoffee.sol/BuyMeACoffee.json"</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBalance</span>(<span class="hljs-params">provider, <span class="hljs-keyword">address</span></span>) </span>{
  const balanceBigInt <span class="hljs-operator">=</span> await provider.getBalance(<span class="hljs-keyword">address</span>);
  <span class="hljs-keyword">return</span> hre.ethers.utils.formatEther(balanceBigInt);
}

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-comment">// Get the contract that has been deployed to Goerli.</span>
  const contractAddress<span class="hljs-operator">=</span><span class="hljs-string">"0x126aC803A58c3182E1149285C7A26E7DFB7503Dd"</span>; <span class="hljs-comment">// 教程测试合约</span>
  const contractABI <span class="hljs-operator">=</span> <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">abi</span>;

  <span class="hljs-comment">// Get the node connection and wallet connection.</span>
  const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.providers.AlchemyProvider(<span class="hljs-string">"goerli"</span>, process.env.GOERLI_API_KEY);

  <span class="hljs-comment">// Ensure that signer is the SAME address as the original contract deployer,</span>
  <span class="hljs-comment">// or else this script will fail with an error.</span>
  const signer <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.Wallet(process.env.PRIVATE_KEY, provider);

  <span class="hljs-comment">// Instantiate connected contract.</span>
  const buyMeACoffee <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> hre.ethers.Contract(contractAddress, contractABI, signer);

  <span class="hljs-comment">// Check starting balances.</span>
  console.log(<span class="hljs-string">"current balance of owner: "</span>, await getBalance(provider, signer.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);
  const contractBalance <span class="hljs-operator">=</span> await getBalance(provider, buyMeACoffee.<span class="hljs-built_in">address</span>);
  console.log(<span class="hljs-string">"current balance of contract: "</span>, await getBalance(provider, buyMeACoffee.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);

  <span class="hljs-comment">// Withdraw funds if there are funds to withdraw.</span>
  <span class="hljs-keyword">if</span> (contractBalance <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"0.0"</span>) {
    console.log(<span class="hljs-string">"withdrawing funds.."</span>)
    <span class="hljs-comment">// const withdrawTxn = await buyMeACoffee.withdrawTips();</span>
    const withdrawTxn <span class="hljs-operator">=</span> await buyMeACoffee.withDrawToOthers(<span class="hljs-string">"0xaF38Fc0E5Dc5E9bc3d61fbd93F24DB5e9DA411c0"</span>);
    await withdrawTxn.wait();
  } <span class="hljs-keyword">else</span> {
    console.log(<span class="hljs-string">"no funds to withdraw!"</span>);
  }

  <span class="hljs-comment">// Check ending balance.</span>
  console.log(<span class="hljs-string">"current balance of owner: "</span>, await getBalance(provider, signer.<span class="hljs-built_in">address</span>), <span class="hljs-string">"ETH"</span>);
}

<span class="hljs-comment">// We recommend this pattern to be able to use async/await everywhere</span>
<span class="hljs-comment">// and properly handle errors.</span>
main()
  .then(() <span class="hljs-operator">=</span><span class="hljs-operator">></span> process.exit(<span class="hljs-number">0</span>))
  .catch((<span class="hljs-function"><span class="hljs-keyword">error</span>) => </span>{
    console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
    process.exit(<span class="hljs-number">1</span>);
  });
</code></pre><p>然后打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://replit.com/@lopetver/BuyMeACoffee-Syskey?v=1">我的Repl地址</a>，Fork一步，进行修改合同地址和基本信息，等等，这和setp 5的1,2步骤类似，不用演示，修改好之后直接重复，发布即可。</p><p>测试，话自己发布的repl项目，点击链接钱包后，再点击0.001和0.003的按钮进行测试，如果自己在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.etherscan.io/">ethersscan</a>中发送余额，就能看到部署合约地址的，就差不多了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/015cb08c442ca49ebd79669c53492a59cf06ef46505fa6e7a8c8d4fc30f8b60c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>测试提款（标签）有余额</p><p>运行<code>npx hardhat run scripts/withdraw.js</code>名利，正常能提款会显示下图内容</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d470e3c00f5efb00a9aa4598bcfff77dada17d90c80acd014fb4a3ae7b9d87b5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>打开区块链浏览器下，可以查看合约校验器把余额发送到了指定的</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c22ea0138882498ad6add1463a2ec0cfd46c71a2d8c9a30678b0df82bd146e8e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-step-7" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step 7 提交任务</h2><p>点击<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alchemyapi.typeform.com/roadtoweektwo">提交</a>相关要求的任务信息即可</p><h2 id="h-step8-nft" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">step8 获取 NFT。</h2><p>领取<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mintkudos.xyz/claim/611">链接</a>。</p><p>后面几周的任务不出意外的话，我应该写的，可以关注<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/skyMetaverse">twitter</a>更新</p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3446dd4e1ffd643a927525db90599fb121382e656990d9186cbc219eaf48183f.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[TiTi Protocol:TiUSD是如何维持在1$]]></title>
            <link>https://paragraph.com/@syskeys/titi-protocol-tiusd-1</link>
            <guid>AmseLRLGopaYKeytnwpD</guid>
            <pubDate>Thu, 19 May 2022 09:28:49 GMT</pubDate>
            <description><![CDATA[导读本文将通过以下三大方面来分析TiUSD是如何维持1$的：TiUSD核心原理TiUSD实际应用其他相信大家经历过UST的爆雷后，一定对算法稳定币有着莫名的恐惧。不过没关系任何算法稳定币的出现都是为了解决实际问题的，我们需要对其原理尽可能的了解。了解的越多越能加深自己对算法稳定币的理解，这样能使我们更加谨慎的参与项目。 这篇文章是我通过阅读TiTi的官方文档后，总结的个人对TiUSD的理解，因个人能力、理解水平等原因可能会出现错误，请大家多多包涵。不废话了，开始正文。TiUSD核心原理协议可以通过不低于1美元的价格发行TiUSD，也可以通过不高于1美元的价格回购（销毁）TiUSD。 看起来是不是非常简单，但其实其内部有着十分复杂的方式来保证上面这句话成立的。 M-AMM（垄断自动做市商）是调整TiUSD流通数量的核心机制。那么M-AMM是通过什么方式调整来调整TiUSD流通数量？ 首先M-AMM将始终为用户提供价值1美元的 TiUSD 买卖双边订单，当有更多的 TiUSD 购买需求时，TiUSD 价格将推高。这意味着市场对 TiUSD 的需求增加了。此时协议将向市场铸造更多的 T...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">导读</h2><p>本文将通过以下三大方面来分析TiUSD是如何维持1$的：</p><ul><li><p>TiUSD核心原理</p></li><li><p>TiUSD实际应用</p></li><li><p>其他</p></li></ul><p>相信大家经历过UST的爆雷后，一定对算法稳定币有着莫名的恐惧。不过没关系任何算法稳定币的出现都是为了解决实际问题的，我们需要对其原理尽可能的了解。了解的越多越能加深自己对算法稳定币的理解，这样能使我们更加谨慎的参与项目。</p><p>这篇文章是我通过阅读<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/">TiTi的官方文档</a>后，总结的个人对TiUSD的理解，因个人能力、理解水平等原因可能会出现错误，请大家多多包涵。不废话了，开始正文。</p><h2 id="h-tiusd" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiUSD核心原理</h2><p><strong>协议可以通过不低于1美元的价格发行TiUSD，也可以通过不高于1美元的价格回购（销毁）TiUSD。</strong></p><p>看起来是不是非常简单，但其实其内部有着十分复杂的方式来保证上面这句话成立的。</p><p>M-AMM（垄断自动做市商）是调整TiUSD流通数量的核心机制。那么M-AMM是通过什么方式调整来调整TiUSD流通数量？</p><p>首先M-AMM将始终为用户提供价值1美元的 TiUSD 买卖双边订单，当有更多的 TiUSD 购买需求时，TiUSD 价格将推高。这意味着市场对 TiUSD 的需求增加了。此时协议将向市场铸造更多的 TiUSD 代币，增加流通数量以维持 1 TiUSD 等于1美元。相反，当有更多的卖出需求时，TiUSD 价格会下跌，这意味着市场对 TiUSD 的需求正在减少。此时协议将使用之前 TiUSD 发行期间积累的资金来回购（销毁）TiUSD，减小流通量以维持1 TiUSD 等于1美元。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f33772d18e972a1cf573c482f2bde26de54021123739e5eb5878756b690c5307.png" alt="引用官方docs" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">引用官方docs</figcaption></figure><h3 id="h-reorders-1-tiusd-1yuan" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Reorders 机制是保证1 TiUSD 等于1美元的基础</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56ad5c17fae0e8296c9dfcf1ce6d98f979a15f34b89ddbd6881ae3cfb433f7d2.png" alt="引用官方docs" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">引用官方docs</figcaption></figure><p>将图片从左到右添加编号1~6，为了方便表述。</p><p>从编号1可以看到初始状态下1 TiUSD 等于1美元，当有购买行为后，TiUSD 价格上涨，此时1美元将不能兑换1 TiUSD。然后协议通过Reordser机制<strong>mint出 TiUSD</strong>填满编号2的空缺，来到编号3，此时1美元还是可以兑换1 TiUSD。这是当TiUSD价格上涨时的Reordser机制。</p><p>如果TiUSD价格下跌呢？</p><p>从编号4可以看到初始状态下1 TiUSD 等于1美元，当有出售行为后，TiUSD 价格下跌，此时1 TiUSD将不能兑换1美元。接着协议通过Reordser机制回购（销毁）TiUSD，来填满编号5的空缺，此时1美元还是可以兑换1 TiUSD。</p><p>可以看到的是通过这种机制能十分有效的调整1 TiUSD的和1美元锚定。另外通过 ReOrders 机制，TiUSD 的发行和赎回是通过调整 TiUSD 的订单深度和做市商提供的买卖订单来实现的。保证 TiUSD 的通胀和通缩不会影响 TiUSD 在流通中的价值。</p><p>以上基本上就是TiUSD算法稳定的核心原理了，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/">官方文档</a>中有更详细的例子介绍，有需要可以查看。</p><h2 id="h-tiusd" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TiUSD 实际应用</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e3ffc9c7df2e48bd7ca2aebcfeafad308eda90a09d0d3096cb3036849f4c940f.png" alt="引用官方twitter" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">引用官方twitter</figcaption></figure><ul><li><p>资产对冲</p></li><li><p>计息</p></li><li><p>交易媒介</p></li><li><p>Use-To-Earn</p></li></ul><p>对于这些应用场景相信大家都是比较熟悉的，特别是Use-To-Earn（使用挖矿），也就是说只要你用TiUSD交易就可以获得奖励，个人感觉以后的应用场景还是十分广泛的。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">其他</h2><p>文章到这里基本就结束了，可能大家看完TiUSD算法稳定原理后还有比较多的疑问。像、协议能盈利？有没有被攻击的风险？等等。</p><p>其实，这些问题在白皮书还有文档中都有介绍的，但由于篇幅原因，我这里就不介绍了，以后有机会再写文章分析。</p><p>个人感觉，通过TiTi协议的设计还是有很多创新点的，期待测试网开启后，看下测试网中的实际表现如何。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">项目资料</h2><p>Homepage: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://titi.finance/">https://titi.finance/</a></p><p>Twitter: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/TiTiProtocol">https://twitter.com/TiTiProtocol</a></p><p>Discord: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/UpJkJ95Bvb">https://discord.com/invite/fWyj7rwvR3</a></p><p>Medium: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://titiprotocol.medium.com/">https://titiprotocol.medium.com/</a></p><p>Telegram: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/titiprotocol">https://t.me/titiprotocol</a></p><p>Github: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TiTi-Finance/TiTi-Protocol">https://github.com/TiTi-Finance/TiTi-Protocol</a></p><p>Docs: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.titi.finance/">https://docs.titi.finance/</a></p><p>Whitepaper: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docsend.com/view/wbknd84pehb7vxs2">https://docsend.com/view/wbknd84pehb7vxs2</a></p><p>Deck:<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docsend.com/view/v9s26v6r4bb2vf8s">https://docsend.com/view/v9s26v6r4bb2vf8s</a></p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">以上内容不构成投资意见，请做好自己的调研。</h3>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[Hashstack测试网操作教程--有融资]]></title>
            <link>https://paragraph.com/@syskeys/hashstack</link>
            <guid>MrDOuvRM0w5m4KytULre</guid>
            <pubDate>Mon, 16 May 2022 14:12:40 GMT</pubDate>
            <description><![CDATA[一、项目介绍Hashstack 的开放协议是 DeFi 唯一的自主借贷解决方案，可实现高达 1:3 的抵押贷款比率的抵押不足贷款。有什么独特之处Open 是向提供自主抵押不足贷款迈出的有意义的第一步。没有信用评分，不需要锚定。在划分存款、贷款和有效资产利用的推动下，APY 和 APR 更稳定。Open 将桥接其他链的资产，例如以太坊，作为其主要市场的扩展另外作为早期项目，Hashstack成功的融资100W美元，项目还是非常值得期待的。 官方Discord：discord.gg Website: https://hashstack.finance/ Blog: https://blog.hashstack.finance/ Github: https://github.com/0xHashstack Documentation: https://docs.hashstack.finance/ Twitter: https://twitter.com/0xhashstack Medium: https://hashstack.medium.com/ 大家在测试过程中遇到问题了，可以...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">一、项目介绍</h2><p>Hashstack 的开放协议是 DeFi 唯一的自主借贷解决方案，可实现高达 1:3 的抵押贷款比率的抵押不足贷款。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">有什么独特之处</h3><ul><li><p>Open 是向提供自主抵押不足贷款迈出的有意义的第一步。没有信用评分，不需要锚定。</p></li><li><p>在划分存款、贷款和有效资产利用的推动下，APY 和 APR 更稳定。</p></li><li><p>Open 将桥接其他链的资产，例如以太坊，作为其主要市场的扩展</p></li></ul><p>另外作为早期项目，Hashstack成功的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hashstack.medium.com/hashstack-raises-1mn-usd-to-build-defis-first-under-collateralised-lending-solution-ope-962575c79ea9">融资100W美元</a>，项目还是非常值得期待的。</p><p>官方Discord：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/5DKTPn7CZD">discord.gg</a></p><p>Website: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hashstack.finance/">https://hashstack.finance/</a></p><p>Blog: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.hashstack.finance/">https://blog.hashstack.finance/</a></p><p>Github: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/0xHashstack">https://github.com/0xHashstack</a></p><p>Documentation: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.hashstack.finance/">https://docs.hashstack.finance/</a></p><p>Twitter: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xhashstack">https://twitter.com/0xhashstack</a></p><p>Medium: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hashstack.medium.com/">https://hashstack.medium.com/</a></p><p>大家在测试过程中遇到问题了，可以到discord社区中反馈问题。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">二、测试步骤</h2><p>2.1 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org/">chainlist.org</a>添加BSC测试网</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ddab79ee64d69104735b12aa26242bfb34c1b86c63e7229efc5389262b791fb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.2 打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.hashstack.finance/">测试网</a>连接钱包</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/562e1a52f1726903e78c23979b4210d606a68c5a351ed00b768f187a2a71d4f6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.3 领取测试币，4种测试币都领取一遍，BNB测试币可以到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.binance.org/faucet-smart">这里</a>领取</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cad31fa407d917c525838456486abb49db07a33cecdf236b09247d1d99c669eb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.4 存入资产，以USDT为例，其他币种建议都操作下</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2845430ba974078b116cee0908020f7b48924106b6b76ef91bfbbb6b34cb1ade.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.5 添加存款</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d368de1c4de4909c24b57abe722f7a30dc0393a561e2ef50b31cb40ed3353451.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.6 借款</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56a172d4567466c8f635d4d4a390b23ae0d2b9e57bb7369d98ef2ac75ea2abe7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.7 查看自己的借款</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1574bd363a1e753d648d2a766a7d086c4146613c15a2e3f27a58a84fbc8667bb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.8 swap Loan</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2f0220c8c8d1fcf96b1374df5aea3e9a64bba7ae4a124959f29b59f6fb4618de.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.9 swap to Loan</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5b0609ae61c032b3fb5363d9758b6c7c761bad527be5869883f90544cb419d3d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.9.1 添加抵押品</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bceb1451bd66feadb3eee71edd546961737e09a238912a084ee5113629ebbc1a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.9.2 提取贷款</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8556c0522790bc2120bb741b4cf0e1200758f34fd680dd41a2ece279cd36a930.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>2.9.3 偿还贷款</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1ed0c0f83be16814f9eb37ebf1bb6b4b49d5260e68b534c52149cc6a971cb132.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>到此整个测试就结束了，其他的测试币，也都可以体验下测试下。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">三、测试感受</h2><p>整体测试还是十分流畅的，也没有遇到什么BUG。如果大家在测试过程中有遇到什么问题，可以到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/5DKTPn7CZD">官方discord</a>中反馈下。</p><p>更多精彩内容欢迎关注我的twitter：</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[Quicksilver 节点部署教程-超过 50%的 Genesis 供应将被空投给社区]]></title>
            <link>https://paragraph.com/@syskeys/quicksilver-50-genesis</link>
            <guid>FAQ1UpfUnrmBmUCr15Wj</guid>
            <pubDate>Tue, 10 May 2022 03:33:14 GMT</pubDate>
            <description><![CDATA[一、项目信息Web：quicksilver.zone Twitter：quicksilverzone Discord：discord.gg二、硬件要求与任何 Cosmos-SDK 链一样，硬件要求非常适中。4 个 CPU；时钟速度越快越好8GB 内存40GB 磁盘（我们使用 statesync，所以磁盘要求很低）永久的 Internet 连接（在测试网期间流量将最小化；10Mbps 就足够了 - 对于生产，预计至少 100Mbps）三、操作系统（建议）Ubuntu 20.04（server版本）云服务器参考（商家已重新补货）云服务器使用参考之前的教程2G2核80G3T/月$26/年3G2核110G4T/月$33/年4G4核180G5T/月$47.8/年8G4核280G7T/月$89.6/年16G8核570G16T/月$171/年四、手动部署步骤4.1-更新系统并安装必要的组件sudo apt update &#x26;&#x26; sudo apt upgrade --yes sudo apt install make clang pkg-config libssl-dev bu...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">一、项目信息</h2><p><strong>Web：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://quicksilver.zone/"><strong>quicksilver.zone</strong></a></p><p><strong>Twitter：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/quicksilverzone"><strong>quicksilverzone</strong></a></p><p><strong>Discord：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/2MnPK7Kecp"><strong>discord.gg</strong></a></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">二、硬件要求</h2><p>与任何 Cosmos-SDK 链一样，硬件要求非常适中。</p><ul><li><p>4 个 CPU；时钟速度越快越好</p></li><li><p>8GB 内存</p></li><li><p>40GB 磁盘（我们使用 statesync，所以磁盘要求很低）</p></li><li><p>永久的 Internet 连接（在测试网期间流量将最小化；10Mbps 就足够了 - 对于生产，预计至少 100Mbps）</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">三、操作系统（建议）</h2><ul><li><p>Ubuntu 20.04（server版本）</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com/?ref=3999">云服务器参考</a>（商家已重新补货）</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xE2027B05D620c0109e2d8e751A10A2aAda3e490A/YwniPE5RsuUC8MQgpA2b-U-rr8i1oZprYOQa_dRQYHU">云服务器使用参考之前的教程</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com.cn/vps/81/create?token=hashtag%202022%20vps%20-%203&amp;ref=14">2G2核80G3T/月$26/年</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com.cn/vps/82/create?token=hashtag%202022%20vps%20-%204&amp;ref=14">3G2核110G4T/月$33/年</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com.cn/vps/83/create?token=hashtag%202022%20vps%20-%205&amp;ref=14">4G4核180G5T/月$47.8/年</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com.cn/vps/84/create?token=hashtag%202022%20vps%20-%206&amp;ref=14">8G4核280G7T/月$89.6/年</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com.cn/vps/85/create?token=hashtag%202022%20vps%20-%207&amp;ref=14">16G8核570G16T/月$171/年</a></p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">四、手动部署步骤</h2><p>4.1-更新系统并安装必要的组件</p><pre data-type="codeBlock" text="sudo apt update &amp;&amp; sudo apt upgrade --yes
sudo apt install make clang pkg-config libssl-dev build-essential git jq ncdu bsdmainutils -y &lt; &quot;/dev/null&quot;
"><code>sudo apt update <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> sudo apt upgrade <span class="hljs-operator">-</span><span class="hljs-operator">-</span>yes
sudo apt install make clang pkg<span class="hljs-operator">-</span>config libssl<span class="hljs-operator">-</span>dev build<span class="hljs-operator">-</span>essential git jq ncdu bsdmainutils <span class="hljs-operator">-</span>y <span class="hljs-operator">&#x3C;</span> <span class="hljs-string">"/dev/null"</span>
</code></pre><p>4.2-安装golang</p><pre data-type="codeBlock" text="cd $HOME
wget -O go1.18.1.linux-amd64.tar.gz https://golang.org/dl/go1.18.1.linux-amd64.tar.gz
rm -rf /usr/local/go &amp;&amp; tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz &amp;&amp; rm go1.18.1.linux-amd64.tar.gz
echo &apos;export GOROOT=/usr/local/go&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export GOPATH=$HOME/go&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export GO111MODULE=on&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&apos; &gt;&gt; $HOME/.bash_profile &amp;&amp; . $HOME/.bash_profile
go version
"><code>cd $HOME
wget <span class="hljs-operator">-</span>O go1<span class="hljs-number">.18</span><span class="hljs-number">.1</span>.linux-amd64.tar.gz https:<span class="hljs-comment">//golang.org/dl/go1.18.1.linux-amd64.tar.gz</span>
rm <span class="hljs-operator">-</span>rf <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local<span class="hljs-operator">/</span>go <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> tar <span class="hljs-operator">-</span>C <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local <span class="hljs-operator">-</span>xzf go1<span class="hljs-number">.18</span><span class="hljs-number">.1</span>.linux-amd64.tar.gz <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> rm go1<span class="hljs-number">.18</span><span class="hljs-number">.1</span>.linux-amd64.tar.gz
echo <span class="hljs-string">'export GOROOT=/usr/local/go'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export GOPATH=$HOME/go'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export GO111MODULE=on'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> . $HOME/.bash_profile
go version
</code></pre><p>4.3-构建Quicksilver</p><pre data-type="codeBlock" text="git clone https://github.com/ingenuity-build/quicksilver.git --branch v0.1.10
cd quicksilver
make build
chmod +x ./build/quicksilverd &amp;&amp; mv ./build/quicksilverd /usr/local/bin/quicksilverd
"><code>git clone https:<span class="hljs-comment">//github.com/ingenuity-build/quicksilver.git --branch v0.1.10</span>
cd quicksilver
make build
chmod <span class="hljs-operator">+</span>x ./build<span class="hljs-operator">/</span>quicksilverd <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> mv ./build<span class="hljs-operator">/</span>quicksilverd <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local<span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>quicksilverd
</code></pre><p>4.4-设置验证器配置</p><p><strong>记得将$NODENAME替换为自己的节点名字</strong></p><pre data-type="codeBlock" text="cd $HOME
quicksilverd init $NODENAME --chain-id=quicktest-3
quicksilverd config chain-id quicktest-3
quicksilverd config broadcast-mode block
wget -qO $HOME/.quicksilverd/config/genesis.json &quot;https://raw.githubusercontent.com/ingenuity-build/testnets/main/rhapsody/genesis.json&quot;
quicksilverd unsafe-reset-all
"><code>cd $HOME
quicksilverd init $NODENAME <span class="hljs-operator">-</span><span class="hljs-operator">-</span>chain<span class="hljs-operator">-</span>id<span class="hljs-operator">=</span>quicktest<span class="hljs-number">-3</span>
quicksilverd config chain<span class="hljs-operator">-</span>id quicktest<span class="hljs-number">-3</span>
quicksilverd config broadcast<span class="hljs-operator">-</span>mode <span class="hljs-built_in">block</span>
wget <span class="hljs-operator">-</span>qO $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>genesis.json <span class="hljs-string">"https://raw.githubusercontent.com/ingenuity-build/testnets/main/rhapsody/genesis.json"</span>
quicksilverd unsafe<span class="hljs-operator">-</span>reset<span class="hljs-operator">-</span>all
</code></pre><p>4.5-修改seeds和persistent_peers配置</p><pre data-type="codeBlock" text="SEEDS=&quot;dd3460ec11f78b4a7c4336f22a356fe00805ab64@seed.quicktest-1.quicksilver.zone:26656&quot;
sed -i -e &quot;/seeds =/ s/= .*/= \&quot;$SEEDS\&quot;/&quot;  $HOME/.quicksilverd/config/config.toml

PEERS=&quot;8a6c7775df2a891133b994607b93eb92a4a00e2d@95.216.161.177:26656,f9a35b54f3e9e195ed109ac2ca29814b2deddcf9@164.92.212.102:26656,2b739b09350220485b7ecefd5b784307b3127f68@88.198.242.163:26656,259cd5234c4db46de71942ce21890bf25056ad27@65.21.1.224:26656,259cd5234c4db46de71942ce21890bf25056ad27@65.21.1.224:26656,2b739b09350220485b7ecefd5b784307b3127f68@88.198.242.163:26656,f9a35b54f3e9e195ed109ac2ca29814b2deddcf9@164.92.212.102:26656,3938a7bdaae1da2f88a5c0195534052b35e61bcf@49.12.74.226:26656,cf8dbe09fca0cba81ed3b3b46243fabd5c29c164@65.21.143.79:20556&quot;
sed -i.bak -e &quot;s/^persistent_peers *=.*/persistent_peers = \&quot;$PEERS\&quot;/&quot; $HOME/.quicksilverd/config/config.toml
"><code>SEEDS<span class="hljs-operator">=</span><span class="hljs-string">"dd3460ec11f78b4a7c4336f22a356fe00805ab64@seed.quicktest-1.quicksilver.zone:26656"</span>
sed <span class="hljs-operator">-</span>i <span class="hljs-operator">-</span>e <span class="hljs-string">"/seeds =/ s/= .*/= \"$SEEDS\"/"</span>  $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>config.toml

PEERS<span class="hljs-operator">=</span><span class="hljs-string">"8a6c7775df2a891133b994607b93eb92a4a00e2d@95.216.161.177:26656,f9a35b54f3e9e195ed109ac2ca29814b2deddcf9@164.92.212.102:26656,2b739b09350220485b7ecefd5b784307b3127f68@88.198.242.163:26656,259cd5234c4db46de71942ce21890bf25056ad27@65.21.1.224:26656,259cd5234c4db46de71942ce21890bf25056ad27@65.21.1.224:26656,2b739b09350220485b7ecefd5b784307b3127f68@88.198.242.163:26656,f9a35b54f3e9e195ed109ac2ca29814b2deddcf9@164.92.212.102:26656,3938a7bdaae1da2f88a5c0195534052b35e61bcf@49.12.74.226:26656,cf8dbe09fca0cba81ed3b3b46243fabd5c29c164@65.21.143.79:20556"</span>
sed <span class="hljs-operator">-</span>i.bak <span class="hljs-operator">-</span>e <span class="hljs-string">"s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>config.toml
</code></pre><p>4.6-配置pruning</p><pre data-type="codeBlock" text="pruning=&quot;custom&quot;
pruning_keep_recent=&quot;100&quot;
pruning_keep_every=&quot;0&quot;
pruning_interval=&quot;10&quot;

sed -i -e &quot;s/^pruning *=.*/pruning = \&quot;$pruning\&quot;/&quot; $HOME/.quicksilverd/config/app.toml
sed -i -e &quot;s/^pruning-keep-recent *=.*/pruning-keep-recent = \&quot;$pruning_keep_recent\&quot;/&quot; $HOME/.quicksilverd/config/app.toml
sed -i -e &quot;s/^pruning-keep-every *=.*/pruning-keep-every = \&quot;$pruning_keep_every\&quot;/&quot; $HOME/.quicksilverd/config/app.toml
sed -i -e &quot;s/^pruning-interval *=.*/pruning-interval = \&quot;$pruning_interval\&quot;/&quot; $HOME/.quicksilverd/config/app.toml
"><code>pruning<span class="hljs-operator">=</span><span class="hljs-string">"custom"</span>
pruning_keep_recent<span class="hljs-operator">=</span><span class="hljs-string">"100"</span>
pruning_keep_every<span class="hljs-operator">=</span><span class="hljs-string">"0"</span>
pruning_interval<span class="hljs-operator">=</span><span class="hljs-string">"10"</span>

sed <span class="hljs-operator">-</span>i <span class="hljs-operator">-</span>e <span class="hljs-string">"s/^pruning *=.*/pruning = \"$pruning\"/"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>app.toml
sed <span class="hljs-operator">-</span>i <span class="hljs-operator">-</span>e <span class="hljs-string">"s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>app.toml
sed <span class="hljs-operator">-</span>i <span class="hljs-operator">-</span>e <span class="hljs-string">"s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>app.toml
sed <span class="hljs-operator">-</span>i <span class="hljs-operator">-</span>e <span class="hljs-string">"s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>app.toml
</code></pre><p>4.7-修改addrbook</p><pre data-type="codeBlock" text="rm $HOME/.quicksilverd/config/addrbook.json 
wget -q -O $HOME/.quicksilverd/config/addrbook.json https://raw.githubusercontent.com/sourled/addrbook/main/addrbook.json
"><code>rm $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>addrbook.json 
wget <span class="hljs-operator">-</span>q <span class="hljs-operator">-</span>O $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>addrbook.json https:<span class="hljs-comment">//raw.githubusercontent.com/sourled/addrbook/main/addrbook.json</span>
</code></pre><p>4.8-修改同步方式</p><pre data-type="codeBlock" text="SNAP_RPC1=&quot;http://node02.quicktest-1.quicksilver.zone:26657&quot; \
&amp;&amp; SNAP_RPC2=&quot;http://node04.quicktest-1.quicksilver.zone:26657&quot;

LATEST_HEIGHT=$(curl -s $SNAP_RPC2/block | jq -r .result.block.header.height) \
&amp;&amp; BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)) \
&amp;&amp; TRUST_HASH=$(curl -s &quot;$SNAP_RPC2/block?height=$BLOCK_HEIGHT&quot; | jq -r .result.block_id.hash)

sed -i.bak -E &quot;s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\&quot;$SNAP_RPC1,$SNAP_RPC2\&quot;| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\&quot;$TRUST_HASH\&quot;|&quot; $HOME/.quicksilverd/config/config.toml
"><code>SNAP_RPC1<span class="hljs-operator">=</span><span class="hljs-string">"http://node02.quicktest-1.quicksilver.zone:26657"</span> \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> SNAP_RPC2<span class="hljs-operator">=</span><span class="hljs-string">"http://node04.quicktest-1.quicksilver.zone:26657"</span>

LATEST_HEIGHT<span class="hljs-operator">=</span>$(curl <span class="hljs-operator">-</span>s $SNAP_RPC2<span class="hljs-operator">/</span><span class="hljs-built_in">block</span> <span class="hljs-operator">|</span> jq <span class="hljs-operator">-</span>r .result.block.header.height) \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> BLOCK_HEIGHT<span class="hljs-operator">=</span>$((LATEST_HEIGHT <span class="hljs-operator">-</span> <span class="hljs-number">2000</span>)) \
<span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> TRUST_HASH<span class="hljs-operator">=</span>$(curl <span class="hljs-operator">-</span>s <span class="hljs-string">"$SNAP_RPC2/block?height=$BLOCK_HEIGHT"</span> <span class="hljs-operator">|</span> jq <span class="hljs-operator">-</span>r .result.block_id.hash)

sed <span class="hljs-operator">-</span>i.bak <span class="hljs-operator">-</span>E <span class="hljs-string">"s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC1,$SNAP_RPC2\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|"</span> $HOME<span class="hljs-operator">/</span>.quicksilverd/config<span class="hljs-operator">/</span>config.toml
</code></pre><p>4.9-将quicksilverd安装为服务</p><pre data-type="codeBlock" text="sudo tee /etc/systemd/system/quicksilverd.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=Quicksilver
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$(which quicksilverd) start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
"><code>sudo tee <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>systemd<span class="hljs-operator">/</span>system<span class="hljs-operator">/</span>quicksilverd.service <span class="hljs-operator">></span> <span class="hljs-operator">/</span>dev<span class="hljs-operator">/</span>null <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">&#x3C;</span>EOF
[Unit]
Description<span class="hljs-operator">=</span>Quicksilver
After<span class="hljs-operator">=</span>network.target
[Service]
Type<span class="hljs-operator">=</span>simple
User<span class="hljs-operator">=</span>$USER
ExecStart<span class="hljs-operator">=</span>$(which quicksilverd) start
Restart<span class="hljs-operator">=</span>on<span class="hljs-operator">-</span>failure
RestartSec<span class="hljs-operator">=</span><span class="hljs-number">10</span>
LimitNOFILE<span class="hljs-operator">=</span><span class="hljs-number">65535</span>
[Install]
WantedBy<span class="hljs-operator">=</span>multi<span class="hljs-operator">-</span>user.target
EOF
</code></pre><p>4.10-重载并启动quicksilverd</p><pre data-type="codeBlock" text="sudo systemctl daemon-reload
sudo systemctl enable quicksilverd
sudo systemctl start quicksilverd 
"><code>sudo systemctl daemon-reload
sudo systemctl <span class="hljs-built_in">enable</span> quicksilverd
sudo systemctl start quicksilverd 
</code></pre><p>4.10-查看同步日志</p><pre data-type="codeBlock" text="journalctl -u quicksilverd -f
"><code>journalctl <span class="hljs-operator">-</span>u quicksilverd <span class="hljs-operator">-</span>f
</code></pre><p>到此节点同步设置就完成了，观察下日志看同步是否有错。</p><p>4.11-查看同步是否完成</p><pre data-type="codeBlock" text="quicksilverd status 2&gt;&amp;1 | jq .SyncInfo
"><code>quicksilverd status <span class="hljs-number">2</span><span class="hljs-operator">></span><span class="hljs-operator">&#x26;</span><span class="hljs-number">1</span> <span class="hljs-operator">|</span> jq .SyncInfo
</code></pre><p><strong>运行上面的命令后如果输出的是下面的内容就代表同步完成。主要看“catching_up”字段false代表同步完成，true代表正在同步。</strong></p><pre data-type="codeBlock" text="root@quicks:~# quicksilverd status 2&gt;&amp;1 | jq .SyncInfo
{
  &quot;latest_block_hash&quot;: &quot;5C6995D73B7DE49DB95D009B2564DA33ECC18B3AAA7800A9A431057D9B53B45C&quot;,
  &quot;latest_app_hash&quot;: &quot;08DB2173469F11E5EF7CB0C00C68A9062117E98721CCBF35D0FDB57A9FD2035E&quot;,
  &quot;latest_block_height&quot;: &quot;107746&quot;,
  &quot;latest_block_time&quot;: &quot;2022-05-10T02:56:55.681790966Z&quot;,
  &quot;earliest_block_hash&quot;: &quot;3800851F8170E3570DCFC7A0E56E72DA12FB2625B401CA74AEB1A3E6B5BADB15&quot;,
  &quot;earliest_app_hash&quot;: &quot;EA7027069F3E40904A53C0BC6A2BF1EE54FF70E93D84C74DD62D6940387A85EB&quot;,
  &quot;earliest_block_height&quot;: &quot;100501&quot;,
  &quot;earliest_block_time&quot;: &quot;2022-05-09T14:28:04.60522285Z&quot;,
  &quot;catching_up&quot;: false
}
"><code>root@quicks:<span class="hljs-operator">~</span># quicksilverd status <span class="hljs-number">2</span><span class="hljs-operator">></span><span class="hljs-operator">&#x26;</span><span class="hljs-number">1</span> <span class="hljs-operator">|</span> jq .SyncInfo
{
  <span class="hljs-string">"latest_block_hash"</span>: <span class="hljs-string">"5C6995D73B7DE49DB95D009B2564DA33ECC18B3AAA7800A9A431057D9B53B45C"</span>,
  <span class="hljs-string">"latest_app_hash"</span>: <span class="hljs-string">"08DB2173469F11E5EF7CB0C00C68A9062117E98721CCBF35D0FDB57A9FD2035E"</span>,
  <span class="hljs-string">"latest_block_height"</span>: <span class="hljs-string">"107746"</span>,
  <span class="hljs-string">"latest_block_time"</span>: <span class="hljs-string">"2022-05-10T02:56:55.681790966Z"</span>,
  <span class="hljs-string">"earliest_block_hash"</span>: <span class="hljs-string">"3800851F8170E3570DCFC7A0E56E72DA12FB2625B401CA74AEB1A3E6B5BADB15"</span>,
  <span class="hljs-string">"earliest_app_hash"</span>: <span class="hljs-string">"EA7027069F3E40904A53C0BC6A2BF1EE54FF70E93D84C74DD62D6940387A85EB"</span>,
  <span class="hljs-string">"earliest_block_height"</span>: <span class="hljs-string">"100501"</span>,
  <span class="hljs-string">"earliest_block_time"</span>: <span class="hljs-string">"2022-05-09T14:28:04.60522285Z"</span>,
  <span class="hljs-string">"catching_up"</span>: <span class="hljs-literal">false</span>
}
</code></pre><p>4.12-创建QCK钱包并领水</p><p>将**$walletName<strong>替换为自己想要的名字</strong>（不要直接复制运行）**</p><pre data-type="codeBlock" text="quicksilverd keys add $walletName
"><code>quicksilverd <span class="hljs-keyword">keys</span> add $walletName
</code></pre><p>输入两次密码，钱包创建完成后会直接显示<strong>钱包地址还有助记词，记得保存下来。</strong></p><p>到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/2MnPK7Kecp">Discord</a>中#qck-tap频道发送下面的指令领取uqck测试币**（将钱包地址替换为自己的）**</p><pre data-type="codeBlock" text="$request quick1fssluasvna560a7djm3rzeht7k7x66w4j6yu8h rhapsody
"><code><span class="hljs-variable">$request</span> quick1fssluasvna560a7djm3rzeht7k7x66w4j6yu8h rhapsody
</code></pre><p>#atom-tap频道发送下面的指令领取uatom测试币**（直接用主网的钱包地址就可以的）**</p><pre data-type="codeBlock" text="$request cosmos1eu2szhmms0dc07ufe5z7926eqhaksw8r32umhe rhapsody
"><code><span class="hljs-variable">$request</span> cosmos1eu2szhmms0dc07ufe5z7926eqhaksw8r32umhe rhapsody
</code></pre><p><strong>4.13-创建验证器（这一步必须要在同步完成，并且钱包有余额的情况下才可以操作）</strong></p><p>将**$walletName**修改为自己的钱包名字或者钱包地址</p><p>将**$monikername**修改为自己设置的节点名字</p><pre data-type="codeBlock" text="quicksilverd tx staking create-validator \
  --from=$walletName \
  --amount=4900000uqck \
  --moniker=$monikername \
  --chain-id=quicktest-3 \
  --commission-rate=0.1 \
  --commission-max-rate=0.5 \
  --commission-max-change-rate=0.1 \
  --min-self-delegation=1 \
  --fees=200uqck \
  --pubkey=$(quicksilverd tendermint show-validator)
"><code>quicksilverd <span class="hljs-built_in">tx</span> staking create<span class="hljs-operator">-</span>validator \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-keyword">from</span><span class="hljs-operator">=</span>$walletName \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>amount<span class="hljs-operator">=</span>4900000uqck \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>moniker<span class="hljs-operator">=</span>$monikername \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>chain<span class="hljs-operator">-</span>id<span class="hljs-operator">=</span>quicktest<span class="hljs-number">-3</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>commission<span class="hljs-operator">-</span>rate<span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.1</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>commission<span class="hljs-operator">-</span>max<span class="hljs-operator">-</span>rate<span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.5</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>commission<span class="hljs-operator">-</span>max<span class="hljs-operator">-</span>change<span class="hljs-operator">-</span>rate<span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.1</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>min<span class="hljs-operator">-</span><span class="hljs-built_in">self</span><span class="hljs-operator">-</span>delegation<span class="hljs-operator">=</span><span class="hljs-number">1</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>fees<span class="hljs-operator">=</span>200uqck \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>pubkey<span class="hljs-operator">=</span>$(quicksilverd tendermint show<span class="hljs-operator">-</span>validator)
</code></pre><p>完成之后可以到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://quicksilver.explorers.guru/validators">区块链浏览器</a>中查看运行的情况</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e6eb713f4e73ce35182e882dc3f61dc193314e7f32dacc16c22933e8e713f891.png" alt="." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">.</figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">五、可能有用的命令</h2><p>5.1-检查日志</p><pre data-type="codeBlock" text="journalctl -fu quicksilverd -o cat
"><code>journalctl <span class="hljs-operator">-</span>fu quicksilverd <span class="hljs-operator">-</span>o cat
</code></pre><p>5.2-启动服务</p><pre data-type="codeBlock" text="systemctl start quicksilverd
"><code>systemctl <span class="hljs-keyword">start</span> quicksilverd
</code></pre><p>5.3-停止服务</p><pre data-type="codeBlock" text="systemctl stop quicksilverd
"><code>systemctl stop quicksilverd
</code></pre><p>5.4-重启服务</p><pre data-type="codeBlock" text="systemctl restart quicksilverd
"><code></code></pre><p>5.5-节点同步状态</p><pre data-type="codeBlock" text="quicksilverd status 2&gt;&amp;1 | jq .SyncInfo
"><code>quicksilverd status <span class="hljs-number">2</span><span class="hljs-operator">></span><span class="hljs-operator">&#x26;</span><span class="hljs-number">1</span> <span class="hljs-operator">|</span> jq .SyncInfo
</code></pre><p>更多命令请查看<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/kj89/testnet_manuals/tree/main/quicksilver">官方文档</a>。</p><p>到此教程完结，有不懂的可以到官方<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/Hvkh9WcuWt">Dis社区</a>提问。</p><p>更多精彩内容欢迎关注我的twitter：</p><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[DeFund测试网节点部署教程-保姆级]]></title>
            <link>https://paragraph.com/@syskeys/defund</link>
            <guid>Xum6eUgbVSm4WFo6Ymyw</guid>
            <pubDate>Tue, 26 Apr 2022 01:25:40 GMT</pubDate>
            <description><![CDATA[虽然标题说是保姆级，但还是需要一些基础知识的，但基本通过搜索引擎都能解决。参与测试的好处：具体可以查看官方发布的空投介绍：https://medium.com/defund-finance/airdrop-d-c2685d282858准备工作：远程工具：MobaXterm Luinx 服务器：Ubuntu 20.04 （建议全新系统） 需要的硬件配置：8核-32G内存-1T硬盘（但我实际测试可能用不了这么高） 远程工具，看个人喜好，这里推荐MobaXterm，直接从官方下载免费版本安装即可。Linux服务器系统建议选择Ubuntu20.04，这里推荐个云服务商，个人一直在使用，正好最近推出了新活动，4核-4G-180G-5T/月 仅仅$53/年可以说是非常便宜了。 打开云服务商网站点击 Sign up 注册下会员。填写下注册信息，最后点击注册。注册完成并登录后，需要先充值金额才能开通服务器，点击头像-选择Billing接着点击Add-Funds,输入想要充值的金额，最后点击添加就会跳转到支付宝的支付界面，最后支付就可以。这里提供下2种配置的机器，按个人承受能力选择。 4G- 4核...]]></description>
            <content:encoded><![CDATA[<p>虽然标题说是保姆级，但还是需要一些基础知识的，但基本通过搜索引擎都能解决。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">参与测试的好处：</h1><p>具体可以查看官方发布的空投介绍：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/defund-finance/airdrop-d-c2685d282858">https://medium.com/defund-finance/airdrop-d-c2685d282858</a></p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">准备工作：</h1><p>远程工具：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobaxterm.mobatek.net/download.html">MobaXterm</a></p><p>Luinx 服务器：Ubuntu 20.04 （建议全新系统）</p><p>需要的硬件配置：8核-32G内存-1T硬盘（但我实际测试可能用不了这么高）</p><p>远程工具，看个人喜好，这里推荐<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobaxterm.mobatek.net/download.html">MobaXterm</a>，直接从官方下载免费版本安装即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/144ebba3e60adf24ba1583eb02d3985f641d6947417473b6c93054eb87a9037d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Linux服务器系统建议选择Ubuntu20.04，这里推荐个<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com/?ref=3999">云服务商</a>，个人一直在使用，正好最近推出了新活动，4核-4G-180G-5T/月 仅仅$53/年可以说是非常便宜了。</p><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com/?ref=3999">云服务商网站</a>点击 Sign up 注册下会员。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0b40d795ac013ffb0b5a3478a3fe71ded0ef6e2b2d6717e6863e4063f3067c6a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>填写下注册信息，最后点击注册。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/176a39caed11f9eb0ba7f00a37fa7b74c19600625d57c132f055c9f9160f7ba1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>注册完成并登录后，需要先充值金额才能开通服务器，点击头像-选择Billing</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18389cfef2a7d1172e21319e365f2f2d9450625f4e570615109d46b37c695533.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>接着点击Add-Funds,输入想要充值的金额，最后点击添加就会跳转到支付宝的支付界面，最后支付就可以。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b1bc6160d5bdfb54b3a3adf9ce23409d90d7c39b173ad666f328ea48c5e6cd9f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>这里提供下2种配置的机器，按个人承受能力选择。</p><p>4G- 4核-180G-5T/月 — $53/年 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com/vps/83/create?token=hashtag%202022%20vps%20-%205&amp;ref=14">链接地址</a></p><p>8G-4核-280G-7T/月 — $102/年 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.cloudcone.com/vps/84/create?token=hashtag%202022%20vps%20-%206&amp;ref=14">链接地址</a></p><p>我这里以4G-4核的这个配置作为演示。可以看到配置已经是固定好的，无法更改并且价格是53刀每年。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c075acad1de01aefa8e92f2be54e6a65ea56e219d3eb9be54fac2a2d14664774.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>选择系统Ubuntu20.04 ，填写主机名，其他选项默认即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/68bfa1947ff65ac242ef04ee12834218e665ca8ec3fcf0148fce8a229954272a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>填写完成后，直接点击Deploy Server 即可部署了，部署过程中大概需要几分钟，等待部署完成后，可以点击最上方导航栏，点VPS查看已经开通的服务器。我图片打码的位置显示的是服务器IP，复制下来，等下要用到。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d49019cfcbff50d4ab6ed66e6befc58cf3ea51661b6da544fe44ac7a174e9126.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>开通成功后，会将默认密码发送到注册邮箱，如果没有发送密码，可以在管理界面重置服务器密码。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">远程服务器</h1><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobaxterm.mobatek.net/download.html">MobaXterm</a>软件，点击Session按钮，然后点击SSH，输入服务器IP后点击OK。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/653f4034952419d9826fae16a04b291b4b99cc1ffb7a6976d4a316df1ee8644c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>输入root，然后回车，在输入密码（密码是隐藏显示，直接输入，或者粘贴都行）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/79edc20791b3ca66b53a07390493759cbdde7c5572513028a5bca09e75e31bcd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>远程成功后的显示界面应该是下图这样</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/12c910bbb94d3e10f3536f99e9b39e75af2134f7830559c0fc7d10fd179ffd24.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">开始部署验证器节点</h1><p>更新系统和安装必要的组件</p><pre data-type="codeBlock" text="sudo apt update
sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential bsdmainutils git make ncdu gcc git chrony liblz4-tool screen -y &lt; &quot;/dev/null&quot;
"><code>sudo apt update
sudo apt install curl tar wget clang pkg<span class="hljs-operator">-</span>config libssl<span class="hljs-operator">-</span>dev jq build<span class="hljs-operator">-</span>essential bsdmainutils git make ncdu gcc git chrony liblz4<span class="hljs-operator">-</span>tool screen <span class="hljs-operator">-</span>y <span class="hljs-operator">&#x3C;</span> <span class="hljs-string">"/dev/null"</span>
</code></pre><p>安装go</p><pre data-type="codeBlock" text="wget https://golang.org/dl/go1.18.1.linux-amd64.tar.gz
rm -rf /usr/local/go &amp;&amp; sudo tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz &amp;&amp; rm go1.18.1.linux-amd64.tar.gz
echo &apos;export GOROOT=/usr/local/go&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export GOPATH=$HOME/go&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export GO111MODULE=on&apos; &gt;&gt; $HOME/.bash_profile
echo &apos;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&apos; &gt;&gt; $HOME/.bash_profile
. $HOME/.bash_profile
"><code>wget https:<span class="hljs-comment">//golang.org/dl/go1.18.1.linux-amd64.tar.gz</span>
rm <span class="hljs-operator">-</span>rf <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local<span class="hljs-operator">/</span>go <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> sudo tar <span class="hljs-operator">-</span>C <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local <span class="hljs-operator">-</span>xzf go1<span class="hljs-number">.18</span><span class="hljs-number">.1</span>.linux-amd64.tar.gz <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> rm go1<span class="hljs-number">.18</span><span class="hljs-number">.1</span>.linux-amd64.tar.gz
echo <span class="hljs-string">'export GOROOT=/usr/local/go'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export GOPATH=$HOME/go'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export GO111MODULE=on'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
echo <span class="hljs-string">'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin'</span> <span class="hljs-operator">></span><span class="hljs-operator">></span> $HOME<span class="hljs-operator">/</span>.bash_profile
. $HOME/.bash_profile
</code></pre><p>验证是否安装成功</p><pre data-type="codeBlock" text="go version
"><code><span class="hljs-keyword">go</span> version
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/faedea64439c340076f54340cfcedfa4ac19ada2ed0d2dc6f77592ebaecc97cb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>下载官方程序</p><pre data-type="codeBlock" text="git clone https://github.com/defund-labs/defund
"><code>git <span class="hljs-built_in">clone</span> https://github.com/defund-labs/defund
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f7093e7f521e568705f446d3ca0f927e57a4a4855fe95152d6f208f2c17f678a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>编译安装</p><pre data-type="codeBlock" text="cd defund
git checkout v0.0.2
make install
"><code><span class="hljs-built_in">cd</span> defund
git checkout v0.0.2
make install
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0511247de1a4eb53164708f2e5205479ed6ab703ba95cc20e92ddc357eb7b21d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>安装完成后，运行下面的命令，NODE_NAME可以修改为任意的名字，需要记下来。</p><pre data-type="codeBlock" text="defundd config chain-id defund-private-1
defundd init NODE_NAME
"><code>defundd config chain<span class="hljs-operator">-</span>id defund<span class="hljs-operator">-</span><span class="hljs-keyword">private</span><span class="hljs-number">-1</span>
defundd init NODE_NAME
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b1c79648b7d91f56a9762e38b7a736a83e8c93fb2e13a0b118197948dee6af6d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>修改种子文件和对等节点信息</p><pre data-type="codeBlock" text="wget -O $HOME/.defund/config/addrbook.json https://raw.githubusercontent.com/skyMetaverse/seeds/main/addrbook.json
wget -O $HOME/.defund/config/config.toml https://raw.githubusercontent.com/skyMetaverse/seeds/main/config.toml
wget -O $HOME/.defund/config/app.toml https://raw.githubusercontent.com/skyMetaverse/seeds/main/app.toml
"><code>wget <span class="hljs-operator">-</span>O $HOME<span class="hljs-operator">/</span>.defund/config<span class="hljs-operator">/</span>addrbook.json https:<span class="hljs-comment">//raw.githubusercontent.com/skyMetaverse/seeds/main/addrbook.json</span>
wget <span class="hljs-operator">-</span>O $HOME<span class="hljs-operator">/</span>.defund/config<span class="hljs-operator">/</span>config.toml https:<span class="hljs-comment">//raw.githubusercontent.com/skyMetaverse/seeds/main/config.toml</span>
wget <span class="hljs-operator">-</span>O $HOME<span class="hljs-operator">/</span>.defund/config<span class="hljs-operator">/</span>app.toml https:<span class="hljs-comment">//raw.githubusercontent.com/skyMetaverse/seeds/main/app.toml</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a651d1d745e5c6d76df5926062044fad74773ac428f0da00b63ac0d33d604d9b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>下载创世纪文件</p><pre data-type="codeBlock" text="wget -O $HOME/.defund/config/genesis.json https://raw.githubusercontent.com/defund-labs/defund/v0.0.2/testnet/private/genesis.json
"><code>wget <span class="hljs-operator">-</span>O $HOME<span class="hljs-operator">/</span>.defund/config<span class="hljs-operator">/</span>genesis.json https:<span class="hljs-comment">//raw.githubusercontent.com/defund-labs/defund/v0.0.2/testnet/private/genesis.json</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/32ea73b48831fad6f209205378aba4564e9da95edbc4084aae5028bcb43691c0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>检查创世纪文件hash</p><p>sha256sum ~/.defund/config/genesis.json</p><pre data-type="codeBlock" text="sha256sum ~/.defund/config/genesis.json
"><code>sha256sum <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.defund/config<span class="hljs-operator">/</span>genesis.json
</code></pre><p>输出内容必须和下面的一致: 268f625672ed618a844ee32bcfc3a66d51921b12e6a966a0965aa296fb82c032</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c3ab9fe7395ca25ee6534f205b27e948a2ce4fda33aac99607ddaf22e9c08885.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>重置状态</p><pre data-type="codeBlock" text="defundd tendermint unsafe-reset-all
"><code>defundd tendermint unsafe<span class="hljs-operator">-</span>reset<span class="hljs-operator">-</span>all
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aec30eea886bd7e4d8f5b8414bc103754279ce0ac641126910bbcf0983f36ca8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>创建钱包（可以和上面设置的节点名字一致），执行此命令会让输入钱包密码，大于8位即可。 defundd keys add &lt;key-name&gt;
注意保存好助记词信息 <strong>钱包地址还有助记词记录下来，后面的步骤需要用到。</strong> 创建服务文件（以一下内容，需要整块复制并粘贴） sudo tee /lib/systemd/system/defund.service &gt; /dev/null &lt;&lt;EOF
[Unit]
Description=Defund daemon
After=network-online.target
[Service]
User=$USER
ExecStart=${HOME}/go/bin/defundd start
Restart=always
RestartSec=3
LimitNOFILE=infinity
LimitNPROC=infinity
[Install]
WantedBy=multi-user.target
EOF
加载和启动服务 sudo systemctl daemon-reload
systemctl restart systemd-journald
sudo systemctl start defund
查看启动日志 journalctl -f -n 100 -u defund -o cat
可以看到上图日志中出现了很多报错，这个是因为刚开始连接节点，另外也是测试网不稳定等原因，暂时不用管报错信息。 等待一会后就会发现日志变成下图的样子了，这就代表正在同步节点中。关注下height=5358字段和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://defund.explorers.guru/">区块链浏览器</a>中的块高对比，可以看同步进度，**当日志看到的块高和浏览器显示的一致时代表同步完成，**经测试服务器配置越高，同步的越快，我当时4核4G同步了大概8–9小时。 区块链浏览器 领取测试币 将替换为自己的钱包地址，其他不变。 curl -X POST -d &apos;{&quot;address&quot;: &quot;&lt;defund_address&gt;&quot;, &quot;coins&quot;: [&quot;20000000ufetf&quot;]}&apos; http://146.190.235.132:8000
第二种方式领水 打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bitszn.com/faucets.html">水龙头网站</a>输入钱包地址，点击请求。 <strong>以下步骤需要等同步完成后才能执行，不然的话，会报错。</strong> <strong>以下步骤需要等同步完成后才能执行，不然的话，会报错。</strong> <strong>以下步骤需要等同步完成后才能执行，不然的话，会报错。</strong> 创建验证器 --amount= 字段代表质押的测试币数量
--moniker= 名字之类的
--from= 这里填写上面自己创建的钱包地址defundd tx staking create-validator \
  --amount=1000000ufetf \
  --pubkey=$(defundd tendermint show-validator) \
  --moniker=&quot;choose a moniker&quot; \
  --chain-id=defund-private-1 \
  --commission-rate=&quot;0.10&quot; \
  --commission-max-rate=&quot;0.20&quot; \
  --commission-max-change-rate=&quot;0.01&quot; \
  --min-self-delegation=&quot;1000000&quot; \
  --gas=&quot;auto&quot; \
  --from=&lt;key_name&gt;
执行完成后就代表验证器运行成功了。 可以到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://defund.explorers.guru/">这个网站</a>查看是否运行成功。 <strong>可以看到是未活跃，这里主要是因为只有质押排名前100的才是活跃，而截止到教程发布，第100名质押了1914枚测试币。另外官方解释了不管是活跃还是未活跃都是有空投的，并且空投是平均分配的，而不是按照质押数量分配。</strong> 到此教程就完结，有不懂的可以到官方<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/Hvkh9WcuWt">Dis社区</a>提问。 更多精彩内容欢迎关注我的twitter： <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/skyMetaverse">https://twitter.com/skyMetaverse</a></p>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[Hedge激励性测试网教程]]></title>
            <link>https://paragraph.com/@syskeys/hedge</link>
            <guid>enZCMdETGxr87OneQeG1</guid>
            <pubDate>Thu, 21 Apr 2022 08:44:02 GMT</pubDate>
            <description><![CDATA[介绍Hedge 在 Solana 上提供低 (110%) 抵押率和 0% 利息贷款。贷款起源于协议的稳定币USH. USH旨在通过提供随时赎回其基础抵押品的能力，实现完全去中心化并实现 1 美元的软挂钩。 另外项目融资了370W美元，在社区中和团队成员聊天说是激励性测试网，但具体规则未公布，要不要参与测试看个人。测试准备Discord （可以加入官方服务器领取Early Adopter角色，持续到2022/4/24日截止）phantom钱包（没有的可以自行到谷歌应用商店下载安装）开始测试加入官方Discord社区点击表情获取角色将钱包网络切换到开发网络水龙头领取测试SQL 打开水龙头网站，输入钱包地址，点击DEVNET （每次只能领取一个，稍等片刻后还能再领取）打开测试网并点击Open Vault输入存入的sol数量，然后点击Create Vault，在钱包中授权操作交易完成后，在新打开的页面输入任意数量的USH借款，注意观察第二个红框中的数值一定要大于110% 。确认没有问题了后，点击GET USH，然后钱包授权操作。注意这一步有时候会出错，如果你在测试的时候出现下面的报错了，...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">介绍</h2><p>Hedge 在 Solana 上提供低 (110%) 抵押率和 0% 利息贷款。贷款起源于协议的稳定币<code>USH</code>. <code>USH</code>旨在通过提供随时赎回其基础抵押品的能力，实现完全去中心化并实现 1 美元的软挂钩。</p><p>另外项目融资了370W美元，在社区中和团队成员聊天说是激励性测试网，但具体规则未公布，要不要参与测试看个人。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">测试准备</h2><ul><li><p>Discord （可以加入官方服务器领取Early Adopter角色，持续到2022/4/24日截止）</p></li><li><p>phantom钱包（没有的可以自行到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/phantom/bfnaelmomeimhlpmgjnjophhpkkoljpa?hl">谷歌应用商店</a>下载安装）</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">开始测试</h2><p>加入官方<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/kC8xjFnnmM">Discord社区</a>点击表情获取角色</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/037769f70d500b3471088aa24adef5eed13440b6fe60736a8649a1473bfb2a01.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>将钱包网络切换到开发网络</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/16f232d852368a39cbfa879b08ae312bbd01160bdf26f5a54c2243f3c3b480a3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>水龙头领取测试SQL</p><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://solfaucet.com/">水龙头网站</a>，输入钱包地址，点击DEVNET （每次只能领取一个，稍等片刻后还能再领取）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/03911f5f280b07873c876e0b2a82aed3ada46e442c93a33719d0b02af272da92.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.hedge.so/borrow">测试网</a>并点击Open Vault</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8045f9373c1d7a2c900db6787ce2c3de7339e5a647eb03a22525e2bdb9398226.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>输入存入的sol数量，然后点击Create Vault，在钱包中授权操作</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/afb4aa30567a41bdfe26e958e52c61cc78af00dee6a49063ec087280b1269813.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>交易完成后，在新打开的页面输入任意数量的USH借款，注意观察第二个红框中的数值一定要大于110% 。确认没有问题了后，点击GET USH，然后钱包授权操作。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7184b57cc20f1538583548d81c1dd8f3f125a9dd0a9b3ca64f0fdd1dc17463dc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>注意这一步有时候会出错，如果你在测试的时候出现下面的报错了，可以更改借入的USH数量，多次尝试，总会有成功的时候。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fb430935f7fe348cb1f8d624ff005d88938068dc016af42f448fa74879cfc755.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>借款成功后下拉网页，可以看到借款记录。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/65c0650ae66558baf6c066d608978623cf3832f2d9b1dc868e067996426a6b4c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>还款操作，还是在当前页面操作，具体看图。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/192f3d91ecc727fabf176e57e6f0ad985e6da98b8a48b6575ad37cd70231214f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>还款成功后，接着在重复操作下上面的借款操作。</p><h2 id="h-pools" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Pools测试</h2><p>点击导航栏Pools，输入存入的USH数量，不知道自己有多少USH的可以在页面最上面看到。最后点击Deposit。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b21edfea978729f351692964a1147d2f89e994add15cda407f1d45ab2609abd2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>存入成功后，如下图显示具体的奖励。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acf08c49572a86e4b30e45110a7e9235fa1cfd97ab99bdcdea98d462d72509ad.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>等挖了一段时间后，可以关闭并claim奖励。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e65a7e3c5671f4c9c2fd0193e72ad737d728a941dd96c762c7fb178e8d914fd0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>当获取差不多数量的HEDGE后，可以存入质押池。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/84ff7f3865f58cbb5695f02e90278adf59bcda599307c214bfdad860cdd65445.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>质押完成后可以看到即将获得奖励。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b1a944e57a9f6efc1133c464b221644df73d0bc8db8a2533e747b30805ad5126.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Ok,到这里基本上就测试完成了，可以每天定时收收菜什么的。</p><h3 id="h-twitter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">更多精彩内容，请关注我的twitter</h3><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
        <item>
            <title><![CDATA[注册测试网ENS域名教程]]></title>
            <link>https://paragraph.com/@syskeys/ens</link>
            <guid>EoijyMqd8REZtZd0ECyB</guid>
            <pubDate>Tue, 19 Apr 2022 02:10:59 GMT</pubDate>
            <description><![CDATA[为什么要注册测试网ENS域名？因为Kola Labs将在2022年4月21日星期四上午10点00分开启V2测试，并且这次测试不再需要使用主网的域名来mint音乐NFT了，只需要使用测试网的ENS域名就可以参与了。另外官方公告在V1测试中只有81个地址是通过网站铸造的，也是符合要求的。那么也就是说还有419个名额将在V2测试中产生。开始登录您的 Metamask 钱包 > 转到帐户选项 > 设置 > 高级 > 启用显示测试网络 > 将您的网络从以太坊主网切换到 Rinkeby 测试网络选择Rinkeby 测试网络领水打开水龙头网址，输入钱包地址领取测试网ETH（如果之前钱包中有测试ETH，可跳过此步骤）注册打开测试网ENS注册地址点击左侧的connect连接钱包（注意钱包网络一定要是Rinkeby 测试网络）输入任意你想要的名字进行搜索，查看是否可以注册。如果显示是Avilable就代表可注册，如果是Unavilable就是不可以注册的，需要重新搜个可以注册的。直接点击域名，然后会来到注册界面，选择想要注册多少年，下方会显示需要的费用，可以看到注册是非常便宜的。确认没有问题了，点击...]]></description>
            <content:encoded><![CDATA[<h2 id="h-ens" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">为什么要注册测试网ENS域名？</h2><p>因为<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://kola.app/">Kola Labs</a>将在2022年4月21日星期四上午10点00分开启V2测试，并且这次测试不再需要使用主网的域名来mint音乐NFT了，只需要使用测试网的ENS域名就可以参与了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/349faead7d6a4e3033839d7f66ff98fb4d1273901b41ed564d790d969833fbb1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>另外官方公告在V1测试中只有81个地址是通过网站铸造的，也是符合要求的。那么也就是说还有419个名额将在V2测试中产生。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">开始</h2><p>登录您的 Metamask 钱包 &gt; 转到帐户选项 &gt; 设置 &gt; 高级 &gt; 启用显示测试网络 &gt; 将您的网络从以太坊主网切换到 Rinkeby 测试网络</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/97434eb1a1b91386eed16464c28a361b75ea3e924b5e93e6bd03b786dad80a0c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>选择Rinkeby 测试网络</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2552f312d68526be224de507c34487daff0cc11e0494b4f55b930f261888aabb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">领水</h2><p>打开水龙头<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rinkebyfaucet.com/">网址</a>，输入钱包地址领取测试网ETH（如果之前钱包中有测试ETH，可跳过此步骤）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c1c5d95882e19e69484b52a8e55332586b7ce12db302413cdeac75869c77d71.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">注册</h2><p>打开<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.ens.domains/">测试网ENS注册地址</a>点击左侧的connect连接钱包（注意钱包网络一定要是Rinkeby 测试网络）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f791e480158831c760f117480800fd3c0a6b9d5cae87bb4cacc55e4ec71561d5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>输入任意你想要的名字进行搜索，查看是否可以注册。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ca8fa4ca85d5f399c0514ace19062bc28bd8d6c7e3cbe4f26d233b858791af77.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>如果显示是Avilable就代表可注册，如果是Unavilable就是不可以注册的，需要重新搜个可以注册的。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56010daa0fdac04fe90627543298c18c707f577163a50e518a9d6e7bb0089ba0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>直接点击域名，然后会来到注册界面，选择想要注册多少年，下方会显示需要的费用，可以看到注册是非常便宜的。确认没有问题了，点击右下角的请求注册按钮。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/35725c616f2ea65b7908918b6fe04b213eb89ec74b91708789c6c376ed3d286c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>点击请求注册后，会在钱包中授权，然后可以看到下面的页面，这里主要是确认这个域名会不会被其他正在注册中，耐心等候就可以了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0b02bc46d1a2de18d688c6fedd6a3fb9c74842311eae52ac94c5022656e95b2c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>等待完成后，代表可以注册，点击注册按钮，在钱包中确认支付。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/09e8d039ab26661aa2fec8d50e62de63f2b99eaaff4f9a85f5e18698b73bf5d7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>注册完成后，将显示如下页面，点击Set Primary Name，设置下主ENS名称</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ef88e52550e0e630132d93a9f682d8830d52255e0dbee3b1056fdea87fee158.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>选择刚刚注册的ENS域名，然后点击Save，然后钱包授权即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1a82c882091a5f4a1a43645436fe703033987ecef729adb1afe38853db7c8579.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>设置完成之后，可以看到 Primary ENS Name (reverse record): syskeys.eth</p><p>到此测试网ENS域名就注册完成了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/861b6a88aa3ec5b697bb9452e2255f89f50116e49f9892c3b1ec059c007509ae.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>最后，当<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://kola.app/">Kola Labs</a>开启V2测试的时候，我们就可以用刚刚注册的域名来mint音乐NFT了。记得一定要在官网上mint，在合约处mint的NFT是不符合要求的。</p><p>最后祝大家都能抢到前500个音乐NFT。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/t63XNE9GRw">Kola Labs 官方Discord</a></p><h3 id="h-twitter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">更多精彩内容，请关注我的twitter</h3><div data-type="embedly" src="https://twitter.com/skyMetaverse" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/skyMetaverse&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/skyMetaverse?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by skyMetaverse&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>syskeys@newsletter.paragraph.com (syskey)</author>
        </item>
    </channel>
</rss>