<?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>Fan </title>
        <link>https://paragraph.com/@fan-3</link>
        <description>undefined</description>
        <lastBuildDate>Sun, 21 Jun 2026 10:39:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Fan </title>
            <url>https://storage.googleapis.com/papyrus_images/629c12c8b716677cbee535668e7dc4e3578f1293d33b981638dae5b140bbb0af.jpg</url>
            <link>https://paragraph.com/@fan-3</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[XCMP & IBC报告]]></title>
            <link>https://paragraph.com/@fan-3/xcmp-ibc</link>
            <guid>v4WKMClCPTOUF9wZJDzT</guid>
            <pubDate>Wed, 23 Mar 2022 06:23:03 GMT</pubDate>
            <description><![CDATA[本文沿着跨链通信需要解决的5大难题这一框架，通过深入挖掘XCMP与IBC二者的技术原理，刨析其不同的技术解决路径，结合当前不同项目的开发情况，拆解应用生态的代码部署流程，对二者的通信效率、开发进度、部署便捷性、应用场景、安全性这五个方面进行了对比，旨在为读者提供一个更为全面的分析。 本文认为： 相比于IBC，XCMP技术原理更为复杂的根本原因是为了实现平行链通信的去信任化与通信信息的多元化。而这也在同时限制了对平行链安全性的自定义化需求并提高了系统整体崩溃的风险。 此外，如忽略技术实现细节，IBC与XCMP的不同表现在：XCMP中平行链之间能够直接传输信息，但是目前Channel被限制在100个。而IBC依靠Hub进行通信，无法直接传输。XCMP目前仍在开发，是以HRMP为临时替代协议实现跨链信息交互。而IBC已经完成了上线，并在2020年10月份后稳定。IBC技术实现细节远简单于XCMP协议，但是好处是大幅降低开发难度于维护成本。XCMP与IBC都通过高度封装之后的抽象函数调用，目前看来其部署均较为简单，并不存在一方过于复杂的情况。而只要是生态中需要跨链交互的均需要调用这两个协...]]></description>
            <content:encoded><![CDATA[<p>本文沿着跨链通信需要解决的5大难题这一框架，通过深入挖掘XCMP与IBC二者的技术原理，刨析其不同的技术解决路径，结合当前不同项目的开发情况，拆解应用生态的代码部署流程，对二者的通信效率、开发进度、部署便捷性、应用场景、安全性这五个方面进行了对比，旨在为读者提供一个更为全面的分析。</p><p>本文认为： <strong>相比于IBC，XCMP技术原理更为复杂的根本原因是为了实现平行链通信的去信任化与通信信息的多元化。而这也在同时限制了对平行链安全性的自定义化需求并提高了系统整体崩溃的风险</strong>。 此外，如忽略技术实现细节，IBC与XCMP的不同表现在：</p><ul><li><p>XCMP中平行链之间能够直接传输信息，但是目前Channel被限制在100个。而IBC依靠Hub进行通信，无法直接传输。</p></li><li><p>XCMP目前仍在开发，是以HRMP为临时替代协议实现跨链信息交互。而IBC已经完成了上线，并在2020年10月份后稳定。</p></li><li><p>IBC技术实现细节远简单于XCMP协议，但是好处是大幅降低开发难度于维护成本。</p></li><li><p>XCMP与IBC都通过高度封装之后的抽象函数调用，目前看来其部署均较为简单，并不存在一方过于复杂的情况。而只要是生态中需要跨链交互的均需要调用这两个协议。</p></li><li><p>XCMP设计之初，就不仅仅是针对于平行链之间消息的传递，更是为了实现智能合约，pallet，跨链桥、甚至SPREE之间的通信。而IBC设计的初衷与目前的应用场景只针对于平行链之间消息的传输。</p></li></ul><p>XCMP对于平行链的安全性并无要求，其统一由中继链进行保证。而IBC并不保证平行链的安全性，需要依赖于平行链自身的安全性。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">跨链通信的难题</h2><p>目前跨链技术协议有很多，但是归纳下来，跨链通信需要解决以下五个最主要的问题：</p><ul><li><p>有序性：如何使得消息能按序到达目的链。</p></li><li><p>可验证：如何识别未处理的消息、验证到达的消息确实是由相应发送链发送的，如何验证消息的正确性。</p></li><li><p>无遗漏：如何确保链公平地接收每条消息、发送链不会无限期等待消息被接收链接收和处理。</p></li><li><p>有效性：需要防止中继链过载，防止网络拥堵与过载。</p></li><li><p>安全性：如何解决平行链与中继链的安全性问题。</p></li></ul><p>Substrate框架下的XCMP与Cosmos中的IBC采用了不同的方法来处理与解决上述五个问题，本文将会沿着这一框架来对这两种协议的实现原理、发展现状、优缺点等方面进行深入研究与阐述。</p><h2 id="h-xcmp" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">XCMP解决方案</h2><h3 id="h-xcmpxcm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">XCMP与XCM的含义、差别及各自实现的功能</h3><p>XCMP的全程叫做跨链消息传递（Cross-chain Message Passing），XCMP目前还在开发当中，跨链的通信采用HRMP进行替代。总体来说，波卡有4种不同的跨链消息传递方式，每种不同的传递方式具有不同的特点：</p><ul><li><p><strong>中继链与平行链之间UMP（Up Message Passing）、DMP（Down Message Passing）</strong></p><p>UMP是指中继链向上向平行链传递消息，DMP指平行链向下向中继链传递消息，如图1所示。这两种消息传递方式早已完全实现，但这两种方式并不能实现平行链之间的消息传递。</p></li><li><p><strong>平行链之间HRMP、XCMP（Cross-chain Message Passing）</strong></p><p>HRMP是指以中继链为中介，来实现两个平行链之间的信息传送功能。由于这种方法使得中继链承担较大储存与运算压力，使得整体的效率非常低，其为波卡推出的临时解决方案，在XCMP上线之后将会取代HRMP方案。XCMP如上文所述，是平行链之间进行跨链信息交互的最终形式，其不会给予中继链过大的运行与存储负担。</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/58a864f83b6417aa9e8879169998613f24dcbc00459c735faa8f994058892851.png" alt="平行链之间通信方式" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">平行链之间通信方式</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e6b5c48b807cfb07bc7cf25fd8b0f0bad8c269d01b685adf4aa93fde49e7e49f.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>要解决跨链信息传输与交互的功能，<strong>不仅需要标准化的传输协议对传输的过程与形式进行规范，更需要将传输的消息形式进行统一与标准化</strong>，因此，在这里需要将XCMP与XCM（Cross-chain Message）两者定义进行区别：</p><ul><li><p><strong>XCM（Cross-chain Message）</strong></p><p>XCM是跨链传输的信息的标准格式，可以类比于ERC20格式。波卡不仅想让跨链的信息在链间进行交互，更可以在智能合约，pallet，SPREE之间进行交互。因此，为了更高效的实现这一点，统一的跨链消息格式是必须的组件。</p></li><li><p><strong>XCMP（Cross-chain Message Passing）</strong></p><p>XCMP如上所述，为跨链传输信息的标准流程。其包含消息传递与消息存取两个关键的部分。消息传递主要是指消息通过什么样的路由方式在平行链之间传递，而消息的存取为中继链、平行链之间如何存取消息及消息的相关证明。本文为了保证逻辑的连贯，将这两个主要部分拆分至下文的部分进行阐述。</p></li></ul><p>值得注意的是，由于区块链可以被是做一个全局的状态转换机器，因此，我们可以将XCM与XCMP总体看作是跨链状态转化过程。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现有序性</h3><p>由于不同平行链上运行着不同的DAPP，而对于一些类似DEFI的协议来说，按时有序的接收并处理消息显得至关重要。因此可以看出，<strong>有序性主要体现在消息的传递过程当中</strong>。</p><p>总体而言，两条平行链之间传输消息需要分别对彼此建立<strong>通道（channel）</strong>。当前而言，<strong>通道为单向通道（理论上也可以成为双向通道）</strong>。当通道处于打开状态时，通道中会包含以一个已发送但是未被接收的<strong>有序队列</strong>。</p><p>此队列的规则为，当消息发送者在此通道中发送新的消息时，将新的消息压到队列的末尾，接收者从队列的排头取出新消息，体现在队列中即为删除最前面的消息。<strong>由此，消息的有序性就得到了保证，新发送的消息后接收，已发送的消息先接收</strong>。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f2d1e7397f84e322b451a8706311b0137d32ff754b5759e8bbe810f40cb34d9f.png" alt="发送链与接收链消息队列" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">发送链与接收链消息队列</figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现可验证性与无遗漏性</h3><p>对于接收链来说，保证消息有序的接收与处理只是其中一个关键的环节，更需要解决的是，如何去识别哪些消息并未处理，如何取验证获取消息是正确的。想要理解如何解决这一问题需要深入到数据结构层面。</p><ul><li><p>**MQC（Message Queue Chain，消息队列链）。**MQC是每个消息发送链自身负责维护的链，每有一个接收链即会产生一条对应的MQC。</p></li><li><p>**MQHC（Message Queue Hash Chain，消息队列哈希链）。**其是由MQC每个信息进行哈希计算得到的。MQHC中有三个元素 HC = {H(M), relay_number, H(pre_HC)}， H(M)表示消息的哈希值，relay_number代表该消息发送链上一次对接收链发送消息时的中继链的区块号，也即为上次发送消息的时间，H(pre_HC) 代表上一个区块的哈希值。</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18a71ca3a15a522978be798f66ca4e456d67d86d53bb0cdb517ca2685d1d43f7.png" alt="MQHC示意图" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">MQHC示意图</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a1302c27977bd5f56d2003eedc5255afc201a84c48ee8f3785ad9f413ab9d5e9.png" alt="MQHC示意图" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">MQHC示意图</figcaption></figure><p>可见，<strong>如果接收链能够拿到对应发送链的HC，则可以通过对比消息的哈希值来验证获得消息的正确无误性</strong>。而relay_number可以用于定位处在某些时间之间的所有消息。</p><p>值得注意的是，<strong>MQHC的大小决定了消息通道的负载程度</strong>。因此，当接收链最终在中继链上确认了消息的接收之后，可以在MQHC中删除相应的消息以维持整个通道中消息的负载程度处在合理的区域。</p><p>由于每一条发送链对于每一个接收链都会维护一个MQHC，为了更加高效的查询与定位，<strong>将所有的MQHC最新区块头作为Merkle Tree的叶子节点，所得到的根节点值被称为Message Root（MR）</strong>。因此，通过提供对应的Merkle Proof 可以查询得到底层的HC。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/43195b4f054ae49de2984c634e47fae1e02a222d75db96d5f38e0013a7dabc45.png" alt="Message Root a" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Message Root a</figcaption></figure><p>MR会被包含在发送链区块的区块头中，与此相伴的还有water mark和bitfield两个参数。</p><ul><li><p><strong>Water mark（水印）</strong></p><p>其是接收链用于判断是否处理该消息的工具，包含（block_number，para_id）两个参数，其中Block_number 表示中继链的区块号，para_id表示接收链的ID号（substrate对每一个链都会有一个唯一ID号）。</p><p>若有两个water_mark，其分别为W1 =（10，B），W2 =（20，B），则可以通过[W1,W2]表示处于[10,20]中继链区块时间的所有发送给B的消息集合。**Water mark首先是由发送链构建，然后验证后传递至中继链上，最后传递至接收链上。因此，接收链收集人可以将当前的water mark与上一个water mark之间的所有消息确认为发送链已发送但未被接收链处理的消息。**由此，解决了识别哪些消息为未处理消息的功能。</p></li><li><p><strong>Bitfield</strong></p><p>其是一组Bit信息，每一个Bit表示有没有对应接收链的消息。若第1，2，3位分别表示链A,B,C，则110 表示此发送链中的此区块有发送给链A,B的信息，无对链C的信息。因此，接收链的收集者可以通过bitfield信息来判断需不需要从此区块中获取信息。</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/63cff9ecb7c1cfd09ebd90eca577ae409eeaa11db9c9d96fa4e8fd48373d7b2a.png" alt="Message Root b" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Message Root b</figcaption></figure><p>我们用SCH表示发送链区块头，则<strong>SCH = {MR, water mark, bitfield,…}</strong>，当发送链的验证人验证通过并打包进入中继链后，中继链区块头中也会包含着SCH的信息。<strong>此时，中继链会在其链上储存资源中更新CST（Channel State Table）</strong>。</p><p>不同于消息本身，其并不会在中继链中得到储存，但是中继链会储存关于通道状态的表。<strong>表的行由发送链的ID组成，表的列由接收链的ID组成，其中的每一个元素是（sender_mr, block_number）组成</strong>。因此每一个cell可以得到一个通道最新更新的时间（block_numer）与发送链的MR。由于发送链的MR对于每行来说是相同的，因此，CST是以行为单元来进行更新的。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7cf34f2e852e54bcc79c80d78d682f8c68851a2ff05d952173f0ad5dcab3c83d.png" alt="CST（Channel State Table）" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">CST（Channel State Table）</figcaption></figure><p><strong>将CST每一行的各个cell作为Merkle树的叶子节点来构造出以row_root为根节点的Merkle树，将CST所有的row_root作为新的叶子节点可以构造出以XCMP_root为根节点的Merkle树</strong>。所得到的XCMP_root<strong>将会被包含进中继链的状态根中</strong>。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7602535f9692b45f9c9852f348bfe73ebe65873efaa2291e43bb14e3dc1a24d8.png" alt="XCMP_root与Row_root" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">XCMP_root与Row_root</figcaption></figure><p>对于接收链的收集者而言，其通过查询CST表上的通道信息来判断是否有新的消息其需要去对应的发送链的节点上接收信息，由此实现了验证是否有新的消息的功能。 接收链上的收集者在构建POV区块的时候，需要从中继链上获取相应的证明来证明此时已经获得尚未被处理的正确信息。证明由一组Merkel证明变体组成的轻客户端证明。此证明包括以下几个部分：</p><ul><li><p>从XCMP_root到MR的一组Merkle证明</p></li><li><p>从MR到HC的一组Merkle证明</p></li></ul><p>除了这组轻客户端证明之外，构建POV区块还需收集人收集得到以下两个信息：</p><ul><li><p>发送的消息本身</p></li><li><p>最新water mark与上一次water mark之间的HC</p></li></ul><p>由此，验证人可以通过亲客户端证明定位到发送链的HC，并且利用两次water mark来定位所有最近发送的但是并未处理的消息，通过对比每个HC上消息的哈希值，与自己接收消息的哈希值，验证是否是正确的消息，并且可以验证是否有消息缺失并未接收到的现象。若有，收集人便会向发送链重新索要相应的信息。</p><p>由此做到了对消息正确性与无遗漏性的验证。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现有效性</h3><p>中继链并不能储存过多的信息与执行过多的运算，否则将会严重影响整个系统的运转效率。XCMP的解决方案是只让中继链储存CST，消息并不通过中继链进行处理，而是通过通道来进行传递。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现安全性</h3><p>依靠中继链本身的验证者为平行链提供安全性，因此无需信任平行链是安全的，整个系统确保每一条平行链都是安全的。</p><h2 id="h-ibc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">IBC原理</h2><p>IBC全称叫做链间通信协议（Inter-Blockchain Communication Protocol），是Cosmos中zone与zone通信的协议。</p><p>每个zone与zone之间并不直接通信，而是分别与Hub通信来实现zone之间的相互联系。这一点与波卡不一样，波卡通信是通过直接通信来实现的，而通过中继链来传递相关的证明并保证平行链的安全性。 IBC协议中包含了三个主要的交易类型：MsgPacket，MsgAcknowledgement，MsgTimeout。</p><ul><li><p>MsgPacket：跨链交易数据包，包含跨链交易、目的链的超时高度和时间戳。</p></li><li><p>MsgAcknowledgement：响应数据包，包含跨链交易执行成功或者失败的状态。</p></li><li><p>MsgTimeout：超时数据包，包含下一个接收包的序列号。</p></li></ul><p>IBC的协议流程总体来说比波卡要简单许多，其<strong>简化版的实现流程</strong>如下图所示：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e799fc2ed5a383a296a4904890021abc75b543caf7462ac705a8d2d6fe19e19.png" alt="IBC简化流程" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">IBC简化流程</figcaption></figure><p>首先是外部跨链交易（TX）向发送链A的Tendermint模块发起请求，验证有效后将会改变链A的账户状态，并且构建MsgPackage至其<strong>出口队列</strong>当中。Hub中的Relayer会不断扫描发送链的出口队列，若发现MsgPackage则会将其传递至接收链B中，接收链B验证通过后会执行并改变相应的账户的状态，执行成功后，会返回MsgAcknowledgement，发送链接收到后，会确认出块。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现有序性</h3><p>IBC采用<strong>Outing 队列与Inputing队列</strong>来对消息进行排序，从而实现消息的有序性。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现可验证性与无遗漏性</h3><p>如上图10所示，<strong>MsgPackage中会包含Proof值，接收链收到MsgPackage后通过Poof与消息本身的哈希值来验证消息的正确性</strong>。</p><p>而其<strong>通过Hob relayer的不断扫描出口队列来验证是否有新的已发出但是未处理的消息</strong>，从而实现了消息的可验证性与无遗漏性。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现有效性</h3><p>其并非是由两个平行链之间直接通信，而是通过Hub来进行通信，<strong>由此回避了由于直接接连导致的网络拥堵的现象</strong>。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何实现安全性</h3><p><strong>其无法保证平行链是安全的，必须信任平行链是无法作恶的</strong>，而如果接入安全性较低的平行链其整体系统的稳定性将会大幅降低，并且可能会有双花等攻击。</p><h2 id="h-xcmpibc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">XCMP与IBC对比</h2><h3 id="h-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1. 通信效率</h3><ul><li><p><strong>XCMP</strong></p></li></ul><p><strong>为了避免平行链之间直接通信使得channel指数增长导致网络拥堵甚至瘫痪的现象发生，目前一条发送链最多只能同时建立100个channel</strong>，意味着一条平行链只能同时与100个平行链进行通信。未来这个数量可能会进一步扩充。其通信效率并不完全取决于中继链的效率。</p><ul><li><p><strong>IBC</strong></p></li></ul><p>同样是为了避免网络拥堵与瘫痪现象的发生，IBC不是通过限制每一条平行链可以通信的数量来解决的，**而是直接不允许平行链之间通信，只允许其与Hub进行通信。**因此，处理效率完全取决于Hub的效率。</p><h3 id="h-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2. 开发进展</h3><ul><li><p>XCMP</p></li></ul><p>目前只完成了对XCM格式与HRMP的开发工作，<strong>XCMP仍然在开发过程当中</strong>，<strong>由于其暂未在GitHub中同步，暂时无法得知最新的开发进展</strong>。但是，<strong>由于XCMP是包含在Substrate主体中来进行开发的，Substrate与Cosmos-sdk二者均为Framework，因此通过对比二者的点赞与folk数在一定程度上也能反映二者的差距</strong>。</p><p>从项目的folk数与点赞数来看，Cosmos-sdk的点赞与folk数较少，可能从侧面反映了技术的革新性可能并不大。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bc9ba236a187efe13293dc09ec260bf364e7654fdd08923c856064fd67fcdc9a.png" alt="Cosmos-sdk Github相关信息" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Cosmos-sdk Github相关信息</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/51f02e181f028659a3f14b676eab72d198ad03fbee9ecdabf0c45c7220814b40.png" alt="Substrate Github 相关信息" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Substrate Github 相关信息</figcaption></figure><ul><li><p>IBC</p></li></ul><p><strong>IBC目前已经基本完成了开发</strong>，自2019年8月25日上线第一版以来，不断做出更新，在<strong>2020年10月份推出了较为稳定的第六次更新</strong>。至此以后，虽不断有小调整，但是并无重大的版本更新。并且从图中可以看出，<strong>目前的更新速度放缓，项目基本已经稳定</strong>。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e18eb597bd0c1888439952a47ec57affce849214af1a8223e80553bd5845b6d9.png" alt="IBC开发进展" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">IBC开发进展</figcaption></figure><h3 id="h-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3. 部署便捷性</h3><ul><li><p>XCMP</p></li></ul><p>XCMP是非常底层的协议，类似于HRMP，是通过XCM pallet 与平行链整体的Runtime来进行调用的，其包含在平行链Runtime的开发逻辑当中。</p><p><strong>本文通过挖掘Encointer项目的代码来展示其是如何调用XCMP协议来实现跨链通信的</strong>。</p><p>我们从Encointer的预言机的pallet来入手。首先，Encointer在主pallet中引用xcm的库，其目前托管在波卡库中。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9a6e26c4ff64ccba039d23e134e4c874817a349637682193c16c140ee399051.png" alt="Encointer项目XCMP部署解读 a" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Encointer项目XCMP部署解读 a</figcaption></figure><p>其次在主要配置中声明XcmSender的类型。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fdccae83715c38900d41c713d9a6faa18bb2e3de68282ed3110f31110a02e427.png" alt="Encointer项目XCMP部署解读 b" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Encointer项目XCMP部署解读 b</figcaption></figure><p>之后<strong>在主逻辑Module中利用XCM pallet中的方法来构造交易</strong>。而如Transact等这类通信函数已经高度抽象化与高度封装，不需要对底层的XCMP的处理细节进行声明即可实现。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fc826abc47509a6c5a975f614eaa0d16b309487c33f223200bd95640b112833f.png" alt="Encointer项目XCMP部署解读 c" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Encointer项目XCMP部署解读 c</figcaption></figure><p>其跨链消息功能的大致调用情况如上所述，因此可见，XCMP是非常底层的协议，上述的调用基本不会涉及到相应的原理，总体来说调用还是较为简洁。</p><ul><li><p>IBC</p></li></ul><p>IBC的部署方法由于<strong>笔者目前对Cosmos的开发代码并不是十分熟悉，因此不采用上述的深入刨析项目代码的方式来分析，而是采用分析关键代码的作用来进行阐述</strong>。</p><p>首先要再module中声明 –ibc参数，<strong>以此将所有ibc的逻辑引用到此module中</strong>。代码如下所示：</p><p><code>starport module create blog --ibc</code></p><p>其次如果要发送消息的话，需要再blog模块中首先生成post</p><p><code>starport type post title content --module blog</code></p><p>然后发送posts</p><p><code>starport type sentPost postID title chain --module blog</code></p><p>管理post的超时信息：</p><p><code>starport type timedoutPost title chain --module blog</code></p><p>发送确认消息可以用：</p><p><code>AppendSentPost（）</code></p><p>上述为IBC部署的大致过程，因此可以看出如同XCMP一样，其也为非常抽象的封装完整的函数，在开发中并不会接触的底层的逻辑。</p><p>由于笔者只是从函数的逻辑上进行分析，没从实际的项目开发中进行分析，由此可能对于真实的开发难度的理解有一定的偏差，因此<strong>后续计划深入Cosmos开发代码，从实际项目开发情况中分析这两个技术实际部署的难易程度</strong>。</p><h3 id="h-4" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4. 应用场景</h3><ul><li><p>XCMP</p></li></ul><p><strong>XCMP在设计之初，就可以不仅仅可以用于平行链之间的消息的传递，其更可以实现在智能合约之间，在pallet之间，在不同的跨链桥之间，在SPREE之间进行通信</strong>。</p><p>例如Phala团队利用XCMP协议计划实现的功能，<strong>图18中智能合约之间均可以与波卡主链进行通信。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0075b513a7790e9d343fdf407e861838472b78152f72d4babb102f2745349c32.png" alt="Phala项目计划运用XCMP协议实现的功能" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Phala项目计划运用XCMP协议实现的功能</figcaption></figure><ul><li><p>IBC</p></li></ul><p>目前来说，<strong>IBC主要运用的场景仍为ICS27-跨链交易</strong>，<strong>其并没有明确针对于智能合约、桥之间的通信功能</strong>，是一个较为简洁的方案。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/065ec6e6dd400d05e94e988a3f9e9e88f263330d260bd876fd54ece8d32f3084.png" alt="IBC目前的应用案例" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">IBC目前的应用案例</figcaption></figure><h3 id="h-5" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5. 安全性</h3><ul><li><p>XCMP</p></li></ul><p>从技术原理来进行解析，可以发现，XCMP对于平行链的安全性是<strong>统一由中继链进行保证的，因此跨链传输的时候不需要信任平行链的安全性，整个系统的稳定性较高</strong>。<strong>缺陷是如果中继链作恶，整个系统将会崩溃</strong>。</p><ul><li><p>IBC</p></li></ul><p>而对于IBC来说，其总体的协议较为简单，<strong>其并不保证平行链的安全性，需要平行链自身对于安全性有保证</strong>。因此若接入安全性较低的平行链的话，会对整个网络中与平行链相关的平行链产生双花等攻击，整个系统的稳定性大大降低。<strong>但是好处是减少了跨链系统的维护成本和降低了设计实现难度，并且由于平行链作恶行为无法影响全系统，只能影响与平行链相关的链条，因此又潜在的降低了整个系统崩溃的风险</strong>。<strong>此外，由于不受到整个网络中安全性的限制，可以满足对于某些想要保留自己链对网络控制权的需求（如币安）</strong></p><p>本文只刨析了Polkadot网络中的Encointer项目代码，并未刨析Cosmos中的项目代码，后续计划深入Cosmos代码，从实际项目开发情况中分析XCMP与IBC的差异及实际部署的难易程度</p>]]></content:encoded>
            <author>fan-3@newsletter.paragraph.com (Fan )</author>
        </item>
        <item>
            <title><![CDATA[AntiMatter ]]></title>
            <link>https://paragraph.com/@fan-3/antimatter</link>
            <guid>16KUDV4mP7kXBo87bzLl</guid>
            <pubDate>Mon, 21 Mar 2022 04:49:54 GMT</pubDate>
            <description><![CDATA[AntiMatter Finance basically contains FOUR main products, Dual Investment, Bull & Bear Tokens, Financial NFTs, as well as Antimatter DAO. So far, the most promising part lays down to Dual Investment and its derivative - Recurring Vault, I’m not going to explain every detail about these product but rather the thoughts and findings which play an essential role to understand as well as to evaluate the whole project.Dual InvestmentIt’s defined as the first structured product of AntiMatter, where ...]]></description>
            <content:encoded><![CDATA[<p>AntiMatter Finance basically contains FOUR main products, Dual Investment, Bull &amp; Bear Tokens, Financial NFTs, as well as Antimatter DAO.</p><p>So far, the most promising part lays down to Dual Investment and its derivative - Recurring Vault, I’m not going to explain every detail about these product but rather the thoughts and findings which play an essential role to understand as well as to evaluate the whole project.</p><h1 id="h-dual-investment" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Dual Investment</h1><p>It’s defined as the first structured product of AntiMatter, where we can find that <strong>buying a Dual Investment is actually selling an option to the platform.</strong></p><p>However, we still do not know what the ‘platform’ particularly refers to since it could sell the product to the market maker off chain or to the AntiMatter itself who stands for the product buyer’s on-chain counterpart.</p><p>By reasoning we could say to some extent it may <strong>be a pool or a vault</strong> which is maintained by the project itself, and the pool acts as the counterpart of every product buyer. There’re some clues to support this judgement, e.g. it’s declared in the risk control part that ‘<em>Real-time adjustment of APY is executed following market price fluctuations to control the </em><strong><em>platform&apos;s cost</em></strong><em>’,</em> Here the ‘platform’ refers to the Antimatter itself.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4d5953a61222e64c37e88b3b474b4bc86cf6fe10e4dd0ff182f9f904d9b17ab3.png" alt=" " 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>So here we could see a mass difference between the traditional cover-strategy-based product and the dual investment product. <strong>In deed, this product cannot even be called an option-based structured product but rather a product which simulate the options’ reward without introducing the right as well as the duty an option holds</strong>.</p><p>There’s no right or duty in the structure products, <strong>but only the MUST which has already written in the logic of contracts</strong>, i.e. if the Settlement Price is higher than the Strike Price, then the product will be “exercised” automatically without the judgement a buyer would make.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acf89677dafa6f132838bea4c10c65d7588f64b1eec2731269ac5dd8f4aee3c7.png" alt="" 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-hows-the-parameter-managed-to-be-set" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How’s the parameter managed to be set.</h2><h3 id="h-apy" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">APY</h3><p>Given the calculating table above, it’s quite clear <strong>APY plays the role of the option premium</strong>, which pushes the problem straight back to how to reasonably determine the price of the option. There’s no detail about this topic, yet we can see some clues in its statement.</p><p><em>APY = </em><strong><em>Return Ratio</em></strong><em> / (Delivery Date - Purchase Date) * 365</em>100%*</p><p><em>APY is constantly changing and is obtained in real time, depending on the strike price, the remaining time to delivery date and the volatility of the market price. For example, the lower the strike price, the more volatile the market price, as well as the higher the APY. When a user successfully subscribes to a Dual Investment, it means that the APY at the time of placing the order is settled and it will not change until the delivery date</em>.</p><h3 id="h-strike-price" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Strike price</h3><p>Unlike the ribbon protocol, the strike price is pre-defined by the protocol itself, users can decide to invest various products according to the strike price. However, this may lead to liquidity fragmentation if there were products with various strike prices and each requires a pool.</p><p><em>Strike price would floating with maximum </em><strong><em>5%</em></strong><em> of the current underlying asset market price. e.g. for an Upward Exercise product, its Strike Price = Current Price * 105%, rounded to thousands. If the current price equals to $51,000, then the strike price would be $52,000, $53,000, and $54,000</em>.</p><h2 id="h-wheres-the-rewardapy-actually-come-from" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Where’s the reward(APY) actually come from?</h2><p>As we’ve discussed above, by reasoning we could largely see the Antimatter smart contract as a <strong>platform-owned liquidity pool</strong>, where all the deposits regardless the strike price are aggregated together into the pool(it can be segmented pools and the conclusion remains the same).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/67b4e9953813332640e26b71885ef18b3267d9d48d763306dfc99a4ac7f0b776.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The pool would have <strong>3 payoff situations</strong>: reserve USDT &amp; loss BTC, reserve BTC &amp; loss USDT, loss USDT &amp; loss BTC, without the situation of reserve USDT &amp; reserve BTC since two options could not be exercised at once. As we could see, there’re only three sources that may generate APY rewards: <strong>the reserved token, the deposited token and the pool itself</strong>.</p><p>The deposited token makes the protocol behaves like a <strong>bank</strong>, for once the deposit has already been put on chain, t<strong>here’s no way for the users to withdraw until the expiry date, which enables the pool to distribute the deposit tokens among products with various strike prices and expiry date</strong>.</p><p>Upon now, it’s clear that this protocol has some <strong>drawbacks</strong> as follows.</p><ul><li><p>the reserved token requires a <strong>precise pricing</strong> of option products (APY), which dampens the solvency if it’s too high whereas shrinks the liquidity if it’s too low.</p></li><li><p>Using the deposited token to rewards needs a <strong>precise management of liquidity</strong>, which might be worse when introducing the weekly circled Recurring Vault.</p></li><li><p>So far, there’s <strong>no function for users to add liquidity into the pool</strong>, which is inconceivable for a protocol relay heavily on liquidity.</p></li></ul><p>It’s declared that <em>We do not have plan for liquidity mining in the short-term because many DeFi projects have proven that this incentive mechanism is a wrong approach. As we grow our products this year, we will propose to introduce more mechanisms to boost liquidity in both DEX and CEX</em></p><h2 id="h-other-key-features-which-should-be-kept-in-mind" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Other key features which should be kept in mind.</h2><ul><li><p>It’s deployed on the <strong>Binance Smart Chain, hence all the tokens that are not native to are the wrapped token, i.e. the BTC is indeed the BTCB on BSC.</strong></p></li><li><p>Unlike the Bull&amp;Bear tokens, it introduces chainlink as the oracle to feed the market price, which is clearly a reasonable adaption.</p></li><li><p>There’s only front-end code of the dual investment product in its github, the <strong>security of the smart contract code still remains in doubt</strong> with the absence of the smart contract code as well as its audit report.</p></li></ul><h2 id="h-recurring-vault" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Recurring Vault</h2><p>This product is basically aims to compete with structured protocols like Ribbon Finance. To make it clear, it’s a big vault based on the dual investment products above, <strong>which enables users to automatically invest into dual investment products without having the need to manually subscribe</strong>.</p><p>There’s some difference between the under development Recurring Vault and the Ribbon Finance.</p><ul><li><p>Ribbon Finance is based on the OPYH oTokens as well as the Gnosis Auction platform. Generally speaking, <strong>it acts as a decentralized deposit manager</strong> to mint oTokens (tokenized European call&amp;put option), sell them in the auction platform and distribute the payoff.</p><p>while the Recurring Vault is based on the Dual Investment, which do not involve the process of minting and selling tokenized options, but instead it covers a pool maintained by the smart contract, which <strong>simulates the payoff of cover strategy</strong> <strong>and automatically exercise the strategy without the judgement of the buyer</strong>.</p></li><li><p>Ribbon Finance <strong>cannot switch</strong> its strategy automatically unless one withdraw deposits from one product to another at the end of each round.</p><p>While Recurring Vault <strong>automatically change the depositor strategy into another one</strong>. i.e. in the case that the option is exercised, the settlement currency is different from the deposited currency and therefore in the next cycle the strategy is changed to Covered Call or Put Selling respectively.</p></li><li><p>Ribbon uses <strong>deposits as collateral</strong> to generate oTokens, hence it support a vast type of deposit tokens including the yvUSDC, which would in return bring more gains to the depositor generated by the Yearn yVault.</p><p>Because the Dual Investment product functions <strong>as a liquidity pool</strong> hence it cannot support a more generalized token which would potentially bring more gains to the depositor.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/68bf63cc6891a8d8ac45b6f33fc8001b59c955271f75d272b9456b786a813853.png" alt="Note: there’s no detail about the fee in dual investment, and it’s even harder to calculate fee since the API number in the web has omitted some decimal which makes the real value already deviates from the theoretical value" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Note: there’s no detail about the fee in dual investment, and it’s even harder to calculate fee since the API number in the web has omitted some decimal which makes the real value already deviates from the theoretical value</figcaption></figure><h1 id="h-bullandbear-tokens" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Bull&amp;Bear Tokens</h1><p>What the bull &amp; bear tokens (BB token) aiming to do is to simply <strong>create the Perpetual American Option</strong>, which is an option that can be exercised at any time and has no expiration date. Selling the perpetual option (both American and European) would require the counterpart to take on a huge amount of risk and uncertainty up-front, <strong>which makes them rather hard to be priced</strong>. Hence, there’s rather small amount of projects aiming to establish a decentralized perpetual option products, which includes the <strong>Everlasting Option</strong> proposed last year by SBF which i’d explain latter(not yet), OYPN and the Bull &amp; Bear tokens.</p><p>Here we can see the major barrier of creating a perpetual option lays down to <strong>how to price it and trade it, what the form of perpetual option is in decentralized world</strong>.</p><h3 id="h-the-form-of-bb-token" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The form of BB token</h3><p>In a word, <strong>the BB token is a token pair consists of a call (bull) token and a put (bear) token and is minted by the collateral in the liquidity pool</strong>. What the token pair can do is not just traded by users as a normal ERC20 token, but also functioning as a call and a put perpetual American option that can buy and sell a token at the strike price respectively.</p><p>So here comes to the point, what’s the form of BB token, is it a ERC20 token represented an option contract, where each of them have a strike price and expiry just as Opyn oTokens? The answer is negative, <strong>BB token is just a normal ERC20 token without the representation of any option contracts</strong>, <strong>and by implementing the logic into the smart contract to simulate the execute process of an option,</strong> which is similar to the idea of dual investment above.</p><h3 id="h-the-bb-token-mechanism" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The BB token mechanism</h3><p>To simplify it, i’ll start by the example shown below.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6ba69581a61bb143d17c05c522552fb0ee28c2a04891c310ff2581d3d96a9c83.png" alt="Note: there’s only one option product in the bsc, arbiturm, eth, avalanche mainnet respectively, indicating the immaturity of the project." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Note: there’s only one option product in the bsc, arbiturm, eth, avalanche mainnet respectively, indicating the immaturity of the project.</figcaption></figure><p>Option product e.g. WETH Option is <strong>NOT</strong> an option, instead it is a pool covers of underlying assets i.e. WETH and USDC, and BB token. And each option product contains two parameters: option price floor and option price ceiling.</p><p>Let’s take WETH option product as an example:</p><p>The call (bull) token for this option product always has the right to purchase WETH at 1500 USDC, and the put (bear) token for this option always has the right to sell WETH at 6000 USDC. If the market price for WETH is currently at 4000, then the bull token holders can purchase WETH at 1500 and sell for 4000, making 2500 USDC profit. Conversely, the bear token holders can sell WETH at 6000 purchase back WETH at 4000, making 2000 USDC profit. <strong>To be aware, these process is done not by newly created token’s function but the deposit and withdraw process</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/920b29eae4ab528a40e5c578ea77cbc1370e5f8fec7d86499d70643a9704db92.png" alt="" 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>If one deposits {1 Bull + 1500USD} then he could withdraw 1 WETH, which simulate the payoff when exercise the call option. If one deposits {1 Bear + 1WETH} then he could withdraw the same amount of USDC at the strike price, which simulates the payoff when exercise the put option. S<strong>ince there’s no expiry date or exercise time, it functions well as the perpetual American option.</strong></p><p>And one can create bull and bear token pairs by depositing a particular amount of underlying assets like USDC and WETH into the pool. However, this create and liquidity function <strong>has not been deployed</strong> yet.</p><p>In addition, one can simply buy and sell any individual Bull and Bear token. <strong>Although it’s not clear that how’s the swap process done, we can see some clues in its testnet tx logs.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b14714d28fa5a27d567e77b955f6bf3111c4d9865919bd4ca4d55437bc952fd3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The address circled with the blue line is the UniSwap V2 USDC/WETH address, which indicates this process involves a dex swap process. However, it shows buying a bull token does not involve the swap process in some dex pool, but involve the mint and transfer process.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1fb97d16c598c5ba84c29773a0ecb63144c14a766963ef4101b9ae996439ead8.png" alt="" 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>More interesting, it shows the process to sell the bull token is basically the way to transfer it into minting address. So here comes the point, is this process in the mainnet acting the same as the testnet one? To figure out, i used the bsc mainnet to test, which indicating that buy a bull token is <strong>NOT</strong> from the holder but instead from the miner, <strong>it’s totally a minting process! Moreover, the green circle indicates the token has been deposited into the pool (bull token smart contract), which in return verifies the assumption proposed above!</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/53eb3296aaa2711816cbc0d7b6aa638efa79e6779b9dab258c01d4b5ef9eeccb.png" alt="" 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>This verifies the correctness of the assumptions above, since BUll token is just a simple ERC-20 token. After understanding the mechanism behind the BB token, we need to fix the last but essential part of any option products, i.e. the price.</p><h3 id="h-pricing-process" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Pricing Process</h3><p>Since the option designed above is a perpetual American option which does not contains the time to expiration term, <strong>the BS model CANNOT empower us to price the bull as well as the bear option</strong>. That’s why Antimatter comes up with its unique method proposed in the V2 whitepaper.</p><p>I’m NOT going to explain the detailed deducing process with math formulas but some key ideas and concepts. The most essential concept above all is that because the deposit is used to mint BB token in an option product, so intuitively the <strong>asset value equals to the sum of value of bear tokens and bull tokens,</strong> and by dividing asset value into various parts and constructing each of them, one can deduce the option price.</p><p>It has constructed the form of assets value based on three principles:</p><ul><li><p>when the ratio of total issuance of bull token to the total issuance of bear token approaches to 1, then the price of bull token rises to approach 1 whereas the bear token falls to 0, and vice visa. ( in doubt)</p></li><li><p>when the underlying asset (e.g. USDC) value rises, it requires more bear tokens than bull tokens, whereas the E asset (e.g. ETH) value rises, it needs more bull token than bear tokens.</p></li><li><p>Derivatives of total asset value <strong>(z)</strong> with respect to the total issuance of bull token <strong>(x)</strong> as well as the bear token <strong>(y)</strong> must greater than 0, <strong>since them represent the price of bull token and bear token respectively</strong>.</p></li></ul><p>After trying a great amount of forms, it has finally come with the following form in its V2 whitepaper. If the two sides do not equal to each other, then, as it’s statemented in the whitepaper, one can <strong>arbitrage to rebalance it</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8f9ea8621232ef1d6610a46392332b5a896718d020c0dafe9d3ebed2c7d52e40.png" alt="" 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>It seems pretty great right? Let’s go deeper to find out what’s behind the whitepaper V2.</p><h2 id="h-the-things-behind-whitepaper" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The things behind whitepaper</h2><p>In its V2 whiterpaper, the asset value had been built as the above formula, it’s naturally to test whether the price is actually calculated based on this. By comparing the outcome of the calculator provided by the Antimatter with the results deduced manually based on the V2 formulas, I’ve found that <strong>there’s a great gap between the two</strong>.</p><p>Is this project a scam? or am i missing something?</p><p>By decomposing the formula and reconstructing it, I’d tried many many forms before finally found one that suited rather well with the outcome calculated by the calculator. In the mean time, i’ve also found one little excel, improperly named in the github, that further verified the correctness of my conclusion, i.e. <strong>Antimatter has NOT used the formula provided in its V2 whitepaper, but rather has used the following one</strong>:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a17b146f413737788a4fad43108fa5cb974a0ab83f0088643475b245d3aa1f74.png" alt="" 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>Given that the excel proposed exactly the same time as the whitepaper, it’s reasonable for us to suspect the preciseness of the whole project. Would there be some same mistakes during the coding process and other sorts of things?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b185dbfe578508185f76a93dff428ad12054736daf4b58a0494aba4b618d6ca5.png" alt="" 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>Besides these, there’s some essential parts remain absent which would make the whole BB product useless.</p><ul><li><p>one can only buy and sell tokens and <strong>is unable to exercise the option both in mainnet and testnet, which makes the whole option products useless.</strong></p></li><li><p><strong>unable to create new option products</strong> freely both in mainnet and in testnet.</p></li><li><p>unable to switch bull and bear token among various holders.</p></li><li><p><strong>Without the implementation of an oracle</strong> to track the market price of underlying asset, it is almost i<strong>mpossible for a new-born project barely relays on the arbitrage to track the correct price.</strong> See the ETH market price in its protocol below, which is total deviated from the correct one.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/20ded19540c78dd8201665b1f14c23556452875984cd1926330324e0568d1bce.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-some-drawbacks" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Some drawbacks</h3><ul><li><p>Too many arbitrage assumptions, some might not even work.</p><p>The price of BB token is not determined by the assets value but also the market demand-supply relationship, then if the BB token value deviates from the assets value, arbitrage activities would happen to rebalance the value equation by minting more over-valued token to supply more ( <strong>however, the absence of the creating function constraints the arbitrage activity in the end dampens the whole system</strong>) .</p><p>Moreover, the when the market price of the underlying assets deviates from the real price, it relays on the so-called arbitrage to sell the over-evaluated token to rebalance the strike price. However, <strong>i donot see this mechanism could ever work</strong>, since the mint process would only influence the token price not the strike price.</p></li><li><p>The doc, full of mis-spelling words, out-of-date information, absence of any statement about the core mechanism, un-friendly to readers.</p></li></ul><h2 id="h-financial-nfts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Financial NFTs</h2><p><strong>Index nft</strong></p><ul><li><p>This product allows people to trade indexes in NFT format with a variety of underlying assets combination.</p></li><li><p>When you buy an index, the contract will <strong>automatically purchase underlying assets from the market and then generate the NFT index f</strong>or buyer.</p></li><li><p>to sell the index, the seller will burn his piece of NFT index and liquidate the underlying asset</p></li></ul><p><strong>locker</strong></p><ul><li><p>NFTs can be used as a locker for crypto assets. Use cases include digital safe with an unlock schedule, or gift that user can reward to people. One can select asset to put into a locker NFT and choose a release schedule for the token.</p></li></ul><h2 id="h-antimatter-dao" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Antimatter DAO</h2><p>Antimatter DAO is a club with features including <strong>on-chain governance, multi-party treasury management, academic resources sharing, and new model experiments</strong>.</p><p><strong>Members:</strong></p><ul><li><p><strong>Tekin Salimi</strong>, the general partner of Polychain Capital and a strong believer and advocate of DAO. Salimi believes that the continued use of DAOs to be of the utmost importance to the next evolution of the blockchain industry.</p></li><li><p><strong>Do Kwon</strong>, the Co-founder and CEO of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://terra.money/">Terraform Labs</a>, the company behind the Terra Blockchain. Terra strives to use blockchain technology to develop a more efficient payment system.</p></li><li><p><strong>Justin Sun</strong>, the founder of Tron foundation, an ambitious project dedicated to building the infrastructure for a truly decentralized Internet.</p></li><li><p><strong>Brian Lee</strong>, partner at Alameda Research Ventures, a quantitative trading firm bringing expertise from Wall Street and Silicon Valley to provide liquidity in crypto markets worldwide.</p></li></ul><h2 id="h-token-distribution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Token Distribution</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9db4c2424c650066cf3427e023dc8b2d48b614fa42521371b2f64b374d6b1377.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-security" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Security</h1><p>There’s two audit reports about AntimatterFinance contract and MATTER/ASAP contract respectively, both have published in its github repository.</p><p>Key conclusions of AntimatterFinance contract:</p><ul><li><p>these contracts are well-designed and engineered, though the implementation can be further improved by resolving a few tiny issues.</p></li><li><p>there’s some extra power to the privileged account, such as governor, admin, authority, which can be a counter-party risk to the contract users. <strong>In addition, these still remains to be fixed in its latest version</strong>.</p><ul><li><p>e.g. authority can transfer the Call/Put tokens from the Antimatter Finance users without restriction.</p></li><li><p>admin or governor can set the key parameters for the Antimatter Finance protocol.</p></li><li><p>admin or governor to transfer the governor role to the newGovernor.</p></li></ul></li></ul><p>Although, the audit report does not covers the logic behind the product itself, <strong>i manually go through the whole code and find that it’s indeed correct.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/32527af2fb40ecc82a9126890a7ab4a9ab66ec256174d5bba797086e34d2efee.png" alt="" 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>Key conclusions of MATTER/ASAP contract:</p><ul><li><p>There’s no ERC20 compliance issue found by the auditor, although the privileged account issue still exists.</p></li><li><p>the other issues had already been fixed.</p></li></ul><h3 id="h-what-should-be-concerned" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">What should be concerned ?</h3><ul><li><p>the audit report of AntimatterFinance is only about its first version of call-put option contract , <strong>which can not insure the security of the latest version of the contract, as well as the rest products</strong> e.g. Antimatter NFT, Dual Investment, since audit report only covers the call-put option products.</p></li><li><p>the audit report MATTER/ASAP contract is not so helpful since this contract is merely used to deal with the token’s ERC20 compatibility as well as the initial supply of 100 million tokens to different parties.</p></li><li><p>there’s one underlying github repository contains code info hidden by the team as all the public link in this doc as well as the website goes to another repository. Moreover, <strong>there’s no code of dual investment contract public even in the hidden repository</strong>, which rises the worry of the whole project’s security.</p></li></ul><h1 id="h-tokenomics" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Tokenomics</h1><p>The utility of MATTER:</p><ul><li><p>provides incentives to the participates.</p><p>Given that additional MATTER will be awarded to a user based only on its actual usage, activity and contribution on Antimatter, e.g. which includes participation in the project’s <strong>governance</strong>, <strong>creation and redemption of options (not yet)</strong>, <strong>liquidity provision (not yet)</strong> .</p></li><li><p>pay protocol fees , including option generation and redemption fees and protocol transaction fees.</p></li><li><p>In the Antimatter NFT, matter is used as the payment currency for NFT transactions and creators reward claims.</p></li><li><p>MATTER is used as a governance token for protocol DAO management.</p></li></ul><p>According to the OlympusDAO design, the team has refined the tokenomics of three parts:</p><ul><li><p>Trading incentives. TBA</p></li><li><p>Antimatter Bond. TBA</p></li><li><p>Staking.</p></li></ul><p>Staking does not have any lock-up mechanism and one can stake and unstake anytime as he wants. Antimatter DAO Staking adopts a dynamic APY mechnism. The annual reward pool contains 400,000 $MATTER.</p><p>No token would be given back to the staker.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9e7b9663efab705d42e4a938eda7a589ed1bd6861b53427816af1327ebcad5bc.png" alt="" 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-ribbon-tokenomics" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Ribbon tokenomics</h2><p>Up till today, RBN has been a pure untradable <strong>“governance token</strong>” — it has been used to vote on governance proposals including changing of fee models, how to utilize the treasury funds, creating liquidity mining programs, and so on.</p><p>Yet it plans to introduce some adaption with the same model in mind as veCRV:</p><ul><li><p><strong>Staked Ribbon (sRBN).</strong></p><p>RBN holders can opt-in to stake their RBN and receive sRBN in exchange. The <strong>longer</strong> users stake their RBN tokens, they will get in return:</p><ul><li><p>More voting power (e.g the <strong>ability to control which vaults rewards accrue to</strong>)</p></li><li><p>Boosting of future <strong>RBN rewards</strong></p></li><li><p>Outsized proportion of <strong>protocol revenue</strong></p></li></ul></li></ul><p>Ribbon plans to rollout 2 new programs in the next few months:</p><ul><li><p><strong>Vault Deposit Incentives</strong></p><p>There will soon be a new revamped RBN emissions program, <strong>but <em>which vault</em> these rewards go to will be controlled by sRBN holders.</strong> For example, large depositors in the ETH Covered Call vault may choose to acquire and stake RBN to acquire as much voting power as possible to redirect emissions into that vault.</p></li><li><p><strong>Permissionless Vaults</strong></p><p>The Ribbon protocol will also support permissionless vaults in the future — anyone will be able to create their own Ribbon Vault that supports any asset or any strategy. In this universe, people can also acquire and stake RBN to bootstrap their vault and redirect more people to use it.</p></li></ul><p>By an aside, the sRBN token uses fully on-chain governance, specifically the <strong>Governor Bravo</strong> system, which allows governance proposals to get executed autonomously instead of through loose consensus via a Snapshot vote and multisig execution.</p><h2 id="h-suggestions-on-antimatter-tokenomics" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Suggestions on Antimatter tokenomics:</h2><ul><li><p>Staked Matter (sMatter).</p><p>Holding a larger amount of sMatter would be given to more voting power e.g. the ability to control which vaults rewards accrue to, Boosting of future RBN rewards, Outsized proportion of protocol revenue.</p></li><li><p>Bond</p><p>Using bonds to gain the underlying assets in the liquidity pool, which is an essential apart to Dual Investment. This may require not only the BSD, BUSD-MATTER LP, but other assets like BTC depending on the services provided.</p></li></ul>]]></content:encoded>
            <author>fan-3@newsletter.paragraph.com (Fan )</author>
        </item>
        <item>
            <title><![CDATA[预言机网络一定需要完全去信任么？]]></title>
            <link>https://paragraph.com/@fan-3/QLXoW6InMo5jkJ776LDP</link>
            <guid>QLXoW6InMo5jkJ776LDP</guid>
            <pubDate>Fri, 18 Mar 2022 10:12:30 GMT</pubDate>
            <description><![CDATA[tl;drChainlink 是一个用于构建和运行去中心化预言机网络的框架，其包含各个由预言机节点组成的预言机网络，每个网络负责执行不同的取数逻辑。Chainlink包含两种基本模式——DDM与BRM，目前推出的五种服务均是基于这两种模式的衍生，并基于此构建了Keep与OCR。Chainlink通过将Keep与OCR的内在逻辑进行推广，设计了DON。DON能够接入任意一条链，并负责链下的计算、储存与双向信息交互。然而通过分析DON的各种特性发现，制约DON发展最关键的一点为如何有效解决节点作恶现象的发生。Chainlink采用了两层验证机制+非线性作恶成本+隐形收入的机制来解决节点作恶现象，但是其仍然保留了对于特定节点的信任假设。由于预言机系统有别于区块链系统的特性，使得完全去信任化并不可行；此外，引入类似于德国电信子公司作为节点其对声誉的影响远远大于作恶收益；而预言机系统本身对加密货币世界的产生价值大于其发生作恶的成本，使得预言机网络自身发生演化，并不被淘汰。因此，虽然在理论上引入信任不是一个较好的打算，但是从现实意义上来说，半信任化的预言机网络并不能意味着无法长期、合理、有效...]]></description>
            <content:encoded><![CDATA[<h2 id="h-tldr" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">tl;dr</h2><ul><li><p>Chainlink 是一个用于构建和运行去中心化预言机网络的框架，其包含各个由预言机节点组成的预言机网络，每个网络负责执行不同的取数逻辑。</p></li><li><p>Chainlink包含两种基本模式——DDM与BRM，目前推出的五种服务均是基于这两种模式的衍生，并基于此构建了Keep与OCR。</p></li><li><p>Chainlink通过将Keep与OCR的内在逻辑进行推广，设计了DON。DON能够接入任意一条链，并负责链下的计算、储存与双向信息交互。</p></li><li><p>然而通过分析DON的各种特性发现，制约DON发展最关键的一点为如何有效解决节点作恶现象的发生。</p></li><li><p>Chainlink采用了两层验证机制+非线性作恶成本+隐形收入的机制来解决节点作恶现象，但是其仍然保留了对于特定节点的信任假设。</p></li><li><p>由于预言机系统有别于区块链系统的特性，使得完全去信任化并不可行；此外，引入类似于德国电信子公司作为节点其对声誉的影响远远大于作恶收益；而预言机系统本身对加密货币世界的产生价值大于其发生作恶的成本，使得预言机网络自身发生演化，并不被淘汰。</p></li><li><p>因此，虽然在理论上引入信任不是一个较好的打算，但是从现实意义上来说，半信任化的预言机网络并不能意味着无法长期、合理、有效的运行。</p></li></ul><h2 id="h-chainlink" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Chainlink是区块链么？</h2><p>我们都知道预言机的主要功能是从链下的世界往链上的世界传递数据，但是预言机都是区块链么？换一种角度，区块链常常由一组去中心化节点组成的网络来构成，通过确立共识来更新世界状态，那预言机也是由一组去中心化节点来共同维护的么？如果预言机是另一个区块链的话，预言机这个区块链能够取得链下的数据，而其他的区块链则不能？如果他不是的话，他如何来确保获得的数据本身的正确有效性？</p><p>当我们解决了这些问题之后，我们才能明白当前预言机面临的问题与不足，才能更有利的探究什么是预言机的未来，从而解决最本质的问题——即预言机是否值得被长期投资？</p><p>Chainlink作为领先的预言机项目，目前通过支持各类公链及其生态项目，目前为近761亿美元的资产提供预言机服务，是当前规模最大、运行时间最长、影响力最为深远的预言机项目。但是其资产价格自2021年5月达到最高点以后，持续下跌，截至2022年1月23日，已跌去近325%。不断持续下降的价格更迫使投资人去思考，Chainlink价格是否被低估？ 因此本文将从Chainlink视角出发，通过探究Chainlink技术框架与功能，刨析项目的局限性与前景，旨在为读者提供一个关于预言机更为深入的认知与思考。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">结构框架概述</h2><p>Chainlink <strong>是一个用于构建和运行去中心化预言机网络的框架</strong>，它允许任何自定义的预言机网络自由加入而无需依赖其他网络。每<strong>个预言机网络由一组特定的 Chainlink 节点组成和运行</strong>，每个节点由node operator构建和拥有，node operator通常是现实世界中的实体。</p><p>每个节点可以通过加入不同的预言机网络，根据自己的能力同时完成多个独立的工作，并且每个网络都可以自定义数据的来源和聚合方式，例如可以取数据的中位数等。与区块链系统不同的是，所有预言机网络之间没有统一不变的共识机制，在实现了链下报告（OCR）机制后，预言机节点在大多数情况下都使用了拜占庭容错机制（BFT），这也是未来去中心化预言机网络（DON）的实现基础之一。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e35d97e4759e7982e4c9781b24a18d2b7f9ba67745cdd8ec75d5019669b0b332.png" alt="Chainlink结构框架" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Chainlink结构框架</figcaption></figure><p><strong>Chainlink如何获取外部的数据？</strong></p><p>Chainlink 使用链上智能合约来发送请求和同步状态，每个 Chainlink 节点都有一组adapter，允许它们连接到任何 API ，并将数据传递到链上智能合约。因此，adapter在可以获取哪些类型的数据以及如何交付这些数据方面提供了最重要的作用。</p><p>到目前为止，Chainlink 系统中有两种adapter，内部adapter和外部adapter。内部adapter（也称为核心adapter）预先构建在 Chainlink 节点中，但是其连接 API 和传递数据的功能十分有限。而外部适配器才是真正链接数据，提供最主要的功能，使节点能够出售任何类型的数据到智能合约，并可实现双向通信、与其他区块链的互操作等等。</p><p><strong>但是到底什么才是adapter？</strong></p><p>当我们从外部数据源检索 24h ETH/USD 交易量的信息。首先需要发出一个 GET 请求，在 JSON 响应中找到一个特定的字段，将这一字段转换成EVM可识别的模式，然后将其提交回请求合约。这个步骤将会包含 4 个主要适配器。</p><ul><li><p>Adapter 1: 调用APIcalls the API</p></li><li><p>Adapter 2: 解析JSON并取回数据</p></li><li><p>Adapter 3: 将数据转化成EVM可识别的形式</p></li><li><p>Adapter 4: 将最终的结果提交给主链上的智能合约，从而完成这个流程。</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0c9b7cf20bbd504d498ada343568662074e65c4eb9de3ac27c8cb5306e783e76.png" alt="什么是adapter？" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">什么是adapter？</figcaption></figure><p>因此，<strong>adapter是一组预先设定好的可调用的函数，通过在智能合约中进行申明来自定义化获取数据的方式</strong>。</p><p><strong>但是，是否是所有的场景都需要用到adapter来获得数据并传输到智能合约中呢？</strong></p><p>事实上，当我们在智能合约中部署adapter的时候是直接规定了node如何去索取、计算并传回数据，是一种一对一的自定义化请求方式，而Chainlink提供了第二种方式方便数据需求者直接获取数据而并不需要申明adapter的集成化的方式，前者被称作Basic Request Model（BRM），而后者被称作Decentralized Data Model（DDM）。两者的流程差距如下图所示：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c18e49745448765990643089df4bb43fceab06f9168a979765ee35988f340743.png" alt="Basic Request Model" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Basic Request Model</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bb4c7b176f49eaad0ddf9869062004c1ce9dc0cbb7e139da8f2914c3e868eff3.png" alt="Decentralized Data Model" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Decentralized Data Model</figcaption></figure><p>具体来看DDM，其拥有一个代理合约将定期获取到的数据集成（如取中位数），并将其保存到合约中，若链上与链下数据差异保持在一定限度内，或者在一定的时间期限内，代理合约不会进行更新。二者的区别如下：</p><p><strong>Basic Request Model：</strong></p><ul><li><p>没有代理合约将数据进行储存，<strong>1：1请求可以得到及时的最新数据</strong>。</p></li><li><p>需要申明各种adapter，callback函数等<strong>较为复杂</strong>，并且若对大量node都进行请求<strong>成本开支大</strong></p></li></ul><p><strong>Decentralized Data Model：</strong></p><ul><li><p>通过直接请求代理合约保存的集成数据，可以得到经过大量节点验证的更有效的数据，<strong>并且操作更为简便</strong></p></li><li><p>在类似于获得随机数的场景当中，若代理服务器保存了随机数，则不同合约调用会得到相同的值，违背随机的意义。</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6ab216e0e8bae4c3a838922b381bd97fe12567868a436e14400d5aded4eb6346.png" alt="DDM调用" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">DDM调用</figcaption></figure><p>然而可以看出DDM模型有个天然的缺陷，所有的Node都需要向代理合约提交数据，然后通过智能合约进行集成处理，这部分对于gas的消耗较大，<strong>如果能够在node节点之间达成一个共识——提交哪个答案作为最终答案，则只需要集中与合约交互一次即可。而node节点之间达成共识的行为使得其向类区块链系统的转变迈进了一大步</strong>。而实现这个转变的即为OCR。</p><h3 id="h-off-chain-reportingocr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Off-Chain Reporting（OCR）</h3><p>OCR是预言机网络的一次升级，在此之前Chainlink中的预言机节点只是获取数据的独立存在。而在OCR中，所有的预言机节点间点对点通信，达成共识，提交报告，其简化的步骤如下所述：</p><ul><li><p>预言机节点中定期选举一个新的领导节点。领导者定期要求其他节点提供其各自签署的结果并将其汇总成报告。</p></li><li><p>然后它将此报告发送回追随者，并要求他们验证报告的有效性。</p></li><li><p>如果有超过限度的节点将签名验证后的副本发送回领导者，则领导者将使用这些签名并组装成最终报告，广播给所有节点，并将最终报告传输到智能合约。</p></li><li><p>最后，智能合约验证是否有法定人数的节点签署了报告，并向调用人公开了中间值集成结果。</p></li></ul><p>可以看出，OCR确实是对传统预言机网络的一次重大升级，但是需要注意的是，<strong>此网络与区块链网络具有根本差距，其根源在于要从无共识有信任的链外世界传递数据至有共识去信任的链上的矛盾——即无法去信任化验证链外数据的有效性</strong>。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9188d868a4f3ad3b65bebf713665762c84ca4d4140d19689b5bf58afa8b856b5.png" alt="OCR与区块链的差距" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">OCR与区块链的差距</figcaption></figure><p>值得注意的是，我们知道Chainlink具有两种不同的获取数据的模式，BRM与DDM，但是只有DDM需要利用节点网络，BRM是点对点请求，因此，OCR的引入并不会影响到BRM模式，只会影响到DDM。而从上表中我们可以看到，<strong>OCR的最大缺陷即为无法阻止大于n/2的作恶节点（n为总节点数）发布错误数据</strong>。ChainlinkV2对其的解决方案主要为引入二层验证节点与非线性作恶成本，具体讨论将在本文第三部分开展.</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">两种模式的应用拓展</h2><p>Chainlink 目前推出了喂价服务、随机数服务、Keep 服务、保证金证明服务、CCIP（开发中）五种服务，分析下来，其均为上文中讨论的两种基本模式的应用与变体。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e1db8b8395c5cc87febe7326d8bad8e4fede7fd18a8a0bf02ac09a54ac0f2adc.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>其中，喂价服务为DDM的应用；随机数服务为BRM的应用，其目的是为了确保每次获取时都为不同的随机数；保证金证明则是DDM的变体，通过adapter获取到链上或者链下的准备金账户，生成关于准备金量的证明，下游应用可以根据准备金的存量来实时执行事件，如清算账户等；Keep服务为DDM的变体，通过链下的网络节点执行相应的计算，并将改变后的状态更新至代理服务器上，最后传递给客户端合约；CCIP则是DDM的变体，将链下交互的adapter移到链上，实现跨链的数据传递，具体的信息可以见下表，本部分将主要解释Keep。</p><h3 id="h-keep" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Keep</h3><p>从本质上来说，Keep是将代理合约作为管理合约，把任务分配给各个节点，由各个节点计算执行完成后将结果传回代理合约，最终提交上链。因此，智能合约开发团队可以将定期的维护工作交给Keep，当Keep发现链上的状态达到触发条件时，自动执行预先植入的代码。因此，Keep可以大幅降低开发人员维护的成本，并将一些逻辑外包出去。</p><p>值得注意的是，keep有许多回合，每回合将预先设定的代码分配给不同的块，每个Keeper负责执行一个块。在每一回合结束时，块从一个 Keeper 旋转到下一个 Keeper。即使一名 Keeper 出现故障，维护将由下一位 Keeper 执行。而一旦 Keeper 执行了维护，它就不能再次执行此操作，直到网络上的另一个 Keeper 随后执行了相同的维护。这可以防止有缺陷或恶意的 Keeper 对给定的维护采取重复行动。其具体的流程如下所示</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d639e58506def73d6c4c50d2a9d6ecf2b33aed60c7348ec24b978e5d8362ef7c.png" alt="Keeper流程" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Keeper流程</figcaption></figure><p>其主要由registerUpkeep，checkUpkeep与performUpKeep组成</p><ul><li><p>registerUpkeep负责写入checkUpkeep与performUpkeep的基本逻辑</p></li><li><p>checkUpkeep 负责检查是否达到出发条件</p></li><li><p>若达到触发条件，则调用performUpkeep进行执行。</p></li></ul><p>Keeper的好处是自动化链下执行计算，快速低成本，是Chainlink实现链下计算服务的原形，但其缺陷也突出，其受制于DDM模式，严重依赖于节点的信用，无法有效防止贿赂攻击。而这一缺陷的深度讨论将会在下一节开展。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">链下服务拓展——通用服务框架与基础设施</h2><p><strong>OCR实现了节点网络的通信与共识、BRM实现了数据的处理、传输与计算，预言机从向区块链传输数据，到计算、储存并双向传输数据，其实只有一步之遥</strong>。因此，Chainlink基于这些应用场景进行再拓展，通过将区块链上的智能合约接入Chainlink提供的网络链接、数据储存与计算功能，从而增强并拓展主链的性能。由此，Chainlink设计了（去中心化预言机网络）DON。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0b42663441ab5d105a1f1897c4981f8940f1c6a9f4f1c2e5688da14bc8ed6595.png" alt="DON框架" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">DON框架</figcaption></figure><p>上图中，SC（Smart Contract）与可执行程序组成了DON中最核心概念——混合型合约，该合约的逻辑由链上与链下共同组成。其沿着Keep与OCR的路径做了一下几个演变。</p><p><strong>Keep的演变——可执行程序</strong></p><p>Keep展现了最基本的计算与储存功能，<strong>可执行程序（executable）则是对计算与储存功能的再拓展</strong>。可执行程序类似于智能合约，是一个确定性的代码，一个可执行程序可表示成 exec =(logic, init)。</p><p>其中，logic 是确定性程序，有一系列指定的入口点 (logic1, logic2, . . . , logicN)。init 指一组对应的启动器 (init1, init2, . . . , inite)。启动器可以当预先设定的事件达到入口点时，如logic1，可以自动执行对应的logic程序，比如当价格超过阈值时，触发执行。因而，启动器是区分可执行程序和智能合约的关键功能，其保证了程序的自动运行。而通过storage中维护的账本，可以将执行的结果储存在节点中，等待后续共识机制的开展。</p><p>通过分析可以发现，这一机制具有以下两个方面的特性：</p><ul><li><p>可执行程序无法保证结果的真确性，需要依靠共识机制保证。而从后文可知，DON的共识机制只能保证结果的有效与唯一性，并不能保证结果的真实性，因此，这一机制的关键点就落在了后文中的惩罚部分。</p></li><li><p>可以利用adapter继续接入分布式储存机制，进一步降低储存成本。并且可执行程序与SC为双向交互。</p></li></ul><p><strong>OCR的拓展——layer-2与layer-1的传输</strong></p><p>OCR的最重要的一点在于将最终的报告同步至主区块链中，而但引入DON之后，由于每个DON都在维护同一个账本，并且具有统一的共识机制，可以在一定程度上将DON理解为一个layer2，而OCR在这一领域最关键的拓展在于可以支持任何技术实现同步的功能，包括zk-rollup，optimistic rollups，门限签名技术等。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2e79613bf4d2deaa2e98c004dd4af6f094483817e0921211a5227c3063873e36.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>然而需要注意的是，由于DON与传统的区块链系统不同，<strong>虽然能够保证同步状态的正确无误，但是缺无法保证节点输入的数据的准确性</strong>，即<strong>DON的安全性完全依赖于预言机节点是否能诚实地将数据从数据源传输至智能合约</strong>。</p><h2 id="h-donstaking-on-reputation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">DON的解决方案——staking on reputation</h2><p>从上文的分析中可以看出，无论是可执行程序还是关于同步的拓展，均需要依赖于节点的不作恶，当前的Chainlink并不存在任何类似的规避机制，因此对于Chainlink来说，解决这个问题是解决任何问题的关键。</p><p>简单而言，其采用的是<strong>两层验证机制+非线性作恶成本+隐形收入</strong>的机制。首先，第一层为所有的预言机节点，第二层为声誉非常好的优质节点。</p><ul><li><p><strong>第一层——watchdog</strong></p></li></ul><p>每个节点需要质押一定数额的link来参与至网络中来。在每一轮报告中，每个节点都是watchdog，都有监督职责，如果节点认为聚合报告有误，则发出报警。</p><p>而这一机制的关键在于每一轮报告中，每个节点都被分配一个优先顺序，这个优先顺序决定了节点报警的处理顺序，最高优先级的报警节点会获得全部没收的问题节点保证金作为奖励。</p><p>因此假设每个节点质押的金额为d，由于需要收买n/2以上的节点才能扭曲报告的结果，从而需要基于监督者d*n/2的数额才能收买他。由于所有的节点都是监督者，因此攻击者需要花费的成本为d*n^2/2。这一金额随着节点的数量的增加而成指数增长。理论上而言，当网络中的节点数量足够多是，攻击者不具备足够的资金来发动攻击。</p><ul><li><p><strong>第二层——裁决者</strong></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/dfcbcbe485526b720f9764c24453b66d83c10288c22bf2b2abc4246a983734a1.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>图中，r代表正确报告， 代表虚假报告。此外，如果一个节点作恶，他会损失掉所有的未来隐形收入，并且由于是线下实体，其在现实生活中的声誉也将会大打折扣。</p><p>显而易见，<strong>Chainlink并未完全实现去信任化，其依然依赖于对于二层网络的节点不会作恶的信任</strong>。但是我们需要思考的是，保留一定的信任一定不好么？<strong>预言机网络一定需要像区块链网络一样完全去信任么？</strong></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">预言机网络一定需要完全去信任么？</h2><p>由于<strong>预言机网络并非是传统的区块链网络，需要区分数据源错误是由于节点作恶还是由于其他情况造成了传输错误</strong>。因为对于区块链来说，数据错误一定是由于节点作恶，但是对于预言机来说，由于是从外部世界中调用API获取数据，出现数据出错的原因有许多种，并不一定是由于节点作恶，如果武断的将所有出错的问题都予以高额的惩罚，则会使得节点缺乏足够的激励来参与到预言机网络中，使得整个网络的安全性与服务的多样性大打折扣。</p><p>Chainlink通过利用DECO与Town Crier来帮助证实诚实的行为，二层节点可以不用直接访问数据源就可以辨别一层节点的诚实行为。但是还是可以看到，这一过程本身还是依赖于二层节点本身的信任假设。</p><p><strong>那么引入信任一定是不可行的么？</strong></p><p>从结构上来看，Chainlink的二层裁决设计非常类似于现实生活中的法庭，均依托于对于法官（裁决者）公正裁决的信任来运行的。因此法庭本身也是一个类似于预言机的半信任化的系统。</p><p>法庭的机制延续了上百年，然而历史上看，法庭并非没有发生过作恶现象，其均是在较大的隐形成本下（未来当法官的收益，进监狱的成本，声誉的损害）下发生的，如法官与被告人串通一气，侵犯原告人权利。但是这一系统仍然在合理的运行，是因为他是在绝大多数情况下是普世公平的，虽然并非绝对公平，能够在一定限度内合理的赋能于整个社会，通过它的运行来带给社会整体更大的价值，从而使得<strong>社会总价值&gt;少数作恶带来的成本</strong>。<strong>作恶现象只会使得法官本身发生变化，并不会淘汰掉制度本身，法庭制度只会继续演进，直到更为有效的替代方案的到来。</strong></p><p>而预言机网络也一样，其也是在一定的合理限度内通过链接链下与链上来给整个区块链网络带来更大的价值，而少数的作恶情况只会影响少数用户（如通过改变输入的数据，使得对应的DeFI衍生品合约上套的大量利润），不会破坏整体区块链系统的安全性，并且由于质押的非线性显性成本的存在，会使得作恶成本相对较高。因此，<strong>预言机网络带来的区块链总价值&gt;少数作恶带来的成本，作恶现象使得节点发生变革，改良预言机网络，并不会淘汰预言机网络本身，直到更有效的替代方案的诞生。</strong></p><p>此外，外部声誉又是也会发挥较大的价值，如目前Chainlink接入的德国电信子公司作为节点，若其在Chainlink上作恶，由于其地址与实体是透明公开的，其对于声誉的打击将会对现实中的实体公司产生非常恶劣的影响。<strong>因此，虽然在理论上引入信任不是一个较好的打算，但是从现实意义上来说，半信任化的预言机网络不能意味着无法长期、合理、有效的运行</strong>。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">目前状态</h2><p><strong>2022 roadmap</strong></p><p>Nazarov在今年1月2日的最新一期的演讲中提到， chainlink计划在2022年上线CCIP与Staking这两个关键功能。但是其并没有明确具体的上线时间，推测或需等至下半年才能真正上线。值得注意的是，Nazarov表示CCIP会在2022年上线，但是可能到2023年才能完全成熟并落地。至于ChainlinkV2白皮书的其他功能，目前并没有公布具体的上线计划。</p><p><strong>Staking 与节点收益</strong></p><p>目前，chainlink并没有推出staking功能，因此暂时无法测算其相关的网络效益。至于为何没有及时上线，官方给出的理由是，由于chainlink并非是传统意义上的区块链，所以staking并不能像其他链一样被简单地实现，需要考虑到其特殊的共识过程，构造过程较为复杂。</p><p>至于节点收益，Nazarov提到，2021年实现了巨大的里程碑式的突破，由于使用chainlink的DAPP数量的爆发，使得节点本身可以通过提供数据服务来实现盈利，并不需要像传统区块链一样依赖于区块奖励（block reward）。</p><p>具体来看link收益，可以看到，在以太主网上，link的每日滚动收益具有一定的波动性，以2月8日晚上8点为基准，全网派发的link收益在过去24小时为2.7万link（约为48.6万美元），从90日的数据中可以看出，其收益额呈现出稳步上升的趋势，以2月5日为基准的滚动90日的link收益额约为225.5万link（约4059万美元）。而目前在以太主网上的节点数量共计156个，因此平均而言单个节点每日收益约为0.31万美元，90日平均收益约为26.02万美元。较为可观的收入使得整个网络的隐性激励机制较大。</p><p>进一步的分析gas费用，目前单个节点平均每日耗费的gas费用在122GWEI左右，约为0.003美元，可以发现，采用OCR之后，节点几乎并不消耗gas费用，其运行成本较小。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e797af3e06bc6e8fbc240e7ee3d8dcff3b1c75161f61f66e73b9d7310786dc7d.png" alt="节点取得的link收益（过去90日）" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">节点取得的link收益（过去90日）</figcaption></figure>]]></content:encoded>
            <author>fan-3@newsletter.paragraph.com (Fan )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c2f097e6ae7e96d34416b05816601d04bd0c55ca0d639fe67948ca8aa2b82192.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>