<?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>journeywest.eth</title>
        <link>https://paragraph.com/@journeywest-eth</link>
        <description>Bitcoiner since 2016;
bullish on BTC &amp; ETH;
sustainability professional; 
Not Financial Advice</description>
        <lastBuildDate>Tue, 14 Jul 2026 12:53:01 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>journeywest.eth</title>
            <url>https://storage.googleapis.com/papyrus_images/a6e162f25c9b45b19b3c7cb820f5cd17062a0115552404505d781d918b9aee68.jpg</url>
            <link>https://paragraph.com/@journeywest-eth</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[如何设置比特币网络的RPC API]]></title>
            <link>https://paragraph.com/@journeywest-eth/rpc-api</link>
            <guid>C5guenJYvMcE8BDTLkao</guid>
            <pubDate>Sat, 16 Dec 2023 12:29:10 GMT</pubDate>
            <description><![CDATA[原文作者： https://magitek.dev/articles/2023-02-22-how-to-setup-an-rpc-api-for-a-blockchain-node/How to setup an RPC API for a Blockchain NodeRPC (Remote Procedure Call) is a protocol that allows a program to execute code on a remote server. Many blockchain nodes include an RPC interface that allows you to interact with your node programmatically. In this tutorial, using Bitcoin, we will walk through the steps required to setup and interact with an RPC interface for your node.Prerequisites:Before ...]]></description>
            <content:encoded><![CDATA[<p>原文作者：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://magitek.dev/articles/2023-02-22-how-to-setup-an-rpc-api-for-a-blockchain-node/">https://magitek.dev/articles/2023-02-22-how-to-setup-an-rpc-api-for-a-blockchain-node/</a></p><h2 id="h-how-to-setup-an-rpc-api-for-a-blockchain-node" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How to setup an RPC API for a Blockchain Node</h2><p>RPC (Remote Procedure Call) is a protocol that allows a program to execute code on a remote server. Many blockchain nodes include an RPC interface that allows you to interact with your node programmatically. In this tutorial, using Bitcoin, we will walk through the steps required to setup and interact with an RPC interface for your node.</p><h2 id="h-prerequisites" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Prerequisites:</h2><p>Before we get started, you&apos;ll need to have a Bitcoin node installed on your computer or server. You should also have a basic understanding of how to use the command line. If you&apos;re not familiar with the command line, you may want to do some additional research before proceeding.</p><h2 id="h-step-1-install-bitcoin-core" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 1: Install Bitcoin Core</h2><p>The first step is to download and install Bitcoin Core on your computer. You can download Bitcoin Core from the official website (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bitcoincore.org/en/download/">https://bitcoincore.org/en/download/</a>). Once you&apos;ve downloaded the software, follow the installation instructions for your operating system.</p><blockquote><p>Note: It can take a variable amount of time (hours or days) to sync your node to the blockchain network before you can use all the methods the RPC interface provides.</p></blockquote><p>It is recommended to use the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.bitcoin.org/examples/testing.html">testnet environment</a> for experimenting with the blockchain in development before creating a production node for real world use. If you need Bitcoin to test transactions with, you can make use of this or similar faucets: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://kuttler.eu/en/bitcoin/btc/faucet/">https://kuttler.eu/en/bitcoin/btc/faucet/</a>.</p><h2 id="h-step-2-configure-bitcoin-core" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 2: Configure Bitcoin Core</h2><p>Once you&apos;ve installed Bitcoin Core, you need to configure it to enable the RPC interface. To do this, you&apos;ll need to create a <code>bitcoin.conf</code> file in the Bitcoin data directory.</p><p>On Linux/MacOS, you can create the file by running the following command:</p><pre data-type="codeBlock" text="nano ~/.bitcoin/bitcoin.conf
"><code>nano <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.bitcoin/bitcoin.conf
</code></pre><p>On Windows, you can create the file by navigating to the Bitcoin data directory (usually located in <code>%APPDATA%\Bitcoin</code>) and creating a new file called <code>bitcoin.conf</code>.</p><h2 id="h-step-3-configure-the-rpc-interface" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 3: Configure the RPC interface</h2><p>In the bitcoin.conf file, add the following lines to enable the RPC interface:</p><pre data-type="codeBlock" text="server=1
rpcuser=&lt;username&gt;
rpcpassword=&lt;password&gt;
rpcallowip=&lt;IP address or subnet&gt;
"><code>server<span class="hljs-operator">=</span><span class="hljs-number">1</span>
rpcuser<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>username<span class="hljs-operator">></span>
rpcpassword<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>password<span class="hljs-operator">></span>
rpcallowip<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>IP <span class="hljs-keyword">address</span> or subnet<span class="hljs-operator">></span>
</code></pre><p>Replace and with your own username and password, respectively. These will be used to authenticate the RPC connection.</p><p>If you want to use testnet instead of a production node, you can add the following line:</p><pre data-type="codeBlock" text="testnet=1
"><code><span class="hljs-attr">testnet</span>=<span class="hljs-number">1</span>
</code></pre><p>Replace with the IP address or subnet that you want to allow to access the RPC interface. You can specify a single IP address or a subnet in CIDR notation (e.g. 192.168.0.0/16). This is more important when you want to access the RPC interface between a client and server. If you are doing this locally, you may be able to skip this step or set it to:</p><pre data-type="codeBlock" text="rpcallowip=127.0.0.1
rpcport=8332
"><code><span class="hljs-attr">rpcallowip</span>=<span class="hljs-number">127.0</span>.<span class="hljs-number">0.1</span>
<span class="hljs-attr">rpcport</span>=<span class="hljs-number">8332</span>
</code></pre><h2 id="h-step-4-test-the-rpc-interface" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 4: Test the RPC interface</h2><p>Now that the RPC interface is set up, you can use it to interact with your Bitcoin node programmatically. You will need to restart Bitcoin Core for the changes you have made to take effect. Once restarted, you can test it by running the following command in the terminal:</p><pre data-type="codeBlock" text="bitcoin-cli getblockcount
"><code>bitcoin<span class="hljs-operator">-</span>cli getblockcount
</code></pre><p>If you run into issues using <code>bitcoin-cli</code> in the terminal, see the documentation <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.bitcoin.org/examples/intro.html">here</a>, or you can run a curl command as follows:</p><pre data-type="codeBlock" text="curl --user &lt;username&gt;:&lt;password&gt; --data-binary &apos;{&quot;jsonrpc&quot;: &quot;1.0&quot;, &quot;id&quot;:&quot;curltest&quot;, &quot;method&quot;: &quot;getblockcount&quot;, &quot;params&quot;: [] }&apos; -H &apos;content-type: text/plain;&apos; http://127.0.0.1:8332/
"><code>curl <span class="hljs-operator">-</span><span class="hljs-operator">-</span>user <span class="hljs-operator">&#x3C;</span>username<span class="hljs-operator">></span>:<span class="hljs-operator">&#x3C;</span>password<span class="hljs-operator">></span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>data<span class="hljs-operator">-</span>binary <span class="hljs-string">'{"jsonrpc": "1.0", "id":"curltest", "method": "getblockcount", "params": [] }'</span> <span class="hljs-operator">-</span>H <span class="hljs-string">'content-type: text/plain;'</span> http:<span class="hljs-comment">//127.0.0.1:8332/</span>
</code></pre><p>If everything is set up correctly, you should see the current block count of your Bitcoin node.</p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion:</h2><p>That&apos;s it! You now have an RPC interface set up for your Bitcoin node. You can use the RPC interface to interact with your node programmatically and build Bitcoin applications.</p><hr><p>For a full RPC API reference, see: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.bitcoin.org/reference/rpc/">RPC API Reference — Bitcoin</a></p><p>You can use a generator like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jlopp.github.io/bitcoin-core-config-generator/">Bitcoin Core Config Generator</a> to create a bitcoin.conf for yourself.</p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[逆回购(Reverse Repo)]]></title>
            <link>https://paragraph.com/@journeywest-eth/reverse-repo</link>
            <guid>kWwWYokZkiXbZVn3ZRo7</guid>
            <pubDate>Wed, 06 Jul 2022 21:36:32 GMT</pubDate>
            <description><![CDATA[可能不是所有人都知道，首先强调一下，逆回购在美国和中国是不一样的，而且效果刚好相反（一个是释放流动性，一个是回收流动性）。下面主要介绍的是美国背景下的逆回购（回收流动性）。 简而言之，回购（Repo）及逆回购（Reverse Repo）是美国联邦公开市场委员会（FOMC）授权纽约联储公开市场操作柜台 (Desk)进行的货币政策操作，主要目的是辅助美联储将联邦基金利率控制在目标区间内。 在逆回购情形下，Desk将手中的国债销售给金融机构，并承诺在某一约定日期回购相关国债（并支付利息，当前为1.55%）。本质上来说，逆回购会减少市场上的货币供应，使流动性趋紧。 常见的逆回购及回购工具包括隔夜逆回购协议（Overnight Reverse Repurchase Agreement）和常设回购机制（Standing Repo Facility），篇幅关系这里就不展开了。 近期逆回购金额屡创新高（下图），目前已经达到了2.14万亿美金的规模，显示目前大量资金找不到更好的去处，并可能从侧面反映了证券/风险市场的不景气。]]></description>
            <content:encoded><![CDATA[<p>可能不是所有人都知道，首先强调一下，逆回购在美国和中国是不一样的，而且效果刚好相反（一个是释放流动性，一个是回收流动性）。下面主要介绍的是美国背景下的逆回购（回收流动性）。</p><br><p>简而言之，回购（Repo）及逆回购（Reverse Repo）是美国联邦公开市场委员会（FOMC）授权纽约联储公开市场操作柜台 (Desk)进行的货币政策操作，主要目的是辅助美联储将联邦基金利率控制在目标区间内。 在逆回购情形下，Desk将手中的国债销售给金融机构，并承诺在某一约定日期回购相关国债（并支付利息，当前为1.55%）。本质上来说，逆回购会减少市场上的货币供应，使流动性趋紧。</p><p>常见的逆回购及回购工具包括隔夜逆回购协议（Overnight Reverse Repurchase Agreement）和常设回购机制（Standing Repo Facility），篇幅关系这里就不展开了。</p><p>近期逆回购金额屡创新高（下图），目前已经达到了2.14万亿美金的规模，显示目前大量资金找不到更好的去处，并可能从侧面反映了证券/风险市场的不景气。</p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[美债入门浅谈 US Treasury Securities 101]]></title>
            <link>https://paragraph.com/@journeywest-eth/us-treasury-securities-101</link>
            <guid>TBnBAKvRrTn9j6HhSxVy</guid>
            <pubDate>Sun, 03 Jul 2022 10:24:39 GMT</pubDate>
            <description><![CDATA[相信最近这半年大家在各种渠道都反反复复听到美债（US Treasury securities）、加息（rate hike）等金融术语（重要性相信大家最近都切身感受到了），但很少有新闻报道或财经分析对这些名词进行相对全面又直白的解释，从而让我们这些非金融背景的韭菜对理解相关货币、财政操作及其影响总有点一知半解、似懂非懂的感觉。 正好这周比较空闲，稍微研究整理了一篇小文章，总结了关于美债的一些基础知识，希望对大家能有一点帮助。 （提示：本人非金融背景，写这篇小文章纯粹是为了辅助自己学习和方便日后查找的目的，绝非任何财务建议/NFA，也欢迎和我联系，指正我的错误。因为不是学术文章，本文也不专门列出文献引用。）名词：美国国债，简称美债（US Treasury securities，也叫做Treasuries）发行方：美国财政部（US Department of the Treasury）发行目的：一种税收以外支持美国政府支出的手段历史：最早可溯源于1917年（第一次世界大战）分类： · 短期国库券（Treasury bills）: 一年内到期的短期零息债券（没有利息）。通常会在票面金额（...]]></description>
            <content:encoded><![CDATA[<p>相信最近这半年大家在各种渠道都反反复复听到美债（US Treasury securities）、加息（rate hike）等金融术语（重要性相信大家最近都切身感受到了），但很少有新闻报道或财经分析对这些名词进行相对全面又直白的解释，从而让我们这些非金融背景的韭菜对理解相关货币、财政操作及其影响总有点一知半解、似懂非懂的感觉。</p><p>正好这周比较空闲，稍微研究整理了一篇小文章，总结了关于美债的一些基础知识，希望对大家能有一点帮助。</p><p>（提示：本人非金融背景，写这篇小文章纯粹是为了辅助自己学习和方便日后查找的目的，绝非任何财务建议/NFA，也欢迎和我联系，指正我的错误。因为不是学术文章，本文也不专门列出文献引用。）</p><ul><li><p><strong>名词</strong>：美国国债，简称美债（US Treasury securities，也叫做Treasuries）</p></li><li><p><strong>发行方</strong>：美国财政部（US Department of the Treasury）</p></li><li><p><strong>发行目的</strong>：一种税收以外支持美国政府支出的手段</p></li><li><p><strong>历史</strong>：最早可溯源于1917年（第一次世界大战）</p></li><li><p><strong>分类</strong>：</p><p>·    <strong>短期国库券（Treasury bills）</strong>: 一年内到期的短期零息债券（没有利息）。通常会在票面金额（par value）的基础上打折销售，并在到期后可按票面金额兑付</p><pre data-type="codeBlock" text="  o   每周发售，通常包括以下几种期限：4周、8周、13周、26周或52周

  o   偶尔（财政严重不平衡时）也会发售现金管理债券（cash management bills），总量、期限和发售时间不固定
"><code></code></pre><p>·   <strong>国库票据（Treasury notes）</strong>:中期债券，通常期限为2年、3年、5年、7年或10年</p><pre data-type="codeBlock" text="  o   在拍卖时明确利息，每6个月支付一次利息

  o   **当前10年期国库票据的利率通常被很多投资者关注，用来评估美债市场的表现/状况，并衡量投资者对中长期宏观经济环境的信心**
"><code>  o   在拍卖时明确利息，每<span class="hljs-number">6</span>个月支付一次利息

  o   <span class="hljs-operator">*</span><span class="hljs-operator">*</span>当前<span class="hljs-number">10</span>年期国库票据的利率通常被很多投资者关注，用来评估美债市场的表现<span class="hljs-operator">/</span>状况，并衡量投资者对中长期宏观经济环境的信心<span class="hljs-operator">*</span><span class="hljs-operator">*</span>
</code></pre></li></ul><p>（特殊类型：浮动利率票据floating rate notes，按季度根据13周短期国库券的利率来支付利息。通常期限为2年。）</p><pre data-type="codeBlock" text="·   **国库债券（Treasury bonds）**:被认为是长期债券，期限为20或30年。每半年支付一次利息

·   **国库通胀保值债券（Treasury Inflation Protected Securities, TIPS）**:和通胀指数挂钩的债券，通常期限为5年、10年和30年。该债券利率固定，但是面值会根据消费者价格指数（Consumer Price Index, CPI）进行定期浮动
"><code>·   <span class="hljs-operator">*</span><span class="hljs-operator">*</span>国库债券（Treasury bonds）<span class="hljs-operator">*</span><span class="hljs-operator">*</span>:被认为是长期债券，期限为<span class="hljs-number">20</span>或<span class="hljs-number">30</span>年。每半年支付一次利息

·   <span class="hljs-operator">*</span><span class="hljs-operator">*</span>国库通胀保值债券（Treasury Inflation Protected Securities, TIPS）<span class="hljs-operator">*</span><span class="hljs-operator">*</span>:和通胀指数挂钩的债券，通常期限为<span class="hljs-number">5</span>年、<span class="hljs-number">10</span>年和<span class="hljs-number">30</span>年。该债券利率固定，但是面值会根据消费者价格指数（Consumer Price Index, CPI）进行定期浮动
</code></pre><ul><li><p><strong>销售</strong>：由纽约联邦储备银行（Federal Reserve Bank of New York）负责进行拍卖，之后可以在二级市场进行自由交易（相当活跃）。</p></li></ul><p>（注：还有几种不可交易转让的美国国债，如储蓄债券（saving bonds）、州和地方政府债（State and Local Government Series）、政府账户债券（Government Account Series）等等。它们相对于可自由市场交易的国债规模较小，不列入本文讨论。）</p><ul><li><p><strong>支持</strong>：基于美国政府的完全信用（承诺采用所有合法手段确保兑付），可以说是目前世界上最低风险的投资之一。</p></li><li><p><strong>规模</strong>：截至2022年5月，美国国债的总规模约为30万亿美金，约等于美国全年GDP的130%。</p></li><li><p><strong>持有者</strong>：约75%的美国国债由美国国内投资者持有，约25%的美国国债由美国境外投资者持有（包括中国政府持有的约1万亿美金）。从另一个维度来看：</p><p>· 75-80%的美国国债由公众持有（如个人投资者、企业/金融机构、美联储、外国政府、美国州/地方政府）</p><p>· 20-25%的美国国债由美国联邦政府账户（或联邦政府内部）持有，如社保基金、联邦政府项目等</p></li><li><p><strong>面值 vs 市场价格（以及收益率）</strong>：（大部分）美债发行后可在二级市场自由交易，因此，基于市场需求，在二级市场中它的市场价格会根据需求而浮动并偏离面值（并会传导影响到这些国债的最终/实际收益率）。而这些已发行国债的实际收益率又会影响新发行国债竞拍时确定的最终利率。</p></li><li><p><strong>影响美国国债收益率的因素</strong>：</p><p>· 联邦基金利率：一家银行利用手上的多余资金向另一家银行借出隔夜贷款的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zh.m.wikipedia.org/wiki/%E5%88%A9%E7%8E%87">利率</a>，由美国联邦公开市场委员会（Federal Open Market Committee, FOMC）设定目标区间。解释一下，美国联邦公开市场委员会隶属于美联储，现任主席就是大名鼎鼎的美联储主席<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zh.wikipedia.org/wiki/%E5%82%91%E7%BE%85%E5%A7%86%C2%B7%E9%AE%91%E5%A8%81%E7%88%BE">杰罗姆·鲍威尔</a>（Jerome Powell）。在设定联邦基金利率目标区间时，FOMC会参考当前的主要经济/财政指标（包括通胀、就业率等）。敲黑板，这个联邦基金利率也是我们经常看新闻中提到FOMC（或美联储）开会议息（或利率决议，可以是加息、降息或者保持）的对象本尊。FOMC会议每年举行8次，具体的时间表可以查这个官方网站：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm">https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm</a>。<strong>为什么这个联邦基金利率如此重要呢？因为它会影响最优惠利率（prime lending rate），也就是银行给最重要或信用质素最佳客户的基本贷款利率。而普通客户的各种贷款利率通常是在最优惠利率的基础上上浮，涵盖购房贷款、购车贷款到信用卡借贷等方方面面（进而对全社会的消费、生产及经济产生深刻影响）。</strong></p><p>· 宏观经济状况：核心是从供需平衡的角度影响到美国国债的价格 -&gt; 实际收益率 -&gt; 新增国债利率 :</p><pre data-type="codeBlock" text="  o   经济预期: 如果大家对经济前景都很悲观（不愿意进行中长期实业投资），就会导致尤其是长期债券[\[i\]](#_edn1)抢手（低风险投资），从而导致长期美债收益率下降。极端情况下就会出现短期和长期债券收益率倒挂的情形（常常被认为是经济衰退的前兆）。

  o   美元的全球流动：包括流出和回流, 都会影响到美元以及美债的供需，进而影响到美债收益率（如资本回流美国时会导致美债需求更大, 从而降低了收益率）。

  o   通胀预期：如果大家都预测钱在未来会不值钱, 那么就会将钱投入可以保值的投资标的或者直接花掉。放到债券市场，因为大部分美债都是固定收益率的，所以在高通胀的背景下，美债的实际收益率是需要打折扣的。这种情况下，大家就会有卖出美债的动力，反而会导致美债的收益率上升（以保持其吸引力/竞争力）。
"><code>  o   经济预期: 如果大家对经济前景都很悲观（不愿意进行中长期实业投资），就会导致尤其是长期债券<span class="hljs-section">[\[i\]]</span>(<span class="hljs-comment">#_edn1)抢手（低风险投资），从而导致长期美债收益率下降。极端情况下就会出现短期和长期债券收益率倒挂的情形（常常被认为是经济衰退的前兆）。</span>

  o   美元的全球流动：包括流出和回流, 都会影响到美元以及美债的供需，进而影响到美债收益率（如资本回流美国时会导致美债需求更大, 从而降低了收益率）。

  o   通胀预期：如果大家都预测钱在未来会不值钱, 那么就会将钱投入可以保值的投资标的或者直接花掉。放到债券市场，因为大部分美债都是固定收益率的，所以在高通胀的背景下，美债的实际收益率是需要打折扣的。这种情况下，大家就会有卖出美债的动力，反而会导致美债的收益率上升（以保持其吸引力/竞争力）。
</code></pre><p>· 美联储扩张资产负债表（量化宽松，quantitative  easing）vs 收缩资产负债表（缩表，tapering）</p><pre data-type="codeBlock" text="  o   美联储下场购买美债，那么它的资产负债表中的美债就会增加，同时向市场释放了美元（流动性），俗称扩表。反过来就是缩表。显而易见, 这会影响到美债的收益率，例如缩表过程中，美联储兜售美债资产，那么就会导致美债价格降低，收益率上升。
"><code></code></pre></li><li><p><strong>利率对风险资产的影响</strong>：</p><p>· 较高的利率 -&gt; 市场上货币的供应量下降 -&gt; 较高的资金获得价格。通常较高的利率会对企业收入产生负面的影响（因为总体而言社会消费/支出会降低），导致企业的增长或盈利状况恶化，预期未来现金流也会下降，从而导致更低的股票价格（估值）。（金融机构有时可能是例外。）</p><p>· 美债属于低风险（或者说“无风险”）投资，其收益率上升，必然会使部分投资者放弃更高风险的投资而回归美债，从而使风险投资领域的资金萎缩、面临更高的抛压。换个角度来想，预期增长率不变的前提下（实际上可能会降低），这个时候风险投资也必须要有更低的价格才能吸引投资者。</p><p>· 此外，还需考虑市场心理学（情绪面）的因素。在加息的大背景下，如果大家都对风险投资的前景看衰，那么彼此之间（包括媒体的作用）也会互相影响/强化。价格上的变化趋势也会进一步加深相关认知，如滚雪球般势能越来越强。</p></li></ul><hr><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="#_ednref1">[i]</a> 短期债券实质上是资本市场的融资成本, 长期债券实质上是实体经济的融资成本。</p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[ERC 20 Codes]]></title>
            <link>https://paragraph.com/@journeywest-eth/erc-20-codes</link>
            <guid>2yK2S3SQsy8rjFi2zgIQ</guid>
            <pubDate>Thu, 09 Jun 2022 10:05:55 GMT</pubDate>
            <description><![CDATA[// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /**@dev Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This meansthat a supply mechanism has to be added in a derived contract using {_mint}.For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detai...]]></description>
            <content:encoded><![CDATA[<p>// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)</p><p>pragma solidity ^0.8.0;</p><p>import &quot;./IERC20.sol&quot;; import &quot;./extensions/IERC20Metadata.sol&quot;; import &quot;../../utils/Context.sol&quot;;</p><p>/**</p><ul><li><p>@dev Implementation of the {IERC20} interface.</p></li><li><br></li><li><p>This implementation is agnostic to the way tokens are created. This means</p></li><li><p>that a supply mechanism has to be added in a derived contract using {_mint}.</p></li><li><p>For a generic mechanism see {ERC20PresetMinterPauser}.</p></li><li><br></li><li><p>TIP: For a detailed writeup see our guide</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226">https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226</a>[How</p></li><li><p>to implement supply mechanisms].</p></li><li><br></li><li><p>We have followed general OpenZeppelin Contracts guidelines: functions revert</p></li><li><p>instead returning <code>false</code> on failure. This behavior is nonetheless</p></li><li><p>conventional and does not conflict with the expectations of ERC20</p></li><li><p>applications.</p></li><li><br></li><li><p>Additionally, an {Approval} event is emitted on calls to {transferFrom}.</p></li><li><p>This allows applications to reconstruct the allowance for all accounts just</p></li><li><p>by listening to said events. Other implementations of the EIP may not emit</p></li><li><p>these events, as it isn&apos;t required by the specification.</p></li><li><br></li><li><p>Finally, the non-standard {decreaseAllowance} and {increaseAllowance}</p></li><li><p>functions have been added to mitigate the well-known issues around setting</p></li><li><p>allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address =&gt; uint256) private _balances;</p><p>mapping(address =&gt; mapping(address =&gt; uint256)) private _allowances;</p><p>uint256 private _totalSupply;</p><p>string private _name; string private _symbol;</p><p>/**</p><ul><li><p>@dev Sets the values for {name} and {symbol}.</p></li><li><br></li><li><p>The default value of {decimals} is 18. To select a different value for</p></li><li><p>{decimals} you should overload it.</p></li><li><br></li><li><p>All two of these values are immutable: they can only be set once during</p></li><li><p>construction. */ constructor(string memory name_, string memory symbol_) { <em>name = name</em>; <em>symbol = symbol</em>; }</p></li></ul><p>/**</p><ul><li><p>@dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; }</p></li></ul><p>/**</p><ul><li><p>@dev Returns the symbol of the token, usually a shorter version of the</p></li><li><p>name. */ function symbol() public view virtual override returns (string memory) { return _symbol; }</p></li></ul><p>/**</p><ul><li><p>@dev Returns the number of decimals used to get its user representation.</p></li><li><p>For example, if <code>decimals</code> equals <code>2</code>, a balance of <code>505</code> tokens should</p></li><li><p>be displayed to a user as <code>5.05</code> (<code>505 / 10 ** 2</code>).</p></li><li><br></li><li><p>Tokens usually opt for a value of 18, imitating the relationship between</p></li><li><p>Ether and Wei. This is the value {ERC20} uses, unless this function is</p></li><li><p>overridden;</p></li><li><br></li><li><p>NOTE: This information is only used for <em>display</em> purposes: it in</p></li><li><p>no way affects any of the arithmetic of the contract, including</p></li><li><p>{IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-transfer}.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>to</code> cannot be the zero address.</p></li><li><p>the caller must have a balance of at least <code>amount</code>. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-approve}.</p></li><li><br></li><li><p>NOTE: If <code>amount</code> is the maximum <code>uint256</code>, the allowance is not updated on</p></li><li><p><code>transferFrom</code>. This is semantically equivalent to an infinite approval.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>spender</code> cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC20-transferFrom}.</p></li><li><br></li><li><p>Emits an {Approval} event indicating the updated allowance. This is not</p></li><li><p>required by the EIP. See the note at the beginning of {ERC20}.</p></li><li><br></li><li><p>NOTE: Does not update the allowance if the current allowance</p></li><li><p>is the maximum <code>uint256</code>.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>from</code> and <code>to</code> cannot be the zero address.</p></li><li><p><code>from</code> must have a balance of at least <code>amount</code>.</p></li><li><p>the caller must have allowance for <code>from</code>&apos;s tokens of at least</p></li><li><p><code>amount</code>. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; }</p></li></ul><p>/**</p><ul><li><p>@dev Atomically increases the allowance granted to <code>spender</code> by the caller.</p></li><li><br></li><li><p>This is an alternative to {approve} that can be used as a mitigation for</p></li><li><p>problems described in {IERC20-approve}.</p></li><li><br></li><li><p>Emits an {Approval} event indicating the updated allowance.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>spender</code> cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; }</p></li></ul><p>/**</p><ul><li><p>@dev Atomically decreases the allowance granted to <code>spender</code> by the caller.</p></li><li><br></li><li><p>This is an alternative to {approve} that can be used as a mitigation for</p></li><li><p>problems described in {IERC20-approve}.</p></li><li><br></li><li><p>Emits an {Approval} event indicating the updated allowance.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>spender</code> cannot be the zero address.</p></li><li><p><code>spender</code> must have allowance for the caller of at least</p></li><li><p><code>subtractedValue</code>. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance &gt;= subtractedValue, &quot;ERC20: decreased allowance below zero&quot;); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); }</p><p>return true; }</p></li></ul><p>/**</p><ul><li><p>@dev Moves <code>amount</code> of tokens from <code>sender</code> to <code>recipient</code>.</p></li><li><br></li><li><p>This internal function is equivalent to {transfer}, and can be used to</p></li><li><p>e.g. implement automatic token fees, slashing mechanisms, etc.</p></li><li><br></li><li><p>Emits a {Transfer} event.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>from</code> cannot be the zero address.</p></li><li><p><code>to</code> cannot be the zero address.</p></li><li><p><code>from</code> must have a balance of at least <code>amount</code>. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), &quot;ERC20: transfer from the zero address&quot;); require(to != address(0), &quot;ERC20: transfer to the zero address&quot;);</p><p>_beforeTokenTransfer(from, to, amount);</p><p>uint256 fromBalance = _balances[from]; require(fromBalance &gt;= amount, &quot;ERC20: transfer amount exceeds balance&quot;); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount;</p><p>emit Transfer(from, to, amount);</p><p>_afterTokenTransfer(from, to, amount); }</p></li></ul><p>/** @dev Creates <code>amount</code> tokens and assigns them to <code>account</code>, increasing</p><ul><li><p>the total supply.</p></li><li><br></li><li><p>Emits a {Transfer} event with <code>from</code> set to the zero address.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>account</code> cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), &quot;ERC20: mint to the zero address&quot;);</p><p>_beforeTokenTransfer(address(0), account, amount);</p><p>_totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount);</p><p>_afterTokenTransfer(address(0), account, amount); }</p></li></ul><p>/**</p><ul><li><p>@dev Destroys <code>amount</code> tokens from <code>account</code>, reducing the</p></li><li><p>total supply.</p></li><li><br></li><li><p>Emits a {Transfer} event with <code>to</code> set to the zero address.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>account</code> cannot be the zero address.</p></li><li><p><code>account</code> must have at least <code>amount</code> tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), &quot;ERC20: burn from the zero address&quot;);</p><p>_beforeTokenTransfer(account, address(0), amount);</p><p>uint256 accountBalance = _balances[account]; require(accountBalance &gt;= amount, &quot;ERC20: burn amount exceeds balance&quot;); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount;</p><p>emit Transfer(account, address(0), amount);</p><p>_afterTokenTransfer(account, address(0), amount); }</p></li></ul><p>/**</p><ul><li><p>@dev Sets <code>amount</code> as the allowance of <code>spender</code> over the <code>owner</code> s tokens.</p></li><li><br></li><li><p>This internal function is equivalent to <code>approve</code>, and can be used to</p></li><li><p>e.g. set automatic allowances for certain subsystems, etc.</p></li><li><br></li><li><p>Emits an {Approval} event.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>owner</code> cannot be the zero address.</p></li><li><p><code>spender</code> cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), &quot;ERC20: approve from the zero address&quot;); require(spender != address(0), &quot;ERC20: approve to the zero address&quot;);</p><p>_allowances[owner][spender] = amount; emit Approval(owner, spender, amount); }</p></li></ul><p>/**</p><ul><li><p>@dev Updates <code>owner</code> s allowance for <code>spender</code> based on spent <code>amount</code>.</p></li><li><br></li><li><p>Does not update the allowance amount in case of infinite allowance.</p></li><li><p>Revert if not enough allowance is available.</p></li><li><br></li><li><p>Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance &gt;= amount, &quot;ERC20: insufficient allowance&quot;); unchecked { _approve(owner, spender, currentAllowance - amount); } } }</p></li></ul><p>/**</p><ul><li><p>@dev Hook that is called before any transfer of tokens. This includes</p></li><li><p>minting and burning.</p></li><li><br></li><li><p>Calling conditions:</p></li><li><br></li><li><p>when <code>from</code> and <code>to</code> are both non-zero, <code>amount</code> of <code>from</code>&apos;s tokens</p></li><li><p>will be transferred to <code>to</code>.</p></li><li><p>when <code>from</code> is zero, <code>amount</code> tokens will be minted for <code>to</code>.</p></li><li><p>when <code>to</code> is zero, <code>amount</code> of <code>from</code>&apos;s tokens will be burned.</p></li><li><p><code>from</code> and <code>to</code> are never both zero.</p></li><li><br></li><li><p>To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {}</p></li></ul><p>/**</p><ul><li><p>@dev Hook that is called after any transfer of tokens. This includes</p></li><li><p>minting and burning.</p></li><li><br></li><li><p>Calling conditions:</p></li><li><br></li><li><p>when <code>from</code> and <code>to</code> are both non-zero, <code>amount</code> of <code>from</code>&apos;s tokens</p></li><li><p>has been transferred to <code>to</code>.</p></li><li><p>when <code>from</code> is zero, <code>amount</code> tokens have been minted for <code>to</code>.</p></li><li><p>when <code>to</code> is zero, <code>amount</code> of <code>from</code>&apos;s tokens have been burned.</p></li><li><p><code>from</code> and <code>to</code> are never both zero.</p></li><li><br></li><li><p>To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }</p></li></ul></li></ul>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[ERC 721 Codes]]></title>
            <link>https://paragraph.com/@journeywest-eth/erc-721-codes</link>
            <guid>VZN0wor1lBLQy16FVKWV</guid>
            <pubDate>Thu, 09 Jun 2022 09:48:48 GMT</pubDate>
            <description><![CDATA[// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /**@dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, includingthe Meta...]]></description>
            <content:encoded><![CDATA[<p>// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)</p><p>pragma solidity ^0.8.0;</p><p>import &quot;./IERC721.sol&quot;; import &quot;./IERC721Receiver.sol&quot;; import &quot;./extensions/IERC721Metadata.sol&quot;; import &quot;../../utils/Address.sol&quot;; import &quot;../../utils/Context.sol&quot;; import &quot;../../utils/Strings.sol&quot;; import &quot;../../utils/introspection/ERC165.sol&quot;;</p><p>/**</p><ul><li><p>@dev Implementation of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-721%5BERC721%5D">https://eips.ethereum.org/EIPS/eip-721[ERC721]</a> Non-Fungible Token Standard, including</p></li><li><p>the Metadata extension, but not including the Enumerable extension, which is available separately as</p></li><li><p>{ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256;</p><p>// Token name string private _name;</p><p>// Token symbol string private _symbol;</p><p>// Mapping from token ID to owner address mapping(uint256 =&gt; address) private _owners;</p><p>// Mapping owner address to token count mapping(address =&gt; uint256) private _balances;</p><p>// Mapping from token ID to approved address mapping(uint256 =&gt; address) private _tokenApprovals;</p><p>// Mapping from owner to operator approvals mapping(address =&gt; mapping(address =&gt; bool)) private _operatorApprovals;</p><p>/**</p><ul><li><p>@dev Initializes the contract by setting a <code>name</code> and a <code>symbol</code> to the token collection. */ constructor(string memory name_, string memory symbol_) { <em>name = name</em>; <em>symbol = symbol</em>; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), &quot;ERC721: balance query for the zero address&quot;); return _balances[owner]; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), &quot;ERC721: owner query for nonexistent token&quot;); return owner; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), &quot;ERC721Metadata: URI query for nonexistent token&quot;);</p><p>string memory baseURI = _baseURI(); return bytes(baseURI).length &gt; 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : &quot;&quot;; }</p></li></ul><p>/**</p><ul><li><p>@dev Base URI for computing {tokenURI}. If set, the resulting URI for each</p></li><li><p>token will be the concatenation of the <code>baseURI</code> and the <code>tokenId</code>. Empty</p></li><li><p>by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return &quot;&quot;; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, &quot;ERC721: approval to current owner&quot;);</p><p>require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), &quot;ERC721: approve caller is not owner nor approved for all&quot; );</p><p>_approve(to, tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), &quot;ERC721: approved query for nonexistent token&quot;);</p><p>return _tokenApprovals[tokenId]; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), &quot;ERC721: transfer caller is not owner nor approved&quot;);</p><p>_transfer(from, to, tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, &quot;&quot;); }</p></li></ul><p>/**</p><ul><li><p>@dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), &quot;ERC721: transfer caller is not owner nor approved&quot;); _safeTransfer(from, to, tokenId, _data); }</p></li></ul><p>/**</p><ul><li><p>@dev Safely transfers <code>tokenId</code> token from <code>from</code> to <code>to</code>, checking first that contract recipients</p></li><li><p>are aware of the ERC721 protocol to prevent tokens from being forever locked.</p></li><li><br></li><li><p><code>_data</code> is additional data, it has no specified format and it is sent in call to <code>to</code>.</p></li><li><br></li><li><p>This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.</p></li><li><p>implement alternative mechanisms to perform token transfer, such as signature-based.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>from</code> cannot be the zero address.</p></li><li><p><code>to</code> cannot be the zero address.</p></li><li><p><code>tokenId</code> token must exist and be owned by <code>from</code>.</p></li><li><p>If <code>to</code> refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.</p></li><li><br></li><li><p>Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), &quot;ERC721: transfer to non ERC721Receiver implementer&quot;); }</p></li></ul><p>/**</p><ul><li><p>@dev Returns whether <code>tokenId</code> exists.</p></li><li><br></li><li><p>Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.</p></li><li><br></li><li><p>Tokens start existing when they are minted (<code>_mint</code>),</p></li><li><p>and stop existing when they are burned (<code>_burn</code>). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); }</p></li></ul><p>/**</p><ul><li><p>@dev Returns whether <code>spender</code> is allowed to manage <code>tokenId</code>.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>tokenId</code> must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), &quot;ERC721: operator query for nonexistent token&quot;); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); }</p></li></ul><p>/**</p><ul><li><p>@dev Safely mints <code>tokenId</code> and transfers it to <code>to</code>.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>tokenId</code> must not exist.</p></li><li><p>If <code>to</code> refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.</p></li><li><br></li><li><p>Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, &quot;&quot;); }</p></li></ul><p>/**</p><ul><li><p>@dev Same as {xref-ERC721-_safeMint-address-uint256-}[<code>_safeMint</code>], with an additional <code>data</code> parameter which is</p></li><li><p>forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), &quot;ERC721: transfer to non ERC721Receiver implementer&quot; ); }</p></li></ul><p>/**</p><ul><li><p>@dev Mints <code>tokenId</code> and transfers it to <code>to</code>.</p></li><li><br></li><li><p>WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>tokenId</code> must not exist.</p></li><li><p><code>to</code> cannot be the zero address.</p></li><li><br></li><li><p>Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), &quot;ERC721: mint to the zero address&quot;); require(!_exists(tokenId), &quot;ERC721: token already minted&quot;);</p><p>_beforeTokenTransfer(address(0), to, tokenId);</p><p>_balances[to] += 1; _owners[tokenId] = to;</p><p>emit Transfer(address(0), to, tokenId);</p><p>_afterTokenTransfer(address(0), to, tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev Destroys <code>tokenId</code>.</p></li><li><p>The approval is cleared when the token is burned.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>tokenId</code> must exist.</p></li><li><br></li><li><p>Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId);</p><p>_beforeTokenTransfer(owner, address(0), tokenId);</p><p>// Clear approvals _approve(address(0), tokenId);</p><p>_balances[owner] -= 1; delete _owners[tokenId];</p><p>emit Transfer(owner, address(0), tokenId);</p><p>_afterTokenTransfer(owner, address(0), tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev Transfers <code>tokenId</code> from <code>from</code> to <code>to</code>.</p></li><li><p>As opposed to {transferFrom}, this imposes no restrictions on msg.sender.</p></li><li><br></li><li><p>Requirements:</p></li><li><br></li><li><p><code>to</code> cannot be the zero address.</p></li><li><p><code>tokenId</code> token must be owned by <code>from</code>.</p></li><li><br></li><li><p>Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, &quot;ERC721: transfer from incorrect owner&quot;); require(to != address(0), &quot;ERC721: transfer to the zero address&quot;);</p><p>_beforeTokenTransfer(from, to, tokenId);</p><p>// Clear approvals from the previous owner _approve(address(0), tokenId);</p><p>_balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to;</p><p>emit Transfer(from, to, tokenId);</p><p>_afterTokenTransfer(from, to, tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev Approve <code>to</code> to operate on <code>tokenId</code></p></li><li><br></li><li><p>Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); }</p></li></ul><p>/**</p><ul><li><p>@dev Approve <code>operator</code> to operate on all of <code>owner</code> tokens</p></li><li><br></li><li><p>Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, &quot;ERC721: approve to caller&quot;); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); }</p></li></ul><p>/**</p><ul><li><p>@dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.</p></li><li><p>The call is not executed if the target address is not a contract.</p></li><li><br></li><li><p>@param from address representing the previous owner of the given token ID</p></li><li><p>@param to target address that will receive the tokens</p></li><li><p>@param tokenId uint256 ID of the token to be transferred</p></li><li><p>@param _data bytes optional data to send along with the call</p></li><li><p>@return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert(&quot;ERC721: transfer to non ERC721Receiver implementer&quot;); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } }</p></li></ul><p>/**</p><ul><li><p>@dev Hook that is called before any token transfer. This includes minting</p></li><li><p>and burning.</p></li><li><br></li><li><p>Calling conditions:</p></li><li><br></li><li><p>When <code>from</code> and <code>to</code> are both non-zero, <code>from</code>&apos;s <code>tokenId</code> will be</p></li><li><p>transferred to <code>to</code>.</p></li><li><p>When <code>from</code> is zero, <code>tokenId</code> will be minted for <code>to</code>.</p></li><li><p>When <code>to</code> is zero, <code>from</code>&apos;s <code>tokenId</code> will be burned.</p></li><li><p><code>from</code> and <code>to</code> are never both zero.</p></li><li><br></li><li><p>To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {}</p></li></ul><p>/**</p><ul><li><p>@dev Hook that is called after any transfer of tokens. This includes</p></li><li><p>minting and burning.</p></li><li><br></li><li><p>Calling conditions:</p></li><li><br></li><li><p>when <code>from</code> and <code>to</code> are both non-zero.</p></li><li><p><code>from</code> and <code>to</code> are never both zero.</p></li><li><br></li><li><p>To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }</p></li></ul></li></ul>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[How to Build Your Own SCP App: Domain-oriented PoS Design — Token DAO]]></title>
            <link>https://paragraph.com/@journeywest-eth/how-to-build-your-own-scp-app-domain-oriented-pos-design-token-dao</link>
            <guid>MurtqETsvy1YfO0zmGW7</guid>
            <pubDate>Sat, 07 May 2022 07:46:19 GMT</pubDate>
            <description><![CDATA[0xDc19 January 14th, 2022 In the last blog post, we introduced a domain-oriented PoS design. We foresee that in the rising era of WEB3, developers will not be limited to traditional Layer1 blockchain and EVM. Still, there will be more paradigms to build WEB3 applications. SCP is a smart choice for WEB3 development architecture design, allowing developers to focus on domain-oriented PoS design. This article will provide an in-depth example of domain-oriented PoS and explain how to solve the tr...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"></h1><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xDc19464589c1cfdD10AEdcC1d09336622b282652">0xDc19</a></p><p>January 14th, 2022</p><p>In the last blog post, we introduced a domain-oriented PoS design. We foresee that in the rising era of WEB3, developers will not be limited to traditional Layer1 blockchain and EVM. Still, there will be more paradigms to build WEB3 applications. SCP is a smart choice for WEB3 development architecture design, allowing developers to focus on domain-oriented PoS design. This article will provide an in-depth example of domain-oriented PoS and explain how to solve the trust problem through domain-oriented PoS, and create a trustless DAO for collaboration between users through PoS.</p><p>Token security is an oft-criticized topic in blockchain security. On blockchains, anyone can issue tokens, and the quality of these tokens varies. There are even hackers who maliciously issue tokens that can only be bought but not sold to scam users. In the blockchain industry, smart contracts are the law. Still, the terms of these contracts can only be identified by professional technical experts. It is difficult for users to distinguish between valid and secure tokens and malicious tokens in hundreds of lines of code.</p><p>imToken has created a token profile (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/consenlabs/token-profile)">https://github.com/consenlabs/token-profile)</a>, where token projects submit token information themselves on GitHub. Those submissions will be reviewed by an authority (imToken) before being displayed in the imToken wallet. If there is a malicious token, it is usually fed back to the authority by the user and re-audited by the authority, which is a long and troublesome process. everFinance has encountered malicious tokens EVER. The lengthy auditing process, which requires interfacing with various agencies and media, has dramatically delayed the flagging and publicizing of the malicious token. So, do we have a decentralized and more efficient token identification mechanism? And make the process of labeling tokens transparent and trustworthy, accurate and fast through financial incentives?</p><h1 id="h-common-auditing-process" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Common Auditing Process</h1><p>The typical approach of token security relies on a centralized authority for auditing. The risk control mechanism for tokens is summarized in the flow shown below:</p><p>In the above figure, the token issuer or user submits token information. The status of the token audition is yellow. The authority will audit the token information and mark the tokens as green for secure tokens and red for risky tokens. If the authority audits the token incorrectly, auditing is started over, and the token status is re-labeled after re-auditing.</p><p>In the traditional security world, this process is repeated by an authority every time a new token is created. The user of the token information needs to trust the authority and wait for the authority&apos;s re-audit when the token information is faulty.</p><p>At the same time, the security of the token is repeatedly audited by different authorities, and absolute trust is not always reached for other authorities. We can see that security-related information is produced in a disparate and untrustworthy information network and managed independently by different authorities.</p><p>There are two crucial problems with the existing mechanism:</p><ol><li><p>The applications completely trust and rely on the authorities. There is a massive single point of risk for the token information.</p></li><li><p>Security information is scattered among different authorities. There is a huge trust gap between authorities, with a time-consuming information-sharing process.</p></li></ol><h3 id="h-authorities-and-trust-gap" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Authorities and Trust Gap</h3><p>Trusting authorities generates a huge single point of risk. It is why many apps build their own security risk control systems. Single point of risk may lead to untimely token information updates or even wrong token information. When the business pays much attention to security, the application provider needs to conduct a repeated review of the content in addition to the authority, which reduces the efficiency but also increases the cost of sharing security information.</p><p>Due to trust issues, the security of the token is not quickly agreed upon among organizations. When a risky token is labeled, repeated audits and lengthy verification processes are often required between authorities before the final token security information can be updated.</p><h3 id="h-altcoin-big-risk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Altcoin, Big Risk</h3><p>For some small-cap altcoins, due to the high audit cost, it will lead to the fact that no authority verifies them. The authority will be alerted only when the altcoins lead to significant financial problems. Such security information lag commonly happens.</p><h1 id="h-using-dao-to-govern-security" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Using DAO to Govern Security</h1><p>The Storage-based Consensus Paradigm (SCP) advocated by Arweave and everFinance opens up new possibilities in the field of token security:</p><ol><li><p>No more trust gaps, token information is trustworthy, and the consensus of the DAO is the only trusted source</p></li><li><p>No more reliance on authorities, decentralizing token information so that anyone can get accurate information</p></li><li><p>No access control, any institution or individual can participate in DAO without permission</p></li><li><p>Faster token information validation, with DAO&apos;s economic incentive model incentivizing members to process new token information quickly</p></li></ol><h3 id="h-how-to-build" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How to Build</h3><p>Reasonable financial incentives are a vital element in creating a DAO. The traditional security auditing process cannot solve the consensus on security information or the single centralized point of risk.</p><p>We can develop a tokenDAO node, an off-chain smart contract for DAO members&apos; collaboration. The node&apos;s code defines the template for uploading token information, the token mechanism, how to conduct voting, rewards and penalties, and other related rules.</p><p>There will be a token called TOK in tokenDAO. TOK is a profit-sharing community token, and anyone can go to everPay Swap to get TOK. TOK functions include: </p><ol><li><p>Incentivize correct token information uploads</p></li><li><p>Incentivize correct token labeling</p></li><li><p>Vote on token information</p></li></ol><p><strong>Token Upload</strong></p><p>Token information will be uploaded to Arweave and must be uploaded according to the data template specified by tokenDAO. Incorrect data fields or duplicated uploads are considered invalid. Once valid data is uploaded to Arweave, it is loaded into the tokenDAO node. tokenDAO nodes automatically store the uploader address of each piece of data. TOK can be staked to each token information. The more TOKs are staked for each token information, the more TOK rewards the uploader receives. However, the TOK reward for the uploader is much lower than the reward for staking tokens for labeling since collecting information is much easier than labeling information.</p><p><strong>Token Labelling</strong></p><p>Any user holding a TOK can stake their TOK to valid token information. TOK staking is a ternary operation consisting of: no staking, stake the token as safe, and stake the token as scammy. When there is no staking, there are no rewards to the units of TOK. Staking a token as safe or scam can result in a reward or a penalty. The holder of a TOK needs to correctly determine if the token is malicious. The penalty for a wrong stake is greater than the reward of a correct stake to keep the quality of each stake and avoid arbitrary stakes.</p><p>A TOK can be staked to any number of token information. Different stakes can be chosen for different token information: stake for safe or for dangerous. A unit value of TOK is less profitable if it is staked to only one token, and most profitable if it is staked to all tokens in the network. A TOK can also be delegated to a third party to stake.</p><p><strong>Information Correction</strong></p><p>The graph shows the results generated by TOK stakes. The green bar represents the number of safe stakes, and the red bar represents the number of dangerous stakes. tokenA has a large amount of TOK staked as safe, while tokenC has a large amount of TOK staked as safe and a small amount staked as unsafe, which is a controversial token. If anyone staked for danger for tokenA, tokenA becomes a controversial token, and the token enters the uncertainty state.</p><p>Within n hours of the token being controversial, the user can choose to change the stake type, and if a new consensus is reached within n hours, the token is automatically released from dispute. If there is still a controversy after n hours, a voting phase will take place. Any user with a TOK can vote on the controversial token. Ultimately, the wrong side of the stake is forfeited and awarded to the voter and the staker with the correct choice.</p><p><strong>How to Use tokenDAO</strong></p><p>The DAO is entirely free, and anyone can download the tokenDAO node. Running the node will automatically sync token information from Arweave and generate staking and voting conditions for each token according to the transaction history on Arweave. Once the tokenDAO node is synced to the latest block on Arweave, users can access the tokenDAO API to get the latest, fully decentralized, secure token information consensus.</p><h1 id="h-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h1><p>Arweave + SCP allows us to quickly create a domain-oriented PoS and DAO based on a domain-specific problem. The model can be adapted to a broader range of domains. Whether blockchainless DEX or decentralized new media mentioned in previous blogs, similar projects can all be economically incentivized by domain-oriented PoS design tokens. Arweave + SCP solves the consensus problem and provides developers with the freedom to develop architecture designs. Arweave + SCP will pave the technical path for WEB3.</p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[How to get low-risk leverage on ETH]]></title>
            <link>https://paragraph.com/@journeywest-eth/how-to-get-low-risk-leverage-on-eth</link>
            <guid>iCe3EEEYEcZtE1lRZrih</guid>
            <pubDate>Wed, 06 Apr 2022 13:09:51 GMT</pubDate>
            <description><![CDATA[How to get low-risk leverage on ETH Graphic by Logan Craig Using borrowed capital for investments is known as leverage, with the idea being to multiply returns. Many crypto investors seek leveraged “long” exposure to ETH because its fundamentals and tailwinds suggest the asset has attractive returns worth multiplying going forward. Using leverage can be complicated and risky, though. Today’s Bankless tactic shows you a handful of straightforward ways to get leveraged long on ETH with little t...]]></description>
            <content:encoded><![CDATA[<p>How to get low-risk leverage on ETH</p><p>Graphic by Logan Craig Using borrowed capital for investments is known as leverage, with the idea being to multiply returns.</p><p>Many crypto investors seek leveraged “long” exposure to ETH because its fundamentals and tailwinds suggest the asset has attractive returns worth multiplying going forward.</p><p>Using leverage can be complicated and risky, though. Today’s Bankless tactic shows you a handful of straightforward ways to get leveraged long on ETH with little to no risk of liquidations.</p><p>Goal: Learn how to get leveraged long on ETH</p><p>Skill: Intermediate</p><p>Effort: 1 hour</p><p>ROI: Increased exposure to ETH gains</p><p>Why low-risk leverage on ETH</p><p>ETH is the preferred medium of exchange around NFTs.</p><p>ETH is the reserve asset of DeFi.</p><p>ETH staking is paving the way to the internet bond and the internet’s native risk-free rate.</p><p>In other words, ETH is the center of action in the cryptoeconomy right now. ETH’s fundamentals and its prospects going forward are promising, too, so there’s reason to believe the asset will continue to grow as an economic force in the years to come.</p><p>Twitter avatar for @cburniske Chris Burniske @cburniske Once mature, the return on staking $ETH could become the basis for the Internet’s risk-free rate:</p><p>ETH: The Internet Bond Learn the economics of Ethereum’s internet bond with the launch of Ethereum 2.0 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://bankless.substack.com">bankless.substack.com</a> December 7th 2020</p><p>100 Retweets652 Likes Sure, no one can predict the future, and plenty of things can happen that can complicate or slow the rise of ETH going forward. Yet it’s already hard to imagine how ETH won’t be much more valuable in a decade than it is today.</p><p>In other words, the joke that “none of us has enough ETH right now” is ringing truer than ever these days. So the play here is, you guessed it, to keep stacking as much ETH as possible!</p><p>Twitter avatar for @BanklessHQ Bankless 🏴 @BanklessHQ Green market days hit different Image March 28th 2022</p><p>28 Retweets175 Likes Toward that end, most people simply buy and hold ETH, which is perfectly fine and has worked well for many. Others, confident that ETH is going to keep generally trending upward for the foreseeable future, are attracted by leverage and its ability to multiply ETH’s base gains.</p><p>Of course, if your leveraged ETH long pans out, you’ll have more ETH gains than you would’ve otherwise. The problem, though, is that many leverage options in the cryptoeconomy are complicated, riskier affairs.</p><p>Unless you’re a leverage expert, the need to manually monitor and manually attend to traditional crypto leverage positions isn’t for the faint of heart. For example, you can use Maker to borrow DAI against ETH to buy more ETH. That’s good ol’ fashioned leverage, but you could be liquidated and lose money if you don’t actively tend to your position during a big market downturn.</p><p>We want to stack as much ETH as possible, not lose ETH. So to give you some ideas for further consideration, here are four leveraged long ETH opportunities that face little to no risk of liquidations. Stack in style, baby!</p><ol><li><p>ETH 2x Flexible Leverage Index (ETH2x-FLI) ⚠️Skill level: Easy</p></li></ol><p>What you need to know Created by Index Coop and Scalara (previously Pulse.inc), ETH2x-FLI marks DeFi’s first fully collateralized ERC20 leverage token.</p><p>The token tracks a 2x leverage ratio to ETH, though this ratio can fluctuate between 1.7x to 2.3x leverage depending on market conditions. Consider how the value of ETH2x-FLI has risen +60% over the last month, which is more than double what plain ETH has gained in the same span.</p><p>Under the hood, ETH2x-FLI takes your ETH collateral, deposits it to Compound, borrows USDC, trades that USDC for ETH, and then deposits that ETH back into Compound (where it becomes cETH) to earn interest.</p><p>Instead of carrying out all these steps yourself, ETH2x-FLI automatically handles the process and rebalancings and tokenizes it all into a single ERC20 that can be bought and sold. No active management necessary!</p><p>It’s possible to mint ETH2x-FLI into existence, but the simplest way to acquire the token is to purchase it from a decentralized exchange like Uniswap.</p><p>How to go long with ETH2x-FLI</p><p>Index Coop offers a simple UI for buying ETH2x-FLI via Uniswap, so you could start by heading to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.indexcoop.com/ethfli">app.indexcoop.com/ethfli</a> and connecting your wallet.</p><p>Use the trading interface to input how much ETH2x-FLI you want, then press “Buy.”</p><p>Complete the purchase transaction with your wallet, and that’s it! You’ve now got automated, low-risk leveraged ETH exposure.</p><p>You can hold the ETH2x-FLI for as long as you want to capitalize on the extra ETH exposure. If you ever want to convert back to regular ETH, simply head back to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.indexcoop.com/ethfli">app.indexcoop.com/ethfli</a> and use the “Sell” portion of the trading UI.</p><p>A version of ETH2x-FLI exists on Polygon, too, so keep that in mind if you want to optimize for faster and more affordable transactions.</p><ol><li><p>ETHMAXY ⚠️Skill level: Easy</p></li></ol><p>What you need to know ETH Max Yield, or ETHMAXY, is a new crypto structured product developed as a collaboration between Galleon DAO, an asset management methodologist guild, and Beverage Finance, a decentralized leverage protocol.</p><p>Built on top of Set Protocol, ETHMAXY automatically levers up 3x via collateralizing and borrowing against Lido staked ETH (stETH) through Aave and then reinvesting back into stETH, etc. So if stETH staking yield is ~4% APR, ETHMAXY aims at a tripled ~12% APR and so forth.</p><p>“The ETH Max Yield Index was built as a partnership product aiming to give DeFi natives the most yield possible on their staked ETH in addition to acting as a best-in-class treasury diversification asset for DAOs looking to maximize the productivity of their idle ETH,” the creators have said.</p><p>How to go long with ETHMAXY</p><p>Go to setswap.xyz/ethmaxy and connect your wallet.</p><p>Scroll down to the “DEX SWAP” interface, which is a UI overlay for a Uniswap V3 liquidity pool.</p><p>Input how much ETH you want to convert into ETHMAXY. Keep in mind that the current exchange rate is 1 ETH to ~0.98 ETHMAXY.</p><p>When you’re ready, press “Buy” and complete the purchase transaction with your wallet.</p><p>That’s it! Now you can hodl what amounts to three times the Lido staked ETH yield rate but in a single, simple way to manage ERC20 token.</p><ol><li><p>Alchemix self-repaying ETH loan ⚠️Skill level: Intermediate</p></li></ol><p>What you need to know Alchemix is a DeFi borrowing protocol that offers advances on yield farming rewards via alUSD, Alchemix’s native stablecoin, or alETH, the project’s synthetic version of ETH.</p><p>Alchemix directs users’ yield farming rewards to automatically pay down their loans, meaning over time Alchemix loans pay for themselves. This constant and automated repayment process mitigates the risk of liquidations, and Alchemix only allows self-enacted liquidations anyways.</p><p>Using Alchemix manually for leverage is similar to using Maker for leverage: you could deposit ETH into a vault, borrow alETH against the collateral, and then trade alETH to ETH to stack the real deal. The difference is that Maker won’t automatically pay down your leveraged position’s debt over time, but Alchemix will.</p><p>Note that Alchemix recently launched its new-and-improved v2 update and also just added Rocket Pool’s rETH and Lido’s wstETH as alETH collateral options. Stake and stack, baby!</p><p>Twitter avatar for @AlchemixFi Alchemix @AlchemixFi We are proud to announce that wstETH and rETH have now been enabled as collateral for alETH! Image April 1st 2022</p><p>56 Retweets227 Likes How to go long with Alchemix</p><p>You could head to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://alchemix.fi">alchemix.fi</a> and connect your wallet. Click on the “Vaults” button in the dashboard, and then select and sort by the “alETH” vaults.</p><p>You can choose from the Yearn WETH, Lido wstETH, or Rocket rETH vaults. Click “Deposit” on your choice, use the UI to input your desired deposit amount, and then complete the deposit transaction with your wallet.</p><p>Then use the “Borrow” button to select your vault and configure your loan. Keep in mind that you can borrow up to 50% of your deposited collateral’s worth.</p><p>Once your borrow transaction is completed, you could head to the Curve ETH-alETH Factory pool and trade your synthetic alETH for cold hard ETH. Leveraged long secured!</p><p>✋ Read our full tactic on how to take out a self-repaying loan via Alchemix (v1)</p><ol><li><p>Long Squeeth by Opyn ⚠️Skill level: Intermediate</p></li></ol><p>What you need to know Squeeth (Squared ETH) is a new DeFi primitive known as a Power Perpetual. Akin to a mix between an option and a perpetual swap, Squeeth was developed by researchers at Opyn, a derivatives and options protocol project, and Dan Robinson of Paradigm.</p><p>You can take long or short positions through Squeeth. Notably, a Long Squeeth leveraged position cannot be liquidated, in contrast to traditional DeFi perpetual positions. Moreover, if ETH rises 10x in value, Long Squeeth rises 100x in value, etc.</p><p>However, Long Squeeth holders have to pay a funding rate to maintain their positions, with this funding going to short ETH holders. This funding rate can lead to larger or smaller payoffs compared to 2x leveraged perps over similar time spans, though Squeeth earns more when ETH rises and loses less when ETH drops.</p><p>How to go long with Long Squeeth</p><p>It’s possible to simply buy Long Squeeth (oSQTH) via Uniswap V3 through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://squeeth.opyn.co">squeeth.opyn.co</a>. Note, though, that the Squeeth app currently isn’t available to U.S. users.</p><p>Since Long Squeeth has a funding rate, you don’t just want to mindlessly ape into oSQTH without further consideration. Make sure you fully understand how the primitive works before taking the leap in. First and foremost, understand that if the ETH price stays flat for a long time, you may lose a considerable portion of your position to funding. The current daily funding rate is 0.19%.</p><p>Once you’ve acquired some oSQTH, you simply hold it for however long you want to have out the “squared” exposure to ETH. Exiting your position is as simple as selling your oSQTH back for ETH on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://squeeth.opyn.co">squeeth.opyn.co</a> or Uniswap V3.</p><p>Zooming out Leverage is never something to take lightly in crypto. But if you are going to use leverage, it is compelling to use lower-risk offerings like the ones described above precisely because they offer more simplicity, and thus much less stress, than alternative options. This illustrates the beauty of smart contracts and composable DeFi. Nowadays we can build unprecedented financial instruments that can empower people around the globe in new, interesting, and automated ways.</p><p>Action steps 💸 Explore ETH2x-FLI, ETHMAXY, Alchemix, and Long Squeeth</p><p>✍️ Read our last tactic How to build a web3 publication if you missed it</p><p>Author Bio William M. Peaster is a professional writer and creator of Metaversal—a new Bankless newsletter focused on the emergence of NFTs in the cryptoeconomy. He’s also recently been contributing content to Bankless, JPG, and beyond!</p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[Layer 2]]></title>
            <link>https://paragraph.com/@journeywest-eth/layer-2</link>
            <guid>aJFuGR2klEJQ7iuGMoXg</guid>
            <pubDate>Wed, 16 Feb 2022 12:14:12 GMT</pubDate>
            <description><![CDATA[https://zhuanlan.zhihu.com/p/401607743 https://zhuanlan.zhihu.com/p/401607743 https://zhuanlan.zhihu.com/p/401607743 Layer2解析及项目 文章会介绍Layer2各个方案的基本思想，优劣对比，以及目前主流的项目，而其中有些项目我认为是可以提前埋伏的机会。 目前有两大类方案对区块链系统进行扩容。一个是基于原链进行扩容，最为大家熟知的就是分片（Sharding），另一类就是目前比较火热的Layer2扩容。 Layer2就其本质上来讲，就是让大量的交易在链下进行，并只在需要最终确认或者在出现争议的时候提交到链上进行仲裁。所以Layer2扩容方案又被称为链下扩容方案。 Layer2的方案总的来分状态通道（State Channel)，等离子体（Plasma），Rollup三种。其中Rollup又分为ZK Rollup（简称ZKR）和Optimistic Rollup(简称OR)，也是当下比较主流的扩容方案。 以下所说的是各个方案的基本原理，实际上很多项目在应用时都会有各种...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zhuanlan.zhihu.com/p/401607743">https://zhuanlan.zhihu.com/p/401607743</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zhuanlan.zhihu.com/p/401607743">https://zhuanlan.zhihu.com/p/401607743</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zhuanlan.zhihu.com/p/401607743">https://zhuanlan.zhihu.com/p/401607743</a></p><p>Layer2解析及项目</p><p>文章会介绍Layer2各个方案的基本思想，优劣对比，以及目前主流的项目，而其中有些项目我认为是可以提前埋伏的机会。</p><p>目前有两大类方案对区块链系统进行扩容。一个是基于原链进行扩容，最为大家熟知的就是分片（Sharding），另一类就是目前比较火热的Layer2扩容。</p><p>Layer2就其本质上来讲，就是让大量的交易在链下进行，并只在需要最终确认或者在出现争议的时候提交到链上进行仲裁。所以Layer2扩容方案又被称为链下扩容方案。</p><p>Layer2的方案总的来分状态通道（State Channel)，等离子体（Plasma），Rollup三种。其中Rollup又分为ZK Rollup（简称ZKR）和Optimistic Rollup(简称OR)，也是当下比较主流的扩容方案。</p><p>以下所说的是各个方案的基本原理，实际上很多项目在应用时都会有各种具体的方法去优化，解决方案本身的一些劣势。 状态通道 状态通道的思想其实和比特币中的闪电网络类似，只不过这里的“状态”其实是广义的概念而不单单是你的账户余额，而用于支付的通道是状态通道的一种特殊形式。这里用一个便于理解的例子来解释一下它是如何工作的：</p><p>假设A和B要进行一系列连续的交易，B持续为A进行某种服务而A需要一段时间给B支付一定的费用，这时他们只需要共同参与到合约中，将自己的状态锁定到链上，然后在链下进行一系列的操作。待双方完成交易后，将最终的状态改变提交到链上，更新最终的状态。 当然这是正常状况，实际上链下的每一个操作都会伴随一个状态数的更新，状态数就可以代表最新的状态。假设A想赖账，提前退出，这时会进入一个“争议期”，链上判断B的状态数高于A，合约会对恶意乙方做出相应的惩罚（比如扣除保证金）。 不足： 1、由于参与者必须能够在任意时间向区块链上提供当前通道的状态，这就要求参与者必须一直在线。当然也可以托管第三方。 2、灵活性不足。虽然支持多方参与，但是参与方一旦固定，其余节点不能灵活的参与。 项目： Celer Network、FunFair、Perun、Lighting Network 、Counterfactual、Raiden</p><p>Plasma Plasma的概念最初由V神提出，通过加密验证技术（Merkle Tree）和智能合约将以太坊主链上的交易放到链下（侧链）去执行，从而得到更快的交易速度和更低的手续费。 主链上有多个合约，每个合约都延伸出一条子链，而子链也可以延伸子链，可以理解为一个法院的层级结构，主链作为最高法院具有裁决的作用，如下图所示：</p><p>用户将资金存入对应plasma合约上，将资金从根链转移到相应的子链上。当用户想要退出时，发起withdraw交易，并且进入一个退出时间（挑战期）， 任何人都可以提交欺诈证明来挑战该用户的资产声明，证明该用户的资产有效性。</p><p>若Plasma子链中的用户发现运营者提交了伪造的信息给根链，那么他们可以提交相关的欺诈证明数据给根链，以证明运营者提供的数据是伪造的。一旦证明成功，Plasma子链的区块将回滚到伪造之前的状态，同时，运营者也将受到惩罚。</p><p>优势： 1、与状态通道相比，Plasma更加灵活，可以允许成员的动态变化； 2、理论上可以无限扩容，各个侧链都有自己独特的工作方式，不同的共识算法。 劣势： 1、赎回（withdraw）不是立即确认的； 2、只有一个哈希值传到主链（链上没有原始数据），而挑战期需要原始数据，一旦链下出现问题，主链无从验证，这就导致了最关键的数据可用性的问题，这个问题就迫使用户一方需要保存部分数据并且在线，否则错过挑战期，即使有错也没法更改。 而这也是Rollup的方案去解决的问题。 项目： Skale、OMG、MATIC、LOOM、Livepeer</p><p>Rollup rollup就是“卷起来”的意思，之前一个转账一笔交易，现在就是数百比转账“卷”成一个交易。解决了Plasma的一个最关节的问题——数据可用性。将每一笔交易的原始数据（CALLDATA）存储在以太坊上，而在链下进行执行。</p><p>上图的右侧就是一些链上账户的状态值所构成的Merkel Tree，交易的发生会导致这棵树的结构发生变化（从旧状态到新状态），这个变化在链下进行，链上虽然没有这些信息，但是可以根据原始的信息进行重新构造。ZKR和OR的区别就是如何验证旧状态到新状态的变化。 OR 顾名思义，乐观意味着链下操作者返回的结果被默认为正确的，而不需要每一次都要检查。如果有人发现状态的变化有误，则向主链发布一个证明来证明变化的错误，链上合约进行验证并回滚错误的状态变化。也就是说，只有出现争议的时候，才通过链上的合约进行裁决，然后惩罚恶意的验证者。 项目： Arbitrum、Optimism、Idex、Synthetix、Catersi</p><p>ZKR 链下的操作者根据状态更新的变化生成一个零知识证明（SNARK），然后交给链上的合约进行判断。链上只要验证该证明，就能确保涉及到的交易被正确地执行，这个验证是高效而且容易的。而对于无效的交易或者状态变更，操作者是不能生成这样的证据。 项目： ZKsync, Loopring，zkswap</p><p>OR与ZKR的对比：</p><ol><li><p>OR采用欺诈性证明（fraud proof）， ZK采用有效性证明（validity proof）；</p></li><li><p>OR支持EVM，ZK底层基于混淆电路，OR更容易将现有以太坊的生态完全移植；</p></li><li><p>OR需要一段时间的挑战期，ZKR是立即确认；</p></li><li><p>OR的性能要低于ZKR；</p></li><li><p>OR的安全性依赖于罚金，ZKR的安全是以数学为基础，更加符合中本聪最开始的想法：通过技术手段解决中心化所带来的问题。</p></li></ol><p>这么看来，ZKR似乎各个方面都要比OR好，为什么大家不都去选择ZKR？ZK Rollup在完全适配以太坊生态应该还有一段路要走，而Optimistic Rollup正好为L1到L2提供了一个过度期，为那些还不能适配ZKR的dapp提供一个初具规模的生态，让ZKR更好的去适配大规模的以太坊上的各个生态。</p><p>参考文献 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/state-channels/#resources">https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/state-channels/#resources</a> Plasma: Scalable Autonomous Smart Contracts <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2021/01/05/rollup.html">https://vitalik.ca/general/2021/01/05/rollup.html</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.plasma.io/plasma.pdf">https://www.plasma.io/plasma.pdf</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://offchainlabs.com/arbitrum.pdf">https://offchainlabs.com/arbitrum.pdf</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nms.kcl.ac.uk/patrick.m">https://nms.kcl.ac.uk/patrick.m</a></p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
        <item>
            <title><![CDATA[Long Live Participatory Socialism!]]></title>
            <link>https://paragraph.com/@journeywest-eth/long-live-participatory-socialism</link>
            <guid>FE0YPhXwWmq8yKaMuiY7</guid>
            <pubDate>Fri, 11 Feb 2022 14:36:02 GMT</pubDate>
            <description><![CDATA[BY THOMAS PIKETTYNOVEMBER 18, 2021 FacebookTwitterEmail Thomas Piketty is director of studies at the École des hautes études en sciences sociales (EHESS) and professor at the Paris School of Economics. He is the author of “Capital in the Twenty-First Century” and “Capital and Ideology.” If someone had told me in 1990 that I would one day publish a collection of articles entitled “Time for Socialism,” I would have thought it was a bad joke. As an 18-year-old, I spent the autumn of 1989 listeni...]]></description>
            <content:encoded><![CDATA[<p>BY <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/author/thomas-piketty/">THOMAS PIKETTY</a>NOVEMBER 18, 2021</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>Thomas Piketty is director of studies at the École des hautes études en sciences sociales (EHESS) and professor at the Paris School of Economics. He is the author of “Capital in the Twenty-First Century” and “Capital and Ideology.”</p><p>If someone had told me in 1990 that I would one day publish a collection of articles entitled “Time for Socialism,” I would have thought it was a bad joke.</p><p>As an 18-year-old, I spent the autumn of 1989 listening to the collapse of communist dictatorships and “real socialism” in Eastern Europe on the radio. In February 1990, I took part in a French student trip to support the young people in Romania who had just gotten rid of the regime of Nicolae Ceauşescu. We arrived in the middle of the night at the Bucharest airport, then went by bus to the rather sad and snowy city of Braşov, nestled in the arc of the Carpathian Mountains. The young Romanians proudly showed us the impact of bullets on the walls, witnesses of their revolution.</p><p>In March 1992, I made my first trip to Moscow, where I saw the same empty shops and the same gray avenues. I was participating in a Franco-Russian conference entitled “Psychoanalysis and Social Sciences,” and it was with a group of French academics, who were a bit lost, that I visited the Lenin Mausoleum and Red Square, the shrine of the Russian Revolution where the Russian flag had just replaced the Soviet flag.</p><p>Born in 1971, I belong to a generation that did not have time to be tempted by communism, and which came into adulthood when the absolute failure of Sovietism was already obvious. Like many, I was more liberal than socialist in the 1990s, as proud as a peacock of my judicious observations, suspicious of my elders and all those who were nostalgic. I could not stand those who obstinately refused to see that the market economy and private property were part of the solution. But now, more than 30 years later, hypercapitalism has gone much too far, and we need to think about a new way of going beyond capitalism. We need a new form of socialism, participative and decentralized, federal and democratic, ecological, multiracial and feminist.</p><p>History will decide whether the word “socialism” is definitively dead and must be replaced. For my part, I think that it can be saved, and it remains the most appropriate term to describe the idea of an alternative economic system to capitalism.</p><p>In any case, one cannot just be “against” capitalism or neoliberalism; one must above all be “for” something else, which requires precisely designating the ideal economic system that one wishes to set up, the just society that one has in mind, whatever name one finally decides to give it. It has become commonplace to say that the current capitalist system has no future, as it deepens inequalities and exhausts the planet. This is not false, except that in the absence of a clearly explained alternative, the current system still has many days ahead of it.</p><p><strong>The Long March Toward Equality And Participatory Socialism</strong></p><p>Let’s start with a statement that some may find surprising. If we take a long-term perspective, then the long march toward equality and participatory socialism is already well under way. No technical impossibility prevents us from continuing along this already open path, as long as we all get on with it. History shows that inequality is essentially ideological and political, not economic or technological.</p><p>This optimistic point of view may certainly seem paradoxical in these times of gloom, yet it corresponds to reality. Inequalities have been sharply reduced over the past few centuries, in particular due to new social and fiscal policies introduced during the 20th century. Much remains to be done, but it is possible to go much further by drawing on the lessons of history.</p><p>Consider, for example, the evolution of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F4.2.pdf">property concentration</a> in France over the past 200 years. First of all, we can see that the richest 1% held an astronomical share of total property (the total real estate, financial, and professional assets, net of debt) throughout the 19th century and until the beginning of the 20th century — which shows, by the way, that the French Revolution’s promise of equality was more theoretical than real, at least as far as the redistribution of property is concerned. It can then be observed that this share fell sharply during the 20th century: it was around 55% of total wealth in France on the eve of World War I and is now close to 25%.</p><p>However, it should be noted that this share is still about five times higher than that held by the poorest 50%, who currently own just over 5% of France’s total wealth (despite the fact that they are by definition 50 times more numerous than the richest 1%). According to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F4.1.pdf">my research</a>, this low share has also been declining since the 1980s and 1990s, a trend that <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F11.1.pdf">can also</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F0.3.pdf">be observed</a> in the United States, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reuters.com/article/us-germany-economy-poverty/the-poor-get-poorer-in-germany-too-draft-government-report-shows-idUSKBN16U27H">Germany</a> and the rest of Europe, as well as in India, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theguardian.com/world/2011/apr/11/russia-rich-richer-poor-poorer">Russia</a> and China.</p><p>“History shows that inequality is essentially ideological and political, not economic or technological.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>The concentration of ownership (and therefore economic power) has clearly decreased over the past century, but it is still extremely high. The reduction of property inequalities has mainly benefited the “property-owning middle class” (the 40% of the population between the top 10% and the bottom 50%) but has benefited very little the poorest half of the population. In the end, the share of wealth of the richest 10% has fallen significantly, from 80-90% to around 50-60% (which is still considerable).</p><p>But the share of the poorest 50% has <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F4.1.pdf">never stopped</a> being tiny. The situation of the poorest 50% has <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/en/ideology">improved more</a> in terms of income than in terms of wealth (their share of total income has grown from barely 10% to around 20% in Europe), although here again the improvement is limited and potentially reversible (the share of the poorest 50% has fallen to just over 10% in the United States since the 1980s). The poorest 50% of the world’s population is still the poorest 50% of the world’s population.</p><p><strong>The Social State As A Vehicle For Equal Rights</strong></p><p>How can we account for these complex and contradictory developments and, in particular, how can we explain the reduction in inequalities observed over the past century, particularly in Europe? In addition to the destruction of private assets as a result of the two World Wars, the positive role played by the considerable changes in the legal, social and tax systems introduced in many European countries during the 20th century must be emphasized.</p><p>One of the most decisive factors was the rise of the welfare state between 1910-1920 and 1980-1990, with the development of investment in education, health, retirement and disability pensions, and social insurance (unemployment, family, housing, etc.). At the beginning of the 1910s, total public expenditure in Western Europe amounted to barely 10% of national income, and a large part of it was regalian/public expenditure related to policing, the army and colonial expansion. Total public expenditure reached 40-50% of national income in the 1980s and 1990s before stabilizing at this level and was mainly expenditure on education, health, pensions and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F10.15.pdf">social transfers</a>.</p><p>This development has led to a certain equality of access to the basic goods of education, health, and economic and social security in Europe during the 20th century, or at least a greater equality of access to these basic goods than had been available to all previous societies. However, the stagnation of the welfare state since the 1980s and 1990s — even though needs have continued to increase, particularly as a result of longer life expectancy and higher levels of schooling — shows that nothing can ever be taken for granted.</p><p>“To achieve real equality, the whole range of relationships of power and domination must be rethought.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>In the health sector, we have just bitterly noted with the COVID-19 health crisis the inadequacy of the hospital and human resources available. One of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2020/04/14/avoiding-the-worst/">major issues</a> at stake in the current epidemic crisis is precisely whether the march toward the social state will resume in rich countries and will finally be accelerated in poor countries.</p><p>Take the case of investment in education. At the beginning of the 20th century, public spending on education at all levels was less than 0.5% of national income in Western Europe (and slightly higher in the United States, which at the time was ahead of Europe). In practice, this meant extremely <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://science.jrank.org/pages/9080/Education-in-Europe-Nineteenth-Twentieth-Century-Education.html">elitist and restrictive</a> education systems: the mass of the population had to make do with overcrowded and poorly funded primary schools, and only a small minority had access to secondary and higher education.</p><p>Investment in education increased more than tenfold over the 20th century, reaching 5-6% of France’s national income in the 1980s and 1990s, allowing for a very high level of educational expansion. This development has been a powerful factor driving both greater equality and greater prosperity over the past century.</p><p>Conversely, stagnation in total educational investment observed in recent decades, despite the sharp increase in the proportion of an age group moving to higher education, has contributed both to the rise in inequality and to the slowdown in the rate of growth of average income. It should also be pointed out that extremely high social inequalities in terms of access to education persist.</p><p>This is obviously the case in the United States, where the probability of access to higher education (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.usnews.com/education/best-colleges/articles/how-many-universities-are-in-the-us-and-why-that-number-is-changing">largely private and fee-paying</a>) is powerfully determined by parental income. But it is also the case in a country such as France, where total public investment in education at all levels is very unevenly distributed within an age group, particularly in view of the huge inequalities between the resources allocated to selective and non-selective courses of study.</p><p>In general, the number of university students in France has risen sharply since the middle of the 2000s (from just over 2 million to almost 3 million today), but public investment has <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2017/10/21/budget-2018-french-youth-sacrified/">not followed suit</a> — especially in general university courses and short technical courses, so that investment per student has fallen sharply. This is a considerable social and human waste.</p><p><strong>Toward Participatory Socialism: Enabling Greater Circulation Of Power And Ownership</strong></p><p>Educational equality and the welfare state are not enough. To achieve real equality, the whole range of relationships of power and domination must be rethought. This requires, in particular, a better sharing of power in companies.</p><p>In many European countries, particularly in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.nytimes.com/2019/01/06/opinion/warren-workers-boards.html">Germany</a> and Sweden, the trade union movement and social democratic parties succeeded in imposing a new division of power on shareholders in the middle of the 20th century, in the form of co-management systems: elected employee representatives have up to half of the seats on the boards of directors of large companies, even without any share in ownership.</p><p>The point is not to idealize this system (in the event of a tie, it is always the shareholders who have the decisive vote), but simply to note that this is a considerable transformation of the classic shareholder logic. This implies that if employees also hold a minority stake of 10% or 20% in the capital, or if a local authority holds such a stake, then the majority can be tipped, even in the face of an ultra-majority shareholder in the capital. But the fact is that such a system — which gave rise to loud cries from shareholders in the countries concerned when it was set up and which required intense social, political, and legal struggles — has in no way harmed economic development. Quite the contrary — there is every indication that this greater equality of rights has led to greater employee involvement in the long-term strategy of companies.</p><p>“The tax and inheritance system must also be mobilized to encourage a greater circulation of property itself.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>Unfortunately, shareholder resistance has so far prevented a wider dissemination of these rules. In France, the United Kingdom and the United States, shareholders continue to hold almost all the power of the company. It is interesting to note that <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.nytimes.com/1984/12/24/world/france-s-leftist-leaders-veer-from-chartered-path.html">French Socialists</a>, like British Labour, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.jstor.org/stable/2599058">favored a nationalization-centered</a> approach until the 1980s, often finding the Swedish and German Social Democrats’ strategies of power-sharing and voting rights for employees too timid.</p><p>The nationalization agenda then disappeared after the collapse of Soviet communism, and both French Socialists and British Labour almost abandoned in the 1990s and 2000s any prospect of a transformation of the ownership regime. Discussions on Nordic-German co-management have been going on for about 10 years now, and it is high time to generalize these rules to all countries.</p><p>Next, and more importantly, it is possible to extend and amplify this movement toward a better sharing of power. For example, in addition to the fact that employee representatives should have 50% of the votes in all companies (including the smallest), it is conceivable that within the 50% of voting rights going to shareholders, the share of voting rights held by an individual shareholder may not exceed a certain threshold in sufficiently large companies. In this way, a single shareholder who is also an employee of his company would continue to have the majority of votes in a very small company, but would have to rely more and more on collective deliberation once the company becomes more significant in size.</p><p>Important as it is, this transformation of the legal system will not be enough. In order to ensure a genuine circulation of power, the tax and inheritance system must also be mobilized to encourage a greater circulation of property itself. As we have seen above, the poorest 50% own almost nothing, and their share in total wealth has barely improved since the 19th century. The idea that it would be enough to wait for the general increase in wealth to spread ownership is not very meaningful; if this were the case, we would have seen such a development long ago.</p><p>This is why I support a more proactive solution in the form of a minimum inheritance for all, which could be on the order of 120,000 euros (about 60% of average wealth per adult in France today) or $180,000 (about 60% of the average wealth per adult in the United States today) paid out at the age of 25. Such an inheritance for all would represent an annual expenditure of around 5% of national income, which <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/T17.1.pdf">could be financed</a> by a mixture of an annual progressive property tax (on real estate, financial, and professional assets, net of debts) and a progressive inheritance tax.</p><p>What I have in mind is that this minimum inheritance for all (which can also be referred to as a “universal capital endowment”) should be financed by a combination of annual wealth taxes and inheritance taxes and would constitute a relatively small part of total public expenditure. One can indeed envisage, in the context of the ideal tax system, revenues of a total of around 50% of national income — close to the current level in Western Europe, but this would be more fairly distributed, which would allow for possible future increases.</p><p>These would be composed of, on the one hand, a system of progressive property and inheritance taxes, which would bring in around 5% of national income and finance the universal capital endowment. On the other, we would have an integrated system of progressive income tax, social contributions and carbon tax — with an individual carbon card to protect low incomes and responsible behavior and to concentrate efforts on the highest individual emissions, which would be heavily taxed.</p><p>This would bring in a total of about 45% of national income and finance all other public expenditure. It would in particular articulate all social expenditure (education, health, pensions, social transfers, basic income, etc.) and environment-related measures (transport infrastructure, energy transition, thermal renovation, etc.).</p><p>“The just society is based on universal access to a set of fundamental goods that enable people to participate fully in social and economic life.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>Several points deserve to be clarified here. First of all, no valid environmental policy can be carried out if it is not part of a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2019/06/11/the-illusion-of-centrist-ecology/">global socialist project</a> based on the reduction of inequalities, the permanent circulation of power and property and the redefinition of economic indicators. I insist on this last point: there is no point in circulating power if we keep the same economic objectives. We therefore need to change the framework, both at the individual and local level (in particular with the introduction of an individual carbon card) and at the national level.</p><p>Gross domestic product must be replaced by the notion of national income, which implies deducting all capital consumption, including natural capital. Attention must focus on distributions and not on averages, and these indicators in terms of income (essential for building a collective standard of justice) must be complemented by environmental indicators (in particular regarding carbon emissions).</p><p>I would also stress that the “universal capital endowment” represents only a small share of total public spending, because the just society as I see it here is based above all on universal access to a set of fundamental goods — education, health, retirement, housing, environment, etc. — that enable people to participate fully in social and economic life and cannot be reduced to monetary capital endowment.</p><p>However, as long as access to these other fundamental goods is guaranteed, including of course access to a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2016/12/13/basic-income-or-fair-wage/">basic income system</a>, then the minimum inheritance for all represents an important additional component of a just society. The fact of owning 100,000 or 200,000 euros or dollars in wealth indeed changes a lot compared to owning nothing at all (or only debts). When you own nothing, you have to accept everything — any salary, any working conditions, almost anything — because you have to be able to pay your rent and provide for your family.</p><p>Once you have a small property, you have access to more choices: you can afford to refuse certain proposals before accepting the right one, you can consider setting up a business, you can buy a home and no longer need to pay rent every month. By thus redistributing property, we can help to redefine the whole set of relations of power and social domination.</p><p>I would also like to point out that the rates and amounts given here are for illustrative purposes only. Some people will consider excessive the tax rates in the 80-90% range that I propose to apply to the highest incomes, estates and assets. This is a complex debate, which obviously deserves extensive deliberation. I would simply like to recall that such rates have been applied in many countries during the 20th century (notably in the United States from 1930 to 1980) and that all the historical elements at my disposal lead me to conclude that the record of this experience is excellent.</p><p>This policy has not hindered innovation in any way, quite the contrary: growth in national income per capita in the United States was <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/F11.13.pdf">twice as low</a> between 1990 and 2020 (after fiscal progressivity was <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.brookings.edu/blog/up-front/2017/12/08/what-we-learned-from-reagans-tax-cuts/">halved under Reagan</a> in the 1980s) as it had been in the preceding decades. American prosperity in the 20th century (and more generally, economic prosperity in history) has been based on a clear educational lead and certainly not on an inequality lead.</p><p>“By redistributing property, we can help to redefine the whole set of relations of power and social domination.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>On the basis of the historical elements at my disposal, the ideal society seems to me to be one where everyone would own a few hundred thousand euros, where a few people would perhaps own a few million, but where the higher holdings (several tens or hundreds of millions and a fortiori several billions) would only be temporary and would quickly be brought down by the tax system to more rational and socially more useful levels.</p><p>Others will find the rates and amounts too timid. In fact, under the tax and inheritance system outlined here, young adults from modest backgrounds who currently inherit nothing at all would receive 120,000 euros, while wealthy young adults who currently inherit 1 million would receive 600,000 euros (after operation of the inheritance tax and the universal endowment). We are therefore a long way from the complete equalization of chances and opportunities, a theoretical principle that is often proclaimed but rarely applied consistently. In my opinion, it is possible and desirable to go much further.</p><p>In any case, the rates and amounts indicated here are for illustrative purposes only and are part of an exercise of reflection and deliberation on the ideal system that one wishes to build in the long-term. All of this does not prejudge the gradualist strategies that may be chosen here and there, depending on the particular historical and political contexts. For example, in the current French context, it can be considered that the first priority is to reintroduce a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2017/10/10/suppression-of-the-wealth-tax-an-historical-error/">modernized wealth tax</a> based on preprepared wealth declarations and much stricter control than in the past. This would at the same time reduce the property tax, which is a particularly burdensome and unfair wealth tax, especially for all indebted households in the process of becoming homeowners.</p><p><strong>Social Federalism: Toward A Different Organization Of Globalization</strong></p><p>Let’s say it again clearly: it is quite possible to move gradually toward participatory socialism by changing the legal, fiscal and social system in this or that country, without waiting for the unanimity of the planet. This is how the construction of the social state and the reduction of inequalities took place during the 20th century.</p><p>Educational equality and the social state can now be relaunched country by country. Germany and Sweden did not wait for authorization from the European Union or the United Nations to set up co-management, and other countries could do the same now. France’s wealth tax revenues were <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://piketty.pse.ens.fr/files/ideology/pdf/supp/FS14.20.pdf">growing at a brisk pace</a> before it was <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reuters.com/article/us-france-tax/macron-fights-president-of-the-rich-tag-after-ending-wealth-tax-idUSKCN1C82CZ">abolished in 2017</a>, which shows the extent to which the argument of widespread tax exile was a myth and confirms that it is possible to reintroduce a modernized wealth tax without delay.</p><p>In the United States, given the size of the country, governments can be even more ambitious. The new Democratic administration which took office in January 2021 will need to reconcile the country, especially <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.nytimes.com/spotlight/us-capitol-riots-investigations">after the events</a> at Capitol Hill, and this will require taking decisive steps in the direction of social justice and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2021/01/12/the-fall-of-the-u-s-idol/">redistribution</a>. I continue to believe that President Joe Biden’s team would do well to take up some of the key proposals made by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://berniesanders.com/issues/tax-extreme-wealth/">Bernie Sanders</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elizabethwarren.com/plans/ultra-millionaire-tax">Elizabeth Warren</a> during the U.S. presidential primary campaign, for instance, regarding the wealth tax on top billionaires. The U.S. federal government has the capability to effectively enforce such a tax, whose proceeds could help upgrade the modest U.S. welfare state.</p><p>“It is quite possible to move gradually toward participatory socialism without waiting for the unanimity of the planet.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>Having said that, it is quite clear that it is possible to go even further and faster by adopting an internationalist perspective and trying to rebuild the international system on a better basis. In general, to give internationalism a chance again, we need to turn our backs on the ideology of absolute free trade that has guided globalization in recent decades and put in place an alternative economic system, a model of development based on explicit and verifiable principles of economic, fiscal and environmental justice.</p><p>The important point is that this new model must be internationalist in its ultimate objectives but sovereigntist in its practical modalities, in the sense that each country, each political community, must be able to set conditions for the pursuit of trade with the rest of the world, without waiting for the unanimous agreement of its partners. The difficulty is that this universalist sovereignty will not always be easy to distinguish from the nationalist type of sovereignty that is currently gaining momentum.</p><p>I would like to emphasize once again here how the different approaches can be distinguished, which seems to me to be a central issue for the future. In particular, before considering possible unilateral sanctions against countries practicing social, fiscal and climate dumping (sanctions in any case must remain incentive-based and reversible), it is essential to propose to other countries a cooperative model based on universal values of social justice, reduction of inequalities and preservation of the planet.</p><p>This requires indicating precisely which transnational assemblies should be in charge of global public goods (climate, medical research, etc.) and common fiscal and climate justice measures (common taxes on the profits of large companies, the highest incomes, wealth and carbon emissions). This applies in particular at the European level, where there is an urgent need to move away from the unanimity rule and meetings behind closed doors. The proposals contained in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://tdem.eu/">Manifesto for the Democratization of Europe</a> make it possible to move in this direction, and the creation in 2019 of a Franco-German Parliamentary Assembly (unfortunately without real powers) shows that it is perfectly possible for a subgroup of countries to build new institutions without waiting for the unanimity of the other countries.</p><p>Beyond the European case, these discussions on social federalism also have a much broader scope. For example, the countries of West Africa are currently trying to redefine their common currency and definitively break away from colonial rule. This is an opportunity to put the West African currency at the service of a development project that is based on investment in youth and infrastructure, and not only for the mobility of capital and the richest.</p><p>“Gender parity must advance in tandem with social parity.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>Moreover, it is too often forgotten in Europe that the West African Economic and Monetary Union is in some ways more advanced than the eurozone. For example, in 2008 it introduced a directive <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://assets.publishing.service.gov.uk/media/5b18f76c40f0b634cfb505ce/Tax_Coordination_within_Regional_Economic_Communities_Africa.pdf">establishing</a> a common corporate tax base and obliging each country to apply a tax rate of between 25% and 30%, which the European Union has so far been unable to agree on. More generally, the new monetary policies set up at the global level over the past 10 years require a rethinking of the balance between monetary and fiscal approaches, and a comparative, historical and transnational perspective is again essential.</p><p>At the global level, I believe that social-federalism and transnational parliamentary assemblies will also be necessary to regulate international economic relations and design adequate financial, fiscal and environmental regulations (e.g., between the United States, Canada and Mexico; between the United States and Europe; between Europe and Africa and so on).</p><p><strong>For A Feminist, Multiracial And Universalist Socialism</strong></p><p>The participatory socialism I am calling for is based on several pillars: educational equality and the social state, the permanent circulation of power and property, social federalism and sustainable and fair globalization. On each of these points, it is essential to take stock without concession of the inadequacies of the various forms of socialism and social democracy experienced in the 20th century.</p><p>Among the many limitations of the multiple socialist and social-democratic experiences of the past century, it must also be emphasized that the issues of patriarchy and postcolonialism have not been sufficiently taken into account. The important point is that these different issues cannot be thought of in isolation from one another. They have to be dealt with within the framework of a comprehensive socialist project based on the real equality of social, economic and political rights.</p><p>Nearly all human societies up to the present day have been patriarchal societies in one way or another. Male domination has played a central and explicit role in all the inegalitarian ideologies that succeeded one another until the beginning of the 20th century, whether ternary, proprietarist or colonialist. Over the course of the 20th century, the mechanisms of domination became more subtle but no less real: formal equality of rights has gradually been established, but the ideology that a woman’s place is in the home reached its apogee in the prosperous 1945-1975 period, known as the “30 glorious years” in France. In the early 1970s, almost 80% of wage earners were men.</p><p>Here again, the question of indicators and their politicization is crucial. All too often, we are simply informed that the gender difference in pay for the same job is 15% or 20%. The problem is that women are not getting the same jobs at the top of their fields that men do. At the end of their careers, the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2016/11/07/inegalites-salariales-hommes-femmes-19-ou-64/">average pay gap</a> (which will then continue throughout retirement, not including career breaks) is actually 64%. If we look at access to the best-paid jobs, we can see that things change only very slowly: at the current rate, it would take until the year 2102 to reach parity.</p><p>In order to truly move away from patriarchy, it is essential to put in place binding, verifiable and sanctioned measures for positions of responsibility in companies, administrations, universities and political assemblies. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.fayard.fr/sciences-humaines/libres-et-egaux-en-voix-9782213717500">Recent work</a> has shown that this improved representation of women could go hand in hand with an improvement in the representation of disadvantaged social categories, which are currently virtually absent from assemblies. In other words, gender parity must advance in tandem with social parity.</p><p>“The participatory socialism I’m calling for will not come from the top.”</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#facebook">Facebook</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#twitter">Twitter</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.noemamag.com/#email">Email</a></p><p>The issue of gender discrimination must also be considered in relation to the fight against ethno-racial discrimination, particularly in terms of access to employment. This also involves the necessary collective and civic reappropriation of colonial and postcolonial history. Some people are surprised today to see demonstrators of all origins attacking the statues of slave traders that still adorn many <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npr.org/2020/06/09/872732137/how-a-police-killing-in-america-triggered-the-toppling-of-a-u-k-slave-trader-sta">European</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://abcnews.go.com/US/virginia-indiana-joining-taking-confederate-monuments/story?id=71066712">American cities</a>. Yet it is essential to consider the extent of this shared history.</p><p>In France, it is all too often ignored that Haiti had to pay back a considerable debt to the French state between 1825 and 1947, all in order to have the right to be free and to provide financial compensation to slave owners (according to the ideology of the time, they were unjustly deprived of their property). Today Haiti is seeking reparations from France for this iniquitous tribute; it is difficult not to agree with Haiti, and this issue should no longer be postponed, particularly when today restitution is still being organized for spoliations that took place during the two World Wars.</p><p>More generally, it is easy to forget that the abolition of slavery in France and the United Kingdom was always accompanied by the payment of compensation to the owners and never to the slaves themselves. Compensation to former slaves had been mentioned at the end of the U.S. Civil War (the famous “40 acres and a mule”), but nothing was ever paid out, not in 1865 or a century later, when legal segregation ended. In 1988, however, $20,000 in compensation was <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.congress.gov/bill/100th-congress/house-bill/442">awarded</a> to Japanese Americans unjustly interned during World War II. Compensation of the same type paid today to African Americans who were victims of segregation would have a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lemonde.fr/blog/piketty/2020/06/16/confronting-racism-repairing-history/">strong symbolic value</a>.</p><p>However, this legitimate and complex debate on reparations, which is essential to build confidence in a common standard of deliberation and justice, must be framed within a universalist perspective. In order to repair society from the damage of racism and colonialism, one cannot be satisfied with a logic based on eternal intergenerational compensation. Above all, we must also look to the future and change the economic system, based on the reduction of inequalities and equal access for all to education, employment and property. This should include a minimum inheritance for all regardless of their origins, in addition to compensation. The two perspectives, that of reparations and that of universal rights, should complement, not oppose, each other.</p><p>The same is true at the international level. The legitimate debate on reparations must take place in conjunction with a necessary reflection on a new universal system of international transfers. The pandemic can be an opportunity to reflect on a minimum health and education allocation for all the world’s inhabitants, financed by a universal right for all countries to a share of the tax revenues paid by the most prosperous economic actors around the world: large companies and households with high incomes and assets. This prosperity is, after all, based on a global economic system — and, incidentally, on the unbridled exploitation of the world’s natural and human resources for centuries. It therefore now requires global regulation to ensure its social and ecological sustainability.</p><p>Let’s conclude by insisting on the fact that the participatory socialism I’m calling for will not come from the top: it is useless to wait for a new proletarian vanguard to come and impose its solutions. The devices mentioned here aim to open the debate, never to close it. Real change can only come from the reappropriation by citizens of socioeconomic questions and indicators that allow us to organize collective deliberation. I hope that these words can contribute to this.</p><p><em>This is a modified excerpt from “</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bookshop.org/books/time-for-socialism-dispatches-from-a-world-on-fire-2016-2021/9780300259667"><em>Time For Socialism: Dispatches from a World on Fire, 2016-2021</em></a><em>” (Yale University Press, Oct. 26, 2021).</em></p>]]></content:encoded>
            <author>journeywest-eth@newsletter.paragraph.com (journeywest.eth)</author>
        </item>
    </channel>
</rss>