<?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>hao</title>
        <link>https://paragraph.com/@ethnbb</link>
        <description>undefined</description>
        <lastBuildDate>Mon, 13 Apr 2026 04:44:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>hao</title>
            <url>https://storage.googleapis.com/papyrus_images/6761637919c3cede3b74f124b01ce3fec00496052738198be03644552de7b903.jpg</url>
            <link>https://paragraph.com/@ethnbb</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[首个去中心化数据仓库 Space and Time 融资 1000 万美元种子轮融资，由 Framework Ventures 领投]]></title>
            <link>https://paragraph.com/@ethnbb/space-and-time-1000-framework-ventures</link>
            <guid>LTft6vQ1fVCRR4aexEB3</guid>
            <pubDate>Tue, 18 Oct 2022 08:26:46 GMT</pubDate>
            <description><![CDATA[官网： https://t.co/Yq2cNSTPmn 官方推特： https://twitter.com/SpaceandTimeDB1：什么是Space and Time？答：为智能合约构建的去中心化数据仓库！ Space and Time (SxT) 正在构建 Web3 的数据基础：完全去中心化和社区运营的混合事务数据库和分析数据仓库。SxT 采用一种称为 SQL 证明的新型加密协议来产生可验证的防篡改结果，允许开发人员以简单的 SQL 格式加入去信任的链上和链下数据，并将结果直接加载到智能合约中。SxT 彻底改变了 Web3 数据仓库，以完全防篡改和区块链锚定的方式为亚秒级查询和企业级分析提供动力。2：Space and Time的优势是什么？答：在无信任网络中保护数据！ 安全性是任何软件的关键组成部分，但解决方案在上市前往往被忽视或开发不足。Web3 的出现既带来了新的安全挑战，也需要更强大的安全保障。因此，必须针对无信任网络重新构想传统的安全解决方案。Space and Time 正在通过分散式身份验证和授权保护的下一代技术彻底改变数据仓库。 验证 证明用户身份的有效...]]></description>
            <content:encoded><![CDATA[<h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cdbb361644acdb2252c8fd855f38b15de91ec28219b61e528a42598179f3eb20.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/Yq2cNSTPmn">https://t.co/Yq2cNSTPmn</a></p><p>官方推特：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/SpaceandTimeDB">https://twitter.com/SpaceandTimeDB</a></p><h3 id="h-1space-and-time" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1：什么是Space and Time？</h3><p>答：为智能合约构建的去中心化数据仓库！</p><p>Space and Time (SxT) 正在构建 Web3 的数据基础：完全去中心化和社区运营的混合事务数据库和分析数据仓库。SxT 采用一种称为 SQL 证明的新型加密协议来产生可验证的防篡改结果，允许开发人员以简单的 SQL 格式加入去信任的链上和链下数据，并将结果直接加载到智能合约中。SxT 彻底改变了 Web3 数据仓库，以完全防篡改和区块链锚定的方式为亚秒级查询和企业级分析提供动力。</p><h3 id="h-2space-and-time" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2：Space and Time的优势是什么？</h3><p>答：在无信任网络中保护数据！</p><p>安全性是任何软件的关键组成部分，但解决方案在上市前往往被忽视或开发不足。Web3 的出现既带来了新的安全挑战，也需要更强大的安全保障。因此，必须针对无信任网络重新构想传统的安全解决方案。Space and Time 正在通过分散式身份验证和授权保护的下一代技术彻底改变数据仓库。</p><p>验证 证明用户身份的有效性是保护任何应用程序的重要第一步。从历史上看，身份验证最常依赖用户凭据——用户名和密码对。虽然简单而优雅，但这个原型解决方案基于信任和集中化，使其与 Web3 的核心对立，并为恶意行为者腾出空间。当用户机密存储在网络上时，网络参与者可以轻松检查、更改甚至拒绝对合法凭证的访问。</p><p>Web2 正在解决经典身份验证解决方案的一些关键缺陷，密码身份验证变得越来越过时，取而代之的是 MFA、生物识别和其他无密码解决方案。但是这些替代方案虽然更安全，但并不尊重 Web3 中必要的去中心化和去信任性。</p><p>为了使网络在没有信任或集中化的情况下安全运行，可以通过数字签名、验证用户身份真实性的数学方案来实现身份验证。这些签名基于公钥加密——一种非对称加密解决方案，消除了用户和网络共享秘密信息的需要。在这个系统中，用户生成一对密钥——一个私钥，一个公钥——私钥由所有者保密，公钥可以自由分发而不会影响安全性。</p><p>基于数字签名的身份验证要求网络请求提供两个参数：正文和签名。请求的主体可以被认为是“消息”（例如“John 请求数据库返回某个表的前 10 行”），而签名作为“证明”（例如“从 John 发送”）。发送者通过使用他们的私钥加密请求正文来生成签名。接收方通过使用发送方的公钥解密签名来验证请求。如果解密的签名和请求正文匹配，则接收者可以确定消息是由已知的发送者创建的，并且在传输过程中没有被更改。这允许在网络上共享信息，而无需依赖中央机构来验证其完整性和真实性。</p><p>授权 一旦用户通过身份验证，网络必须验证他们是否被允许执行请求的操作。最简单的是，可以使用访问控制列表 (ACL) 来实现授权：存储在位串中的一组参数，指定哪些用户被授予访问特定系统资源的权限。尽管 ACL 在 Web2 环境中无缝工作，但它们不能存储在无信任的网络中，因此与 Web3 解决方案的基本原理不兼容。</p><p>基于能力的令牌方案可以支持无信任环境中的授权，其中用户提供一个令牌，该令牌授予对给定资源的权限。在 Space and Time 的情况下，授权依赖于Biscuit，这是一种类似于 JWT 的授权令牌。饼干代币的一些主要特征包括：</p><ul><li><p>**去中心化验证 -**饼干令牌基于公钥密码学</p></li><li><p>**离线衰减 -**可以从现有代币生成新的、更具限制性的代币，而无需第三方参与</p></li><li><p>**策略语言 -**授权策略是用 Datalog（一种逻辑语言）编写的，可以对复杂关系进行简明建模</p></li><li><p>**轻松撤销 -**每个令牌都带有一个唯一的撤销标识符，可用于在发生妥协时拒绝令牌和所有衰减派生</p></li></ul><p>如前所述，通过公钥加密的身份验证要求每个用户生成公钥和私钥，分发公钥并使用私钥签署请求。饼干授权依赖于相同的机制。每个资源都与存储在网络中的唯一公钥和由其创建者存储的唯一私钥相关联。要访问给定的资源，用户必须提供一个用其关联的私钥签名的饼干令牌。然后根据关联的公钥验证令牌签名。</p><p>饼干令牌授权为最终用户提供了相当大的灵活性。当创建新资源时，私钥可用于生成具有任何能力标准的饼干令牌（例如，对表的只读访问、针对单个用户的读写访问、限时访问等。 )，值得注意的是，网络必须只为每个资源存储一个公钥，以支持近乎无限的授权级别。</p><p>时空安全 通过使用数字签名进行身份验证和使用饼干令牌进行授权，Space and Time 保证了一个安全、无需信任和可扩展的安全解决方案。随着全球软件生态系统进一步进入 Web3 世界，dApp 开发人员和大型企业都可以确保与尖端的分散式数据仓库技术进行安全交互。</p><p>开发团队：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2f7a5118ceec32a413391b38bc140bcafa92d94ab54afcf43c52a4727cdf60e9.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/b2fe8644d968340cf60d33b1b3de41c47b9524695c78690e7a7a34cb5f86c534.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>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/cdbb361644acdb2252c8fd855f38b15de91ec28219b61e528a42598179f3eb20.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Arbitrum Nova链的早期项目Rouge门票项目小白教程，明确空投，还能增加链上数据]]></title>
            <link>https://paragraph.com/@ethnbb/arbitrum-nova-rouge</link>
            <guid>pqFJXreL6r9ToWPfw385</guid>
            <pubDate>Mon, 26 Sep 2022 10:36:46 GMT</pubDate>
            <description><![CDATA[教程开始：1：首先Arbitrum Nova链得有手续费，没有的去官网跨， 必须加入Discord https://discord.gg/qEj5b28S https://bridge.arbitrum.io/?l2ChainId=42170 2: 进入官方网站，点击右上角的Launch APP3:点击右上角链接钱包4:往下拉，点击这里的switch arbitrum nove5:步骤如图6：步骤如图，连接和绑定Discord7：找到first-steps频道，输入 / 选择指令，然后发送就得到蓝色身份，有身份会多出3个频道，要这个身份才能做后面的任务，步骤如图8：找到oracle-retreat频道，输入 / 指令选择ask，再选择missionf,然后发送，如图 必须做完任务1才能做任务2，同理任务3也是，做完会得到相应积分，积分以后可以换代币重要提示：严格按照任务要求做，避免失败9：任务1的要求：去官网创建一个活动，活动名字必须包含 L2 开通两个门票，一个是免费门票，一个是标价1USDC门票，然后发布门票就好了10：任务1演示11：任务1做完了，就可以领取任务1的奖励积分...]]></description>
            <content:encoded><![CDATA[<h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">教程开始：</h3><p>1：首先Arbitrum Nova链得有手续费，没有的去官网跨，</p><p>必须加入Discord</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/qEj5b28S">https://discord.gg/qEj5b28S</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bridge.arbitrum.io/?l2ChainId=42170">https://bridge.arbitrum.io/?l2ChainId=42170</a></p><p>2: 进入<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rouge.network/">官方网站</a>，点击右上角的Launch APP</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/305374f59780c26f4ca03a92fe61d78011a8faa073b6d7a7b14632f909a8bb11.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/66b04394e7c5e71b6fdd8c4c3f40891a97170130b442446b4dbe53389ecfa837.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:往下拉，点击这里的switch arbitrum nove</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/145e3b1cd3576ab34f66d80c97eedabf331ea43eb8f74baef2de98958bd8953a.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><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b2c29f24335011c4c70b40d235e018a324b0869d504b0b059d7027a8884fae93.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：步骤如图，连接和绑定Discord</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f1c6df6c6e976ced1d23dfe9f0436625dbc680a30f0ab218117c5ecf2f4e1c55.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/0818b96d4e92c2c2311141e0bd42c2c685dceed75971a6d055c47bea4533ff83.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：找到first-steps频道，输入 / 选择指令，然后发送就得到蓝色身份，有身份会多出3个频道，要这个身份才能做后面的任务，步骤如图</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a70c7b522ea6caac38ff8b2dc809df4be7de9572f0646eaff53645bd3e2745a6.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/7673091c8a892e9411b62a807f8038e350f28692299027a53f2c890c92b97966.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：找到oracle-retreat频道，输入 / 指令选择ask，再选择missionf,然后发送，如图</p><p>必须做完任务1才能做任务2，同理任务3也是，做完会得到相应积分，积分以后可以换代币</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">重要提示：严格按照任务要求做，避免失败</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe7d58c344b9a8a1cacadb975c42635d5dd36b7b4b571259f10433ba476f4e42.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>9：任务1的要求：去官网创建一个活动，活动名字必须包含 L2</p><p>开通两个门票，一个是免费门票，一个是标价1USDC门票，然后发布门票就好了</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/136f0d849e9f48b0482027992907ed29cbc9d7791542acd59ee266bbca3d92a1.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>10：任务1演示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d16cddf74130e9640703398d256e22ac105f7ad4ac26e811d4323107c54562f5.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/16474d28a76a7ea3760c139bc16b3280f46ad30b009d03afd8f007db3e57e6de.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/904989686cbea2e8063ed274fb38c45ed84630e4133e863f6b8136dd46578f28.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/5d38415a6be6398a83fbcdf1a92530c980fef35fc7443af12cfdd219db593fdb.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/5e39a98ba9b4cbbc42034c63bf12d9211d441de5f4d410791cd6cdf6de60e613.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/e4f54bdeb11fd697aa8e2fb722f7f535b279c0e9b1a1626ef8910a58bd747535.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>11：任务1做完了，就可以领取任务1的奖励积分,</p><p>找到oracle-retreat频道，输入 / 指令选择ask,再选择claim发送</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">一般做完任务要几天才能领取积分</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1b330a2f906a7b947210be2c63639f9b507124b55c3a9207456a02f6079b44af.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/ab06d7c47bb67f1cde414f9128933926fbc568e9278303dc32b90cc63fa45afa.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/5bcde86df81aeb67d8b25f72137a44ec4030c1439f7da92885c7ea76d34278e5.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-122" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12:任务2要求是，创建活动，添加免费门票，然后自己用几个小号去领门票，严格按照任务要求，避免失败</h3><h3 id="h-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">任务3要求是，创建活动，添加免费门票，然后自己用几个小号去领，然后小号领的门票二维码给主号扫描，严格按照任务要求，避免失败</h3><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">相当于我买了演唱会门票，去看演唱会的时候要扫描二维码验票，</h3><h3 id="h-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">只要任务1会做了，后面就会做了，我就不再写后面的教程了</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a91ba91849087021a42d17c688eb4594a4ac607defa4cc997c2f7fed56d98bf0.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://twitter.com/qazplm456456">https://twitter.com/qazplm456456</a></p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
        <item>
            <title><![CDATA[Dyson协议测试网]]></title>
            <link>https://paragraph.com/@ethnbb/dyson</link>
            <guid>x36UdX8O9F5v9J7YZE9u</guid>
            <pubDate>Mon, 19 Sep 2022 15:38:18 GMT</pubDate>
            <description><![CDATA[什么是戴森协议？ 简而言之，Dyson 协议的创建考虑了开发人员。关键思想是创建一个能够运行简单脚本的安全区块链，其中表示和界面都是完全分布式的并内置在协议中。换句话说：一切都在链上。 Dyson 区块链上的脚本在 Python 的简单子集（称为 Dyslang）和HTTP（特别是WSGI 协议）上运行，因此您可以使用您已经熟悉的工具编写完全分布式的应用程序或网站。 在底层，Dyson 协议使用Cosmos SDK及其跨链通信协议，因此它与 Cosmos 生态系统完全互操作。 我们有很多令人兴奋的项目，我们将在此过程中寻找明星开发人员、beta 测试人员和验证人员。我们这个项目的主要目标之一是奖励早期采用者和开发人员，所以我们希望您能加入我们！包括对早期采用者/测试者的奖励！ 官方推特：https://twitter.com/DysonProtocol 官方教程：https://medium.com/@dysonprotocol正文:首先打开测试网https://dys.dysonvalidator.com/连接KepIr钱包，点击批准会自动添加Dyson链然后复制钱包地址去DC...]]></description>
            <content:encoded><![CDATA[<p><strong>什么是戴森协议？</strong></p><p>简而言之，Dyson 协议的创建考虑了开发人员。关键思想是创建一个能够运行简单脚本的安全区块链，其中<em>表示和界面都是完全分布式的并内置在协议</em>中。换句话说：<em>一切都在链上。</em></p><p>Dyson 区块链上的脚本在 Python 的简单子集（称为 Dyslang）和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview">HTTP</a>（特别是<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.fullstackpython.com/wsgi-servers.html">WSGI 协议</a>）上运行，因此您可以使用您已经熟悉的工具编写完全分布式的应用程序或网站。</p><p>在底层，Dyson 协议使用<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.cosmos.network/">Cosmos SDK</a>及其<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.cosmos.network/master/ibc/overview.html">跨链通信协议</a>，因此它与 Cosmos 生态系统完全互操作。</p><p>我们有很多令人兴奋的项目，我们将在此过程中寻找明星开发人员、beta 测试人员和验证人员。我们这个项目的主要目标之一是奖励早期采用者和开发人员，所以我们希望您能加入我们！包括对早期采用者/测试者的奖励！</p><p>官方推特：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/DysonProtocol">https://twitter.com/DysonProtocol</a></p><p>官方教程：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/@dysonprotocol">https://medium.com/@dysonprotocol</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://dys.dysonvalidator.com/">https://dys.dysonvalidator.com/</a>连接KepIr钱包，点击批准会自动添加Dyson链</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b31023822c93109b2f4b669179d82cffe88b4c535d1e4ad6f06a5e54ec9bea4a.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-dc-httpsdiscordgg87rwhnja-testnet-airdrop" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">然后复制钱包地址去DC <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/87rwhNJA">https://discord.gg/87rwhNJA</a> 的testnet-airdrop频道领水，一分钟左右就到账了</h3><p>接下来开始测试:</p><h3 id="h-dyson" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">一：如何制作您的第一个基本 Dyson 协议功能</h3><p>1，单击您的脚本按钮</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5b6207ccd7865147dfc0481f7d975bab04489b2ea9f8391677e36bfdf5d8ec0a.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：在编辑器中输入以下函数，然后点击save保存后钱包批准</p><pre data-type="codeBlock" text="def my_function():
    print(&apos;hello world&apos;)
    return 123
"><code><span class="hljs-keyword">def</span> <span class="hljs-title function_">my_function</span>():
    <span class="hljs-built_in">print</span>(<span class="hljs-string">'hello world'</span>)
    <span class="hljs-keyword">return</span> <span class="hljs-number">123</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/45517f078f0c05275c2e15f10675674c3713c6816c5f42e7fc1294b5d4b01d76.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/0d0457e13709ec038fb8c5c2f62ff1b01d444fdcd4a500073224b226d5adeb5c.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: 点击Query my_function</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f3bffed461ae6fac3bd00420a5d0cfe8f10a8f088c36d8255857ee8c6efcdad7.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：再点击Run my_function然后钱包批准</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0c1e11b130f22d58c4d8975aab268aaf787e7519daf80702e477197cbe8ea10a.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-dyson" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">二：如何在 Dyson 协议上更新函数和接受参数</h3><p>1: 把之前的代码替换成以下代码，点击save保存钱包批准，然后my_name框里输入你要的名字，点击 Query say_hello，下面会显示出你的名字</p><pre data-type="codeBlock" text="def say_hello(my_name: str):
    print(&apos;hello &apos;+ my_name) 
    return 123
"><code><span class="hljs-keyword">def</span> <span class="hljs-title function_">say_hello</span>(<span class="hljs-params">my_name: <span class="hljs-built_in">str</span></span>):
    <span class="hljs-built_in">print</span>(<span class="hljs-string">'hello '</span>+ my_name) 
    <span class="hljs-keyword">return</span> <span class="hljs-number">123</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/61f4c55709bd44101bdc4aab4f85226dfabddbeef517b891c4564b6c173fba36.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>1：步骤如图，第二步是输入dyson，第四步是你的钱包地址，第五步是钱包地址后面加/my_greeting 第六步是输入this is a test</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fcb2bdc7be23dbc0e1a8c7392715535912fdd1680fce3dad0e50b2abfc97f1b0.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：重新开一个测试网页，步骤如图，搜索“dyson”，第四步是你的地址加/my_greeting</p><p>第五步的运行结果和你填写的一致就对了</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/13118b50cebe94f602654c49f83c4f9be1d6a3b8b396a1d51b20a50561d1e208.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><pre data-type="codeBlock" text="from dys import _chain, get_script_address
def say_hello(my_name: str):
    data = &quot;hello &quot; + my_name
    print(data) # to help debug
    return _chain(
        &quot;dyson/sendMsgCreateStorage&quot;,
        creator=get_script_address(),
        index=get_script_address() + &quot;/my_greeting&quot;,
        data=data,
        force=True,
    )
"><code>from dys import _chain, get_script_address
def say_hello(my_name: str):
    <span class="hljs-attr">data</span> = <span class="hljs-string">"hello "</span> + my_name
    print(data) <span class="hljs-comment"># to help debug</span>
    return _chain(
        "dyson/sendMsgCreateStorage",
        <span class="hljs-attr">creator</span>=get_script_address(),
        <span class="hljs-attr">index</span>=get_script_address() + <span class="hljs-string">"/my_greeting"</span>,
        <span class="hljs-attr">data</span>=data,
        <span class="hljs-attr">force</span>=<span class="hljs-literal">True</span>,
    )
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0f866e395949bd025c1904015f6390a238eeaa5431cffaeed2ab6930b2e18344.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-dyson" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">四：如何在 Dyson 协议上读取存储和渲染网站</h3><p>1：将第1行代码替换成以下第一个代码，然后在第4行下面添加另一个代码，保存，批准</p><pre data-type="codeBlock" text="from dys import _chain, get_script_address, get_caller

assert get_script_address() == get_caller(), &quot;permission denied&quot;
"><code><span class="hljs-keyword">from</span> dys <span class="hljs-keyword">import</span> <span class="hljs-title">_chain</span>, <span class="hljs-title">get_script_address</span>, <span class="hljs-title">get_caller</span>

<span class="hljs-title"><span class="hljs-built_in">assert</span></span> <span class="hljs-title">get_script_address</span>() <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-title">get_caller</span>(), <span class="hljs-string">"permission denied"</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8ad8c1546adc29991d70bfde2ad13b153627d14082f8e9805d6fc73abc6a40d4.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><pre data-type="codeBlock" text="def get_greeting(): 
    return _chain( 
        &quot;dyson/QueryStorage&quot;, 
        index=get_script_address() + &quot;/my_greeting&quot;, 
    )
"><code>def <span class="hljs-built_in">get_greeting</span>(): 
    return <span class="hljs-built_in">_chain</span>( 
        <span class="hljs-string">"dyson/QueryStorage"</span>, 
        index=<span class="hljs-built_in">get_script_address</span>() + <span class="hljs-string">"/my_greeting"</span>, 
    )
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/37d319fec5e5a49e316460cb26411447397d82d2568d93ec8c0910bc038cd221.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><p>https://你的钱包地址.dysonvalidator.com 如图显示</p><pre data-type="codeBlock" text="def application(environ, start_response): 
    start_response(&quot;200 ok&quot;, [(&quot;Content-type&quot;, &quot;text/plain&quot;)]) 
    return [&quot;Test WSGI website says: hello world&quot;.encode()]
"><code>def <span class="hljs-built_in">application</span>(environ, start_response): 
    <span class="hljs-built_in">start_response</span>(<span class="hljs-string">"200 ok"</span>, [(<span class="hljs-string">"Content-type"</span>, <span class="hljs-string">"text/plain"</span>)]) 
    return [<span class="hljs-string">"Test WSGI website says: hello world"</span>.<span class="hljs-built_in">encode</span>()]
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3f2cada4956895673658e3ae443a8f8adb05796dce3a35b114801b533f4b5f03.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><pre data-type="codeBlock" text="greeting_data = get_greeting()[&quot;result&quot;][&quot;storage&quot;][&quot;data&quot;] 
    return [greeting_data.encode()]
"><code>greeting_data = <span class="hljs-built_in">get_greeting</span>()<span class="hljs-selector-attr">[<span class="hljs-string">"result"</span>]</span><span class="hljs-selector-attr">[<span class="hljs-string">"storage"</span>]</span><span class="hljs-selector-attr">[<span class="hljs-string">"data"</span>]</span> 
    return <span class="hljs-selector-attr">[greeting_data.encode()]</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0b6ac9320fd2bb36e245075f983caf42cbf1f525a1f0ac258fa1b739fae371bf.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-dyson-html-css" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">五：如何在 Dyson 协议上使用 HTML 和 CSS 更改网站的外观</h3><p>1：将代码全部替换成以下代码，保存，批准，然后点击左侧的Query render_page按钮，然后刷新你的网站，会发现多了一层颜色就对了！如图</p><p>最后这步要添加很多代码，麻烦，我直接用了完整代码了，想看的可以去看官方教程</p><pre data-type="codeBlock" text="import html
from string import Template
from dys import _chain, get_script_address, get_caller
def say_hello(my_name: str):
    assert get_script_address() == get_caller(), &quot;permission denied&quot;
    data = &quot;hello &quot; + my_name
    print(data)  # to help debug
    return _chain(
        &quot;dyson/sendMsgCreateStorage&quot;,
        creator=get_script_address(),
        index=get_script_address() + &quot;/my_greeting&quot;,
        data=data,
        force=True,
    )
def get_greeting():
    return _chain(
        &quot;dyson/QueryStorage&quot;,
        index=get_script_address() + &quot;/my_greeting&quot;,
    )
def render_page(body:str):
    return Template(
        &quot;&quot;&quot;&lt;!doctype html&gt;
    &lt;html&gt;
        &lt;head&gt;
            &lt;title&gt;Hello World&lt;/title&gt;
            &lt;meta charset=utf-8&gt;
            &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
            &lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot; integrity=&quot;sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx&quot; crossorigin=&quot;anonymous&quot;&gt;
            &lt;style&gt;
                .heading {
                    text-shadow: #FC0 1px 0 10px;
                }
            &lt;/style&gt;
        &lt;/head&gt;
        &lt;body&gt;
            &lt;div class=&quot;container&quot;&gt;
                &lt;h1 class=&quot;heading&quot;&gt;Greeting!&lt;/h1&gt;
                &lt;p&gt;$body&lt;/p&gt;
            &lt;/div&gt;
        &lt;/body&gt;
    &lt;/html&gt;
    &quot;&quot;&quot;
    ).safe_substitute(body=body)
def application(environ, start_response):
    start_response(&quot;200 ok&quot;, [(&quot;Content-type&quot;, &quot;text/html&quot;)])
    greeting_data = get_greeting()[&quot;result&quot;][&quot;storage&quot;][&quot;data&quot;]
    return [
        render_page(html.escape(greeting_data)).encode(),
    ]
"><code><span class="hljs-keyword">import</span> <span class="hljs-title">html</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title"><span class="hljs-keyword">string</span></span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">Template</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">dys</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">_chain</span>, <span class="hljs-title">get_script_address</span>, <span class="hljs-title">get_caller</span>
<span class="hljs-title">def</span> <span class="hljs-title">say_hello</span>(<span class="hljs-title">my_name</span>: <span class="hljs-title">str</span>):
    <span class="hljs-title"><span class="hljs-built_in">assert</span></span> <span class="hljs-title">get_script_address</span>() <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-title">get_caller</span>(), <span class="hljs-string">"permission denied"</span>
    <span class="hljs-title">data</span> <span class="hljs-operator">=</span> <span class="hljs-string">"hello "</span> <span class="hljs-operator">+</span> <span class="hljs-title">my_name</span>
    <span class="hljs-title">print</span>(<span class="hljs-title">data</span>)  # <span class="hljs-title">to</span> <span class="hljs-title">help</span> <span class="hljs-title">debug</span>
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">_chain</span>(
        <span class="hljs-string">"dyson/sendMsgCreateStorage"</span>,
        <span class="hljs-title">creator</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>(),
        <span class="hljs-title">index</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>() <span class="hljs-operator">+</span> <span class="hljs-string">"/my_greeting"</span>,
        <span class="hljs-title">data</span><span class="hljs-operator">=</span><span class="hljs-title">data</span>,
        <span class="hljs-title">force</span><span class="hljs-operator">=</span><span class="hljs-title">True</span>,
    )
<span class="hljs-title">def</span> <span class="hljs-title">get_greeting</span>():
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">_chain</span>(
        <span class="hljs-string">"dyson/QueryStorage"</span>,
        <span class="hljs-title">index</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>() <span class="hljs-operator">+</span> <span class="hljs-string">"/my_greeting"</span>,
    )
<span class="hljs-title">def</span> <span class="hljs-title">render_page</span>(<span class="hljs-title">body</span>:<span class="hljs-title">str</span>):
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">Template</span>(
        <span class="hljs-string">""</span><span class="hljs-string">"&#x3C;!doctype html>
    &#x3C;html>
        &#x3C;head>
            &#x3C;title>Hello World&#x3C;/title>
            &#x3C;meta charset=utf-8>
            &#x3C;meta name="</span><span class="hljs-title">viewport</span><span class="hljs-string">" content="</span><span class="hljs-title">width</span><span class="hljs-operator">=</span><span class="hljs-title">device</span><span class="hljs-operator">-</span><span class="hljs-title">width</span>, <span class="hljs-title">initial</span><span class="hljs-operator">-</span><span class="hljs-title">scale</span><span class="hljs-operator">=</span>1<span class="hljs-string">">
            &#x3C;link href="</span><span class="hljs-title">https</span>:<span class="hljs-comment">//cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"></span>
            <span class="hljs-operator">&#x3C;</span><span class="hljs-title">style</span><span class="hljs-operator">></span>
                .<span class="hljs-title">heading</span> {
                    <span class="hljs-title">text</span><span class="hljs-operator">-</span><span class="hljs-title">shadow</span>: #<span class="hljs-title">FC0</span> 1<span class="hljs-title">px</span> 0 10<span class="hljs-title">px</span>;
                }
            <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>style<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span>body<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>h1 class<span class="hljs-operator">=</span><span class="hljs-string">"heading"</span><span class="hljs-operator">></span>Greeting<span class="hljs-operator">!</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>$body<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>html<span class="hljs-operator">></span>
    <span class="hljs-string">""</span><span class="hljs-string">"
    ).safe_substitute(body=body)
def application(environ, start_response):
    start_response("</span><span class="hljs-number">200</span> ok<span class="hljs-string">", [("</span>Content<span class="hljs-operator">-</span><span class="hljs-keyword">type</span><span class="hljs-string">", "</span>text<span class="hljs-operator">/</span>html<span class="hljs-string">")])
    greeting_data = get_greeting()["</span>result<span class="hljs-string">"]["</span><span class="hljs-keyword">storage</span><span class="hljs-string">"]["</span>data<span class="hljs-string">"]
    return [
        render_page(html.escape(greeting_data)).encode(),
    ]
</span></code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/509a9a143a90f0eb31cb14119e7fd2df2d8d11fbf9c6c107715ec8961e538afa.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/163f1a4e5af33981a2b4ec9209447322097ca08d59485788e67305733e920954.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/1e669e1a4a926ee19f2fad87cb4c4976ff9982751c8dc701f2d7c0e146ac7c87.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>1：把原来的代码全部替换成以下代码，保存，批准</p><pre data-type="codeBlock" text="import re2
import html
from string import Template
from dys import _chain, get_script_address, get_caller


def new_post(title: str, body: str):
    assert get_script_address() == get_caller(), &quot;permission denied&quot;
    data = f&quot;{title} -- {body}&quot;
    title_slug = re2.sub(&quot;\W+&quot;, &quot;-&quot;, title)
    print(data)  # to help debug
    return _chain(
        &quot;dyson/sendMsgCreateStorage&quot;,
        creator=get_script_address(),
        index=get_script_address() + &quot;/post/v1/&quot; + title_slug,
        data=data,
        force=True,
    )


def get_all_posts():
    response = _chain(
        &quot;dyson/QueryPrefixStorage&quot;, 
        prefix=get_script_address() + &quot;/post/v1/&quot;
    )
    return response[&quot;result&quot;]


def render_page(body: str):
    return Template(
        &quot;&quot;&quot;&lt;!doctype html&gt;
    &lt;html&gt;
        &lt;head&gt;
            &lt;title&gt;Hello World&lt;/title&gt;
            &lt;meta charset=utf-8&gt;
            &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
            &lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot; integrity=&quot;sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx&quot; crossorigin=&quot;anonymous&quot;&gt;
            &lt;style&gt;
                .heading {
                    text-shadow: #FC0 1px 0 10px;
                }
            &lt;/style&gt;
        &lt;/head&gt;
        &lt;body&gt;
            &lt;div class=&quot;container&quot;&gt;
                &lt;h1 class=&quot;heading&quot;&gt;Posts!&lt;/h1&gt;
                &lt;p&gt;$body&lt;/p&gt;
            &lt;/div&gt;
        &lt;/body&gt;
    &lt;/html&gt;
    &quot;&quot;&quot;
    ).safe_substitute(body=body)


def render_posts(posts: list[dict[str, str]]):
    return (
        &quot;&lt;ul&gt;&quot;
        + &quot;&quot;.join([&quot;&lt;li&gt;&quot; + html.escape(s[&quot;data&quot;]) + &quot;&lt;/li&gt;&quot; for s in posts])
        + &quot;&lt;/ul&gt;&quot;
    )


def application(environ, start_response):
    start_response(&quot;200 ok&quot;, [(&quot;Content-type&quot;, &quot;text/html&quot;)])
    post_data = get_all_posts()
    return [
        render_page(render_posts(post_data[&quot;storage&quot;])).encode(),
    ]
"><code><span class="hljs-keyword">import</span> <span class="hljs-title">re2</span>
<span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">html</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title"><span class="hljs-keyword">string</span></span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">Template</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">dys</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">_chain</span>, <span class="hljs-title">get_script_address</span>, <span class="hljs-title">get_caller</span>


<span class="hljs-title">def</span> <span class="hljs-title">new_post</span>(<span class="hljs-title">title</span>: <span class="hljs-title">str</span>, <span class="hljs-title">body</span>: <span class="hljs-title">str</span>):
    <span class="hljs-title"><span class="hljs-built_in">assert</span></span> <span class="hljs-title">get_script_address</span>() <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-title">get_caller</span>(), <span class="hljs-string">"permission denied"</span>
    <span class="hljs-title">data</span> <span class="hljs-operator">=</span> <span class="hljs-title">f</span><span class="hljs-string">"{title} -- {body}"</span>
    <span class="hljs-title">title_slug</span> <span class="hljs-operator">=</span> <span class="hljs-title">re2</span>.<span class="hljs-title">sub</span>(<span class="hljs-string">"\W+"</span>, <span class="hljs-string">"-"</span>, <span class="hljs-title">title</span>)
    <span class="hljs-title">print</span>(<span class="hljs-title">data</span>)  # <span class="hljs-title">to</span> <span class="hljs-title">help</span> <span class="hljs-title">debug</span>
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">_chain</span>(
        <span class="hljs-string">"dyson/sendMsgCreateStorage"</span>,
        <span class="hljs-title">creator</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>(),
        <span class="hljs-title">index</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>() <span class="hljs-operator">+</span> <span class="hljs-string">"/post/v1/"</span> <span class="hljs-operator">+</span> <span class="hljs-title">title_slug</span>,
        <span class="hljs-title">data</span><span class="hljs-operator">=</span><span class="hljs-title">data</span>,
        <span class="hljs-title">force</span><span class="hljs-operator">=</span><span class="hljs-title">True</span>,
    )


<span class="hljs-title">def</span> <span class="hljs-title">get_all_posts</span>():
    <span class="hljs-title">response</span> <span class="hljs-operator">=</span> <span class="hljs-title">_chain</span>(
        <span class="hljs-string">"dyson/QueryPrefixStorage"</span>, 
        <span class="hljs-title">prefix</span><span class="hljs-operator">=</span><span class="hljs-title">get_script_address</span>() <span class="hljs-operator">+</span> <span class="hljs-string">"/post/v1/"</span>
    )
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">response</span>[<span class="hljs-string">"result"</span>]


<span class="hljs-title">def</span> <span class="hljs-title">render_page</span>(<span class="hljs-title">body</span>: <span class="hljs-title">str</span>):
    <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">Template</span>(
        <span class="hljs-string">""</span><span class="hljs-string">"&#x3C;!doctype html>
    &#x3C;html>
        &#x3C;head>
            &#x3C;title>Hello World&#x3C;/title>
            &#x3C;meta charset=utf-8>
            &#x3C;meta name="</span><span class="hljs-title">viewport</span><span class="hljs-string">" content="</span><span class="hljs-title">width</span><span class="hljs-operator">=</span><span class="hljs-title">device</span><span class="hljs-operator">-</span><span class="hljs-title">width</span>, <span class="hljs-title">initial</span><span class="hljs-operator">-</span><span class="hljs-title">scale</span><span class="hljs-operator">=</span>1<span class="hljs-string">">
            &#x3C;link href="</span><span class="hljs-title">https</span>:<span class="hljs-comment">//cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"></span>
            <span class="hljs-operator">&#x3C;</span><span class="hljs-title">style</span><span class="hljs-operator">></span>
                .<span class="hljs-title">heading</span> {
                    <span class="hljs-title">text</span><span class="hljs-operator">-</span><span class="hljs-title">shadow</span>: #<span class="hljs-title">FC0</span> 1<span class="hljs-title">px</span> 0 10<span class="hljs-title">px</span>;
                }
            <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>style<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span>body<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>h1 class<span class="hljs-operator">=</span><span class="hljs-string">"heading"</span><span class="hljs-operator">></span>Posts<span class="hljs-operator">!</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>$body<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>html<span class="hljs-operator">></span>
    <span class="hljs-string">""</span><span class="hljs-string">"
    ).safe_substitute(body=body)


def render_posts(posts: list[dict[str, str]]):
    return (
        "</span><span class="hljs-operator">&#x3C;</span>ul<span class="hljs-operator">></span><span class="hljs-string">"
        + "</span><span class="hljs-string">".join(["</span><span class="hljs-operator">&#x3C;</span>li<span class="hljs-operator">></span><span class="hljs-string">" + html.escape(s["</span>data<span class="hljs-string">"]) + "</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>li<span class="hljs-operator">></span><span class="hljs-string">" for s in posts])
        + "</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>ul<span class="hljs-operator">></span><span class="hljs-string">"
    )


def application(environ, start_response):
    start_response("</span><span class="hljs-number">200</span> ok<span class="hljs-string">", [("</span>Content<span class="hljs-operator">-</span><span class="hljs-keyword">type</span><span class="hljs-string">", "</span>text<span class="hljs-operator">/</span>html<span class="hljs-string">")])
    post_data = get_all_posts()
    return [
        render_page(render_posts(post_data["</span><span class="hljs-keyword">storage</span><span class="hljs-string">"])).encode(),
    ]
</span></code></pre><p>2：步骤如图，你想要写多篇文章就重复图中123步就可以了</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9cc0b1561c4753bc8480ecf63580dfe195943b28ea5feb71306ba24934133658.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篇文章</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bca64815a5a2b631ba5ff9e90c2cf9bb0725b5bd21eb6cb0bd3be0624a6b3bd9.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://twitter.com/qazplm456456">https://twitter.com/qazplm456456</a></p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
        <item>
            <title><![CDATA[CIAN - Defi 自動化平台（自動加倉減倉 & 自動化高Apy策略）]]></title>
            <link>https://paragraph.com/@ethnbb/cian-defi-apy</link>
            <guid>dnWiEDnpsukBeDyWkrTn</guid>
            <pubDate>Thu, 01 Sep 2022 05:50:42 GMT</pubDate>
            <description><![CDATA[項目簡介 CIAN 是一個一站式的 Defi 自動化操作平台，串連了多個 Defi 協議並定義出許多不同的模組化任務，讓你可以自由地組合出需要的投資策略。CIAN 幫忙減少了許多鏈上繁瑣的操作，節省人力與時間成本的同時，還可以提升你的資本利用率與投資效率。使用此平台你不需要像使用其他收益聚合器一樣，將資產放在 Defi 協議金庫中已進行投資策略，反之你的資產都會放在一個由你擁有的智能合約錢包中，不用將資產託管給任何人，只需要進行有限的授權即可使用投資策略。 只看上面描述可能稍難想像 CIAN 實質上可以做什麼，以下舉個例： 當我們在鏈上流動性挖礦尤其是開槓桿在挖時，最害怕的就是幣價劇烈漲跌導致清算，沒賺到利息還賠了本金。而 CIAN 可以做到 當 Collateral Ratio 過度上升時自動幫你減倉避免清算，同時還能做到當 Collateral Ratio 下降時自動幫你加倉讓你資金利用率更高APY更高。（ p.s. 在 CIAN 平台中 Collateral Ratio 的定義是：債務價值/抵押品價值 x 100%，越高越容易被清算。） 項目方目前正在舉行測試活動，完成任務...]]></description>
            <content:encoded><![CDATA[<p>項目簡介 CIAN 是一個一站式的 Defi 自動化操作平台，串連了多個 Defi 協議並定義出許多不同的模組化任務，讓你可以自由地組合出需要的投資策略。CIAN 幫忙減少了許多鏈上繁瑣的操作，節省人力與時間成本的同時，還可以提升你的資本利用率與投資效率。使用此平台你不需要像使用其他收益聚合器一樣，將資產放在 Defi 協議金庫中已進行投資策略，反之你的資產都會放在一個由你擁有的智能合約錢包中，不用將資產託管給任何人，只需要進行有限的授權即可使用投資策略。</p><p>只看上面描述可能稍難想像 CIAN 實質上可以做什麼，以下舉個例：</p><p>當我們在鏈上流動性挖礦尤其是開槓桿在挖時，最害怕的就是幣價劇烈漲跌導致清算，沒賺到利息還賠了本金。而 CIAN 可以做到 當 Collateral Ratio 過度上升時自動幫你減倉避免清算，同時還能做到當 Collateral Ratio 下降時自動幫你加倉讓你資金利用率更高APY更高。（ p.s. 在 CIAN 平台中 Collateral Ratio 的定義是：債務價值/抵押品價值 x 100%，越高越容易被清算。）</p><p>項目方目前正在舉行測試活動，完成任務可獲得 NFT ，日後會依據 NFT 進行代幣空投。個人非常建議大家去做測試任務，可以對平台使用的邏輯有更全面的了解（還可以嚕點空投）。</p><p>（風險提示：此產品還在初期階段，目前合約陸續審計中[審計報告]，使用時請注意風險控管。此文內容與心得皆來自於官方資料及小弟跟官方人員的問答，皆為個人見解莫忘DYOR）</p><p>功能簡介 CIAN 使用非託管的智能合約錢包來實現自動化幫使用者執行 Defi 策略任務的功能。除了一站式好管理以外，還有精簡操作步驟、自動化加倉、自動化保護倉位、一鍵閃電貸倉位上槓桿等功能，可以說是 Defi Degen 的利器。CIAN 是有多鏈野心的，不過目前初期公鏈先只支援Avalanche，Protocol 方面目前支援 借貸協議包括：AAVE、Benqi、Trader Joe，流動性協議包括：Axial、Curve、Pangolin、Trader Joe、Vector。相信日後會越支援更多協議提供更多組合性。</p><p>接下來會一一簡介功能的用途，使用方式及步驟 官方Youtube 有非常詳細的 Step by Step 教學我會附上。</p><p>Smart Contract Wallet - 智能合約錢包 在我們開始使用 CIAN 的服務前我們會需要先創建一個智能合約錢包，這是因為 CIAN 主打自動化，這意味著我們只需設定好任務，之後人可以離開、去睡覺、去玩 不用一直提心吊膽的看著，我們的鏈上投資會照著設定的規則自動運行。在無託管、確保資產安全性的前提下，CIAN要做到這件事的解法就是替我們創建一個由使用者自己擁有的智能合約，再由使用者透過 EIP-2612 授權 CIAN 替我們的倉位進行各種設定好的操作，CIAN 取得授權後只能操作你存入智能合約錢包中的資產與瓦斯費，不會能控制你本身錢包內的任何資產，這點是很不錯的設計。</p><p>Position Building - 倉位創建 Borrow to Farm 這是我們經常會使用到的 Farming 策略，CIAN 將其整合起來讓你可以一頁式操作多個需要用到的協議。</p><p>此功能讓你可以簡單快速做到以下步驟： 存資產到借貸平台 -&gt; 借出其他資產 -&gt; 將資產換成 50/50 的兩種資產 -&gt; 組成 LP -&gt; Farming LP。</p><p>經統計以上步驟若無 CIAN 幫你整合，你至少得跳轉頁面 7 次經過 3 個不同的 Protocol 點擊 46 下才能完成，而在 CIAN 你可以在 1 個頁面裡 10 次點擊內完成，雖然我不是數學家但這聽起來很不錯對吧！</p><p>Automation Scenarios - 自動化場景 當設定的條件滿足了，會自動執行相應任務。</p><p>Auto Borrow 自動借款 在借貸協議中當你的抵押品(ex:ETH)價格上漲時，可以借出來使用的資產也會變多，但若要時常關注並手動調整光用想的就覺得很麻煩，Auto Borrow 解決的就是這件事。我們可以提前設定，當抵押品上漲 Collateral Ratio 降到一定比率時，自動幫忙借款加倉我們的倉位，將 Collateral Ratio 調整到設定的比率，提高資產利用率。</p><p>Auto Repay 自動還款 相對於 Auto Borrow，當抵押品價格下跌，會造成我們的 collateral ratio 升高，增加清算風險。所以有這個功能，讓我們可以提前設定，當抵押品下跌 Collateral Ratio 升到一定比率，自動幫忙降低倉位並向借貸協議還款，將 Collateral Ratio 調整到設定的比率，降低清算風險。</p><p>Flash Repay 閃電還款 在市場經歷極端行情時，可能會造成 Auto Repay 無法即時調倉成功，需要非常手段來進行 Reapy 避免清算，這就是 Flash Reapy 的功能。Flash Repay 作用的原理是 直接使用 AAVE 的 Flash Loan 閃電貸 功能在無需抵押品的情況下借錢去 Repay 你的債務 降低 Collateral Ratio 避免清算，解除危機後再變賣你的抵押品來還閃電貸的錢，全部在一個區塊裡完成。是非常直接快速的 Repay 方式，需要注意的是使用閃電貸會產生 0.09% 的手續費，不過總比被清算好，這還是一個很有效的極端行情保險措施！</p><p>Automated Strategies - 自動化策略 CIAN 提供了一些很不錯的自動化策略供我們使用，若你有不錯的策略想提供給 CIAN做使用，也可以加入官方DC群到 #strategy-lab 提供！下面我來介紹其中一個策略“槓桿質押”賺年化。</p><p>Leveraged Stacking - AAVE 這個策略賺了 2 種年化，其一是在 BENQI 質押 Avax 獲得的質押年化，其二是將質押 Avax 拿到的 sAvax 提供到 AAVE 獲得的借貸年化。此策略還會使用閃電貸將我們的資產加上 7 倍槓桿已獲得數倍的年化（撰文當下約60~70%年化）。</p><p>策略步驟解釋如下（以下所有步驟在1個transaction內完成）：</p><p>假設我們有 100 Avax 且 Avax/sAvax 兌換率約為1。 假設 Max LTV(可以想像成 可以借的價值/需要抵押的價值) = 0.95<em>0.97</em>清算門檻 = 87.54%</p><p>質押 100 Avax 到 BENQI(BLS) 並收到 100 sAvax 與質押收益。 將100 sAvax 存進 AAVE V3 已獲得借貸收益。（E-mode 打開） 從 Trader Joe 閃電貸貸出 702.56 Avax（加上7.02 倍槓桿） 將閃電貸到的 702.56 Avax 質押到 BLS 已獲得 702.56 sAvax與額外的質押收益。 將從上一步拿到的 702.56 Avax 存進 AAVE V3 賺額外的借貸收益。 使用存入的 802.56 sAvax 當抵押品借出 703.2 Avax 還清閃電貸</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
        <item>
            <title><![CDATA[Why do we need Gnoland?
]]></title>
            <link>https://paragraph.com/@ethnbb/why-do-we-need-gnoland</link>
            <guid>guqtcDD3tftENjh3bQaV</guid>
            <pubDate>Sat, 27 Aug 2022 05:08:21 GMT</pubDate>
            <description><![CDATA[Gnoland adopts a new language called Gnolang, a fork of the Golang. A clear advantage of Golang compared to other languages is apparent when dealing with concurrency. While a majority of programming languages such as C++ or Java use multithreading for running concurrent programs, Go uses Goroutines. Multithreading is where multiple threads are run in parallel within a single process. This could be your browser playing music and running a search engine at the same time, or your word processing...]]></description>
            <content:encoded><![CDATA[<p>Gnoland adopts a new language called Gnolang, a fork of the Golang. A clear advantage of Golang compared to other languages is apparent when dealing with concurrency. While a majority of programming languages such as C++ or Java use multithreading for running concurrent programs, Go uses Goroutines.</p><p>Multithreading is where multiple threads are run in parallel within a single process. This could be your browser playing music and running a search engine at the same time, or your word processing software displaying your input while checking the grammar. The issue with multithreading is that it requires context switching, where the OS scheduler manages the switching between processes and threads. This often causes overhead and consumes excessive resources. Goroutine, on the other hand, takes the burden off the OS by implementing Go Scheduler, a run-time native scheduler. Creation and destruction of Goroutines consume seemingly less memory (as little as 0.2% of threads) and fully utilizes all cores of the hardware.</p><p>Almost all blockchains in existence are single threaded, meaning that processing multiple transactions simultaneously will lead to double-spending or a conflict between states.</p><p>Gnoland provides the most viable solution to this, which is integrating goroutines by supporting Golang as the smart contracts language.</p><p>The most commonly used languages in the current blockchain development environment are Solidity for EVM-compatible networks and Rust for Solana and Cosmos SDK-based networks; both Solidity and Rust are inspired by C++. Although all of the above are excellent languages, Gnolang inherits faster compiling speed, more concise grammar, and resource-effective concurrency from Golang.</p><p>So scalability is important.</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
        <item>
            <title><![CDATA[aptos/sui/linera]]></title>
            <link>https://paragraph.com/@ethnbb/aptos-sui-linera</link>
            <guid>JHSSabDiratsNDezhX7d</guid>
            <pubDate>Fri, 05 Aug 2022 03:14:31 GMT</pubDate>
            <description><![CDATA[阿普托斯资金第一轮：tos 于 3 月 15 日由 a16z 领，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等表示将影响 VC 参投的 2 亿美元融资而完成。 Binance Labs 投资宣布投资曾关注 Aptos Labs，给 PayPal 参与，是 PayPal Ventures 的第 1 层公链项目。 轮：由 FTX Ventures 和 Jump Crypto 的 1.5 亿美元融资，包括 Apollo、Griffin Gaming Partners、Franklin Templeton、Circle Ventures、二马领投的 Superscrypt 的持续投资，以及 a16z crypto 和 Multicoin 的持续投资。 ** **团队Aptos 由 Diem 和 Novi 早发展后的领导者、工程师和战略，以及 DiemBFTv4、Narwhal & Tusk、BullShark 和 Block-STM 等先行...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">阿普托斯</h1><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">资金</h2><p><strong>第一轮：tos 于 3 月 15 日由 a16z 领，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等表示将影响 VC 参投的 2 亿美元融资而完成。 Binance Labs 投资宣布投资曾关注 Aptos Labs，给 PayPal 参与，是 PayPal Ventures 的第 1 层公链项目。</strong></p><p><strong>轮：由 FTX Ventures 和 Jump Crypto 的 1.5 亿美元融资，包括 Apollo、Griffin Gaming Partners、Franklin Templeton、Circle Ventures、二马领投的 Superscrypt 的持续投资，以及 a16z crypto 和 Multicoin 的持续投资。</strong></p><p>**<br>**</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">团队</h2><p>Aptos 由 Diem 和 Novi 早发展后的领导者、工程师和战略，以及 DiemBFTv4、Narwhal &amp; Tusk、BullShark 和 Block-STM 等先行创新人才的研究人员组成。 </p><p>**<br>**</p><p>主要领导者 Shaikh 与 Avery Ching——创始人 Mo 兼首席技术官曾是 Diem（原 Libra）与 Novi（原 Calibra）的主要制造商，Avery Ching 曾在 Facebook 担任首席联合工程师超过 10 年，并且是开发联合工程师联合工程师联合工程师联合工程师联合工程师联合等的·大和开发人员等的·马尔花·马尔·马尔·马尔开发开发足·诺诺重领域开放、市场开放、联合工程师等核心领域。建造者等中中的 Diem 库的基础上建立了一个 Aptos 的新网络。这个团队在 Meta 开发，帮助 Aptos 团队曾有广泛的开发和部署系统成员的经验，Aptos 团队使用很相似的语言，据 Aptos 联合创建人 Avery Ching是多力玛尔的领导，除此之外，还有 Alin Tomescu、Alin Tomescu、David Wolinsky、reg Nazario Skinner 等、研究人员、团队、设计师和登家组成的其他策略。</p><p>**<br>**</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://twitter.com/MrAme34090868/status/1551320554841448448">https://twitter.com/MrAme34090868/status/1551320554841448448</a>项目合集</p><p>游戏、社交网络、媒体和金融。Aptos已经上线，目前其上的应用有详细的介绍、路线图比较只有Pontem Network、Econia、Fewcha Wallet、Martian Wallet 4个，因此重点在基础类Aptos并在其博文主推，Aptos 上的一大片使用 NFT，发布后的性能或将吸引大量 NFT 项目的。</p><p>**<br>**</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">科技</h2><p>安全性</p><p>Move 编程语言 - 在语言上，Aptos 最初使用为 Diem 开发的 Move 编程语言，Move 语言专为在区块链上进行安全资源管理和可验证和设计。三年前，这些人同时开发了区块链和移动语言。当前、费用、标准库、节点管理和配置都通过移动实现。安全称Diem最大的创新功能验证，移动以太坊是交易者最常用和最常用的。可比智能，从内存和约定的非常安全的保证，形式提供了强大的编程代码。</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/83b988ae2c1bba8cf1b0dd161a4cc994061f415fd09d10e8dc1a0da7bf40366b.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[GKC]]></title>
            <link>https://paragraph.com/@ethnbb/gkc-2</link>
            <guid>33hpDywRZQ3KbSdkiFvV</guid>
            <pubDate>Sun, 08 May 2022 10:58:23 GMT</pubDate>
            <description><![CDATA[最新消息： GKC匿名链跨链数量公为1200个由散户组成的KC矿池项目数量为51万+G，60.8%。资金均等。DAO，持股去中心化，安全无忧现在持有地址为4751，LP地址是2310 币安链合约地址： 0x875dbac041105f5ae89ba7f7f62de8770cf7065a 我们一直用数据说话，喜欢的不要来，喜欢暴暴长期来的，我们是公链，不做土狗，欢迎各位大神推荐！！]]></description>
            <content:encoded><![CDATA[<p>最新消息：</p><p>GKC匿名链跨链数量公为1200个由散户组成的KC矿池项目数量为51万+G，60.8%。资金均等。DAO，持股去中心化，安全无忧现在持有地址为4751，LP地址是2310</p><p>币安链合约地址：</p><p>0x875dbac041105f5ae89ba7f7f62de8770cf7065a</p><p>我们一直用数据说话，喜欢的不要来，喜欢暴暴长期来的，我们是公链，不做土狗，欢迎各位大神推荐！！</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8e214ca9be5c2a46f16748c56c8c392630b9fd999567259472d3f72fa40d3dc4.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[GKC]]></title>
            <link>https://paragraph.com/@ethnbb/gkc</link>
            <guid>WaRQr3d1MYShmv7cpqK7</guid>
            <pubDate>Fri, 06 May 2022 16:21:23 GMT</pubDate>
            <description><![CDATA[最新消息： GKC匿名公链跨链币安数量恒定为1200万，GKC矿池数量为651万+，占比60.8%。资金池均由散户投资者组成。DAO社区没有项目方，持股去中心化，安全稳定。现在持有地址是4751，LP地址是2310 币安链合约地址： 0x875dbac041105f5ae89ba7f7f62de8770cf7065a 我们一直用数据说话，喜欢暴涨的不要来，喜欢稳定长期来，我们是公链，不做土狗，欢迎各位大神来尝尝！！]]></description>
            <content:encoded><![CDATA[<p>最新消息：</p><p>GKC匿名公链跨链币安数量恒定为1200万，GKC矿池数量为651万+，占比60.8%。资金池均由散户投资者组成。DAO社区没有项目方，持股去中心化，安全稳定。现在持有地址是4751，LP地址是2310</p><p>币安链合约地址：</p><p>0x875dbac041105f5ae89ba7f7f62de8770cf7065a</p><p>我们一直用数据说话，喜欢暴涨的不要来，喜欢稳定长期来，我们是公链，不做土狗，欢迎各位大神来尝尝！！</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e6dc5197c4bf86edda9455e36597c09db6535b2c4da9534f8641b544c11ee55e.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[很对]]></title>
            <link>https://paragraph.com/@ethnbb/JTXkzSGRaLWoNnedQ7NG</link>
            <guid>JTXkzSGRaLWoNnedQ7NG</guid>
            <pubDate>Sat, 08 Jan 2022 12:25:43 GMT</pubDate>
            <description><![CDATA[2015年夏，和几位朋友当时在香港富豪酒店闲聊，两位体制内的大哥告诉我：老弟，建议你马上移民吧，加密领域如果想自由发展，最好移民。其中一位是生活在美国的大哥，当时四个人，我听了以后，回到内地，简单处理了一下，毅然决然的直接来到了美国。事实证明：听高人劝，吃饱饭！]]></description>
            <content:encoded><![CDATA[<p>2015年夏，和几位朋友当时在香港富豪酒店闲聊，两位体制内的大哥告诉我：老弟，建议你马上移民吧，加密领域如果想自由发展，最好移民。其中一位是生活在美国的大哥，当时四个人，我听了以后，回到内地，简单处理了一下，毅然决然的直接来到了美国。事实证明：听高人劝，吃饱饭！</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
        <item>
            <title><![CDATA[hi]]></title>
            <link>https://paragraph.com/@ethnbb/hi</link>
            <guid>5lzogFRGShGQYTrshk3f</guid>
            <pubDate>Sat, 16 Oct 2021 07:15:33 GMT</pubDate>
            <description><![CDATA[大家好]]></description>
            <content:encoded><![CDATA[<p>大家好</p>]]></content:encoded>
            <author>ethnbb@newsletter.paragraph.com (hao)</author>
        </item>
    </channel>
</rss>