<?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>Rayjun</title>
        <link>https://paragraph.com/@rayjun</link>
        <description>a builder</description>
        <lastBuildDate>Tue, 05 May 2026 02:58:33 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Rayjun</title>
            <url>https://storage.googleapis.com/papyrus_images/1b77deb04b340a66f5357a52a7ccf401c3cab7079bfc27d53b75a8928cab1a1b.jpg</url>
            <link>https://paragraph.com/@rayjun</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[一文看懂椭圆曲线签名算法]]></title>
            <link>https://paragraph.com/@rayjun/Tm760qsKEyGqRXtPc17H</link>
            <guid>Tm760qsKEyGqRXtPc17H</guid>
            <pubDate>Sun, 09 Jan 2022 03:38:17 GMT</pubDate>
            <description><![CDATA[如果接触过区块链，大概率听说过椭圆曲线签名算法。这个算法是区块链链技术的基石。但这个算法很抽象，很难理解，这篇文章会通过简单易懂的方式来介绍一下这个算法，尽量不涉及大量的公式，其中很多的数学证明会直接忽略，我们直接使用证明的结果。1. 对称加密与非对称加密在加密算法中，对称加密和非对称加密是两类主要的加密算法。使用对称加密算法时，需要双方都知道相同的密钥，加密和解密需要使用相同的密钥，相对来说，对称加密的效率比较高，比如我们熟知的 AES 加密算法。但是对称加密有个问题，密钥传输是个大问题，如果在网络上传输密钥被人截获的话，那么加密的数据就很不安全了。 解决这个问题，就需要使用非对称加密算法。非对称加密的密钥分为公钥和私钥，公钥是可以放出去的，任何人都可以拿到你的公钥，让后用公钥加密，经过公钥加密的数据只有你手上的私钥可以解密。这样每个人只要放出自己的公钥，别人就能给你安全的传输数据。但是非对称加密还有个问题，相比于对称加密，效率会低很多，如果把非对称加密用于网络流量很大的环境下，会对性能有很大的影响，所以在实际的使用中，通常是这两种算法结合使用，比如 HTTPS 中通过非对称加...]]></description>
            <content:encoded><![CDATA[<p>如果接触过区块链，大概率听说过椭圆曲线签名算法。这个算法是区块链链技术的基石。但这个算法很抽象，很难理解，这篇文章会通过简单易懂的方式来介绍一下这个算法，尽量不涉及大量的公式，其中很多的数学证明会直接忽略，我们直接使用证明的结果。</p><h2 id="h-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. 对称加密与非对称加密</h2><p>在加密算法中，对称加密和非对称加密是两类主要的加密算法。使用对称加密算法时，需要双方都知道相同的密钥，加密和解密需要使用相同的密钥，相对来说，对称加密的效率比较高，比如我们熟知的 AES 加密算法。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acc1054cc069d8453004ce5778b69d8655769d9aea587cf9608a9b71aafd2fba.png" alt="" 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>解决这个问题，就需要使用非对称加密算法。非对称加密的密钥分为公钥和私钥，公钥是可以放出去的，任何人都可以拿到你的公钥，让后用公钥加密，经过公钥加密的数据只有你手上的私钥可以解密。这样每个人只要放出自己的公钥，别人就能给你安全的传输数据。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bfcf54d499cd2a059b1f782eb7037e2c9773d4a419aa1732af8ce13f9925b59e.png" alt="" 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>但是非对称加密还有个问题，相比于对称加密，效率会低很多，如果把非对称加密用于网络流量很大的环境下，会对性能有很大的影响，所以在实际的使用中，通常是这两种算法结合使用，比如 HTTPS 中通过非对称加密来建立连接，传输对称加密的密钥，而后续的数据传输则使用对称加密算法。</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/4dbcf3cb0a255adcec6d8dcca6d13f4c5fb7cfd244c7e268c7a90dae914b4ad2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>这里需要注意一下：<strong>使用公钥叫加密数据，使用私钥叫签名</strong>。</p><p>RSA 和 ECC（Elliptic Curve Cryptography） 是两类比较出名的非对称加密算法，RSA 利用的是质数分解的原理来实现安全性。但是 RSA 对密钥长度的要求越来越高，这样也会造成计算量很大，而 ECC 使用的密钥长度则要短的多，而且安全性也更强。</p><p>本文所说的 ECDSA（Elliptic Curve Digital Signature Algorithm）算法是基于 ECC 的的一种签名算法，广泛用于区块链、HTTPS 等需要非对称加密的场景。</p><h2 id="h-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. 椭圆曲线算法</h2><h3 id="h-21" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1 椭圆曲线的表示</h3><p>椭圆曲线其实是一个数学方程，通常用下面的方程式来表示:</p><p>$$ y^2 = (x^3 + a \times x + b)\quad mod\quad p $$</p><p>如果 a 和 b 取的值不同，那么对应的曲线形状也会不一样：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/516c8177fd7f908c746f432222d090ee0db78026833b989661a2f933c8b37b45.png" alt="" 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>上面的这些曲线的对应的是 $b = 1$，$a$ 的取值范围是2 ~ -3 分别对应的曲线。</p><p>在上面的方程式中，$x$ 的取值只能是整数，不能是浮点数。还要加上以 $p$ 为底的取模运算，那么 $y^2$ 的取值就在 0 ~ $p$-1 之间，由于 $x$ 只能是整数，那么说明能够取到的点也是有限的，记作 $N$。</p><p>关于椭圆曲线，我们了解这些就够了。</p><h3 id="h-22" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2 椭圆曲线的运算</h3><p>在正式说到椭圆曲线签名算法之前，我们还需要需要了解一下在椭圆曲线上的两种运算，点加法（Point Addition）和点乘法（Point Multiplication）。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fc004f50e776121b7e819bee5d3f5597c32d922e917cdbc2b4e1814731340fe4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>假设现在有这样一条椭圆曲线。画一条直线，与曲线相交于 3 个点，分别是 $P, Q,R$，根据点加法运算的定义，可以得到 $P + Q+R = 0$，那么 $P + Q = -R$， $-R$ 的定义是关于 $x$ 轴对称所得到的一个点，如上图所示，这就是点加法的定义。</p><p>如果我们移动这条直线，让 $P,Q$ 两点重合：</p><p>根据上面的点加法规则，可以得到 $2P$ 点，以此类推，不断去连接 $$ $P$ 点和 $nP$ 点，就可以得到 $3P,4P...$ $(n+1)P$ 点。点乘就定义为 $k \times P$，表示 $P$ 点的 $k$ 次相加。</p><h3 id="h-23" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.3 单向陷门函数</h3><p>上面说完了椭圆曲线的定义和运算，最后来说一下椭圆曲线的安全性，对于非对称加密来说，关键点就是无法从加密的数据中和公钥中去推算私钥，这里怎么实现的呢？</p><p>在上面我们得到了点乘的定义，任意一点$R$ 可以通过这个点乘公式 $R = k\times P$ 计算得到。这里的关键在于即使知道了 $P$ 和 $R$ 点，我们也无法计算得到 $k$，在椭圆曲线算法中没有减法或者除法这种逆向操作。 这是椭圆曲线算法安全性的基础，这个特性也称之为单向陷门函数。</p><p><strong>这个整数 $k$ 通常就是算法中的私钥，而 R 对应的就是公钥</strong>。</p><h2 id="h-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. 椭圆曲线签名算法</h2><p>上面已经介绍完椭圆曲线的特性，下面来看一下椭圆曲线签名算法是如何利用椭圆曲线的特性来完成签名的生成和验签。</p><p>在使用签名算法之前，需要确定一条椭圆曲线，根据上面知道，如果参数选的不同，那么椭圆曲线方程就会不一样。其中 $G$ 是一个选定的初始点，后面所有的运算都会基于这个点开始。</p><p><strong>然后需要定义一对公私钥，根据上面的定义 $P = k \times G$，其中，$k$ 是一个随机整数，对应为私钥 $k0$，$P$ 表示椭圆曲线上的一个点，对应为公钥 $P0$</strong>。</p><h3 id="h-31" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.1 生成签名</h3><p>在生产公钥和私钥之后，就可以用以下步骤来生成签名：</p><ol><li><p>生成一个随机数 $k1$，注意这个随机数不是上面生成的私钥</p></li><li><p>利用 $P = k1 \times G$ 计算点 $P1$，注意这个不是上面的公钥</p></li><li><p>$P1$ 点的 x 坐标就是 $R$</p></li><li><p>对需要签名的数据计算 hash，为 $H$</p></li><li><p>计算 $S = k1^{-1}(H + k0 \times R)\quad mod \quad p$，这个 $p$ 是模运算的底，也需要提前指定好</p></li></ol><p>通常签名的长度是 40 字节，前面 20 字节是 R，后面 20 字节是 S，R 和 S 拼接在一起就是最后的 DCSDA 签名。</p><h3 id="h-32" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2 验证签名</h3><p>验证签名的过程更简单，只需要通过下面的公式：</p><p>$$ P = S^{-1} \times H \times G + S^{-1} \times R \times P0 $$</p><p>$P0$ 是公钥，通过这个公式，很容易就是可以计算得到 $P$， 得到 $P$ 之后，如果 $P$ 的 $x$ 坐标等于 $R$，那么就验签成功，在验签的过程中，完全不需要私钥的参与。</p><p>在上面的算法中，可以发现，除了签名者手上的私钥 $k0$ 之外，在签名的过程中还会生成一个随机数 $k1$，这个随机数很关键，如果这个数字不够随机，或者使用固定的数字，那么就额可以通过两次签名的使用的哈希值 $H$ 和 $H&apos;$ 以及 $S$ 和 $S&apos;$ 来计算这个 $k1$。</p><p>如果 $k1$ 知道了，就可以利用上面生成 $S$ 的公式来计算出私钥 $k0$，这样一来，私钥就泄漏了。在 2010 年，索尼的 PS3 上就是因为随机数 $k1$ 总是返回一个固定的数字，导致产生了这个安全漏洞。</p><h2 id="h-4" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. 小结</h2><p>椭圆曲线签名算法相比于 RSA 算法要更加安全，使用的密钥位数也更短。已经在很多领域里面被使用，HTTPS、区块链。这个算法的安全性来源于<strong>单</strong>向**陷门函数，**无法通过计算反向推出私钥，这也是这个算法最巧妙的地方。</p><p>文 / Rayjun</p><p>[1] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Elliptic-curve_cryptography">https://en.wikipedia.org/wiki/Elliptic-curve_cryptography</a></p><p>[2] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.instructables.com/Understanding-how-ECDSA-protects-your-data/">https://www.instructables.com/Understanding-how-ECDSA-protects-your-data/</a></p><p>[3] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/">https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/</a></p>]]></content:encoded>
            <author>rayjun@newsletter.paragraph.com (Rayjun)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/70ea44c8bebee6dd1c43d3c74b2ca617a63b74c3da162e90919baf9a03783401.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[预言机不预测]]></title>
            <link>https://paragraph.com/@rayjun/c8q9mbN9mLjfAqfjXJyX</link>
            <guid>c8q9mbN9mLjfAqfjXJyX</guid>
            <pubDate>Mon, 03 Jan 2022 01:37:07 GMT</pubDate>
            <description><![CDATA[以太坊网络出现之后，基于智能合约来实现的场景越来越多，Defi、链游、NFT。但是这些场景都会一个问题，只在链上这个封闭的世界运行，无法与真实的世界沟通。所谓流水不腐，只有打通了与现实世界的桥梁。区块链网络的生态才能更加完善。 讨论一个强需求的场景，比如某个人在以太网上有很多的资产。假设有一天这个人因为意外去世，那么他在链上的资产将会被完全锁死。如果有一种方式，可以设置一个类似遗嘱的合约，在他去世之后可以把他相关的资产都转移到一个地址，就可以解决这个问题。但这里有一个关键的问题需要解决，智能合约怎么获取他是否死亡的信息呢？1. 为什么需要预言机区块链是一个完全封闭的环境，在智能合约执行的过程中，不能引入不确定性，也就是说不能出现网络访问，因为网络访问是不确定的。 如果智能合约的执行结果不是确定的，那么就有可能造成节点之间数据的不同步。但是随着智能合约不断的发展，链需要从真实的实际去获取信息。 这些信息有可能是币价信息、股价信息、天气、真正的随机数等等。而智能合约获取这些数据的时候，需要通过确定性的方法，对于每一次数据的获取，所有节点获取到的数据是一致的。 为了达到这个目的，就需要...]]></description>
            <content:encoded><![CDATA[<p>以太坊网络出现之后，基于智能合约来实现的场景越来越多，Defi、链游、NFT。但是这些场景都会一个问题，只在链上这个封闭的世界运行，无法与真实的世界沟通。所谓流水不腐，只有打通了与现实世界的桥梁。区块链网络的生态才能更加完善。</p><p>讨论一个强需求的场景，比如某个人在以太网上有很多的资产。假设有一天这个人因为意外去世，那么他在链上的资产将会被完全锁死。如果有一种方式，可以设置一个类似遗嘱的合约，在他去世之后可以把他相关的资产都转移到一个地址，就可以解决这个问题。但这里有一个关键的问题需要解决，智能合约怎么获取他是否死亡的信息呢？</p><h2 id="h-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. 为什么需要预言机</h2><p>区块链是一个完全封闭的环境，在智能合约执行的过程中，不能引入不确定性，也就是说不能出现网络访问，因为网络访问是不确定的。</p><p>如果智能合约的执行结果不是确定的，那么就有可能造成节点之间数据的不同步。但是随着智能合约不断的发展，链需要从真实的实际去获取信息。</p><p>这些信息有可能是币价信息、股价信息、天气、真正的随机数等等。而智能合约获取这些数据的时候，需要通过确定性的方法，对于每一次数据的获取，所有节点获取到的数据是一致的。</p><p>为了达到这个目的，就需要预言机（oracle），这里的预言机不会预测任何事情，只是会将现实世界的数据传输到链上，供链上的智能合约使用。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/57d356383724098c9ca43168e27e46ff28bf2bc71ef49948e893460a0bd126e0.png" alt="" 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-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. 预言机的几种实现方法</h2><p>预言机的实现原理其实都类似，一般来说会包含三个步骤：</p><ul><li><p>从链外的数据源搜集数据</p></li><li><p>将数据签名传输到区块链网络中</p></li><li><p>智能合约获取数据，在合约中使用</p></li></ul><p>因为智能合约本身是无法访问网络的，只能让预言机通过本地读取的方式来获取数据。而预言机服务本身有一部分也是区块链网络中的智能合约，这些智能合约会与链外的预言机网络进行交互。</p><p>预言机提供的数据获取方法大体上可以分成三类：</p><h3 id="h-21" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1 直接读取</h3><p>这种方式通常用来获取那些不会改变的数据，比如某个人的生日、学历证明、出生地等等信息，这些信息确定后应该就不会再改变了。这类的数据通常只需要写到链上一次，然后就可以供其他的合约使用了。这些数据通常不会直接写到链上，而是会通过加盐再进行 hash 运算，最后只存储一个 hash 值。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3cc783542455fe41bd681aac652ff1fdb7d2398f103d1c7b16362e1551547879.png" alt="" 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>这样的好处在于，不需要合约之间进行频繁的交互，既节约时间，也节省成本。但只有一些特定的数据能够采用这种方式。</p><h3 id="h-22" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2 发布与订阅</h3><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/11b9eefb47c2dfc5c23eadcb3bb2e68509ab84a722cd371a9648d6f4fe52c6e6.png" alt="" 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-23" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.3 请求与响应</h3><p>这也是获取数据最复杂的一种方式，这种方式用于获取一个独一无二的数据，或者数据量太大，无法全部写到链上。</p><p>比如常见的<strong>获取随机数</strong>。在智能合约中获取不到真正的随机数，需要从链外去获取。</p><p>这种模式中，预言机会接收其他合约的数据查询请求，然后预言机网络监听区块链网络相关的交易，如果发现数据请求，就会检查请求，比如是否已经付款。确认无误之后，就会将数据回调给请求数据的智能合约。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ddf4d53989b30f44a331d7064862ce687a9773965532349a3435187621e1606d.png" alt="" 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-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. 预言机的挑战</h2><p>预言机的最大挑战在于，怎么确保预言机提供的数据是可靠的。</p><p>从这个角度上来说，预言机可以分为两类，一类是中心化的预言机。我们通常会假设这个预言机不会造假，比如某个政府部门、大学等等。中心化的预言机会从两个方面来保证数据的可靠性。一方面通过签名来保证数据没有被篡改。另外一方面会提供一个可信的执行环境。</p><p>但是这样并不足以解决全部的问题，因为这些数据都需要信赖一些机构，没有办法保证这些机构不会造假，而且中心化的预言机容易出现故障，一旦出现故障，对链上的交易会产生很大的影响。这类预言机的代表是 Oraclize。</p><p>而以 Chainlink 为代表的去中心化预言机提供了另外一种解决方案。Chainlink 将数据的提供方组合起来，通过一套评价体系去给各个数据提供方打分，最后形成一个去中心化的预言机网络。</p><p>Chainlink 由<strong>声誉合约、订单匹配合约、数据汇总合约以及数据提供者的注册表构成</strong>。其中声誉合约用来维护数据提供者的表现。订单合约会从声誉合约的预言机中选择数据提供者。数据汇总合约最后会汇总计算得到的数据，并且会把结果返回给声誉合约。</p><p>通过这样的方式，chainlink 构建了一个去分布式预言机网络，解决了单点问题，也一定程度方防止了中心化机构数据造假的问题。</p><p>当前的 chainlink 还远没有达到完美，预言机的完善还有很长的路要走。</p><p>文 / Rayjun</p>]]></content:encoded>
            <author>rayjun@newsletter.paragraph.com (Rayjun)</author>
        </item>
    </channel>
</rss>