<?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>ht111</title>
        <link>https://paragraph.com/@ht111</link>
        <description>undefined</description>
        <lastBuildDate>Fri, 01 May 2026 12:28:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>ht111</title>
            <url>https://storage.googleapis.com/papyrus_images/437f249aec792c44f2acdb67b239f5e4f5248563def4259dfe953ed6b828cb1c.jpg</url>
            <link>https://paragraph.com/@ht111</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[UMEE又来明牌发钱了]]></title>
            <link>https://paragraph.com/@ht111/umee</link>
            <guid>IvML8RPMdvNn8DxlqN4V</guid>
            <pubDate>Sun, 08 May 2022 23:56:16 GMT</pubDate>
            <description><![CDATA[一、明牌空投之我见 UMEE的测试网，之前带大家做过一次，拿了大毛，没想到他又来了。对，没错！是他，是他，就是他，我们的好朋友，UMEE。 这个项目方其实挺敞亮的，每次都明牌自己会发奖励。话说，明牌空投这个事情，大家应该思考一下。以往，大家听到明牌空投都觉得是小毛，但是我认为逻辑是变了的。以往各种项目方其实竞品很少，突发大毛及其容易引起关注。现在则不同，任何类型的项目在不同网络中肯定是有竞品，在同一网络肯定也是有竞品。不明牌大毛吸引人，如何把自己的数据做好看？我甚至可以断言，未来项目方还会明牌奖励具体数额，那时候必然是项目方之间血战的时候。所以，此时养号钱包和社交账号非常重要。因为，对KYC的查证必然更加严格，空投的目的是拉新，而不是奖励个别大户。这是空投操作的重要思路转变，必须引起重视。 因此，UMEE再卷，也得上！ ……………………… 华丽分割线 ……………………… 二、注意规则 顺着UMEE展开往下再说一点，刷空投前一定自己读清楚项目方规则，项目方规则不清楚参照同类产品空投规则。规则没弄明白之前刷，必然是浪费时间和浪费GAS，换成主网这样玩儿，最后只能吃土。 因此，教程视频...]]></description>
            <content:encoded><![CDATA[<p><strong>一、明牌空投之我见</strong></p><p>UMEE的测试网，之前带大家做过一次，拿了大毛，没想到他又来了。对，没错！是他，是他，就是他，我们的好朋友，UMEE。</p><p>这个项目方其实挺敞亮的，每次都明牌自己会发奖励。话说，明牌空投这个事情，大家应该思考一下。以往，大家听到明牌空投都觉得是小毛，但是我认为逻辑是变了的。以往各种项目方其实竞品很少，突发大毛及其容易引起关注。现在则不同，任何类型的项目在不同网络中肯定是有竞品，在同一网络肯定也是有竞品。不明牌大毛吸引人，如何把自己的数据做好看？我甚至可以断言，未来项目方还会明牌奖励具体数额，那时候必然是项目方之间血战的时候。所以，此时养号钱包和社交账号非常重要。因为，对KYC的查证必然更加严格，空投的目的是拉新，而不是奖励个别大户。这是空投操作的重要思路转变，必须引起重视。</p><p>因此，UMEE再卷，也得上！</p><p>……………………… 华丽分割线 ………………………</p><p><strong>二、注意规则</strong></p><p>顺着UMEE展开往下再说一点，刷空投前一定自己读清楚项目方规则，项目方规则不清楚参照同类产品空投规则。规则没弄明白之前刷，必然是浪费时间和浪费GAS，换成主网这样玩儿，最后只能吃土。</p><p>因此，教程视频我放在后面，先谈几点UMEE的规则。在此一并批评个别大V（不点名），你们是真的坏，讲真。我不知道你们是真糊涂，还是装糊涂？在文字教程或者视频教程里面乱教。表面上看起来，你们带大家完成了测试网，实际上，大家跟着做只会浪费时间。结果就是，一旦发了毛，你拿了大毛，跟着的人可能没有。然后你还可以吹嘘一波，拉点粉丝割韭菜。不要把国人内卷的这种小伎俩放到国际化的区块链行业丢人，真心看不起。</p><p>接下来，我们重点依据官方文档，来解读这次测试网需要注意的事项。任何事项如果你没做到，很可能浪费时间，所以，一定要自己研究！</p><p>1、UMEE的测试网并不是你体验了所有功能就能领奖励，必须尽可能的积累账号中的TVL！</p><p>2、你必须使用一个新的钱包来参与测试网，否则你将拿不到任何奖励！</p><p>3、测试网的结束时间在5月14日前后，你还有很多时间去完成！</p><p>4、不要为了增加TVL，去做很多小号，把小号的代币转移到大号，一旦你有这种行为，基本上就白肝。</p><p>5、最好去和ETH进行桥接一次，尽可能的完整体验UMEE的所有功能。</p><p>6、你可以去Discord里找到《错误报告表》，当遇到你觉得体验很不顺畅时，可以告诉他们。</p><p>以上就是UMEE测试网的操作要点，一定要熟悉规则以后开肝！好了，话不多说，具体教程看视频。</p><p>……………………… 华丽分割线 ………………………</p><p><strong>三、教程视频和主要链接</strong></p><p>第一个视频我们讲讲UMEE是什么，我始终建议大家深刻研究项目以后再冲，不要人云亦云，这对长期是有好处的。</p><p>第二个视频我们讲讲测试网怎么做，请原谅我，真的卡的不得了，所以，看起来不是那么完整。但是结合第二部分的规则，大家应该看得懂。</p><p>1﻿、测试网地址：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.umee.cc/">https://testnet.umee.cc/</a>2、UMEE Discord：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/AunWsV5h">https://discord.gg/AunWsV5h</a>3、官网说明：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.umee.cc/umee/user-guides/umeemania-testnet/umeemania-faq">https://docs.umee.cc/umee/user-guides/umeemania-testnet/umeemania-faq</a>4、Keplr钱包下载地址（小狐狸我就不发了吧，自己去DIS找）：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap?hl=zh">https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap?hl=zh</a></p><p>顺便说一句，G网的ETH测试币基本上被领干了，如果你完成下列表单，可以找我们领水哟～填表地址：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forms.gle/X1ksanr2DbttQZPm9">https://forms.gle/X1ksanr2DbttQZPm9</a></p><p>……………………… 华丽分割线 ………………………</p><p><strong>四、联系我们：</strong></p><p>着2020年DeFi的快速发展，区块链行业正式进入项目百花齐放的时代。大家都在<strong>烧钱</strong>拉人头，争当独角兽 。同时，大机构又在疯狂布局基础设施领域，加班加点修桥修路，以满足行业生态爆发的需求。</p><p>可以预见，未来3年的区块链行业将是<strong>满街撒钱</strong>时代，可以类比中国13年的移动互联网初期（例如百团大战）。有资格捡钱的是那些长期、深度参与区块链项目的人（俗称撸羊毛） 。所以，我们成立了Bright Dao，带领大家布局捡钱，<strong>人人捡到A9以上</strong>！</p><p>……………………… 华丽分割线 ………………………</p><p><strong>五、其它</strong></p><p>1、其他优质撸羊毛项目我们做了列表，欢迎参考：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/spreadsheets/d/1PkhueC7yWw9CtZ7F5Wn3ij6sjL14-5e7xGEf-iap1aE/edit#gid=0">https://docs.google.com/spreadsheets/d/1PkhueC7yWw9CtZ7F5Wn3ij6sjL14-5e7xGEf-iap1aE/edit#gid=0</a></p><p>2、给大家选择项目的建议：市场上项目鱼龙混杂，但是我们的精力和资金有限，必须把重点放在潜在大毛上！不是牛逼机构投资的项目不参与，美工程度低的项目不参与，社交账号管理差的项目不参与。这类项目没钱撒，也不想撒，别被反撸了！</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[币圈必备百宝箱，请珍藏！]]></title>
            <link>https://paragraph.com/@ht111/rPZNQgNDuPtWJNmhReez</link>
            <guid>rPZNQgNDuPtWJNmhReez</guid>
            <pubDate>Mon, 11 Apr 2022 13:07:46 GMT</pubDate>
            <description><![CDATA[简介；俗话说的好，隔行如隔山。近期有很多新关注我的小伙伴私聊我都是刚进入币圈和空投这一领域，所以突然有个想法整理一些本人也在用的软件，工具，网址，以及教程。让刚入行的韭菜们能尽量少走弯路。本人花了大量的时间和精力整理了一套，请转发并收藏，多谢支持，请务必看完全部工具，会有意想不到的收获。（全是干货）一，空投1，入门必备教程；（撸空投必看）1.1；撸空投 肝白 必备（无限）套账号注册详细教程 1.2；自建梯子，绑定指纹浏览器详细教程，结合无限套账号注册撸空投必备神器，小白直接起飞！ 1.3；币圈必备软件telegram和discord以及twitter必备翻译工具安装操作教程(没有中文社区也不影响撸空投)2，质押类，测试类，任务类空投汇总。1.1；本人空投整理。3，空投网站汇总。1.1；包括持有空投整理，测试网空投整理，赠品空投整理，潜在空投整理。 1.2；包括测试网空投整理。 1.3；包括任务空投整理，持有人空投整理。 1.4；DeFi，NFT，精品空投，任务空投整理。（空投教程非常全面，并且每日更新新空投，任务类居多） 1.5；最超值和一定要试的空投整理。 1.6；上市项目和空...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"></h2><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">简介；</h2><p>俗话说的好，隔行如隔山。近期有很多新关注我的小伙伴私聊我都是刚进入币圈和空投这一领域，所以突然有个想法整理一些本人也在用的软件，工具，网址，以及教程。让刚入行的韭菜们能尽量少走弯路。本人花了大量的时间和精力整理了一套，请转发并收藏，多谢支持，请务必看完全部工具，会有意想不到的收获。（全是干货）</p><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>1.1；撸空投 肝白 必备（无限）套账号注册详细教程</p><p>1.2；自建梯子，绑定指纹浏览器详细教程，结合无限套账号注册撸空投必备神器，小白直接起飞！</p><p>1.3；币圈必备软件telegram和discord以及twitter必备翻译工具安装操作教程(没有中文社区也不影响撸空投)</p><h3 id="h-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2，质押类，测试类，任务类空投汇总。</h3><p>1.1；本人空投整理。</p><h3 id="h-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3，空投网站汇总。</h3><p>1.1；包括持有空投整理，测试网空投整理，赠品空投整理，潜在空投整理。</p><p>1.2；包括测试网空投整理。</p><p>1.3；包括任务空投整理，持有人空投整理。</p><p>1.4；DeFi，NFT，精品空投，任务空投整理。（空投教程非常全面，并且每日更新新空投，任务类居多）</p><p>1.5；最超值和一定要试的空投整理。</p><p>1.6；上市项目和空投日历整理。</p><p>1.7；任务类，测试网整理居多。</p><p>1.8；游戏，虚拟世界，代币，空投合集整理。</p><p>1.9；上市项目空投整理。</p><p>2.0；审查和列出由 ICO、个人或企业组织的空投整理。</p><p>2.1；主要以测试网空投为主。</p><p>2.2；空投查询网站。</p><p>2.3；潜在空投项目。</p><p>2.4；任务类居多。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">二，行情分析工具。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.coingecko.com/zh">www.coingecko.com/zh</a>（最常用的数据分析工具，很全面）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.feixiaohao.co/">www.feixiaohao.co</a>（最早接触的行情数据分析工具）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://cn.tradingview.com/">cn.tradingview.com</a>（追踪所有市场，K线工具）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://nftgo.io/">nftgo.io</a>（巨鲸追踪分析工具）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://kingdata.com/?lang=cn">kingdata.com/?lang=cn</a>（web3一站式投资平台，包括IDO，ICO，NFT，空投，defi，gamefi，投资组合，巨鲸追踪等多领域分析工具。）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://dappradar.com/">dappradar.com</a>（所有公链，gamefi，defi，NFT，空投，投资组合工具。）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://coinmarketcap.com/">coinmarketcap.com</a>（最全面加密货币数据分析，交流，学习，NFT，空投为一体工具）</p><p>1.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://dexscreener.com/">dexscreener.com</a>（所有公链数据查询）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.whalestats.com/analysis-of-the-top-100-eth-wallets">www.whalestats.com/analysis-of-the-top-100-eth-wallets</a>（ETH大户钱包追踪）</p><p>2.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://messari.io/">messari.io</a>（行情软件分析，币圈顶级资产，投资回报率）</p><p>2.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.cypherhunter.com/zh-hans/">www.cypherhunter.com/zh-hans/</a>（机构巨鲸数据查询）</p><p>2.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.dextools.io/app/">www.dextools.io/app/</a>（行情工具，K线工具，所有土狗都有）</p><p>2.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://bitinfocharts.com/zh/top-100-richest-bitcoin-addresses.html">bitinfocharts.com/zh/top-100-richest-bitcoin-addresses.html</a>（BTC巨鲸追踪）</p><p>2.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.whalestats.com/analysis-of-the-top-100-eth-wallets">www.whalestats.com/analysis-of-the-top-100-eth-wallets</a>（ETH巨鲸追踪）</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">三，币圈新闻。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.jinse.com/">www.jinse.com</a>（常用新闻软件，比较及时）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.theblockbeats.info/">www.theblockbeats.info</a>（快讯，融资信息，链上生态）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://foresightnews.pro/article">foresightnews.pro/article</a>（快讯，日历，专题，专栏）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.panewslab.com/zh/index.html">www.panewslab.com/zh/index.html</a>（深度文章，快讯，专题）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.8btc.com/">www.8btc.com</a>（快讯，web3，学院）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://thedefiant.io/">thedefiant.io</a>（消息，教育，研究，空投）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.dappchaser.com/">www.dappchaser.com</a>（生态追踪器，DAPP数据百科，赏金猎人）</p><p>1.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.ccvalue.cn/">www.ccvalue.cn</a>（价值号，视频，专题）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://cointelegraph.com/">cointelegraph.com</a>（市场，杂志，百科全书）</p><p>2.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.defidaonews.com/">www.defidaonews.com</a>（媒体，峰会，学院）</p><h2 id="h-ido" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">四，IDO网站（一般都不可以参与）</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://chainbroker.io/">chainbroker.io</a>（加密影响者。用于跟踪私人和公共筹款的加密平台。）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://polkastarter.com/">polkastarter.com</a>（授权项目启动去中心化和可互操作的代币池和拍卖。使支持者能够尽早获得加密创新。）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://cryptorank.io/">cryptorank.io</a>（加密市场数据聚合和分析平台、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/search?q=%23IDO&amp;src=hashtag_click">#IDO</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/search?q=%23IEO&amp;src=hashtag_click">#IEO</a>性能、交易警报和新闻聚合器）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://daomaker.com/">daomaker.com</a>（通过DAO形式加入投资）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://smartliquidity.info/">smartliquidity.info</a>（视觉分析）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://community.tokensoft.io/community">community.tokensoft.io/community</a>（web3 项目和社区的公平启动平台）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://copperlaunch.com/pools">copperlaunch.com/pools</a>（递减形式IDO）</p><h2 id="h-nft" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">五，NFT交易所及工具。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://opensea.io/">opensea.io</a>（当前最顶端NFT交易所）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://x2y2.io/zh-Hans">x2y2.io/zh-Hans</a>（X2Y2是一个社区拥有的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/search?q=%23NFT&amp;src=hashtag_click">#NFT</a>市场，其持有者拥有 100% 的利润）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.cryptoscores.io/calendar/calendar">www.cryptoscores.io/calendar/calendar</a>（NFT见解的一站式商店）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://mycointool.com/">mycointool.com</a>（NFT抢购大师，最新项目以及各种实用工具）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://thenftscore.com/hotspot">thenftscore.com/hotspot</a>（轻松查找稀有、即将上市、热销、趋势 NFT）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://niftygateway.com/">niftygateway.com</a>（Nifty Gateway 是一个一体化平台，可让您轻松购买、出售和存储数字艺术和收藏品）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://raritysniffer.com/index">raritysniffer.com/index</a>（NFT稀有度排名平台）</p><p>1.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://rarible.com/">rarible.com</a>（以多链社区为中心的 NFT 市场）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/6FdOl13Dbp">rarity.tools</a> (查找下一个 NFT 的稀有度排名)</p><p>2.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://nftnerds.ai/">nftnerds.ai</a> (空间中最干净的 NFT 工具)</p><p>2.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://mintyscore.com/">mintyscore.com</a>（潜力NFT，即将到来NFT）</p><p>2.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/SX0LF6upRH">genie.xyz</a>（第一个 NFT 市场聚合器。在一次交易中批量购买所有主要市场的 NFT。节省高达 40% 的汽油费）</p><p>2.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/42jlhaUuzj">prysm.xyz</a>（将您的群聊变成 DAO，以团队形式收集 NFT）</p><p>2.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/Bhsl3zq5eN">nftpricefloor.com</a>（NFT 数据聚合器。我们是 NFT 生态系统的数据管理层，我们跟踪底价、数量和销售额、上市比率等）</p><p>2.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/Rr83t6taHa">moby.gg</a>（实时 NFT 铸造和销售洞察、钱包跟踪、即时通知和实时价格趋势）</p><p>2.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/K8U5lyWt0m">icy.tools</a>（我们发现趋势 NFT、跟踪底价、警报等）</p><p>2.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/QOq06sZ8Ss">nftscan.com</a>（为人类提供对元宇宙的实时访问）</p><p>2.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/r8YDd2wHOv">looksrare.org</a>（费率比opensea低百分之20NFT交易平台）</p><p>2.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/iHyTaI75Em">gem.xyz</a>（最佳 NFT 聚合器。在所有市场购买 NFT 时节省高达 42% 的 gas）</p><p>3.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://tofunft.com/">tofunft.com</a>（最大的多链NFT交易市场）</p><h2 id="h-dex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">六，DEX交易，跨链。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/5fJXSlJ3Rb">uniswap.org</a>（我们为 Uniswap 做出了贡献——一种在以太坊上进行交易和自动提供流动性的协议）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/AaV9NLvH69">pancakeswap.finance</a>（博饼，币安智能链上领先交易）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/O3REedDpmw">sushi.com</a>（社区构建的开源生态系统，包含您需要的所有 DeFi 工具）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/zsw2z8aC3J">matcha.xyz</a>（一次交易所有 DEX，Matcha 为您在交易所找到最优惠的价格，并将它们组合成一笔交易）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/ZW3WzQaICT">dex.guru</a>（DexGuru 为您提供无与伦比的链上市场覆盖率，集成到一个地方并实时交付）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/nvRCKtMlAb">1inch.io</a>（多链合成）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/SsQKZcs640">zigzag.exchange</a>（革命性的以太坊 L2 ZK Rollup）</p><p>1,8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/s5JxvwGKGf">raydium.io</a>（支持 DeFi 进化的链上订单簿）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://dex.nearpad.io/swap">dex.nearpad.io/swap</a>（near链上去中心化交易）</p><p>2.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/CCaASv3eUJ">mdex.com</a>（一个融合了 DEX、IMO 和 DAO 的复合 DeFi 生态系统）</p><p>2.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/uvx0bcyhHz">dydx.exchange</a>（在最强大的开放式交易所开始交易，投资机构强大）</p><p>2.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/1YsCayEh7Q">cowswap.exchange</a>（受 MEV 保护的交易的 CoW）</p><p>2.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/EZL2rqnBl0">biswap.org</a>（BSW 上线币安 超过 422K 用户信任）</p><p>2.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/9fTEJ11egU">home.babyswap.finance</a>（每次交易都会得到BABY奖励）</p><p>2.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/T89unZEj7j">up.ag</a>（Solana 的最佳交换聚合器和基础设施）</p><p>2.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/aJ7vi1JtXl">orca.so</a>（Solana 上最人性化的 DEX）</p><p>2.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/krWYEuXNXw">traderjoexyz.com</a>（雪崩链上一站式去中心化平台）</p><p>2.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/gxBQ8BEgnT">quickswap.exchange</a>（马蹄链上去中心化平台，以闪电般的速度和接近零的汽油费）</p><p>2.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/DrDQWLRElB">spookyswap.finance</a>（FTM生态DEX）</p><p>3.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/uSd1L1GBcd">osmosis.zone</a>（Osmosis 是为流动性提供者构建的自动做市商 (AMM) 协议。它基于 Cosmos SDK 构建，是 IBC 代币的第一个 dex）</p><p>3.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/qLIAJpUBe4">terra.money</a>（Terra Station包含质押, Swap, 治理等核心功能）</p><p>3.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/eNX9Yk49cY">multichain.org</a>（跨链路由器协议 (CRP)，被设想为 Web3 的终极路由器）</p><p>3.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/UAYWdyOvQA">hop.exchange</a>（一种以快速且无需信任的方式跨汇总及其共享的第 1 层网络发送令牌的协议）</p><p>3.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/uJebpFtFqR">connext.network</a>（链和汇总之间的快速、无需信任的通信）</p><p>3.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/MhyrcDR3aZ">links.li.finance</a>（提供跨链交换 - 具有 DEX 连接性的终极桥梁聚合）</p><p>3.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/cajKRazLaE">allbridge.io</a>（Allbridge 是一种在区块链之间转移资产的简单、现代且可靠的方式）</p><p>3.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/BujBmVk7lv">celo.org</a>（Celo 是一个开放平台，任何人都可以使用手机访问金融工具）</p><p>3.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://bridge.xdaichain.com/">bridge.xdaichain.com</a>（Gnosis 链是一个兼容 EVM 的区块链，专为快速和廉价的交易而设计）</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">七，顶级投资机构。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://16z.com/portfolio/#crypto">16z.com/portfolio/#crypto</a>（a16z）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://labs.binance.com/">labs.binance.com</a>（币安实验室）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.threearrowscap.com/select-investments/">www.threearrowscap.com/select-investments/</a>（三箭资本）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.coinbase.com/ventures#our-investments">www.coinbase.com/ventures#our-investments</a>（coinbase）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.alameda-research.com/">www.alameda-research.com</a>（Alameda Research）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/CFwDt35833">multicoin.capital</a>（多币资本）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/mhyeANHE8d">airtable.com</a>（Airtable）</p><p>1.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/xPWLSwJQ3U">dcg.co</a>（Digital Currency Group）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/DoqDQ6Erno">paradigm.xyz</a>（Paradigm）</p><h2 id="h-cosmos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">八，cosmos专区</h2><p>想参与cosmos空投请参考；</p><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/GufzGef5VB">cosmosairdrops.io</a>（帮助社区跟踪 cosmos 生态系统的空投）</p><p>1.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/kg7yrWmM5Z">cosmosuplink.web.app</a>（链接到cosmos，抓住所有空投）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/6fbqlA3pOr">cosmospug.com</a>（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/yEPxgMIXAP">Cosmos</a>生态社区的工具和空投）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/199tW6rC9A">airdrops.one</a>（当前和未来的cosmos空投）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://cafe.naver.com/cosmosatom/610">cafe.naver.com/cosmosatom/610</a>（cosmos论坛）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.reddit.com/r/CosmosAirdrops/comments/rcs16g/cosmos_airdrops_full_list_of_all_known_previous/">www.reddit.com/r/CosmosAirdrops/comments/rcs16g/cosmos_airdrops_full_list_of_all_known_previous/</a>（cosmos论坛）</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">九，杂七杂八工具。</h2><p>1.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://chainlist.onekey.so/">chainlist.onekey.so</a>（主网添加工具）</p><p>1.2；bulksender.app（ETH批量发送工具）</p><p>1.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://bip39.onekey.so/">bip39.onekey.so</a>（助记词转换器）</p><p>1.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.dovemetrics.com/">www.dovemetrics.com</a>（一级市场融资一览）</p><p>1.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://snapshot.org/#/">snapshot.org/#/</a>（投票治理工具）</p><p>1.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/p8CJY1Us8d">cryptobubbles.net</a>（加密货币市场的交互式可视化工具）</p><p>1.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ericet.github.io/cosmos-vote/">ericet.github.io/cosmos-vote/</a>（cosmos批量投票工具）</p><p>1.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://whenfi.com/#/content?code=faucet">whenfi.com/#/content?code=faucet</a>（测试网水龙头一览）</p><p>1.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/xM0XmFPPuQ">apy.top</a>（各链的收益查询工具）</p><p>2.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://cryptofees.info/">cryptofees.info</a>（不同平台的费用分析统计，包括交易手续费，利息等）</p><p>2.1；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/6CQ1KK8S2Z">fees.wtf</a>（gas花费查询网站）</p><p>2.2；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://vestlab.io/">vestlab.io</a>（代币上架以及解锁时间追踪）</p><p>2.3；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mapofzones.com/?testnet=false&amp;period=24&amp;tableOrderBy=ibcVolume&amp;tableOrderSort=desc">mapofzones.com/?testnet=false&amp;period=24&amp;tableOrderBy=ibcVolume&amp;tableOrderSort=desc</a></p><p>（cosmos生态IBC转账数据统计）</p><p>2.4；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.marketcapof.com/">www.marketcapof.com</a>（按市值比较加密货币，找出你的加密货币与另一个加密货币的市值会有什么价格。计算你的加密货币是否被低估或高估的最简单工具之一。访问你的加密货币的当前数据，并通过图表查看价格历史）</p><p>2.5；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://apesafe.io/">apesafe.io</a>（免费在线智能合约比较工具）</p><p>2.6；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.defistation.io/">www.defistation.io</a>（Defistation是一个DeFi排行榜和分析网站. Only For BSC）</p><p>2.7；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://daomaker.com/">daomaker.com</a>（DAO卵化和启动项目工具）</p><p>2.8；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://deepdao.io/organizations">deepdao.io/organizations</a>（DAO生态数据门户网）</p><p>2.9；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.dextools.io/app/">www.dextools.io/app/</a>（综合K线工具）</p><p>3.0；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.defisafety.com/pqrs">www.defisafety.com/pqrs</a>（协议安全审查工具）</p><p>暂时就这些，以后会继续添加，请收藏并转发并关注我twitter</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[Merkle Tree Deepen Principle]]></title>
            <link>https://paragraph.com/@ht111/merkle-tree-deepen-principle</link>
            <guid>ICGySqcOESgwGMBsVjHC</guid>
            <pubDate>Fri, 18 Mar 2022 23:32:44 GMT</pubDate>
            <description><![CDATA[ArtArt概念概念概念Merkle Tree，也被称作Hash Tree，存储hash值的一棵树。Merkle树的叶子是数据块(例如，文件或者文件的集合)的hash值，非叶节点是其对应子节点串联字符串的hash。HashHash是一个把任意长度的数据映射成固定长度数据的函数。例如，对于数据完整性校验，最简单的方法是对整个数据做Hash运算得到固定长度的Hash值，然后把得到的Hash值公布在网上，这样用户下载到数据之后，对数据再次进行Hash运算，比较运算结果和网上公布的Hash值进行比较，如果两个Hash值相等，说明下载的数据没有损坏。可以这样做是因为输入数据的稍微改变就会引起Hash运算结果的面目全非，而且根据Hash值反推原始输入数据的特征是困难的。如果从一个稳定的服务器进行下载，采用单一Hash是可取的。但如果数据源不稳定，一旦数据损坏，就需要重新下载，这种下载的效率是很低的。Hash List在点对点网络中作数据传输的时候，会同时从多个机器上下载数据，而且很多机器可以认为是不稳定或者不可信的。为了校验数据的完整性，更好的办法是把大的文件分割成小的数据块（例如，把分割成...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a78fbb937d646c36a86febd9820458d734fe6d1296ef305138e5441a5d6f9723.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</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/557fcb7fa43e968fa3be0ee0628890c004c0504ecc4e5e5f9da255b80c0c89ac.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>概念</p><blockquote><p>Merkle Tree，也被称作<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://so.csdn.net/so/search?q=Hash&amp;spm=1001.2101.3001.7020">Hash</a> Tree，存储hash值的一棵树。Merkle树的叶子是数据块(例如，文件或者文件的集合)的hash值，非叶节点是其对应子节点串联字符串的hash。</p></blockquote><h2 id="h-hash" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hash</h2><p>Hash是一个把任意长度的数据映射成固定长度数据的函数。例如，对于数据完整性<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://so.csdn.net/so/search?q=%E6%A0%A1%E9%AA%8C&amp;spm=1001.2101.3001.7020">校验</a>，最简单的方法是对整个数据做Hash运算得到固定长度的Hash值，然后把得到的Hash值公布在网上，这样用户下载到数据之后，对数据再次进行Hash运算，比较运算结果和网上公布的Hash值进行比较，如果两个Hash值相等，说明下载的数据没有损坏。可以这样做是因为输入数据的稍微改变就会引起Hash运算结果的面目全非，而且根据Hash值反推原始输入数据的特征是困难的。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1a392974c1ecc30c161d90eadd105b21486314ec0f859f2a6689f0f52249872d.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><h2 id="h-hash-list" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hash List</h2><p>在点对点网络中作数据传输的时候，会同时从多个机器上下载数据，而且很多机器可以认为是不稳定或者不可信的。为了校验数据的完整性，更好的办法是把大的文件分割成小的数据块（例如，把分割成2K为单位的数据块）。这样的好处是，如果小块数据在传输过程中损坏了，那么只要重新下载这一快数据就行了，不用重新下载整个文件。</p><p>怎么确定小的数据块没有损坏哪？只需要为每个数据块做Hash。BT下载的时候，在下载到真正数据之前，我们会先下载一个Hash列表。那么问题又来了，怎么确定这个Hash列表本事是正确的哪？答案是把每个小块数据的Hash值拼到一起，然后对这个长<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://so.csdn.net/so/search?q=%E5%AD%97%E7%AC%A6%E4%B8%B2&amp;spm=1001.2101.3001.7020">字符串</a>在作一次Hash运算，这样就得到Hash列表的根Hash(Top Hash or Root Hash)。下载数据的时候，首先从可信的数据源得到正确的根Hash，就可以用它来校验Hash列表了，然后通过校验后的Hash列表校验数据块。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18a4285660bf473b55fe07b8e9f451c990dbcf4930dd868891ba633e92e36586.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-merkle-tree" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Merkle Tree</h2><p>Merkle Tree可以看做Hash List的泛化（Hash List可以看作一种特殊的Merkle Tree，即树高为2的多叉Merkle Tree）。</p><p>在最底层，和哈希列表一样，我们把数据分成小的数据块，有相应地哈希和它对应。但是往上走，并不是直接去运算根哈希，而是把相邻的两个哈希合并成一个字符串，然后运算这个字符串的哈希，这样每两个哈希就合并哈希，得到了一个”子哈希“。如果最底层的哈希总数是单数，那到最后必然出现一个单一哈希，这种情况就直接对它进行哈希运算，所以也能得到它的子哈希。于是往上推，依然是一样的方式，可以得到数目更少的新一级哈希，最终必然形成一棵倒挂的树，到了树根的这个位置，这一代就剩下一个根哈希了，我们把它叫做 Merkle Root。</p><p>在p2p网络下载网络之前，先从可信的源获得文件的Merkle Tree树根。一旦获得了树根，就可以从其他从不可信的源获取Merkle tree。通过可信的树根来检查接受到的Merkle Tree。如果Merkle Tree是损坏的或者虚假的，就从其他源获得另一个Merkle Tree，直到获得一个与可信树根匹配的Merkle Tree。</p><p><em>Merkle Tree和Hash List的主要区别是，可以直接下载并立即验证Merkle Tree的一个分支。因为可以将文件切分成小的数据块，这样如果有一块数据损坏，仅仅重新下载这个数据块就行了。如果文件非常大，那么Merkle tree和Hash list都很大，但是Merkle tree可以一次下载一个分支，然后立即验证这个分支，如果分支验证通过，就可以下载数据了。而Hash list只有下载整个hash list才能验证。</em></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a618f43c3d322dbd640e862f1348f081f426569167f91802a9f3de49fe77304a.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><h2 id="h-merkle-tree-features" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Merkle Tree features</h2><ol><li><p>Merkle Tree是一种树，大多数是二叉树；也可以多叉树，无论是几叉树，它都具有树结构的所有特点；</p></li><li><p>Merkle Tree的叶子节点的value是数据集合的单元数据或者单元数据Hash。</p></li><li><p>非叶子节点的value是根据它下面所有的叶子节点值，然后按照Hash算法计算而得出的。</p></li></ol><p>通常，加密的hash方法像SHA-2和MD5用来做hash。但如果仅仅防止数据不是蓄意的损坏或篡改，可以改用一些安全性低但效率高的校验和算法，如CRC。</p><p>Second Preimage Attack: Merkle tree的树根并不表示树的深度，这可能会导致second-preimage attack，即攻击者创建一个具有相同Merkle树根的虚假文档。一个简单的解决方法在Certificate Transparency中定义：当计算叶节点的hash时，在hash数据前加0x00。当计算内部节点是，在前面加0x01。另外一些实现限制hash tree的根，通过在hash值前面加深度前缀。因此，前缀每一步会减少，只有当到达叶子时前缀依然为正，提取的hash链才被定义为有效。</p><h2 id="h-merkle-tree-operator" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Merkle Tree Operator</h2><p>1、创建Merkle Tree</p><p>加入最底层有9个数据块。</p><p>step1：（红色线）对数据块做hash运算，Node0i = hash(Data0i), i=1,2,…,9</p><p>step2: （橙色线）相邻两个hash块串联，然后做hash运算，Node1((i+1)/2) = hash(Node0i+Node0(i+1)), i=1,3,5,7;对于i=9, Node1((i+1)/2) = hash(Node0i)</p><p>step3: （黄色线）重复step2</p><p>step4：（绿色线）重复step2</p><p>step5：（蓝色线）重复step2，生成Merkle Tree Root</p><p>易得，创建Merkle Tree是O(n)复杂度(这里指O(n)次hash运算)，n是数据块的大小。得到Merkle Tree的树高是log(n)+1。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c8e73129a6196fa81d7d150f642d057a8e85cb1f6a2a48ca871e645ebd5487f4.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>2、检索数据块</p><p>为了更好理解，我们假设有A和B两台机器，A需要与B相同目录下的8个文件，文件分别是f1 f2 f3 ….f8。这个时候我们就可以通过Merkle Tree来进行快速比较。假设我们在文件创建的时候每个机器都构建了一个Merkle Tree。具体如下图:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d657397b78d539310e9a58e6d93c84374a49aab425f4963183975111ca5717d4.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>从上图可得知，叶子节点node7的value = hash(f1),是f1文件的HASH;而其父亲节点node3的value = hash(v7, v8)，也就是其子节点node7 node8的值得HASH。就是这样表示一个层级运算关系。root节点的value其实是所有叶子节点的value的唯一特征。</p><p>假如A上的文件5与B上的不一样。我们怎么通过两个机器的merkle treee信息找到不相同的文件? 这个比较检索过程如下:</p><p>Step1. 首先比较v0是否相同,如果不同，检索其孩子node1和node2.</p><p>Step2. v1 相同，v2不同。检索node2的孩子node5 node6;</p><p>Step3. v5不同，v6相同，检索比较node5的孩子node 11 和node 12</p><p>Step4. v11不同，v12相同。node 11为叶子节点，获取其目录信息。</p><p>Step5. 检索比较完毕。</p><p>以上过程的理论复杂度是Log(N)。过程描述图如下:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9624c24527d52565db3548fe856f4692f8b575a9caf7c70de09c2898b4f75184.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>从上图可以得知真个过程可以很快的找到对应的不相同的文件。</p><p>3、更新，插入和删除</p><p>对于Merkle Tree数据块的更新操作其实是很简单的，更新完数据块，然后接着更新其到树根路径上的Hash值就可以了，这样不会改变Merkle Tree的结构。但是，插入和删除操作肯定会改变Merkle Tree的结构，如下图，一种插入操作是这样的：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b167955bf25b301131f8e15dad0b6a7408b18f885d7e8e9e0cae2e68f7bf13c2.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>插入数据块0后(考虑数据块的位置)，Merkle Tree的结构是这样的：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fbcc1f7bf905e8e065f8ced01d8c5193d7bf1641cc09c849f5ba08261b2b6730.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>这其中应用到了插入算法，满足下面条件：</p><ul><li><p>re-hashing操作的次数控制在log(n)以内</p></li><li><p>数据块的校验在log(n)+1以内</p></li><li><p>除非原始树的n是偶数，插入数据后的树没有孤儿，并且如果有孤儿，那么孤儿是最后一个数据块</p></li><li><p>数据块的顺序保持一致</p></li><li><p>插入后的Merkle Tree保持平衡</p></li></ul><p>然后上面的插入结果就会变成这样：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef622a3b27b3e8be35bc623970302f42e3397be9648d8d9fe4bac2d8189d46ca.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>Merkle Tree的插入和删除操作其实是一个工程上的问题，不同问题会有不同的插入方法。如果要确保树是平衡的或者是树高是log(n)的，可以用任何的标准的平衡二叉树的模式，如AVL树，红黑树，伸展树，2-3树等。这些平衡二叉树的更新模式可以在O(lgn)时间内完成插入操作，并且能保证树高是O(lgn)的。那么很容易可以看出更新所有的Merkle Hash可以在O((lgn)2)时间内完成（对于每个节点如要更新从它到树根O(lgn)个节点，而为了满足树高的要求需要更新O(lgn)个节点）。如果仔细分析的话，更新所有的hash实际上可以在O(lgn)时间内完成，因为要改变的所有节点都是相关联的，即他们要不是都在从某个叶节点到树根的一条路径上，或者这种情况相近。</p><h2 id="h-merkle-tree" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Merkle Tree的应用</h2><p>1、数字签名</p><p>最初Merkle Tree目的是高效的处理Lamport one-time signatures。 每一个Lamport key只能被用来签名一个消息，但是与Merkle tree结合可以来签名多条Merkle。这种方法成为了一种高效的数字签名框架，即Merkle Signature Scheme。</p><p>2、P2P网络</p><p>在P2P网络中，Merkle Tree用来确保从其他节点接受的数据块没有损坏且没有被替换，甚至检查其他节点不会欺骗或者发布虚假的块。大家所熟悉的BT下载就是采用了P2P技术来让客户端之间进行数据传输，一来可以加快数据下载速度，二来减轻下载服务器的负担。BT即BitTorrent，是一种中心索引式的P2P文件分分析通信协议。</p><p>要进下载必须从中心索引服务器获取一个扩展名为torrent的索引文件（即大家所说的种子），torrent文件包含了要共享文件的信息，包括文件名，大小，文件的Hash信息和一个指向Tracker的URL[8]。Torrent文件中的Hash信息是每一块要下载的文件内容的加密摘要，这些摘要也可运行在下载的时候进行验证。大的torrent文件是Web服务器的瓶颈，而且也不能直接被包含在RSS或gossiped around(用流言传播协议进行传播)。一个相关的问题是大数据块的使用，因为为了保持torrent文件的非常小，那么数据块Hash的数量也得很小，这就意味着每个数据块相对较大。大数据块影响节点之间进行交易的效率，因为只有当大数据块全部下载下来并校验通过后，才能与其他节点进行交易。</p><p>就解决上面两个问题是用一个简单的Merkle Tree代替Hash List。设计一个层数足够多的满二叉树，叶节点是数据块的Hash，不足的叶节点用0来代替。上层的节点是其对应孩子节点串联的hash。Hash算法和普通torrent一样采用SHA1。其数据传输过程和第一节中描述的类似。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e4d3e3d74fce89a96fa9473b0f56fdb38ca2f827ad0e40011e14c052413f3681.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>3、Trusted Computing</p><p>可信计算是可信计算组为分布式计算环境中参与节点的计算平台提供端点可信性而提出的。可信计算技术在计算平台的硬件层引入可信平台模块(Trusted Platform，TPM)，实际上为计算平台提供了基于硬件的可信根(Root of trust，RoT)。从可信根出发，使用信任链传递机制，可信计算技术可对本地平台的硬件及软件实施逐层的完整性度量，并将度量结果可靠地保存再TPM的平台配置寄存器(Platform configuration register，PCR)中，此后远程计算平台可通过远程验证机制(Remote Attestation)比对本地PCR中度量结果，从而验证本地计算平台的可信性。可信计算技术让分布式应用的参与节点摆脱了对中心服务器的依赖，而直接通过用户机器上的TPM芯片来建立信任，使得创建扩展性更好、可靠性更高、可用性更强的安全分布式应用成为可能。可信计算技术的核心机制是远程验证(remote attestation),分布式应用的参与结点正是通过远程验证机制来建立互信,从而保障应用的安全。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/647eca1068b219a9d9ac9f3b915d29be03aeb6fe567fb4753817b00c483e2311.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>基于Merkle Tree的远程验证机制，其核心是完整性度量值哈希树。</p><p>首先,RAMT 在内核中维护的不再是一张完整性度量值列表(ML),而是一棵完整性度量值哈希树(integrity measurement hash tree,简称IMHT).其中,IMHT的叶子结点存储的数据对象是待验证计算平台上被度量的各种程序的完整性哈希值,而其内部结点则依据Merkle 哈希树的构建规则由子结点的连接的哈希值动态生成。</p><p>其次,为了维护IMHT 叶子结点的完整性,RAMT 需要使用TPM 中的一段存储器来保存IMHT 可信根哈希的值。</p><p>再次,RAMT 的完整性验证过程基于认证路径(authentication path)实施.认证路径是指IMHT 上从待验证叶子结点到根哈希的路径。</p><p>4、IPFS</p><p>IPFS(InterPlanetary File System)是很多互联网技术的综合体，如DHT( Distributed HashTable，分布式哈希表)，Git版本控制系统，Bittorrent等。它创建了一个P2P的集群，这个集群允许IPFS对象的交换。全部的IPFS对象形成了一个被称作Merkle DAG的加密认证数据结构。</p><p>IPFS对象是一个含有两个域的数据结构:</p><ul><li><p>Data – 非结构的二进制数据，大小小于256kB</p></li><li><p>Links – 一个Link数据结构的数组。IPFS对象通过他们链接到其他对象</p></li></ul><p>Link数据结构包含三个域：</p><ul><li><p>Name – Link的名字</p></li><li><p>Hash – Link链接到对象的Hash</p></li><li><p>Size – Link链接到对象的累积大小，包括它的Links</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/27b817982300a93f64dd9238c42cd192ed39151b0ec662ba58e04aa1d91aa37b.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>通过Name和Links，IPFS的集合组成了一个Merkle DAG（有向无环图）。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7a4123b04ab1b04f38e0fd2e713a2890ae936702d9e3fa7c373489ba545e5943.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>对于小文件（&lt;256kB），是一个没有Links的IPFS对象。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/27ecea0203e32f258d7b8b5c5b59ad24b5e299d39775a079f2b284e4289b1b13.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>对于大文件，被表示为一个文件块(&lt;256kB)的集合。只有拥有最小的Data的对象来代表这个大文件。这个对象的Links的名字都为空字符串。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/61dd7e05a366b5c0075cb80e89c0218d46e57f0b1d960465baf3702e7bfe771c.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/943d90bc2d3cb7991cff150743e5df729e2a7b53e06460922a3324336296f77a.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>目录结构：目录是没有数据的IPFS对象，它的链接指向其包含的文件和目录。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2568946d6b2f71e7e962ee0fe7ffd7c6c984fd915db2ef897d98f7602da56031.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>IPFS可以表示Git使用的数据结构，Git commit object。Commit Object主要的特点是他有一个或多个名为’parent0’和‘parent1’等的链接（这些链接指向前一个版本），以及一个名为object的对象(在Git中成为tree)指向引用这个commit的文件系统结构。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2b45869b3bda2be9b7cff7f523835e5ff9ca96144094d7e1f21477bc4bac0937.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>5、BitCoin和Ethereum</p><p>Merkle Proof最早的应用是Bitcoin，它是由中本聪在2009年描述并创建的。Bitcoin的Blockchain利用Merkle proofs来存储每个区块的交易。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0e417cefbe4197a71862456838808e606f59b9944c75ebc351659ea3ec953cbb.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>就是中本聪描述到的“简化支付验证”（Simplified Payment Verification，SPV）的概念:一个“轻客户端”（light client）可以仅下载链的区块头即每个区块中的80byte的数据块，仅包含五个元素，而不是下载每一笔交易以及每一个区块：</p><ul><li><p>上一区块头的哈希值</p></li><li><p>时间戳</p></li><li><p>挖矿难度值</p></li><li><p>工作量证明随机数（nonce）</p></li><li><p>包含该区块交易的Merkle Tree的根哈希\</p><p>如果客户端想要确认一个交易的状态，它只需简单的发起一个Merkle proof请求，这个请求显示出这个特定的交易在Merkle trees的一个之中，而且这个Merkle Tree的树根在主链的一个区块头中。</p></li></ul><p>但是Bitcoin的轻客户端有它的局限。一个局限是，尽管它可以证明包含的交易，但是它不能进行涉及当前状态的证明（如数字资产的持有，名称注册，金融合约的状态等）。</p><p>Bitcoin如何查询你当前有多少币？一个比特币轻客户端，可以使用一种协议，它涉及查询多个节点，并相信其中至少会有一个节点会通知你，关于你的地址中任何特定的交易支出，而这可以让你实现更多的应用。但对于其他更为复杂的应用而言，这些远远是不够的。一笔交易影响的确切性质（precise nature），可以取决于此前的几笔交易，而这些交易本身则依赖于更为前面的交易，所以最终你可以验证整个链上的每一笔交易。为了解决这个问题，Ethereum的Merkle Tree的概念，会更进一步。</p><h3 id="h-ethereummerkle-proof" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Ethereum的Merkle Proof</h3><p>每个以太坊区块头不是包括一个Merkle树，而是为三种对象设计的三棵树：</p><ul><li><p>交易Transaction</p></li><li><p>收据Receipts(本质上是显示每个交易影响的多块数据)</p></li><li><p>状态State</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4c428cb2dba607d40f69f4b3b83a2f572f8d8931b52388414f063320d7a5ccb5.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><ul><li><p>这使得一个非常先进的轻客户端协议成为了可能，它允许轻客户端轻松地进行并核实以下类型的查询答案：</p></li><li><p>这笔交易被包含在特定的区块中了么？</p></li><li><p>告诉我这个地址在过去30天中，发出X类型事件的所有实例（例如，一个众筹合约完成了它的目标）</p></li><li><p>目前我的账户余额是多少？</p></li><li><p>这个账户是否存在？</p></li><li><p>假如在这个合约中运行这笔交易，它的输出会是什么？\</p><p>第一种是由交易树（transaction tree）来处理的；第三和第四种则是由状态树（state tree）负责处理，第二种则由收据树（receipt tree）处理。计算前四个查询任务是相当简单的。服务器简单地找到对象，获取Merkle分支，并通过分支来回复轻客户端。</p></li></ul><p>第五种查询任务同样也是由状态树处理，但它的计算方式会比较复杂。这里，我们需要构建一个Merkle状态转变证明（Merkle state transition proof）。从本质上来讲，这样的证明也就是在说“如果你在根S的状态树上运行交易T，其结果状态树将是根为S’，log为L，输出为O” （“输出”作为存在于以太坊的一种概念，因为每一笔交易都是一个函数调用；它在理论上并不是必要的）。</p><p>为了推断这个证明，服务器在本地创建了一个假的区块，将状态设为 S，并在请求这笔交易时假装是一个轻客户端。也就是说，如果请求这笔交易的过程，需要客户端确定一个账户的余额，这个轻客户端(由服务器模拟的)会发出一个余额查询请求。如果需要轻客户端在特点某个合约的存储中查询特定的条目，这个轻客户端就会发出这样的请求。也就是说服务器(通过模拟一个轻客户端)正确回应所有自己的请求，但服务器也会跟踪它所有发回的数据。</p><p>然后，服务器从上述的这些请求中把数据合并并把数据以一个证明的方式发送给客户端。</p><p>然后，客户端会进行相同的步骤，但会将服务器提供的证明作为一个数据库来使用。如果客户端进行步骤的结果和服务器提供的是一样的话，客户端就接受这个证明。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c495fe05dbea4f39db2217435b709d461a0020f757dda373b25f767d64f69a63.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><h3 id="h-mptmerkle-patricia-trees" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">MPT(Merkle Patricia Trees)</h3><p>前面我们提到，最为简单的一种Merkle Tree大多数情况下都是一棵二叉树。然而，Ethereum所使用的Merkle Tree则更为复杂，我们称之为“梅克尔.帕特里夏树”（Merkle Patricia tree）。</p><p>对于验证属于list格式（本质上来讲，它就是一系列前后相连的数据块）的信息而言，二叉Merkle Tree是非常好的数据结构。对于交易树来说，它们也同样是不错的，因为一旦树已经建立，花多少时间来编辑这棵树并不重要，树一旦建立了，它就会永远存在并且不会改变。</p><p>但是，对于状态树，情况会更复杂些。以太坊中的状态树基本上包含了一个键值映射，其中的键是地址，而值包括账户的声明、余额、随机数nounce、代码以及每一个账户的存储（其中存储本身就是一颗树）。例如，摩登测试网络（the Morden testnet ）的创始状态如下所示：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/86cbb961ff6abf6ca4a0cda024e34d00837a023eea8fc7e3fb20b788827b9376.png" alt="Art" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Art</figcaption></figure><p>Art</p><p>然而，不同于交易历史记录，状态树需要经常地进行更新：账户余额和账户的随机数nonce经常会更变，更重要的是，新的账户会频繁地插入，存储的键（ key）也会经常被插入以及删除。我们需要这样的数据结构，它能在一次插入、更新、删除操作后快速计算到树根，而不需要重新计算整个树的Hash。这种数据结构同样得包括两个非常好的第二特征：</p><ul><li><p>树的深度是有限制的，即使考虑攻击者会故意地制造一些交易，使得这颗树尽可能地深。不然，攻击者可以通过操纵树的深度，执行拒绝服务攻击（DOS attack），使得更新变得极其缓慢。</p></li><li><p>树的根只取决于数据，和其中的更新顺序无关。换个顺序进行更新，甚至重新从头计算树，并不会改变根。\</p><p>MPT是最接近同时满足上面的性质的的数据结构。MPT的工作原理的最简单的解释是，值通过键来存储，键被编码到搜索树必须要经过的路径中。每个节点有16个孩子，因此路径又16进制的编码决定：例如，键‘dog’的16进制编码是6 4 6 15 6 7，所以从root开始到第六个分支，然后到第四个，再到第六个，再到第十五个，这样依次进行到达树的叶子。</p></li></ul><p>在实践中，当树稀少时也会有一些额外的优化，我们会使过程更为有效，但这是基本的原则。</p><p>6、其他应用</p><p>用到Merkle Tree的应用还有很多，比如Git，Amazon Dynamo，Apache Wave Protocol，Tahoe-LAFS backup system，Certificate Transparency framework，NoSQL systems like Apache Cassadra and Riak等</p><h2 id="h-reference" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Reference</h2><pre data-type="codeBlock" text="[1] https://en.wikipedia.org/wiki/Merkle_tree

[2] https://en.wikipedia.org/wiki/Hash_function#Hash_function_algorithms

[3] http://www.jianshu.com/p/458e5890662f

[4] http://blog.csdn.net/xtu_xiaoxin/article/details/8148237

[5] http://blog.csdn.net/yuanrxdu/article/details/22474697?utm_source=tuicool&amp;utm_medium=referral

[6] http://crypto.stackexchange.com/questions/22669/merkle-hash-tree-updates

[7] https://en.wikipedia.org/wiki/BitTorrent

[8] 梁成仁, 李健勇, 黄道颖, 等. 基于 Merkle 树的 BT 系统 torrent 文件优化策略[J]. 计算机工程, 2008, 34(3): 85-87.

[9] http://bittorrent.org/beps/bep_0030.html

[10] 徐梓耀, 贺也平, 邓灵莉. 一种保护隐私的高效远程验证机制[J]. Journal of Software, 2011, 22(2).

[11] http://whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example/

[12] https://www.weusecoins.com/what-is-a-merkle-tree/

[13] http://www.8btc.com/merkling-in-ethereum
"><code><span class="hljs-selector-attr">[1]</span> <span class="hljs-selector-tag">https</span>:<span class="hljs-comment">//en.wikipedia.org/wiki/Merkle_tree</span>

<span class="hljs-selector-attr">[2]</span> <span class="hljs-selector-tag">https</span>:<span class="hljs-comment">//en.wikipedia.org/wiki/Hash_function#Hash_function_algorithms</span>

<span class="hljs-selector-attr">[3]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//www.jianshu.com/p/458e5890662f</span>

<span class="hljs-selector-attr">[4]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//blog.csdn.net/xtu_xiaoxin/article/details/8148237</span>

<span class="hljs-selector-attr">[5]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//blog.csdn.net/yuanrxdu/article/details/22474697?utm_source=tuicool&#x26;utm_medium=referral</span>

<span class="hljs-selector-attr">[6]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//crypto.stackexchange.com/questions/22669/merkle-hash-tree-updates</span>

<span class="hljs-selector-attr">[7]</span> <span class="hljs-selector-tag">https</span>:<span class="hljs-comment">//en.wikipedia.org/wiki/BitTorrent</span>

<span class="hljs-selector-attr">[8]</span> 梁成仁, 李健勇, 黄道颖, 等. 基于 <span class="hljs-selector-tag">Merkle</span> 树的 <span class="hljs-selector-tag">BT</span> 系统 <span class="hljs-selector-tag">torrent</span> 文件优化策略<span class="hljs-selector-attr">[J]</span>. 计算机工程, <span class="hljs-number">2008</span>, <span class="hljs-number">34</span>(<span class="hljs-number">3</span>): <span class="hljs-number">85</span><span class="hljs-selector-tag">-87</span>.

<span class="hljs-selector-attr">[9]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//bittorrent.org/beps/bep_0030.html</span>

<span class="hljs-selector-attr">[10]</span> 徐梓耀, 贺也平, 邓灵莉. 一种保护隐私的高效远程验证机制<span class="hljs-selector-attr">[J]</span>. <span class="hljs-selector-tag">Journal</span> <span class="hljs-selector-tag">of</span> <span class="hljs-selector-tag">Software</span>, <span class="hljs-number">2011</span>, <span class="hljs-number">22</span>(<span class="hljs-number">2</span>).

<span class="hljs-selector-attr">[11]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//whatdoesthequantsay.com/2015/09/13/ipfs-introduction-by-example/</span>

<span class="hljs-selector-attr">[12]</span> <span class="hljs-selector-tag">https</span>:<span class="hljs-comment">//www.weusecoins.com/what-is-a-merkle-tree/</span>

<span class="hljs-selector-attr">[13]</span> <span class="hljs-selector-tag">http</span>:<span class="hljs-comment">//www.8btc.com/merkling-in-ethereum</span>
</code></pre>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[Solidity中一种高效通过代码减少gas消耗的方法]]></title>
            <link>https://paragraph.com/@ht111/solidity-gas</link>
            <guid>LRrYmGvqWrA1IcHoALhX</guid>
            <pubDate>Fri, 18 Mar 2022 23:31:54 GMT</pubDate>
            <description><![CDATA[ARTART 主要是通过代码中memory来大幅度减少gas使用，示例代码如下：pragma solidity ^0.5.10; contract Test{ struct User{ uint age; uint balance; uint num; } User user; function initUser() public{ user = User({age:20,balance:1000,num:1}); } function setUser1() public { user.age = 30; user.balance = 20000; user.num = 2; } function setUser2() public { User memory temp = user; temp.age = 40; temp.age = 20001; user.num = 3; user = temp; } } pragma solidity ^0.5.10; contract Test{ struct User{ uint age; uint balance; uint num...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/95401af71cd7e0f04046e8f97154293a17ef6955db01185a92eed4731bbf2896.png" alt="ART" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">ART</figcaption></figure><p>ART</p><p>主要是通过代码中memory来大幅度减少gas使用，示例代码如下：</p><pre data-type="codeBlock" text="pragma solidity ^0.5.10;

contract Test{
    
    struct User{
        uint age;
        uint balance;
        uint num;
    }
    
    User user;
    
    function initUser() public{
        user = User({age:20,balance:1000,num:1});
    }
    
    function setUser1() public {
        user.age = 30;
        user.balance = 20000;
        user.num = 2;
    }
    
    function setUser2() public {
        User memory temp = user;
        temp.age = 40;
        temp.age = 20001;
        user.num = 3;
        user = temp;
    }
}
pragma solidity ^0.5.10;

contract Test{
    
    struct User{
        uint age;
        uint balance;
        uint num;
    }
    
    User user;
    
    function initUser() public{
        user = User({age:20,balance:1000,num:1});
    }
    
    function setUser1() public {
        user.age = 30;
        user.balance = 20000;
        user.num = 2;
    }
    
    function setUser2() public {
        User memory temp = user;
        temp.age = 40;
        temp.age = 20001;
        user.num = 3;
        user = temp;
    }
}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.5.10;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Test</span></span>{
    
    <span class="hljs-keyword">struct</span> <span class="hljs-title">User</span>{
        <span class="hljs-keyword">uint</span> age;
        <span class="hljs-keyword">uint</span> balance;
        <span class="hljs-keyword">uint</span> num;
    }
    
    User user;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">initUser</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span></span>{
        user <span class="hljs-operator">=</span> User({age:<span class="hljs-number">20</span>,balance:<span class="hljs-number">1000</span>,num:<span class="hljs-number">1</span>});
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setUser1</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        user.age <span class="hljs-operator">=</span> <span class="hljs-number">30</span>;
        user.<span class="hljs-built_in">balance</span> <span class="hljs-operator">=</span> <span class="hljs-number">20000</span>;
        user.num <span class="hljs-operator">=</span> <span class="hljs-number">2</span>;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setUser2</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        User <span class="hljs-keyword">memory</span> temp <span class="hljs-operator">=</span> user;
        temp.age <span class="hljs-operator">=</span> <span class="hljs-number">40</span>;
        temp.age <span class="hljs-operator">=</span> <span class="hljs-number">20001</span>;
        user.num <span class="hljs-operator">=</span> <span class="hljs-number">3</span>;
        user <span class="hljs-operator">=</span> temp;
    }
}
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.5.10;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Test</span></span>{
    
    <span class="hljs-keyword">struct</span> <span class="hljs-title">User</span>{
        <span class="hljs-keyword">uint</span> age;
        <span class="hljs-keyword">uint</span> balance;
        <span class="hljs-keyword">uint</span> num;
    }
    
    User user;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">initUser</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span></span>{
        user <span class="hljs-operator">=</span> User({age:<span class="hljs-number">20</span>,balance:<span class="hljs-number">1000</span>,num:<span class="hljs-number">1</span>});
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setUser1</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        user.age <span class="hljs-operator">=</span> <span class="hljs-number">30</span>;
        user.<span class="hljs-built_in">balance</span> <span class="hljs-operator">=</span> <span class="hljs-number">20000</span>;
        user.num <span class="hljs-operator">=</span> <span class="hljs-number">2</span>;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setUser2</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        User <span class="hljs-keyword">memory</span> temp <span class="hljs-operator">=</span> user;
        temp.age <span class="hljs-operator">=</span> <span class="hljs-number">40</span>;
        temp.age <span class="hljs-operator">=</span> <span class="hljs-number">20001</span>;
        user.num <span class="hljs-operator">=</span> <span class="hljs-number">3</span>;
        user <span class="hljs-operator">=</span> temp;
    }
}
</code></pre><p>我们首先通过initUser方法来初始化一个User对象的数据，然后分别调用setUser1和setUser2两个方法。</p><p>你会发现，setUser1需要消耗36476gas，而setUser2只需要效果31595gas，它们的效果相同，消耗的gas却差了5000gas，如果User的字段增多，那么此差距会越来越大。</p><p>那么这两种写法的区别是什么呢？我们知道，区块链上的写操作是比较昂贵的，而setUser1进行了多次的写操作，而setUser2只进行了一次整体的写操作。因此，节省了相当大一部分的gas。</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[Learn Solidity Series 7: function]]></title>
            <link>https://paragraph.com/@ht111/learn-solidity-series-7-function</link>
            <guid>S2TOsBcs9Bc9EJOGdp48</guid>
            <pubDate>Fri, 18 Mar 2022 23:30:16 GMT</pubDate>
            <description><![CDATA[function define函数入参和出参类型不能够使用var关键字。另外，函数可以返回多个值。 如果参数没有被使用，那么可以省略参数名。但是这些参数仍然存在堆栈中，只是无法访问而已。function 函数名(参数类型 参数名, ...) 修饰符 [returns(返回类型, ...)] { 函数体 } 示例： function sum(int a, int b) public pure returns(int) { return a + b; } function test1(int a, int b) public pure returns(int, int) { return (a, b); } function test2(int a, int b) public pure returns(int x, int y) { x = a; y = b; } function test(int a, int) public pure returns(int) { return a; } 函数声明使用pure，代表该函数不能读取或修改状态变量，也不能发送和接收以太币，只能调用其...]]></description>
            <content:encoded><![CDATA[<h2 id="h-function-define" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">function define</h2><blockquote><p>函数入参和出参类型不能够使用var关键字。另外，函数可以返回多个值。</p><p>如果参数没有被使用，那么可以省略参数名。但是这些参数仍然存在堆栈中，只是无法访问而已。</p></blockquote><pre data-type="codeBlock" text="function 函数名(参数类型 参数名, ...) 修饰符 [returns(返回类型, ...)] {
    函数体
}

示例：
function sum(int a, int b) public pure returns(int) {
   return a + b;
}

function test1(int a, int b) public pure returns(int, int) {
   return (a, b);
}

function test2(int a, int b) public pure returns(int x, int y) {
   x = a;
   y = b;
}
function test(int a, int) public pure returns(int) {
  return a;
}
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> 函数名(<span class="hljs-params">参数类型 参数名, ...</span>) 修饰符 [<span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params">返回类型, ...</span>)] </span>{
    函数体
}

示例：
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sum</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span></span>) </span>{
   <span class="hljs-keyword">return</span> a <span class="hljs-operator">+</span> b;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test1</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span>, <span class="hljs-keyword">int</span></span>) </span>{
   <span class="hljs-keyword">return</span> (a, b);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test2</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span> x, <span class="hljs-keyword">int</span> y</span>) </span>{
   x <span class="hljs-operator">=</span> a;
   y <span class="hljs-operator">=</span> b;
}
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span></span>) </span>{
  <span class="hljs-keyword">return</span> a;
}
</code></pre><blockquote><p>函数声明使用<code>pure</code>，代表该函数不能读取或修改状态变量，也不能发送和接收以太币，只能调用其他<code>pure</code>函数</p><p>除了<code>pure</code>以外，还可以使用<code>view</code>来修饰函数，这时候该函数只能够读取状态变量，而不能修改状态变量，也不能发送或接收以太币，只能调用其他<code>pure</code>或<code>view</code>函数。</p></blockquote><pre data-type="codeBlock" text="function test(int a, int) public pure returns(int) {
  return a;
}
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span></span>) </span>{
  <span class="hljs-keyword">return</span> a;
}
</code></pre><h2 id="h-function-call" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">function call</h2><blockquote><p>函数调用可以分为内部调用和外部调用。内部调用就是通过函数名直接调用，外部调用是通过合约实例进行调用。</p><p>如果是内部调用，被调用函数在EVM中被解释为简单的代码跳转。而外部函数调用是通过发送消息的方式进行调用。</p></blockquote><pre data-type="codeBlock" text="function sum(int a, int b) public pure returns(int) {
  return a + b;
}

function test() public {
   int result = sum(10, 20); // 内部调用
   int result2 = this.sum(10, 20); // 外部调用
}
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sum</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> a, <span class="hljs-keyword">int</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">int</span></span>) </span>{
  <span class="hljs-keyword">return</span> a <span class="hljs-operator">+</span> b;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
   <span class="hljs-keyword">int</span> result <span class="hljs-operator">=</span> sum(<span class="hljs-number">10</span>, <span class="hljs-number">20</span>); <span class="hljs-comment">// 内部调用</span>
   <span class="hljs-keyword">int</span> result2 <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.sum(<span class="hljs-number">10</span>, <span class="hljs-number">20</span>); <span class="hljs-comment">// 外部调用</span>
}
</code></pre><blockquote><p>如果函数使用payable修饰，那么调用该函数时候可以指定花费的钱和gas数量。</p><p>上面调用合约a的test函数时，指定了花费的wei和gas数量。如果被调用函数所在合约本身发生抛出异常，或gas用完等情况，函数调用会抛出异常。</p><p>注意：当调用其他合约时候，就相当于将控制权交给了被调用的合约。如果不清楚被调用合约的实现细节，这时候会存在很大风险（比如重入攻击）。</p></blockquote><pre data-type="codeBlock" text="contract A {
    function test() payable public {
        // TODO
    }
}

contract B {
    A a;
    
    function setA(A _a) public {
        a = _a;
    }
    
    function call() public {
        a.test.value(10).gas(100)();
    }
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">A</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">payable</span></span> <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-comment">// TODO</span>
    }
}

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">B</span> </span>{
    A a;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setA</span>(<span class="hljs-params">A _a</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        a <span class="hljs-operator">=</span> _a;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">call</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        a.test.<span class="hljs-built_in">value</span>(<span class="hljs-number">10</span>).<span class="hljs-built_in">gas</span>(<span class="hljs-number">100</span>)();
    }
}
</code></pre><h2 id="h-function-overload" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">function overload</h2><blockquote><p>函数重载是指在一个合约里面同时存在两个或两个以上同名的函数，但函数的参数类型或数量不一样。</p><p>当程序调用函数f时候，会根据传入参数的类型和数量决定调用哪个函数。如果传入参数可以隐式地转换为目标函数参数类型，这时候需要明确指明传入参数的类型。</p></blockquote><pre data-type="codeBlock" text="contract A {
   function f() public {}
   function f(uint a) public {}
   function f(uint a, uint b) public {}
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">A</span> </span>{
   <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">f</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{}
   <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">f</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> a</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{}
   <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">f</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> a, <span class="hljs-keyword">uint</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{}
}
</code></pre><h2 id="h-function-visable" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">function visable</h2><p>solidityi提供了四种不同的可见性类型，用于限定函数或状态变量的访问范围。</p><p>可见性类型 作用\</p><p> external 允许该函数从其他合约和交易中调用，不能在当前合约直接调用，但可以通过this调用\ public 允许该函数在合约内部和外部调用\ internal 只允许在合约内部或子合约中调用\ private 只能够在当前合约中调用</p><h2 id="h-getter-function" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">getter function</h2><blockquote><p>对于public修饰的状态变量，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://so.csdn.net/so/search?q=solidity&amp;spm=1001.2101.3001.7020">solidity</a>编译器会自动为该变量添加对应的getter函数，getter函数名就是状态变量的名称。</p><p>getter函数的可见性为<code>external</code>，也就是在合约内部无法直接调用，只能通过this或合约外部调用。另外getter函数默认被标记为<code>view</code>，也就是只能读取状态变量。</p></blockquote><pre data-type="codeBlock" text="contract A { 
    uint public data;
}

contract B {
    function test() public {  
        A a = new A();
        a.data;
        a.data();
    }
}
contract A { 
    uint public data;
}

contract B {
    function test() public {  
        A a = new A();
        a.data;
        a.data();
    }
}
//a.data()是通过getter函数方法data变量
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">A</span> </span>{ 
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> data;
}

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">B</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{  
        A a <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> A();
        a.data;
        a.data();
    }
}
<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">A</span> </span>{ 
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> data;
}

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">B</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{  
        A a <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> A();
        a.data;
        a.data();
    }
}
<span class="hljs-comment">//a.data()是通过getter函数方法data变量</span>
</code></pre><blockquote><p>对于数组类型的public状态变量，如果要获取整个数组的话，不能够通过getter函数获取，只能通过变量名，或者定义一个函数来返回该变量的方式来获取。</p></blockquote><pre data-type="codeBlock" text="contract A {
    uint[] public data;  
    function getArray() public view returns(uint[] memory) { 
        return data;
    }
}

contract B {
    function test() public { 
        A a = new A();
        a.data;
        a.getArray();
        //a.data();
    }
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">A</span> </span>{
    <span class="hljs-keyword">uint</span>[] <span class="hljs-keyword">public</span> data;  
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getArray</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"><span class="hljs-keyword">uint</span>[] <span class="hljs-keyword">memory</span></span>) </span>{ 
        <span class="hljs-keyword">return</span> data;
    }
}

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">B</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{ 
        A a <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> A();
        a.data;
        a.getArray();
        <span class="hljs-comment">//a.data();</span>
    }
}
</code></pre><p>上面test函数的最后一行注释的代码会提示<code>TypeError: Wrong argument count for function call: 0 arguments given but expect 1</code>。这里只能够通过getter函数获取数组中的元素，而不能获取整个数组。</p><h2 id="h-function-modifier" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">function modifier</h2><blockquote><p>函数修饰器用于在执行函数之前执行其他额外的操作，最常见用法是在执行函数前检查是否满足条件，如果满足则执行目标函数。</p><p>定义修饰器的语法：</p></blockquote><pre data-type="codeBlock" text="modifier 修饰器名称 {
    _;
}
"><code><span class="hljs-function"><span class="hljs-keyword">modifier</span> 修饰器名称 </span>{
    <span class="hljs-keyword">_</span>;
}
</code></pre><p>下面代码定义了一个修饰器<code>onlyOwner</code>，然后在test函数声明时候指定了该修饰器。那么，当调用该函数时候，会先执行修饰器中的代码，然后再执行test函数中的代码。</p><pre data-type="codeBlock" text="contract SimpleContract {
    address owner;
    
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    
    function test() public onlyOwner {}	
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">SimpleContract</span> </span>{
    <span class="hljs-keyword">address</span> owner;
    
    <span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner</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-keyword">_</span>;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> </span>{}	
}
</code></pre><p>一个合约中可以定义多个修饰器。同一个函数也可以使用多个修饰器，多个修饰器之间使用空格隔开。调用函数时多个修饰器会依次执行。</p><pre data-type="codeBlock" text="contract SimpleContract {
    address owner;
    
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    
    modifier onlyOwner2 {
        require(msg.sender == owner);
        _;
    }   

    function test() public onlyOwner onlyOwner2  {} 
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">SimpleContract</span> </span>{
    <span class="hljs-keyword">address</span> owner;
    
    <span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner</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-keyword">_</span>;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner2</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-keyword">_</span>;
    }   

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> <span class="hljs-title">onlyOwner2</span>  </span>{} 
}
</code></pre><p>与函数类似的是，修饰器也可以有参数。</p><pre data-type="codeBlock" text="modifier onlyOwner(uint a) {}

function test() public onlyOwner(10) {}
"><code><span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> a</span>) </span>{}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span>(<span class="hljs-params"><span class="hljs-number">10</span></span>) </span>{}
</code></pre><h2 id="h-global-function" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">global function</h2><blockquote><p>solidity自带了一些特殊的变量和函数。这些变量和函数存在于全局的命名空间里面，主要用于提供区块链相关的信息，以及常用的工具函数。</p></blockquote><p>1.区块和交易属性：</p><p>函数名 描述\</p><p> blockhash(uint blockNum) returns(byte32) 获取最新256个区块中某个区块的哈希\ block.chainid(uint) 获取当前区块链的ID\ block.coinbase(address payable) 获取当前区块矿工的地址\ block.difficulty(uint) 获取当前区块的难度值\ block.gaslimit(uint) 获取当前区块的gas限额\ block.number(uint) 获取当前区块号\ block.timestamp(uint) 获取当前区块的时间戳（以秒为单位）\ gasleft() returns(uint256) 返回剩余的gas数量\ msg.data(bytes calldata) 获取完整的calldata\ msg.sender(address) 获取当前消息调用的发送者\ msg.sig(bytes4) 获取函数签名\ msg.value(uint) 获取发送消息所需要wei的数量\ tx.gasprice(uint) 获取交易的油价\ tx.origin(address) 获取交易的发起者\ 2.abi编解码函数：</p><p>函数名 描述\</p><p> abi.decode(bytes memory encodedData, …) returns(…) 对给定数据进行abi解码，而类型由第二个参数来指定\ abi.encode(…) returns(bytes memory) 对指定参数进行abi编码\ abi.encodePacked(…) returns(bytes memory) 对指定参数进行压缩编码\ abi.encodeWithSelector(bytes4 selector, …) returns(bytes memory) 从第二个参数开始对参数进行编码，并以指定的函数签名作为前缀\ abi.encodeWithSignature(string memory sig, …) returns(bytes memory) 相当于abi.encodeWithSelector(bytes4(keccak256(bytes(sig))))\ 3.类型成员</p><p>函数名 描述\</p><p> bytes.concat(…) returns(bytes memory) 将多个bytes组合成一个bytes\ 4.错误处理函数：</p><p>函数名 描述\</p><p> assert(bool condition) 如果条件不满足，则抛出异常，并且恢复原来状态。通常用于内部错误检查\ require(bool condition) 如果条件不满足，则执行revert操作。通常用于检查输入或外部组件引起的错误\ require(bool condition, string memory message) 同上，并提供了错误信息\ revert() 终止执行，并恢复原来状态\ revert(string reason) 同上，并提供了原因\ 需要注意的是，assert异常会消耗掉所有可用的gas，而require从Metropolis版本开始不会小号任何gas。</p><p>5.数学和加解密函数：</p><p>函数名 描述\</p><p> addmod(uint x, uint y, uint k) returns(uint) 计算(x + y) % k，其中加法以任意的精度执行，并且当加法结果超过2的256次方也不会被截断\ mulmod(uint x, uint y, uint k) returns(uint) 同上，只是加法换成了乘法\ keccak(bytes memory) returns(bytes32) 用Keccak-256算法对输入进行加密\ sha256(bytes memory) returns(bytes32) 用SHA-256算法对输入进行加密\ ripemd160(bytes memory) returns(bytes20) 用RIPEMD-160算法对输入进行加密\ ecrecover(bytes32 hash, uint8 v, byte32 r, bytes32 s) returns(address) 利用椭圆曲线算法恢复公钥地址，失败返回0\ 6.地址相关函数：</p><p>函数名 描述</p><p>函数名 描述\</p><p> this(contract) 将当前合约转换成地址类型\ selfdestruct(address payable recipient) 销毁合约，并将余额发送到指定地址上</p><h2 id="h-fallback-function" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Fallback function</h2><blockquote><p>每个合约都隐式包含一个未命名、没有参数和返回值的函数，成为<code>fallback</code>函数。如果调用合约函数不存在，那么会自动执行<code>fallback</code>函数。除此以外，如果合约接收到以太币，<code>fallback</code>函数也会自动执行，所以<code>fallback</code>函数必须使用<code>payable</code>修饰。</p></blockquote><pre data-type="codeBlock" text="contract SimpleContract {
    
    uint a;
    
    function() external payable {
        a = 100;
    }
    
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">SimpleContract</span> </span>{
    
    <span class="hljs-keyword">uint</span> a;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        a <span class="hljs-operator">=</span> <span class="hljs-number">100</span>;
    }
    
}
</code></pre><p>如果想让合约接收以太币，那么就必须提供<code>fallback</code>函数，否则会报错并返还以太币。</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[Folks Finance 测试教程]]></title>
            <link>https://paragraph.com/@ht111/folks-finance</link>
            <guid>izM8Htvg4Pdh5htkmtjn</guid>
            <pubDate>Thu, 17 Mar 2022 13:47:58 GMT</pubDate>
            <description><![CDATA[Folks Finance 正式在 Algorand 测试网上启动了用于借贷的资本市场协议。Folks Finance 是一个借贷协议。现在可以加入测试网，完成设计任务的测试人员将获得NFT。注意:具体的测试任务还没有发布，现在先熟悉功能。任务发布请关注不和谐。image.pngimage.png 详细说明见https://folksfinance.medium.com/folks-finance-testnet-is-out-a14b86202d53设置及准备工作钱包：在以下 Algorand 支持的钱包中选择之一。 Algorand https://algorandwallet.com/ MyAlgo https://myalgo.com/ MyAlgo 钱包 1）从钱包右上角的按钮切换到测试网。Algorand钱包则是在设置里设置为TestNet。image.pngimage.png 2）获得ALGO测试币。https://bank.testnet.algorand.network/image.pngimage.png测试打开https://testnet.folks.fi...]]></description>
            <content:encoded><![CDATA[<p>Folks Finance 正式在 Algorand 测试网上启动了用于借贷的资本市场协议。Folks Finance 是一个借贷协议。现在可以加入测试网，完成设计任务的测试人员将获得NFT。注意:具体的测试任务还没有发布，现在先熟悉功能。任务发布请关注不和谐。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</p><p>详细说明见<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://folksfinance.medium.com/folks-finance-testnet-is-out-a14b86202d53">https://folksfinance.medium.com/folks-finance-testnet-is-out-a14b86202d53</a></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">设置及准备工作</h2><p>钱包：在以下 Algorand 支持的钱包中选择之一。</p><p>Algorand <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://algorandwallet.com/">https://algorandwallet.com/</a></p><p>MyAlgo <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://myalgo.com/">https://myalgo.com/</a></p><p>MyAlgo 钱包</p><p>1）从钱包右上角的按钮切换到测试网。Algorand钱包则是在设置里设置为TestNet。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</p><p>2）获得ALGO测试币。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bank.testnet.algorand.network/">https://bank.testnet.algorand.network/</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</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://testnet.folks.finance/">https://testnet.folks.finance/</a> ，点左侧边栏，可以看到所有功能菜单。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</p><p>1）DEPOSIT为存款。点击相应的标的，钱包授权，确认。Withdraw为提现，点击右侧相应的已存仓位，点Withdraw，输入数量提取。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</p><p>2）Borrow是借款功能。点击选择相应的币，选择抵押的币，输入数量，借出。还款，点击右侧相应的已存仓位，点Repay，选择数量，进行还款。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">image.png</figcaption></figure><p>image.png</p><p>3）反馈。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/folksfinance">https://discord.com/invite/folksfinance</a> 如果遇到什么前端错误，在不和谐里反馈。</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[Pegasus测试网交互指南]]></title>
            <link>https://paragraph.com/@ht111/pegasus</link>
            <guid>XGypZRtTQoj0WMeoSUrY</guid>
            <pubDate>Wed, 16 Mar 2022 08:58:39 GMT</pubDate>
            <description><![CDATA[介绍Pegasus Finance (Twitter : https://twitter.com/0xPegasusFi ) 是一个 AMM 风格的利率永续平台。交易者可以为 Aave 和 Compound 等借贷平台借贷 APY 的多头和空头头寸。他们于 3 月 9 日启动了他们的测试网。规则您可以在 Optimism Mainnet上的https://dashboard.pegasusfinance.xyz/上找到 Pegasus 的奖励计划“The Great Race” 。 （如果您没有网络，请在https://chainlist.org/添加 Optimism Mainnet 。） 您需要每天完成测试网任务或社交任务才能获得 $Sealed Pega 代币。 目标是积累 120 $Seal Pega Token 以免费铸造 PegaPal NFT。以下是该计划的一些关键信息。一天4个任务每个任务获得 1 个 $Sealed Pega 代币$Sealed Pega 不可在地址之间发送PegaPal mint价格为 120 $Sealed Pega 代币先到先得机制mint...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">介绍</h2><p>Pegasus Finance (Twitter : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xPegasusFi">https://twitter.com/0xPegasusFi</a> ) 是一个 AMM 风格的利率永续平台。交易者可以为 Aave 和 Compound 等借贷平台借贷 APY 的多头和空头头寸。他们于 3 月 9 日启动了他们的测试网。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b65b0857d372efe03a24a246c7cc2e961670b717ef468abe002851cc4c1d5c5f.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>您可以在 Optimism Mainnet上的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.pegasusfinance.xyz/">https://dashboard.pegasusfinance.xyz/</a>上找到 Pegasus 的奖励计划“The Great Race” 。</p><p>（如果您没有网络，请在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org/">https://chainlist.org/</a>添加 Optimism Mainnet 。）</p><p>您需要每天完成测试网任务或社交任务才能获得 $Sealed Pega 代币。</p><p>目标是积累 120 $Seal Pega Token 以免费铸造 PegaPal NFT。以下是该计划的一些关键信息。</p><ul><li><p>一天4个任务</p></li><li><p>每个任务获得 1 个 $Sealed Pega 代币</p></li><li><p>$Sealed Pega 不可在地址之间发送</p></li><li><p>PegaPal mint价格为 120 $Sealed Pega 代币</p></li><li><p>先到先得机制mint</p></li></ul><p>一旦mint PegaPal 后，您可以将其质押以赚取可交易的 $PEGA 或出售（价值约 0.5 ETH）。</p><p>有关“The Great Race”的详细信息，请阅读<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pegasusfinance.medium.com/pegapals-part-1-task-contributors-d1bca0a986ff">此处</a>。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e402e56062ea88a250e25e1bf6915ec0e21f9c50cb0d1e14c992e66e72be41b5.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><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.pegasusfinance.xyz/"><strong>https://dashboard.pegasusfinance.xyz/</strong></a><strong>上可用的任务。这只是一个一般指南。</strong></p><p><strong>入门：</strong></p><p>Pegasus 测试网在 Optimism Kovan 上。</p><p>首先转到<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.paradigm.xyz/">https://faucet.paradigm.xyz/</a>并将 Optimism Kovan 添加到您的 Metamask。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/892df4910badfa98c50af18977b628a75d69b4157bc6de859838683b004a4ade.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 登录。输入您的地址并领取代币。</p><p>（您的 Twitter 帐户必须至少有 1 条推文、15 个关注者，并且超过 1 个月才能领取代币。如果您的帐户不满足这些要求，请在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/dkQz7975wA">Pegasus Discord</a>处询问。）</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/df23f4335368983a44aa1a3e9ae377d9df1955c7dfc9e8ac965c87d5d692c59b.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/300cbb2f783a710fbcc1c21d80eed19236e312293e1e478fe00d88eecee59b0c.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>第1步：</strong></p><p>前往<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://trade.pegasusfinance.xyz/">https://trade.pegasusfinance.xyz/</a>并连接您的钱包。</p><p><strong>第2步：</strong></p><p>现在做一些交易。</p><p>首先做多 AAVE USDC 利率市场。选择Long 使用 50 倍杠杆，大小为 1 WETH。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9381eb4431da020b26e6b8be25675aa4e3f213852c8327f4248e86827336adae.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>然后点击右边的【×】，然后点击打开画面的【Close Position】</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/06385ac63108fe9fb58555dc3c554a655911655a8efb27f617c8c2f94c170669.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/8a9f70ab1fe72e87d556787fade0266013b89f6b65a2e7e1b60af9aa93aa03a3.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步：</strong></p><p>现在点击“Pool”来增加流动性。成为流动性提供者。</p><p>输入您的金额并确认。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4fdf5175f325cb15cd490defcc71e8140ab5683691899ca13130adc8b53041c0.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/dfab48d0ff319396d2fc6874d29d6825035a67253e1215d4a3f3569cf2371f54.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 步：</strong></p><p>最重要的是完成<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.pegasusfinance.xyz/">https://dashboard.pegasusfinance.xyz/</a>上的日常任务。阅读任务描述并执行所需的操作。</p><p>例如，此任务要求你发布有关你的交易收益/损失的推文。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f49450378901dd985b69d194323d65d6826de07d9434d3c1fda46ad4b3ccc5c8.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://discord.gg/dkQz7975wA">Pegasus Discord</a>并提出问题。</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[vertexprotocol测试操作教程]]></title>
            <link>https://paragraph.com/@ht111/vertexprotocol</link>
            <guid>OmuHkDpl5JStPLj7KN62</guid>
            <pubDate>Wed, 16 Mar 2022 00:08:48 GMT</pubDate>
            <description><![CDATA[vertex创建必要的基础设施和机制，以将现实世界的货币市场和真正的金融产品上链。最初的愿景是为 Anchor 创造一个多币种的未来。 目前官方测试从2.28开始的，测试进行中Vertex将是在 Terra 的测试网上推出的去中心化、跨保证金交易平台。它将支持杠杆交易和流动性提供，首先是永续合约，然后是保证金现货。 下面开始我们的测试： 1）安装terra钱包,创建钱包创建钱包2）钱包切换到testnet网络3）领取测试币如果一直领取不到UST，就在钱包用LUNA兑换下4)进入测试地址，连接钱包5）存款6)取出存款7)交易这里注意下多空不能同时开仓。 8)平仓9）添加/移除池子 添加池子 添加流动性移除池子以上为vertexprotocol测试步骤]]></description>
            <content:encoded><![CDATA[<p>vertex创建必要的基础设施和机制，以将现实世界的货币市场和真正的金融产品上链。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/16e4a18c06c05d8f13fe452606f85caeffb08fbb03841c37b26e1c798d005526.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>最初的愿景是为 Anchor 创造一个多币种的未来。</p><p>目前官方测试从2.28开始的，测试进行中</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/99cb1b3d440d38177ea667765a7133a7cae66802781b47c9a9465c44b710ec7d.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>Vertex将是在 Terra 的测试网上推出的去中心化、跨保证金交易平台。它将支持杠杆交易和流动性提供，首先是永续合约，然后是保证金现货。</p><p>下面开始我们的测试：</p><p>1）安装<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/terra-station-wallet/aiifbnbfobpmeekipheeijimdpnlpgpp">terra钱包</a>,创建钱包</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/127aef17e54133b0371a90399c7b20bd6d7e88832ddd73bd3830dbc7f928a055.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/d1e41155b59cf1b933174e03f383e61f2843a155808a0dc96f3285515b6b9bea.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/cd14eb6fda79b55c314b3d92709006da413244474aa55d48d657ea5fe22f8a1f.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）钱包切换到testnet网络</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/20f3765be7f17c7c2bdc60450e815ceee1cacc15295dac2cf67b580fca16db30.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）<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.terra.money/">领取测试币</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c377b5b8648c0c6e21a98627733066440a1c30699271bda7d6ac55fa0cad31e6.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/19da179fb1ffaf14b4218f2b4820a4053a0ff73b39c7b25150c556e254f720bc.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>如果一直领取不到UST，就在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://chrome-extension//aiifbnbfobpmeekipheeijimdpnlpgpp/index.html#/wallet">钱包</a>用LUNA兑换下</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/67f1dc9ea067c306dfdccf0cf922f3e7e3713b5278036ec3b27da8a7896da603.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/4ab107cd966974b0aeb49d7b20037d4cf75852f3b4e5c4b8d3a0b9aad33b1b48.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)进入<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vertexprotocol.com/dashboard">测试地址</a>，连接钱包</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85b2f8390db909bd601271b3e52614b42d08b4beca7cfbedca7e348efe850b0c.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/5216d2ed274f9a76ea0059384d02acec14ddf0eb50d1824aab85cb7807d8809b.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/0faf9c8de742f59586d3b9bf3c9bcde589a8ea34ee3f0d833dc08e98f91c00f6.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/2a2bdf56f6e8af01ce031fe3a2182113ab8e0dcb0d07f4dce91a93bc7bfbace7.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><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d708a24cfb9b049bd91737a663f1bcd9423b2e7f1b3d0a457cad0c18e971e201.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/d448ba50641e276248bc41d0186ea36c189b9062c857daa05c62d541bbc37566.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/a693c4ac3b2fab007f01b6c968b36d28b1ed38baefdf23160b16dc5be0b87363.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><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1ec9575fb061b6d909f1f034e1643eb01b0e6f4c3f1612b8cf03be34c6581cec.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/b3af97ea1a2279e4156fe66a26d360ed841a9cd28eab9c93217dc0da9d40b86c.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/2491143af86b86c60ada01fc5e04798c502f334805d4383bac58f9f31c2b4be1.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>8)平仓</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/127bdf10075d0ae0bdf6be8b9accd8b61cc9783b7fbf105c41d7d5c94dab7de9.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/2b2b328c7509d2b4de99200af5b77ad5dd6ab12d4debb51fdd83caa30f17dcfe.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）添加/移除池子</p><p>添加池子 添加流动性</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c93bd58615e53fd168d3aa49a808ec4e2da82416250a47e23bd001e8fb3e2e8e.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/b6f7c402784cc252fec30b0f197c2cc9287e728952ae9a7b0f694a25075081ae.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/5ba0d2138ce68f92d90219fd7b73a8d89bea72ea9974abe7ee4521323daf0412.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/333d598a10fca80f6232fcf91fd0e293eb50887d18ddc8ef0c457fd00c080f94.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/6def8f45d236de9066c5ca1f706fc0ae9fd501a2b3eb182c6dd9bda5218690fc.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/d7a36b6eedc0490e71de0dc79f0d6fb6b72a7298e249f677267ac20bceb3988c.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>以上为vertexprotocol测试步骤</p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
        <item>
            <title><![CDATA[空投List]]></title>
            <link>https://paragraph.com/@ht111/list</link>
            <guid>YXaF0AcB7makx1tamJWQ</guid>
            <pubDate>Tue, 15 Mar 2022 07:58:32 GMT</pubDate>
            <description><![CDATA[https://paraswap.io/ https://www.opyn.co/ https://www.clipper.exchange/ https://www.synfutures.com/ hashflow.com https://app.slingshot.finance https://cowswap.exchange/ https://matcha.xyz/markets/137/MATIC https://trade.dydx.exchange/ lunaland.io https://www.element.fi/ https://swivel.finance/ https://yield.is/ https://goldfinch.finance/ https://notional.finance/ https://bprotocol.org/ https://opensea.io/ https://zora.co/ palm.io fractional.art sorare.com zedrun.tools optimism.io https://zksy...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://paraswap.io/">https://paraswap.io/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.opyn.co/">https://www.opyn.co/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.clipper.exchange/">https://www.clipper.exchange/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.synfutures.com/">https://www.synfutures.com/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://hashflow.com/">hashflow.com</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.slingshot.finance/">https://app.slingshot.finance</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cowswap.exchange/">https://cowswap.exchange/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://matcha.xyz/markets/137/MATIC">https://matcha.xyz/markets/137/MATIC</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://trade.dydx.exchange/">https://trade.dydx.exchange/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://lunaland.io/">lunaland.io</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.element.fi/">https://www.element.fi/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://swivel.finance/">https://swivel.finance/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://yield.is/">https://yield.is/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goldfinch.finance/">https://goldfinch.finance/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://notional.finance/">https://notional.finance/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bprotocol.org/">https://bprotocol.org/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/">https://opensea.io/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zora.co/">https://zora.co/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://palm.io/">palm.io</a> fractional.art <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://sorare.com/">sorare.com</a> zedrun.tools <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://optimism.io/">optimism.io</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/">https://zksync.io/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://arbitrum.io/">arbitrum.io</a> hop.exchange <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zerion.io/">https://zerion.io</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zapper.fi/">https://zapper.fi/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://debank.com/">debank.com</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.io/">https://metamask.io/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.argent.xyz/">https://www.argent.xyz/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://phantom.app/">https://phantom.app/</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://rainbow.me/">rainbow.me</a> dex.guru superfluid.finance <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://symmetry.fi/">symmetry.fi</a> unbound.finance predix.network pods.finance <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://claystack.com/">claystack.com</a></p>]]></content:encoded>
            <author>ht111@newsletter.paragraph.com (ht111)</author>
        </item>
    </channel>
</rss>