<?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>hashigo</title>
        <link>https://paragraph.com/@hashigo</link>
        <description>Optimism Support-NERDs🔴✨ | ZetaChain Ambassador</description>
        <lastBuildDate>Tue, 07 Apr 2026 10:19:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>hashigo</title>
            <url>https://storage.googleapis.com/papyrus_images/62e4d2c619bce5794e3c8a7cc35cac1b16342e069c0c948e4e606f82c1fae291.png</url>
            <link>https://paragraph.com/@hashigo</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Announcement of New Blog Series Launch]]></title>
            <link>https://paragraph.com/@hashigo/announcement-of-new-blog-series-launch</link>
            <guid>HeuvZjQ22ECXU07q6q5B</guid>
            <pubDate>Wed, 13 Sep 2023 02:52:57 GMT</pubDate>
            <description><![CDATA[EnglishRecently, I have started a new blog series related to Optimism. https://mirror.xyz/hashigo%F0%9F%94%B4.eth I would be delighted if you could follow it as well. As the latest post, I have written an article about blockchain and public goods. https://mirror.xyz/hashigo%F0%9F%94%B4.eth/06XgQHDyg3sbAglxn9IwOj0WTjMVPmszJ86hgEeYVRs As for this Mirror account, I plan to continue updating it irregularly as I have been doing. The topics I&apos;ll cover will also remain the same. I may even cove...]]></description>
            <content:encoded><![CDATA[<h1 id="h-english" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">English</h1><p>Recently, I have started a new blog series related to Optimism.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo%F0%9F%94%B4.eth">https://mirror.xyz/hashigo%F0%9F%94%B4.eth</a></p><p>I would be delighted if you could follow it as well. As the latest post, I have written an article about blockchain and public goods.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo%F0%9F%94%B4.eth/06XgQHDyg3sbAglxn9IwOj0WTjMVPmszJ86hgEeYVRs">https://mirror.xyz/hashigo%F0%9F%94%B4.eth/06XgQHDyg3sbAglxn9IwOj0WTjMVPmszJ86hgEeYVRs</a></p><p>As for this Mirror account, I plan to continue updating it irregularly as I have been doing. The topics I&apos;ll cover will also remain the same. I may even cover topics that are completely unrelated, but essentially, I&apos;ll post what I want to post.</p><p>Since I started publishing articles in English, people who are not Japanese speakers have also started reading my articles. I&apos;m very pleased to have readers from all around the world. Thank you for your continued support.</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">日本語</h1><p>最近、Optimismに関連したブログシリーズを新たに開始しました。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo%F0%9F%94%B4.eth">https://mirror.xyz/hashigo%F0%9F%94%B4.eth</a></p><p>もしよろしければ、そちらもフォローしていただけると嬉しいです。最新記事として、ブロックチェーンと公共財に関するブログ記事を投稿しました。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo%F0%9F%94%B4.eth/J_wJbzIqqd_6y7gyO5I2wEfquE0ZMfkA3zQfbTAusfU">https://mirror.xyz/hashigo%F0%9F%94%B4.eth/J_wJbzIqqd_6y7gyO5I2wEfquE0ZMfkA3zQfbTAusfU</a></p><p>一方、こちらのMirrorアカウントですが、今まで通り不定期更新を続ける予定です。取り扱うトピックも、これまで通りです。もしかしたら、全く関係ないトピックも扱うかもしれませんが、基本的に、ぼくが投稿したいものを投稿します。</p><p>最近、英語の記事の投稿を開始してから、日本語話者ではない方も記事を読んでくださるようになりました。世界中のいろいろな方に読んでいただけて、とても嬉しいです。これからも、どうぞよろしくお願いいたします。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
        </item>
        <item>
            <title><![CDATA[MultiDelegate]]></title>
            <link>https://paragraph.com/@hashigo/multidelegate</link>
            <guid>dFwnTUQge0mN3bqUoLXk</guid>
            <pubDate>Mon, 04 Sep 2023 01:05:13 GMT</pubDate>
            <description><![CDATA[IntroductionProjects related to blockchain often attempt to decentralize governance. In the governance of blockchain projects, &apos;governance tokens&apos; are often introduced to facilitate smooth consensus formation for the maintenance of the protocol. In particular, delegation mechanisms are introduced to secure the governance system. However, if the person to whom authority is delegated becomes unable to participate in governance, securing the governance system becomes challenging. In th...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduction" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Introduction</strong></h1><p>Projects related to blockchain often attempt to decentralize governance. In the governance of blockchain projects, &apos;governance tokens&apos; are often introduced to facilitate smooth consensus formation for the maintenance of the protocol. In particular, delegation mechanisms are introduced to secure the governance system. However, if the person to whom authority is delegated becomes unable to participate in governance, securing the governance system becomes challenging. In this article, I propose MultiDelegate as a mitigation measure.</p><h1 id="h-voting-and-delegation" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Voting and Delegation</strong></h1><p>Voting with governance tokens that lack a delegation mechanism takes place as follows:</p><ul><li><p>Token holders gain voting power proportional to the number of tokens they hold at a specific snapshot in time.</p></li><li><p>Token holders vote within a designated period and receive the results afterward.</p></li></ul><p>However, this has a significant drawback: those who own a large number of tokens can easily sway the voting results, thereby reducing the incentive for those with fewer tokens to vote. A decrease in voter participation leads to a lower proportion of tokens being used for voting. This reduction makes it easier for attackers to influence voting results, and it challenges the legitimacy of the vote.</p><p>The mechanism to mitigate this issue is delegation. In other words, token holders delegate their voting power to trusted community members. Those who only hold a small amount of tokens don&apos;t need to read through proposals and vote; they delegate to &quot;knowledgeable people they trust&quot; who will exercise their voting power on their behalf.</p><h1 id="h-issues-with-delegation" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Issues with Delegation</strong></h1><p>Delegation is an excellent solution to the problem of low participation rates in voting. However, if a person who has been delegated a large number of tokens becomes unable to participate in governance, the same problem re-emerges.</p><p>To provide a concrete example, I have been delegated tokens by multiple individuals in a certain DeFi protocol. The tokens delegated to me represent about 30% of the voting power in recently passed proposals. If I were to suddenly die or lose interest in governance, that 30% voting power would go unexercised. This is counterproductive when considering the original purpose of introducing a delegation system into governance.</p><p>Of course, this problem could be solved by frequently checking the voting status and re-delegating to someone else if the original delegate fails to vote. However, will those who only hold a small amount of tokens bother to do such a &quot;troublesome thing&quot;?</p><h1 id="h-proposal-for-multidelegate" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Proposal for MultiDelegate</strong></h1><h2 id="h-overview" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Overview</h2><p>Here, I propose MultiDelegate. MultiDelegate is a system where a token holder delegates to &quot;multiple&quot; trusted community members. If a token holder owns X tokens and has delegated to Y members, the voting power is distributed as X/Y. Moreover, the system introduces the following mechanism:</p><p>If, among the members delegated to, Z members do not vote on a certain proposal, the voting power becomes X/(Y-Z). In other words, as long as at least one of the delegated members votes on a proposal, all of the tokens held by that token holder will be used for voting. This distribution of voting power takes place for each proposal.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af9b6e036ef09fc2e860c220f63d70a6dd03335ee9e5d9f4e39a2826ea6a9592.png" alt="If a token holder holding N tokens delegates to 5 people, and 2 of them do not participate in voting for a proposal, the people who did vote will be delegated N/3 of the voting power from that token holder." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">If a token holder holding N tokens delegates to 5 people, and 2 of them do not participate in voting for a proposal, the people who did vote will be delegated N/3 of the voting power from that token holder.</figcaption></figure><h2 id="h-issues" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Issues</h2><p>MultiDelegate has the following issues:</p><ul><li><p>The voting power of each individual is only determined after the voting period has ended.</p></li><li><p>The mechanism is complex.</p></li></ul><h1 id="h-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Conclusion</strong></h1><p>Governance in blockchain is based on the spirit of decentralization. However, to address the issues highlighted by existing delegation systems, I propose MultiDelegate.</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0148e3c71147f3100a2c1ebb001ab207a10bfd630892af573af412698dafb073.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[マルチデリゲート]]></title>
            <link>https://paragraph.com/@hashigo/qJcEQ6HXTBW3nP0DS4ri</link>
            <guid>qJcEQ6HXTBW3nP0DS4ri</guid>
            <pubDate>Mon, 04 Sep 2023 00:55:52 GMT</pubDate>
            <description><![CDATA[はじめにブロックチェーンに関連するプロジェクトは、しばしばガバナンスの分散化の試みがされている。ガバナンスでは、ガバナンストークンと呼ばれる通貨の導入例が多く見られ、プロトコルの維持管理作業に関して円滑な合意形成を図る。特に、ガバナンスのセキュリティの確保のために委任の仕組みが導入されているが、委任された人がガバナンスに参加できなくなった場合、ガバナンスのセキュリティの確保が困難になる場合が考えられる。本記事では、その緩和策としてMultiDelegateを提案する。投票と委任委任の仕組みがないガバナンストークンによる投票は、以下のように行われる。トークンホルダーは、スナップショットが撮られた瞬間に保有するトークン量に比例した投票力を得る。トークンホルダーは投票期間内に投票を行い、投票期間後に結果を得る。ただ、これには大きな問題点がある。それは、大量にトークンを保有する人が投票結果を左右しやすいがために、少量しかトークンを保有しない人が投票するインセンティブが欠けてしまうという点だ。投票に参加する人の減少は、投票に利用されるトークンの割合の低下を招き、投票結果の正当性が得られにく...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">はじめに</h1><p>ブロックチェーンに関連するプロジェクトは、しばしばガバナンスの分散化の試みがされている。ガバナンスでは、ガバナンストークンと呼ばれる通貨の導入例が多く見られ、プロトコルの維持管理作業に関して円滑な合意形成を図る。特に、ガバナンスのセキュリティの確保のために委任の仕組みが導入されているが、委任された人がガバナンスに参加できなくなった場合、ガバナンスのセキュリティの確保が困難になる場合が考えられる。本記事では、その緩和策としてMultiDelegateを提案する。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">投票と委任</h1><p>委任の仕組みがないガバナンストークンによる投票は、以下のように行われる。</p><ul><li><p>トークンホルダーは、スナップショットが撮られた瞬間に保有するトークン量に比例した投票力を得る。</p></li><li><p>トークンホルダーは投票期間内に投票を行い、投票期間後に結果を得る。</p></li></ul><p>ただ、これには大きな問題点がある。それは、大量にトークンを保有する人が投票結果を左右しやすいがために、少量しかトークンを保有しない人が投票するインセンティブが欠けてしまうという点だ。投票に参加する人の減少は、投票に利用されるトークンの割合の低下を招き、投票結果の正当性が得られにくくなったり、攻撃者が投票結果を左右しやすい状況を作りやすくなったりする。</p><p>この問題点を緩和する仕組みが、委任である。つまり、トークンホルダーは信頼しているコミュニティメンバーに委任をするのである。少量しかトークンを保有しない人は、わざわざ提案を読んで投票する必要がなく、「信頼している詳しい人」が投票力を代わりに行使してくれるのである。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">委任の問題点</h1><p>このように、委任は投票に利用されるトークンの割合の低下を緩和する優れた方策である。しかし、たくさんのトークンを委任された人がガバナンスに参加できない状況になった場合、投票に利用されるトークンの割合が低下してしまうという問題点がある。</p><p>具体例を示そう。私はあるDeFiプロトコルにおいて、複数名から委任されている。委任されたトークンの量は、最近通過した提案に投じられた投票力のうち、約3割にあたる量である。もし私が突然死んでしまったり、ガバナンスに興味を持たなくなってしまったりした場合、その約3割の投票力が行使されなくなってしまうのである。これは、ガバナンスに委任のしくみを導入した目的を考えれば本末転倒である。</p><p>もちろん、頻繁に投票状況を確認し、もし委任先が投票しなくなったら違う人に委任すればこの問題は解決する。しかし、そもそも少量しかトークンを保有しない人はそのような「めんどくさいこと」をするだろうか。</p><h1 id="h-multidelegate" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">MultiDelegateの提案</h1><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">概要</h2><p>そこで、MultiDelegateを提案する。MultiDelegateは次のような仕組みである。それは、トークンホルダーが「複数の」信頼しているコミュニティメンバーに委任をするというものである。あるトークンホルダーが保有するトークンをXとし、委任したメンバーの人数をYとした場合、投票力はX/Yに分配される。さらに、トークンのすべてを投票力に変換するために、次のような仕組みを導入する。</p><p>それは、もし委任したメンバーのうちZ人がある提案に投票しなかった場合、投票力をX/(Y-Z)に分配するというものだ。つまり、委任したメンバーのうち、最低でも1人が提案に投票すれば、そのトークンホルダーが保有するトークンのすべてが投票力を行使するのである。この投票力の分配は、各提案ごとに行われる。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af9b6e036ef09fc2e860c220f63d70a6dd03335ee9e5d9f4e39a2826ea6a9592.png" alt="もしN枚のトークンを保有するトークンホルダーが5人に委任し、ある提案において2人が投票に参加しなかった場合、投票した人はそのトークンホルダーからN/3の投票力が委任される。" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">もしN枚のトークンを保有するトークンホルダーが5人に委任し、ある提案において2人が投票に参加しなかった場合、投票した人はそのトークンホルダーからN/3の投票力が委任される。</figcaption></figure><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">問題点</h2><p>MultiDelegateには以下の問題点が存在する。</p><ul><li><p>投票期間が終了するまで、個々人の投票力が確定しない。</p></li><li><p>仕組みが複雑である。</p></li></ul><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">結言</h1><p>ブロックチェーンにおけるガバナンスは、分散を求める精神に基づいている。しかし、既存の委任システムでは一部の問題点が浮き彫りになっており、その解決のためにMultiDelegateを提案した。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0148e3c71147f3100a2c1ebb001ab207a10bfd630892af573af412698dafb073.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Strategの紹介]]></title>
            <link>https://paragraph.com/@hashigo/strateg</link>
            <guid>jPapQ8UZH5MqDSShIb5j</guid>
            <pubDate>Sat, 05 Aug 2023 19:55:52 GMT</pubDate>
            <description><![CDATA[この記事についてこの記事は、以下の翻訳になります。 https://mirror.xyz/blog.strateg.eth/geBDRlFKYSiIDYNUyh5be-6FR1-b1YftIW_pRabKG88はじめにMurphy Labsチームは、オムニチェーンソーシャルイールドインフラストラクチャであるStrategを紹介します。 ここ数年、DeFiは主要なプロトコルによって急速なペースで成長し、パーミッションレスで信頼性の高いオンチェーン金融サービスを利用できるようになりました。この成長には、多数の革新的なプロトコルとフォークが伴い、DeFiのエコシステムはますます複雑になる一方で、プロトコルのセキュリティはますます重要な関心事となりました。 DeFiを利用しようとする基本的なユーザーや企業は、今日、これらのプロトコルを利用し、相互作用を理解するだけでなく、コンポーザビリティという主要なイノベーションの恩恵を受けるために、いくつかの問題に直面しています。 シンプルでセキュアな方法で簡単にポジションを管理するには？ 「ダークフォレスト」で道を見失わないためには？ 解決策を待ち...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">この記事について</h1><p>この記事は、以下の翻訳になります。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/blog.strateg.eth/geBDRlFKYSiIDYNUyh5be-6FR1-b1YftIW_pRabKG88">https://mirror.xyz/blog.strateg.eth/geBDRlFKYSiIDYNUyh5be-6FR1-b1YftIW_pRabKG88</a></p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">はじめに</h1><p>Murphy Labsチームは、オムニチェーンソーシャルイールドインフラストラクチャであるStrategを紹介します。</p><p>ここ数年、DeFiは主要なプロトコルによって急速なペースで成長し、パーミッションレスで信頼性の高いオンチェーン金融サービスを利用できるようになりました。この成長には、多数の革新的なプロトコルとフォークが伴い、DeFiのエコシステムはますます複雑になる一方で、プロトコルのセキュリティはますます重要な関心事となりました。</p><p>DeFiを利用しようとする基本的なユーザーや企業は、今日、これらのプロトコルを利用し、相互作用を理解するだけでなく、コンポーザビリティという主要なイノベーションの恩恵を受けるために、いくつかの問題に直面しています。</p><p>シンプルでセキュアな方法で簡単にポジションを管理するには？ 「ダークフォレスト」で道を見失わないためには？ 解決策を待ち望んでいた多くの問題が横たわっています。</p><p>ついにStrategが登場しました。夜中の灯台のように、すべての人を照らし、使いやすさとリターンの最適化をもたらし、DeFiをより身近なものにし、知っている人と知りたくない人を結びつけることで普及を加速させます。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">オムニチェーン・ソーシャル・イールド・インフラストラクチャー</h1><p>Strategは、DeFiエコシステム内で利回りを生み出す方法に革命を起こす最先端のプラットフォームです。Strategは、革新的なオムニチェーン・インフラストラクチャを通じて、複数のチェーンにまたがる複雑な利回り戦略を簡単に作成・実行する能力をユーザーに提供し、同時にこれらの戦略をそれぞれのコミュニティ、ユーザー、顧客と共有する方法を容易にします。</p><p>Strategは、あらゆるチェーンのあらゆるプロトコルを介して利益を獲得するシームレスな体験をユーザーに提供し、これまで以上に簡単に資産を活用できるようにします。Strategは、利回りの最大化、リスクの最小化、DeFi空間における新たなビジネスチャンスの開拓など、ユーザーがどのような目的を達成するために必要なツールやインフラを提供します。Strategは、高度な利回り戦略へのアクセスを民主化し、DeFiのパワーを活用することで、状況を一変させ、投資家とストラテジスト双方に新たな可能性を解き放つ態勢を整えています。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/840a571e98d93752a9b38c09188a27098e68bd896ce359c0f6187fa284dbeb89.png" alt="create, share, earn." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">create, share, earn.</figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">投資家とストラテジストをつなぐ</h1><p>DeFiの魅力の一つは、異なるプロトコルを織り交ぜて、いわゆる複雑な戦略を構築できることです。最初のプロトコルに資産を預け、それを担保に借り入れを行い、最終的にスワップや流動性プールへの預け入れを行い、最終的に満足のいく利回りを得るという複雑な行動は、ユーザーが収益機会を最大化することを可能にします。これらの戦略は、使用するプロトコルの数、コードの成熟度、または戦略自体のアクティブ管理に使用するツールによって、多かれ少なかれリスクを伴います。そのため、途中で道に迷ったり、資本の面で深刻な結果をもたらしかねない間違いを犯したりしがちです。</p><p>一般化すると、この時点で2つの主なタイプのプロフィールが思い浮かびます。</p><p>経験の浅いDeFiユーザーは、ラビットホールに深く飛び込もうとするすべてのユーザーが直面するいくつかの問題にすぐに気づくでしょう。主要なプロトコルの調査と更新、最高の利回りを見つけるための知識、日々登場し、コンポーザビリティをより複雑にしている新しいプロトコル、細かいリスク管理、これらはすべて、彼がリテールであろうとプロであろうと、潜在的な投資家の前に立ちはだかる障壁です。</p><p>これらすべてのデータの分析とポジションの管理は、多くの新規参入者の意欲をそぐ効果があり、ファイナライズに取り組もうと思ったとき、これらは非常に時間のかかる作業であることに気づきます。DeFiを完全に理解するのに必要なスキルを持つ人でさえ、この技術監視とポジションの監視という作業に投資しなければならない時間の多さに尻込みしてしまいがちです。</p><p>そこでStrategは、このようなタイプのユーザーが、ノンカストディアルな方法で資金を運用し、リスク選好度を考慮しながらDeFiに接することができるように、これらの作業をすべて委任し、他のことに専念できるようにします。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/73eef4259ff2db5e81628fc1a15f135c8568e7f60a04a24ceec17a7e3066b0ae.png" alt="create." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">create.</figcaption></figure><p>その一方で、DeFiにもたらされたすべての新機能を興味深く歓迎し、お気に入りのプロトコルのアップデートを喜ぶ愛好家や専門家もいます。</p><p>そのため、多くの質問が寄せられます。いくら投資すればいいの？ それは安全ですか？ これらの理由から、ストラテジストの仕事は、金銭的にも評判の点からも、よりやりがいのある個人的な活動なのです。彼らはしばしば研究者であり、&quot;DeFi degens&quot;であり、またはソーシャルネットワーク（Twitter、YouTube、Lensなど）で、彼らのコミュニティや投資家仲間に、研究の成果を共有する専門家です。</p><p>今日まで、このような知識や支援をシンプルな方法で収益化する本当の方法はありませんでした。</p><p>Strategでは、専門知識を持つ人々と、ストラテジストの専門知識から利益を得るために利益を共有する準備ができている人々との出会いが、<strong>トラストレスでパーミッションレスのまま</strong>、管理された方法で投資が行われるWin-Winの状況を作り出します。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9d912d2e8e907ce7a5a4b1b472093d42afd451c75d75cf6ddc123da8c09c59ba.png" alt="share." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">share.</figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">他者のために価値を創造し、対価を得ること</h1><p>ストラテジストは、自分のコミュニティと共有するストラテジーを作成することで、自分の研究と能力を収益化します。ストラテジーのパフォーマンスに応じて、ストラテジストは「クリエイターフィー」と呼ばれる成果報酬を受け取ります。これにより、ストラテジストは自分の時間と知識を収益化することができ、同時にコミュニティにとって最も効率的なストラテジーを構築することができます。</p><p>Strategを利用することで、ユーザーエクスペリエンスが簡素化されるだけでなく、ユーザーは自分の資金を預けることなく、自分が知っていて、そのスキルや評判が真剣さや質の高さを保証している個人や団体のストラテジーに従って投資することができるため、投資家にとって信頼が再び高まります。</p><p>ストラテジーは、DeFiとそのメカニズムをマスターしているにもかかわらず、これらのストラテジーのコード化方法を知ることが不可能であったり、コードに欠陥があったりするリスクによって制限されている人々を対象としています。</p><p>彼らは最終的に、他者と自分自身のために価値を生み出しながら、知識を共有する方法を見つけるのです。インフルエンサーやオピニオン・リーダーが、パンプ＆ダンプ以外の方法で、コミュニティとの関係で自分たちに報酬を支払うことができるのです。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d39af74e85fc183b39ee57f285f0806174850f6b7e67ed780da59d7c221799fa.png" alt="earn." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">earn.</figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">イールドの戦場の真ん中で</h1><p>Strategでは、ストラテジストは戦略を展開する際に、コミュニティのニーズに合わせて多くのパラメータを設定することができます。このトピックについては、今後の記事で詳しく説明し、私たちが選択した技術的な特殊性と、それらがどのように様々な設定を可能にするのかを理解したいと思います。</p><p>Strategへの投資はかつてないほど簡単で、分散化された方法で最大限のタスクを自動化することで、各投資家が資金を完全にコントロールできるようになっています。</p><p>利益は投資家、ストラテジスト、プロトコル、自動アクションの間で共有され、高度な分散化が保証されます。</p><p>今後の記事では、Strategの革新的なトークノミクスと、価値がどのように捕捉され、プロトコルのすべてのプレーヤーの間で再分配されるかについても詳しく説明します。</p><p>以下は、ストラテジーの価値分配の例です。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bf6cc031b40bf7a6314a53679d9e153167a7760aae1d7d807790216ac85e9cd4.png" alt="strategy revenues." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">strategy revenues.</figcaption></figure><h2 id="h-wen-strateg" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Wen Strateg?</strong></h2><p>Strategは、9か月に及ぶ研究開発の成果です。私たちは、私たちが作ってきたものをコミュニティに紹介できることにとても興奮しています。これからの数週間は魅力的な発表が目白押しなので、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://twitter.com/strategprotocol">Twitter</a>で私たちをフォローしたり、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/89EtrkBYtQ">Discord</a>や<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/strategprotocol">Telegram</a>のコミュニティ・グループに参加したり、私たちの<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://strateg.io/">ウェブページ</a>から目を離さないでください。また、あなたは私たちの<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zealy.io/c/strateg/">Zealyクエスト</a>に参加することができますし、プロトコルに早期に投資した人に何が起こるか誰が知っていますか？</p><p>さらに、Strategの機能を利用することに興味をお持ちのDeFiプロトコルの方は、こちらの<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forms.gle/cvn9BRaFdqzyiPfV7">フォーム</a>にご記入の上、私たちのプラットフォームへのプロトコルの展開についてご相談ください。</p><p>私たちは、Strategと私たちの仕事を共有し、どのような戦略が実行されるかを見ることを楽しみにしています。</p><p><strong>On your marks. Create, Share, Earn.</strong></p><p>この記事は<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lenster.xyz/posts/0xf0af-0x04">Lens</a>に掲載されています。</p><p><strong>LINKS:</strong></p><ul><li><p><strong>Discord</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/89EtrkBYtQ">https://discord.gg/89EtrkBYtQ</a></p></li><li><p><strong>Twitter</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StrategProtocol">https://twitter.com/StrategProtocol</a></p></li><li><p><strong>Lens</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lensfrens.xyz/Strateg.lens">https://www.lensfrens.xyz/Strateg.lens</a></p></li><li><p><strong>Telegram</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/strategprotocol">https://t.me/strategprotocol</a></p></li><li><p><strong>Zealy</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zealy.io/c/strateg/">https://zealy.io/c/strateg/</a></p></li><li><p><strong>Guild</strong> : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://guild.xyz/strateg">https://guild.xyz/strateg</a></p></li></ul>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9a2a55c579b979e82ec0bdb8652297a8113252924f32c0b8cfe03207d2ec25d0.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Let the Blockchains Play Rock-Paper-Scissors!]]></title>
            <link>https://paragraph.com/@hashigo/let-the-blockchains-play-rock-paper-scissors</link>
            <guid>2WA7UKh8e99RXIFWXiUF</guid>
            <pubDate>Wed, 19 Jul 2023 23:27:37 GMT</pubDate>
            <description><![CDATA[Rock-Paper-Scissors!Why not let the blockchain engage in a game of rock-paper-scissors? The rules are simple: deploy rock-paper-scissors contracts on N chains, have them interact with each other, and determine the winner at the end. Sounds easy, doesn&apos;t it? Let&apos;s give it a shot!ObjectiveThe aim of this article is to offer you a glimpse into the experience of developing applications with crosschain messages, specifically through playing rock-paper-scissors between blockchains. But do...]]></description>
            <content:encoded><![CDATA[<h1 id="h-rock-paper-scissors" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Rock-Paper-Scissors!</strong></h1><p>Why not let the blockchain engage in a game of rock-paper-scissors? The rules are simple: deploy rock-paper-scissors contracts on N chains, have them interact with each other, and determine the winner at the end. Sounds easy, doesn&apos;t it?</p><p>Let&apos;s give it a shot!</p><h1 id="h-objective" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Objective</strong></h1><p>The aim of this article is to offer you a glimpse into the experience of developing applications with crosschain messages, specifically through playing rock-paper-scissors between blockchains. But don&apos;t worry, we won&apos;t delve deep into programming and development as they&apos;re not the main focus of this tale!</p><h1 id="h-setting-the-scene" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Setting the Scene</strong></h1><p>The scenario is set as follows:</p><ul><li><p>The developer deploys the contract on N chains and specifies that the rock-paper-scissors game will start &quot;at a certain time&quot;. Picture this peculiar scene where a developer maintains the contract solo, and then engages in a game of rock-paper-scissors with their own contract.</p></li><li><p>For simplicity, we will not consider session IDs. Simply put, a single round of rock-paper-scissors is played, and even if players tie, there&apos;s no rematch. Once you&apos;ve played rock-paper-scissors, you won&apos;t play again.</p></li><li><p>A generic crosschain messaging protocol (CCMP) is used for communication between blockchains. LayerZero is a well-known example.</p></li></ul><p>Then, the contracts operate as follows:</p><ul><li><p>When the time comes, the first step is to decide on a move. For simplicity, the contract generates a random value (note) to determine the move, and the remainder divided by 3 is used to discern the move. For instance, if the remainder is 1, it&apos;s rock; if it&apos;s 2, it&apos;s scissors; if it&apos;s divisible by 3, it&apos;s paper.</p></li><li><p>The contract then utilizes CCMP to inform the opponent&apos;s chain of its move.</p></li><li><p>Simultaneously, the contract receives information about the opponent&apos;s move from their chain. Given the rules of rock-paper-scissors, it&apos;s evident that the outcome is dependent on the combination of moves played. Therefore, once everyone&apos;s moves are known, the winner can be determined. Importantly, in the event of a tie, there&apos;s no rematch.</p></li><li><p>Since a single developer deploys the contract, there&apos;s no need for secrecy about their move. In other words, we don&apos;t account for the possibility of being caught off guard.</p></li></ul><p>With these conditions set, let&apos;s delve deeper into the message exchange.</p><p>Note: The blockchain fundamentally does not support random value generation. However, for the sake of simplicity, we&apos;ll assume it here…</p><h1 id="h-frequency-of-message-communication" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Frequency of Message Communication</strong></h1><h2 id="h-ccmp-functions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>CCMP Functions</strong></h2><p>The CCMP utilized here is presumed to possess the following features:</p><ul><li><p>It&apos;s compatible with all chain types.</p></li><li><p>Messaging occurs between two chains. It&apos;s a one-way exchange, analogous to letter communication, not a two-way dialogue.</p></li><li><p>If the message doesn&apos;t reach the recipient, it has the ability to notify the sender of an unreachable error.</p></li><li><p>Each message sent incurs a gas cost.</p></li></ul><h2 id="h-estimating-the-number-of-transmissions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Estimating the Number of Transmissions</strong></h2><p>Assume that all chains are on par with each other. We aren&apos;t considering the presence of a game master who oversees the game. Focusing on a specific chain, how often will that chain send a message?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7eea411aecde8eb57b219819cad7640123f9a6687d84d4bf4c6e5d88ee124292.png" alt="Number of times a message is transmitted for rock-paper-scissors." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Number of times a message is transmitted for rock-paper-scissors.</figcaption></figure><p>Given that it sends a message to every chain except its own, each chain sends a message N-1 times. With a total of N such chains, the number of message transmissions in this game is N(N-1) times. With the N squared term, we can expect the gas price to surge as the number of chains increases.</p><p>The solution is to establish a game master. In other words, participants submit their moves to the game master&apos;s chain and receive the computed results from them. This reduces the number of message transmissions from N squared to a linear number.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e3afca2743ca05d77be87285f5fb68bbb261f207ed2c84ded775ab1e71710087.png" alt="When a game master is set, the number of message transmissions is at most an integer multiple of N." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">When a game master is set, the number of message transmissions is at most an integer multiple of N.</figcaption></figure><h1 id="h-what-happens-if-a-participant-exits-mid-game-during-rock-paper-scissors" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What Happens If a Participant Exits Mid-Game During Rock-Paper-Scissors?</strong></h1><h2 id="h-what-is-seat-departure" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What is Seat Departure?</strong></h2><p>Let&apos;s consider a scenario where a problematic chain exits mid-game during rock-paper-scissors. Specifically, the network goes down while the game is ongoing. In such a case, can rock-paper-scissors still operate?</p><h2 id="h-considering-the-impact-of-seat-departure" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Considering the Impact of Seat Departure</strong></h2><p>Assume all chains are on an equal footing (Let&apos;s disregard the game master for now!).</p><p>We aim to consider the potential situation, but before we do, let&apos;s recall this statement:</p><ul><li><p>If the message doesn&apos;t reach the recipient, it has the ability to notify the sender of an unreachable error. (From the CCMP Functions section)</p></li></ul><p>Therefore, if a message fails to reach the destination chain, it can be inferred that the destination chain has exited the game, and the source chain can continue without the departed chain. It would be ideal if everyone could be informed when the absence of the exited chain is recognized. (This, however, would incur additional gas costs).</p><p>But how can other chains ascertain that a chain that didn&apos;t send a message initially is in an &quot;absent&quot; state? To determine this, a process stating, &quot;If a chain doesn&apos;t send a message after a certain time frame, it&apos;s considered absent,&quot; needs to be implemented. Otherwise, no decision on &quot;absence&quot; can be made.</p><p>At this point, some may have specific concerns, such as what happens if a player exits (fails) while transmitting their move continuously to the opponent. Let&apos;s consider the situation where Player A exits while players A to E are engaged in rock-paper-scissors. Here, the following issues may arise:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/072dd634f762ba637fc000685eb50df8bc31ae155bf7fecea39f62bc2058a948.png" alt="If chain A sends some of its own information to some and leaves the seat, confusion arises." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">If chain A sends some of its own information to some and leaves the seat, confusion arises.</figcaption></figure><p>In this scenario, we&apos;re considering the case where &quot;Chain A begins transmitting its move information after acknowledging its opponent&apos;s move.&quot; In this situation, the derived game result differs from chain to chain. It&apos;s challenging to assert that a rock-paper-scissors game has been successfully played in such a case. To avoid this, making all chains agree on the game results&apos; consistency could be an option, but this would entail additional gas costs. If the results aren&apos;t consistent, the developer would need to decide in advance whether to invalidate the game and revert it or force a majority vote to establish the outcome.</p><p>As discussed, considering irregular conditions like failures makes it hard to encapsulate crosschain exchanges within an application with atomicity (i.e., the only two options are to complete the exchange or revert to the original state in case of a problem).</p><h1 id="h-future-expansion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Future Expansion</strong></h1><p>Further development could include the introduction of session IDs and a rematch feature for rock-paper-scissors. If an appealing chain emerges in the future, and you wish to include that chain in the rock-paper-scissors game, what steps would you need to undertake?</p><p>The answer is, &quot;You&apos;ll need to modify the contracts of all pre-existing chains.” The existing contracts must incorporate the ability to interact with the newly added chains. That&apos;s substantial work.</p><h1 id="h-summary" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Summary</strong></h1><p>As discussed, applications employing crosschain messaging face the drawback that the more sophisticated the functionality and the more chains supported, the more messages required exponentially. This is because the state must be synchronized across chains, and man-hours tend to balloon when considering future scalability.</p><p>For instance, how could one borrow money on chain D using tokens from chains A, B, and C as collateral? It is anticipated that creating a function that allows borrowing money, which checks the value of assets deposited as collateral on each chain based on the oracle, would be challenging. (And there are plenty of other features in a lending protocol, right?)</p><p>Therefore, current applications using crosschain messaging are limited to:</p><ul><li><p>Applications where two (or a few) chains interact (like bridges).</p></li><li><p>Applications where one chain manages almost all states (as in a rock-paper-scissors game with a game master in this article).</p></li></ul><p>Crosschain messaging is an attractive feature, but it is basically a heavy burden on the developer.</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0f9b896349cf0368a3f8ec803c42037e74a8a38ab5ac7d5c496535873eb6554d.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ブロックチェーン間でじゃんけんをしよう！]]></title>
            <link>https://paragraph.com/@hashigo/b2aYEApZseIjI8g8bsco</link>
            <guid>b2aYEApZseIjI8g8bsco</guid>
            <pubDate>Wed, 31 May 2023 15:12:18 GMT</pubDate>
            <description><![CDATA[さっそくですがブロックチェーン間でじゃんけんゲームをしてみませんか？ ルールは簡単で、N個のチェーンにじゃんけんのコントラクトを実装し、お互いに通信しながらじゃんけんを実施し、最後に結果を取得します。なんだか、とっても簡単な話に聞こえますよね？ それではやってみましょう！目的本記事では、ブロックチェーン間でじゃんけんをすることを通して、クロスチェーンメッセージを使ったアプリケーションの開発体験を垣間見ることを目的としています。といっても、プログラミングや開発を主軸とした話ではないので、身構える必要はありませんよー舞台設定舞台は次のように設定します。開発者はN個のチェーンにコントラクトを実装し、「ある時間になったら」じゃんけんゲームを始めるように定義します。一人の開発者が勝手にコントラクトを整備して、勝手にじゃんけんさせるという異様な光景を想定してください。簡単のためにセッションIDは考えません。要は、じゃんけんは一回限りで、あいこになっても再戦しません。一回じゃんけんしたら、二度とじゃんけんをしません。ブロックチェーン間のコミュニケーション手段として、汎用クロスチェーンメッセージ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">さっそくですが</h1><p>ブロックチェーン間でじゃんけんゲームをしてみませんか？ ルールは簡単で、N個のチェーンにじゃんけんのコントラクトを実装し、お互いに通信しながらじゃんけんを実施し、最後に結果を取得します。なんだか、とっても簡単な話に聞こえますよね？</p><p>それではやってみましょう！</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">目的</h1><p>本記事では、ブロックチェーン間でじゃんけんをすることを通して、クロスチェーンメッセージを使ったアプリケーションの開発体験を垣間見ることを目的としています。といっても、プログラミングや開発を主軸とした話ではないので、身構える必要はありませんよー</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">舞台設定</h1><p>舞台は次のように設定します。</p><ul><li><p>開発者はN個のチェーンにコントラクトを実装し、「ある時間になったら」じゃんけんゲームを始めるように定義します。一人の開発者が勝手にコントラクトを整備して、勝手にじゃんけんさせるという異様な光景を想定してください。</p></li><li><p>簡単のためにセッションIDは考えません。要は、じゃんけんは一回限りで、あいこになっても再戦しません。一回じゃんけんしたら、二度とじゃんけんをしません。</p></li><li><p>ブロックチェーン間のコミュニケーション手段として、汎用クロスチェーンメッセージングプロトコル（以下CCMPとします）を使用します。具体例をあげるなら、LayerZeroなんかが有名でしょうか。</p></li></ul><p>そして、コントラクトは次のような動きをします。</p><ul><li><p>時間が来たら、まず自分の手を考えます。簡単のために、コントラクトは手を出すためにランダムな値（注）を生成し、3で割った余りで自分の手を考えます。例えば、1余ったらグー、2余ったらチョキ、割り切れたらパーといった感じです。</p></li><li><p>そしたら、コントラクトはCCMPを使って対戦相手のチェーンに自分の手を知らせます。</p></li><li><p>それと同時に、コントラクトは対戦相手のチェーンから手の情報を受け取ります。「出た手の組み合わせによって勝敗状況はどうなるのか」ということはじゃんけんのルールから自明なので、全員の手がわかったら勝敗がわかります。繰り返しますが、あいこになっても再戦しません。</p></li><li><p>一人の開発者がコントラクトを実装するので、自分の手を秘匿化する必要はありません。つまり、後出しじゃんけんされるリスクは考えません。</p></li></ul><p>条件が出そろいました！ メッセージのやり取りについて、もうちょっと深く考えてみましょう。</p><p>注: ブロックチェーンは基本的にランダムな値の生成に対応してないのですが、ここは簡単のために…</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">メッセージの伝達回数</h1><h2 id="h-ccmp" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">CCMPの機能</h2><p>ここで使用するCCMPは、次のような機能を有するとします。</p><ul><li><p>あらゆるチェーンに対応している。</p></li><li><p>メッセージングは二者間のチェーンで行われる。それは双方向ではなく、手紙のように一方的なやり取りである。</p></li><li><p>宛先がメッセージを受け取れなかった場合、送信者に未到達エラーを通知する機能がある。</p></li><li><p>メッセージを送信するごとにガス代がかかる。</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">伝達回数を見積もる</h2><p><strong>すべてのチェーンが互いに対等な立場だとします。</strong></p><p>つまり、ゲームを取り仕切るゲームマスターのような存在は考えないものとします。ある特定のチェーンに注目したとき、そのチェーンは何回メッセージを送ることになるのでしょうか。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6fe55fef3e84d67c5235911d3975eaa955926bca62a46ba4bf5faf913bbb202a.png" alt="じゃんけんのためのメッセージの伝達回数．" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">じゃんけんのためのメッセージの伝達回数．</figcaption></figure><p>このように、自分以外のチェーンにメッセージを送るので、そのチェーンはN-1回メッセージを送ることになります。このようなチェーンは合計N個存在するので、このゲームにおけるメッセージの伝達回数はN(N-1)回です。Nの2乗の項が出てきてしまったので、チェーンが増えれば増えるほど、ガス代が跳ね上がることが予想されます。</p><p>これを解決するには、ゲームマスターを設定します。つまり、対戦者はゲームマスターのチェーンに自分の手を提出し、ゲームマスターからはじき出される結果を受け取るという算段です。これにより、メッセージの伝達回数はNの2乗から線形に削減されます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ab975f80519b123e3104487511cf44530e73b0e9be71fe811389d46de5405844.png" alt="ゲームマスターを設定すると、メッセージの伝達回数は高々Nの整数倍となる．" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">ゲームマスターを設定すると、メッセージの伝達回数は高々Nの整数倍となる．</figcaption></figure><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">じゃんけんの途中で離席してしまう場合</h1><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">離席とは</h2><p>ここで、じゃんけんの途中で離席してしまう困ったチェーンがいることを考えましょう。具体的には、じゃんけんをしている途中で、ネットワークがダウンしてしまうような状況です。そのような場合でも、じゃんけんは成立するのでしょうか。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">離席の影響を考える</h2><p><strong>すべてのチェーンが互いに対等な立場だとします。</strong>（ゲームマスターの存在はいったん忘れてください！）</p><p>この場合、どういった状況になると困るのかを考えたいのですが、その前にこの一文を思い出しましょう。</p><ul><li><p>宛先がメッセージを受け取れなかった場合、送信者に未到達エラーを通知する機能がある。（CCMPの機能の節より）</p></li></ul><p>よって、メッセージが到達しなかった場合は、宛先のチェーンが離席したと考えることができるので、送信元のチェーンは離席したチェーン抜きでゲームを続行できます。離席したチェーンの存在がわかったらみんなに通知できればなおよいですね。（その分ガス代がかかりますが）</p><p>しかしながら、そもそもメッセージを送信しなかったチェーンを、ほかのチェーンはどのように離席状態であると判断するのでしょうか。これには、「ある時間経過してもメッセージを送ってこないチェーンは、離席したものと考える」という処理を実装する必要があります。そうしないと、一向に離席判定を下すことができません。</p><p>と、ここである懸念が浮かんでくる方がいるのではないでしょうか。例えば、自分の手を対戦相手に続けて送信している途中で離席（障害）が発生してしまった場合です。チェーンA~Eの5人がじゃんけんをする途中で、Aが離席してしまう場合を考えてみましょう。そうすると、次のような困ったことが起こる可能性があります。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5e9233cd051091d42e13d8019428efd28ddcf6585bb89066f5664b52d3cebd46.png" alt="チェーンAが一部に自分の手の情報を送って離席してしまうと、混乱が生じる．" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">チェーンAが一部に自分の手の情報を送って離席してしまうと、混乱が生じる．</figcaption></figure><p>この図は、「チェーンAが対戦相手の手の情報を知ってから、自分の手の情報を送り始める」という状況を考えています。このとき、導びかれるゲームの結果がチェーンによって異なってしまいます。とてもじゃんけんゲームが成立しているとはいいがたい状況です。こうならないようにするためには、ゲームの結果が一致しているかどうかを、すべてのチェーン間で合意を取ることで解消できますが、そうしたらまた余計なガス代がかかってしまいます。また、もし結果が一致してなかったとしたら、ゲームを無効にして切り戻すのか、多数決をとって強引に結果を決めるのか、開発者はあらかじめ決めておかなければなりません。</p><p>以上のように、障害のようなイレギュラーな状態を考慮すると、クロスチェーンのやり取りに原子性（やり取りが完結するか、問題等が起きたら元の状態に戻るかの二択しかない性質）をもたせつつ、アプリケーションとして表現するのは大変そうであることが伺えます。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">将来の拡張性</h1><p>あなたはさらに開発を進め、セッションIDを導入し、じゃんけんの再戦機能を作ることができました。もし今後魅力的なチェーンが出てきて、そのチェーンにもじゃんけんに参加できるようにしたくなった場合、何をする必要があるでしょうか。</p><p>答えは、「既にある全てのチェーンのコントラクトに手を加える必要がある」です。既存のコントラクトには、新しく追加されたチェーンとやり取りする機能を追加しなければなりません。大変ですね。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">まとめ</h1><p>以上のように、クロスチェーンメッセージングを用いたアプリケーションは、機能を豪華にすればするほど、より多くのチェーンに対応すればするほど、必要なメッセージの数が爆発的に増えてしまうという欠点があります。なぜなら、チェーン間で状態の同期をとらなければならないからです。また、将来の拡張性に目を向けた際、必要な工数も膨れ上がる傾向にあります。</p><p>例えば、チェーンAにあるトークンと、チェーンBにあるトークンと、チェーンCにあるトークンを担保に、チェーンDでお金を借りるにはどうしたらよいのでしょうか？ オラクルに基づき、各チェーンに担保として預けた資産の価値を確認し、お金を借りる（ことを許可する）機能を作るのは大変であることが予想されます。（それ以外にも、レンディングプロトコルには様々な機能がありますよね）</p><p>そのため、クロスチェーンメッセージングを用いたアプリケーションは、以下のようなものに限られるのが現状です。</p><ul><li><p>2つ（や小数）のチェーンが相互作用するようなアプリケーション（ブリッジとか）</p></li><li><p>1つのチェーンがほぼすべての状態を管理するようなアプリケーション（この記事だと、ゲームマスターがいるじゃんけんゲームのような）</p></li></ul><p>このように、クロスチェーンメッセージングは魅力あるソリューションなのですが、開発者の負担が大きいってことを下記ツイートよりも上手に伝えたかったのであります！</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/hash1go_/status/1647948774571139072">https://twitter.com/hash1go_/status/1647948774571139072</a></p><p>ちなみに、ぼくがアンバサダーをやってるZetaChainのオムニチェーンスマートコントラクトという機能では、このような問題を解決できるとされているみたいですよ？</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">参考文献</h1><p>なし</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/64892a2b7b0e0058a7de70a3375249f7809d56aaaa4f7f236e99448873d67494.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ZetaChainのBrandon Truong氏によるHalbornのフラッシュビデオ - 書き起こし]]></title>
            <link>https://paragraph.com/@hashigo/zetachain-brandon-truong-halborn</link>
            <guid>7bTssw36a4ub7xc7CKmM</guid>
            <pubDate>Tue, 09 May 2023 21:03:57 GMT</pubDate>
            <description><![CDATA[この記事についてこの記事は、以下のyoutube動画の文字起こしの翻訳です。翻訳はあまりチェックしてないので、参考程度にお願いします。 アイスブレイクHalborn 皆さんこんにちは、Halborn Flashのビデオをご覧になっています。今日はZetaChainのブランドンさんにお話を伺いました。視聴者の皆さんには、ご自身のことをもう少し詳しく教えてください。 Tru ええ、ありがとうございます。ここに来られて光栄です。私はブランドンです。ZetaChainでプロダクトをリードしています。私の経歴は、2018年から2020年にかけて自分のスタートアップに取り組み、2020年末に売却したことの組み合わせのようなものです。ウェブ2.0のソーシャルスペースやデザインとエンジニアリングのバックグラウンドを持っていて、ZetaChainにかなり早い段階で参加し、プロダクトとデザインに集中するためにインセプションステージにいたようなものです。しかし、私は製品のほとんどの側面を見過ごすようになりました。つまり、プロトコル開発だけでなく、ユーザー向けの製品の検証エコシステムなど、楽しいものすべ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">この記事について</h1><p>この記事は、以下のyoutube動画の文字起こしの翻訳です。翻訳はあまりチェックしてないので、参考程度にお願いします。</p><div data-type="youtube" videoId="KmEzQqXBPrA">
      <div class="youtube-player" data-id="KmEzQqXBPrA" style="background-image: url('https://i.ytimg.com/vi/KmEzQqXBPrA/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=KmEzQqXBPrA">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">アイスブレイク</h1><p>Halborn 皆さんこんにちは、Halborn Flashのビデオをご覧になっています。今日はZetaChainのブランドンさんにお話を伺いました。視聴者の皆さんには、ご自身のことをもう少し詳しく教えてください。</p><p>Tru ええ、ありがとうございます。ここに来られて光栄です。私はブランドンです。ZetaChainでプロダクトをリードしています。私の経歴は、2018年から2020年にかけて自分のスタートアップに取り組み、2020年末に売却したことの組み合わせのようなものです。ウェブ2.0のソーシャルスペースやデザインとエンジニアリングのバックグラウンドを持っていて、ZetaChainにかなり早い段階で参加し、プロダクトとデザインに集中するためにインセプションステージにいたようなものです。しかし、私は製品のほとんどの側面を見過ごすようになりました。つまり、プロトコル開発だけでなく、ユーザー向けの製品の検証エコシステムなど、楽しいものすべてを見過ごすようになったのです。</p><h1 id="h-zetachain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ZetaChainの紹介</h1><p>Halborn 優れたデザインとエンジニアリングは、プロダクトのポジションで融合させるには、実にユニークな経歴です。というわけで、今日はとても興味深いお話を聞かせていただきました。ZetaChainとは では、ZetaChainについてもう少し教えてください、そして、あなたはまさに何を作っているのですか？</p><p>Tru 簡単に言うと、ZetaChainは、相互運用性に焦点を当てた新しいL1です。つまり、EVM互換のスマートコントラクトレイヤーを備えているのです。そのため、基本的にEthereumのメンテナンスで行うようなものをZetaChainにデプロイすることができます。しかし、ZetaChainのスマートコントラクトと他のいくつかの機能は、オーケストレーション、つまり外部のブロックチェーンから入力を受け、データと価値を出力することにアクセスできます。そして、この相互運用性は、単一の通信プロトコルに縛られるものではありません。IBCのようなものは、チェーンにとらわれない。つまり、ZetaChainは、Ethereumに接続するのと同じようにBitcoinに接続し、AptosやSui、Cosmos、EVM、SolanaなどのMoveエコシステムのような将来のチェーンに接続できるのです。つまり、ZetaChain上のスマートコントラクトは、クロスチェーンアプリケーションを超簡単に構築できます。例えば、UniswapをZetaChain上にデプロイすることができ、そのUniswapコントラクトはネイティブBitcoinウォレットからネイティブBitcoinを入力し、開発者側であまり作業せずにEthereumメインネット上でEthereumに対する取引のように出力することができます。これは非常にクールで、クロスチェーンアプリケーションを構築するための新しいパラダイムであり、ここ1、2年で急増したメッセージングソリューションを使ってクロスチェーンを構築する際のリスクや複雑さを払拭するものだと考えています。さらに、ZetaChainは独自のクロスチェーンメッセージングをサポートしており、資産をラップすることなくチェーン間で実際に価値を移転することが可能です。そのため、それだけで多くのアプリケーションを構築することができ、過去数年間のブリッジハック事件で見られたような、悪用可能なVaultを必要とせず、数億ドル、いや数十億ドルの損失をから人々を守ることができるのです。これが、ZetaChainが持つ高いレベルの特徴です。</p><h1 id="h-zeta" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ZETAトークンの特徴</h1><p>Halborn ありがとうございます。未来はクロスチェーンであり、あなたが扱う相互運用性のユースケースは、間違いなくそれをより特別なものにします。これはZETAトークンで起こることだと思いますが、私たちにもう少し説明してください。</p><p>Tru このL1ブロックチェーンは、コンセンサスによってCosmos SDKで構築されていますが、EVMと互換性があると述べたと思います。ZETAは、私が説明したすべての機能の中核を担っています。スマートコントラクトで、ガスを払ってデプロイし、ZetaChainのEVMでZETAを送ります。さらに、このメッセージング全体の状況について、私たちは「クロスチェーントランザクション」と呼んでいます。ソースチェーンから送信するとき、ZETAを束ねることができます。ゼータは、ガス料金やプロトコル料金の支払いに部分的に使用され、また、ある種の一方通行ペグとしても使用されます。例えば、EthereumからPolygonに価値を移したい場合、Zetaに交換することができます。つまり、USDCを持っていて、PolygonのMATICにスワップしたい場合、USDCを持っていればZETAにスワップすることができるのです。メッセージングシステムでそれを送ると、あなたのデータが添付されたコントラクトと、ZETAがバーンされてPolygonでミントされたデータを呼び出すだけで、目的の資産に交換することができるのです。つまり、このプロセス全体では、両面スワップのようなもので、資産を手に入れたら、リスクはありません。一方、ラッピングの場合、目的地で資産を手に入れると、ハッキングされる可能性のあるハニーポットをソースに構築することになり、その可能性は決して低くはありません。</p><h1 id="h-dapps" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">オムニチェーンdApps</h1><p>Halborn そうですね、確かに。オムニチェーンdAppsとは？ オムニチェーンdAppsについてもう少し詳しく教えてください。あなたがZETAを説明するときに使った言葉の中で、それがたくさん使われているのを見たので、それについてもう少し学びたいと思います。</p><p>Tru オムニチェーンdAppsは、ある種のコンセプトで、アプリケーションは一度だけデプロイすればよく、ZetaChainがチェーンサポートを追加したり、ZetaChain固有のものではないかもしれませんが、複数のチェーンをつなぐLayerZeroがチェーンサポートを追加したりすることで、後方および将来性を証明することができるものなのです。あなたのアプリケーションは何もする必要がありません。ただ、完全な相互運用性レイヤーにアクセスし、異なるチェーン間で物事をオーケストレーションすることができるのです。先ほど説明したUniswapの例のように、Uniswap V2コントラクトをデプロイして、さらに資産やチェーンが追加されると、どこからでも資産の取引やプールを持つことができるようになるのです。dAppsを利用するユーザーは、アプリケーションによほど関係がない限り、ネットワークや異なるブロックチェーン間の切り替えといった概念を持つ必要はありません。多くの場合、BitcoinウォレットやEVMウォレットからアプリケーションを使用することができますが、それは本当に重要ではありません。ですから、アプリケーションの設計の幅が広がり、ユーザーは接続するだけでワンステップ体験ができるようになるのです。今日の多くの製品に見られるような、さまざまな手続きを踏む必要がないのです。- クロス・チェーンの導入と実現に大いに役立っています。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">開発チーム</h1><p>Halborn ZetaChainの開発チームについて少し教えてください。</p><p>Tru ええ、それで、創設者は2021年の6月にこの信念に取り組み始めました。そして、彼の経歴はCoinbaseで非常に早い段階でBasic Attention Tokenというトークンを作るに至りました。彼は、今話したようなクロスチェーンという問題を解決することに集中していました。そして、この問題に対する永続的な解決策を見つけるという使命感を持って、私を含む何人かが参加し、いくつかのアイデアで遊びました。そして、このような基本的なトークンブリッジのソリューションから、現在のZetaChainのような新しいL1へと発展していったのです。このプロセス全体には少し時間がかかりましたが、2021年の終わりから2022年の初めにかけて、より完全なビジョンがまとまったと言えるでしょう。その後、オムニチェーンのスマートコントラクトやオムニチェーンdAppsの本格的なビジョンであるZETA EVMを構築するための時間とスペースができました。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">メインネットの時期</h1><p>Halborn ZetaChainメインネットはいつ？では、製品ロードマップのどのあたりに位置し、メインネットはいつになるのでしょうか？</p><p>Tru プロトコルは今、監査段階で、いくつかの機能を結びつけ、実際にプロトコルのコードをオープンソース化する準備を進めているところです。だから、メインネットの前段階にあると言えるでしょう。まもなくインセンティブ付きテストネットがローンチされ、その後は基本的にメインネットに向けた準備を進めていくことになります。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">セキュリティ監査</h1><p>Halborn もちろん、監査の話もしました。そこで、ZetaChainのセキュリティ戦略について、さらにお聞きしたいのですが、あなたのチームはどのようにセキュリティ戦略に取り組んでいるのか、また、なぜHalbornのようなサイバーセキュリティ・プロバイダーと提携するのか。</p><p>Tru 私たちにとって、セキュリティは全社的な最重要課題です。私たちが解決しようとした基本的な問題のひとつは、クロスチェーン転送に伴うリスクです。メッセージングソリューションは、エンドユーザーにとって、資産を手に入れた時点で、その資産を実際に手に入れることができるという点で、それ自体、リスクを根絶するものです。エンドユーザーにとって、資産を手に入れた時点で、その資産を実際に手に入れることができるのです。そのため、包まれた資産の相互依存関係や、その基礎となるようなものには左右されません。プロトコル自体も、複数のプロトコル監査を経て、バリデーターに対するベストプラクティスや、鍵管理、運用セキュリティなど、より広範なエコシステムへの提案を行っています。そして、dappやユーザーインターフェイスのレベルでも、インターフェイスの監査やスマートコントラクトの完全監査を何度も行い、エンドユーザーのためにあらゆる手段を講じるようにしています。</p><h1 id="h-halborn" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">なぜHalbornを選んだのか</h1><p>Halborn チームが取っているセキュリティ防御のアプローチを聞くのはいつも楽しいものですが、なぜ特にハルボーンなのでしょうか？なぜハルボーンなのでしょうか？</p><p>Tru 監査は本番です。ハルボーンの評判に代表されるように、以前あなた方と仕事をしたことがある人たちに聞いたところ、あなた方はスマートコントラクトに特化しているわけではなく、プロトコルの包括的な分析が可能で、アーキテクチャ的に類似した要素を持ついくつかのプロジェクトと一緒に仕事ができることが、ハルボーンと仕事をするという決断につながったようですね。メインネットの枠を超えた包括的なパートナーとして、御社と一緒に仕事をしたいと思ったのです。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">助成金プログラムについて</h1><p>Halborn そう言っていただけると、とてもうれしいです。また、御社がローンチした「500万人の開発者ZetaChainの500万人の開発者助成金」ブランドプログラムについてもよく耳にしましたが、こちらについてももう少し詳しく教えてください。</p><p>Tru ええ、私たちは歴史的に多くの親密なパートナーを持っていて、一緒にdAppsの構築に取り組んできました。しかし、私たちは、一般的なコミュニティにもっと公に助成金を提供することで、よりジャンプスタートし、火をつけたいと思いました。少なくとも私たちがこれまで見てきたところでは、非常に興味深いものがたくさんあり、開発の観点からは、実際には低いぶら下がり果実のようなものです。ですから、既存のプロジェクトだけでなく、独立系の開発者にとっても、ZetaChainをベースに構築する機会がたくさんあると思います。Uniswapの例に戻りますが、これはZetaChainを使った開発のシンプルさを象徴するようなもので、EthereumメインネットやL2上で開発するような多くのものをZetaChainに展開し、最小限の変更で完全にクロスチェーンにすることができます。例えばドアチェーンのようなものは、ZetaChainの特定用途向けバージョンのようなものですが、ZetaChain上に展開できるデッキに焦点を当てれば、完全に監査されることは別として、数週間や数か月ではなく、数時間や数日で展開することができます。助成金制度にとても期待しています。みなさんの中で応募したい人がいれば、ぜひ応募してほしい。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">プロダクト責任者というキャリア</h1><p>Halborn プロダクト責任者としての道を歩み始めるにはどうしたらいいのでしょうか。あなたは特にデザインエンジニアリングの観点から来た方なので、お聞きしたいのですが。あなたがやっているように、製品開発をリードし、それに携わるには何が必要なのでしょうか？また、あなたのようなキャリアに興味がある人は、どのような点に注目すればよいのでしょうか？</p><p>Tru ええ、とてもいい質問ですね。ウェブ2.0を比較すると、純粋なデザイン、純粋なプロダクトの視点を持っている人は、会社に入って、技術的なことを考えなくても、さまざまな方法でプロダクトをリードすることができると思うんです。しかし、Cryptoの場合は、すべてが金属に近い、あるいは非常に低いレベルであるため、基本的な技術的理解を持つことが、基本的なエントリーポイントになると思います。ZetaChainを始める前は、一般的にCryptoのエコシステムについてあまり技術的な理解をしていませんでした。ですから、非常に早く立ち上がることができるものなのです。この業界はとても新しいので、2～3年いれば、ウェブ2.0業界の多くが数十年以上の経験を持っているのに比べれば、かなり上級者になれるでしょう。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">さいごに</h1><p>Halborn この業界をさらに革新的でユニークなものにしているのは、コミュニティがあなたと話し、あなたを助け、あなたの視点を通して得た価値を製品やその他のものに移そうとする姿勢があることです。さて、ブランドン、今日私たちと話す時間を取ってくれて本当にありがとう、そしてZetaChainのさらなるアップデートを楽しみにしています。本当にありがとうございました。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
        </item>
        <item>
            <title><![CDATA[ZetaChainホワイトペーパー1.0変更・追加点]]></title>
            <link>https://paragraph.com/@hashigo/zetachain-1-0</link>
            <guid>fS8CePcVZJyssic1pi10</guid>
            <pubDate>Thu, 06 Apr 2023 15:37:25 GMT</pubDate>
            <description><![CDATA[はじめについ先程、ZetaChainのホワイトペーパー1.0が公開されました。実際に翻訳していて、いくつかの変更点と、追加された部分に気づきましたので、ここにまとめたいと思います。変更点/追加点4章ZetaChainブロックチェーンアーキテクチャの4.1概要のうち、スループットに関する記述が変更されています。以前はTPSは100と記述していたのですが、理想的には4000 TPSという記述に変更されました。ただし、現実には外部チェーンとのやり取りにかかわる処理が律速になるだろうということが述べられています。4章ZetaChainブロックチェーンアーキテクチャの4.4クロスチェーンスマートコントラクトとZeta仮想マシンのうち、Zeta仮想マシンの表記がZVMからzEVMへ変更されています。実は、昨年にドキュメントが公開された段階ですでに記述は変更されました。意図としては、Zeta仮想マシンはEVM互換であり、外部チェーンとのやり取りに関して書き加える以外は、コードの変更がほとんど必要ないことを強調したいのかなと勝手ながら思っています。4.4クロスチェーンスマートコントラクトは全体的...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">はじめに</h1><p>つい先程、ZetaChainのホワイトペーパー1.0が公開されました。実際に翻訳していて、いくつかの変更点と、追加された部分に気づきましたので、ここにまとめたいと思います。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">変更点/追加点</h1><ul><li><p>4章ZetaChainブロックチェーンアーキテクチャの4.1概要のうち、スループットに関する記述が変更されています。以前はTPSは100と記述していたのですが、理想的には4000 TPSという記述に変更されました。ただし、現実には外部チェーンとのやり取りにかかわる処理が律速になるだろうということが述べられています。</p></li><li><p>4章ZetaChainブロックチェーンアーキテクチャの4.4クロスチェーンスマートコントラクトとZeta仮想マシンのうち、Zeta仮想マシンの表記がZVMからzEVMへ変更されています。実は、昨年にドキュメントが公開された段階ですでに記述は変更されました。意図としては、Zeta仮想マシンはEVM互換であり、外部チェーンとのやり取りに関して書き加える以外は、コードの変更がほとんど必要ないことを強調したいのかなと勝手ながら思っています。</p></li><li><p>4.4クロスチェーンスマートコントラクトは全体的に変更・追加されています。</p><ul><li><p>4.4.1.汎用クロスチェーントランザクションの課題として挙げられているものが、「（トランザクションの）非同期性と原子性」に置き換わっています。</p></li><li><p>4.4.2.メカニズム1: クロスチェーンメッセージパッシングと4.4.3.メカニズム2: オムニチェーンスマートコントラクトでは、それぞれZetaChainの2つの機能が詳しく述べられています。特に、リバートした際の挙動について事細かに記されています。</p></li><li><p>4.4.4.オムニチェーンスマートコントラクトとメッセージングの比較では、2つの機能をよく知られているdAppを具体例に出しながら、それぞれの仕様の違いを説明しています。</p></li><li><p>4.4.5.手数料・ガスでは、ZetaChainのリソースを使用するのに使われるガスの使用について述べられています。</p></li><li><p>ZETAトークンの仕様や用途について表現が変わっています。</p></li></ul></li><li><p>6.ユースケース・アプリケーションでは、6.5.他のユースケースの項目が追加され、拡充が図られています。</p></li></ul><p>以上がZetaChainホワイトペーパー1.0の変更点と追加点になります。 大きな変更点としては、ドキュメントに基づいてクロスチェーンスマートコントラクトに関する記述が加わっており、その他はそこまで変わってないかなという印象です。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d3f6bb806b8db2701600afbfbf5c81319bdc7f158cbfa3209cd905c5d5ff1925.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ネイティブBitcoinとスマートコントラクトの統合]]></title>
            <link>https://paragraph.com/@hashigo/bitcoin</link>
            <guid>FqHNyUWZXiuMZmrs2qeA</guid>
            <pubDate>Sun, 29 Jan 2023 10:20:21 GMT</pubDate>
            <description><![CDATA[1. はじめにCryptoエコシステムにおいて、それぞれのブロックチェーンは閉じており、それらを相互作用させるには何らかの手段を用いる必要があります。例えば、Ethereum L2であるArbitrumとOptimismとの間でETHをブリッジさせるには、ブリッジプロトコルや、CEXなどの信頼できる第三者が必要となります。しかし、これらの例では、トラストポイントが発生してしまいます。 さらに、もっと違う種類のブロックチェーン間で相互作用させる場合には、これらの問題は顕在化しやすいです。例えば、Bitcoinネットワークで取り扱われるBTCをEthereumで取り扱う場合では、WBTCやrenBTCがEthereum上にmintする必要がありますが、ブリッジのしくみにトラストが必要であり、信用不安によって価格乖離がたびたび起こりました。さらに、ブリッジは攻撃対象となりやすく、大規模なExploitによってたびたび世間を騒がせてきました。 以上のような問題意識から、トラストレスまたはトラスト最小化した手法でBitcoinにスマートコントラクトを作用させようとするプロジェクトが動いてい...]]></description>
            <content:encoded><![CDATA[<h1 id="h-1" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. はじめに</h1><p>Cryptoエコシステムにおいて、それぞれのブロックチェーンは閉じており、それらを相互作用させるには何らかの手段を用いる必要があります。例えば、Ethereum L2であるArbitrumとOptimismとの間でETHをブリッジさせるには、ブリッジプロトコルや、CEXなどの信頼できる第三者が必要となります。しかし、これらの例では、トラストポイントが発生してしまいます。</p><p>さらに、もっと違う種類のブロックチェーン間で相互作用させる場合には、これらの問題は顕在化しやすいです。例えば、Bitcoinネットワークで取り扱われるBTCをEthereumで取り扱う場合では、WBTCやrenBTCがEthereum上にmintする必要がありますが、ブリッジのしくみにトラストが必要であり、信用不安によって価格乖離がたびたび起こりました。さらに、ブリッジは攻撃対象となりやすく、大規模なExploitによってたびたび世間を騒がせてきました。</p><p>以上のような問題意識から、トラストレスまたはトラスト最小化した手法でBitcoinにスマートコントラクトを作用させようとするプロジェクトが動いています。今回は、以下の3つのプロジェクトを取り上げます。</p><ol><li><p>Avalanche Bridge(BTC.b)</p></li><li><p>Internet Computer(ckBTC)</p></li><li><p>ZetaChain(ZRC-20)</p></li></ol><p>注：私はZetaChainコミュニティで活動をしており、公平なレビューが期待できないことにご注意ください。</p><h1 id="h-2-avalanche-bridge" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. Avalanche Bridge</h1><p>Avalanche BridgeにおけるネイティブBitcoinのサポートは、2022年6月に始まりました。このサポートによって、AvalancheでBTC.bトークンというBTCのラップトークンが活用できるようになりました。また、同年11月にLayerZeroと統合し、オムニチェーントークンに対応しました。このブリッジは、SGXアプリケーションとWardenに分けることができます。Wardenは、Enclaveに適格なトランザクションを提出し、処理させる責任を負います。</p><h2 id="h-21-intel-sgx" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.1 Intel SGXアプリケーション</h2><p>Intel SGXとは、</p><blockquote><p>センシティブデータを保護しつつプログラムを実行する為のCPUの拡張機能</p></blockquote><p>です[1]。つまり、あらゆる攻撃耐性を持ちながら、確実に「あるプログラム」が実行できるようになります。これを実現するために、メモリ上にEnclaveとよばれる、保護された特別な領域が生成されます。</p><p>そして、Intel SGXアプリケーションはEnclave内で実行されるコードベースと、Enclave外で実行されるコードベースで構成されます。Enclave外で行われる処理として、Enclaveの初期化と起動、リモート認証サーバの実行があり、一連のプロセスでEnclaveの身元を保証します。</p><p>EnclaveはWardenと直接通信し、オンチェーンイベントから署名済みトランザクションを送信します。それはつまり秘密鍵を有していることになるのですが、Enclaveが使用する秘密鍵は、Enclave内のスタートアップで生成された単一のマスターシークレットから派生します。このシークレットはShamirの秘密分散法によって8人のWardenに配布されます。~~みんな大好き多項式。~~共有する必要が生じた場合には、各WardenはEnclaveとリモート認証を行い、共有セッションキーを確立します。このセッションにおいて、各Wardenに配布された秘密は暗号化されてEnclaveに返されます。ブリッジは、秘密からマスターシークレットを再構築し、必要な秘密鍵を再導出するためにマスターシークレットを使用します。</p><h2 id="h-22-warden" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.2 Warden</h2><p>Wardenは、Enclaveに適格なトランザクションを提出し、処理させる責任を負います。つまり、中継者(リレイヤー)のような役割をします。Wardenは以下の8人です。Shamirの秘密分散法からマスターシークレットを導き出すために、6人の承認が必要になります。また、この承認のため、シークレットシェアを保管する責務を負います。</p><ul><li><p>Ankr</p></li><li><p>Blockdaemon</p></li><li><p>Chainstack</p></li><li><p>Protofire</p></li><li><p>Avascan</p></li><li><p>Ava Labs</p></li><li><p>Bware Labs</p></li><li><p>Halborn</p></li></ul><p>また各Wardenは、Enclaveによって処理されたトランザクションを追跡する責務を負います。これは、二段階のコミットプロセスによって成立します。</p><p>まず、暗号化された署名済みトランザクションを各Wardenに送信し、バックアップとしてデータベースとして保存します。これは、Enclaveのみが復号化することができます。</p><p>保存されたことをEnclaveが確認すると、Enclaveは処理のために暗号化されていないトランザクションを各Wardenに送信します。これを受信すると、関係するチェーンにそのトランザクションをブロードキャストしようとします。すでにブロックに含まれていることが確認できると、Wardenはそのトランザクションが正常に処理されたことが確認できます。</p><p>その他にも、Wardenはブロックチェーンのインデックス化や手数料等に関する情報の公開、Enclaveで実行されるコードベースの検証といった責務を負います。</p><h2 id="h-23-btcb" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.3 BTC.bのオムニチェーン化</h2><p>2022年6月に始まったAvalanche BridgeのBTCサポートによって、Avalancheのエコシステム内でBTCのラップトークンであるBTC.bを活用できるようになりました。また、同年11月にBTC.bはOmnichain Fungible Token（OFT）に対応しました。これにより、LayerZeroがサポートする複数のブロックチェーンにおいて、単一のBTC.bコントラクトにアクセスできるようになるため、流動性の断片化が発生しません。</p><p>LayerZeroは、トランザクションの証明を提供するリレイヤーと、ブロックヘッダを提供するオラクルという2つの主体から成り立ちます。そして、あるブロックヘッダは過去のブロックヘッダに遡って検証されるライトクライアントという形式をとらないことで、ストレージ等のコストを削減しています。オラクルとして、Chainlink等の分散型オラクルが想定されていますが、LayerZeroを使ったアプリ開発者はこれを自由に選択することができます。</p><h1 id="h-3-internet-computer" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Internet Computer</h1><p>Internet Computer(IC)は、物理的に分散したデータセンターのコンピューティングリソースが利用可能なプラットフォームで、EthereumのスマートコントラクトにあたるCanisterを用いたアプリケーションを提供します。</p><p>ICを運用管理する仕組みをInternet Computer Protocolといい、リソースを分散配置し、耐障害性を確保しています。</p><h2 id="h-31-bitcoin" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.1 Bitcoinとのプロトコルレベルでの統合</h2><p>Bitcoinとのプロトコルレベルの統合は、ICがオンチェーン上でBitcoinのUTXOセットを維持管理することを意味します。Canister自身が新しいしきい値ECDSAプロトコルを用いてECDSA鍵を持つことができるため、Bitcoinの受け取り、維持、送金ができます。</p><p>しきい値ECDSAプロトコルは、秘密共有によるマルチパーティ計算(MPC)の技術であり、どのノードも秘密鍵を知ることなく、共同で計算してECDSA署名を生成することができます。</p><h2 id="h-32-ckbtc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.2 ckBTCの提案</h2><p>ckBTCはdfinityのフォーラム[7]で提案されており、フォーラムによれば、2023年のはじめにリリースされる予定です。現在、ICが扱うことができるBTCはBitcoinネットーワークに存在するBTCであるため、トランザクションが遅いという欠点があります。これは、Bitcoinネットワークのブロック生成が10分前後かかり、確実にブロックに取り込まれたと判定されるまでに1時間は見積もらなければならないことに由来します。</p><p>そこで、ckBTCという、キャニスタースマートコントラクトによってラップされたトークンが提案されています。ICとBitcoinはプロトコルレベルで統合されており、ckBTCはIC上でネイティブなトークンです。また、ckBTCの送金に限れば、非常に安価に実現することができます。ckBTCはNNSというICのガバナンスによって所有されており、このキャニスターを管理する特定の個人は存在しません。</p><h2 id="h-33-ckbtcmintburn" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.3 ckBTCのmint/burnプロセス</h2><p>ユーザはキャニスターの「ckBTC minter」というスマートコントラクトを使って、Bitcoin上の本物のBTCを入金し、同量のckBTCを受け取ることができます。同様に、ckBTCを返却し、指定したBitcoinアドレスで同量のBTCを受け取ることもできます。</p><h1 id="h-4-zetachain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. ZetaChain</h1><p>ZetaChainは、マルチチェーンの未来への基礎となるレイヤーを目指しています。ブロックチェーンは、ブリッジやラップトークンを使用せずにマルチチェーン機能を実現し、オムニチェーンdApps（odApps）を展開することができます。これらのアプリケーションは、すべてのスマートコントラクトプラットフォームだけでなく、BitcoinやDogecoinなどの非スマートコントラクトプラットフォームのデータと価値を管理・接続することができます。</p><h2 id="h-41" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.1 アーキテクチャ概要</h2><p>ZetaChainは、バリデータと呼ばれるノードの分散ネットワークで構成されています。バリデータは、関連する外部の状態とイベントに関するコンセンサスに達する分散型オブザーバとして機能し、また、分散キー署名によって外部のチェーン状態を更新することができます。ZetaChainは、分散型（単一障害点なし、トラストレス、パーミッションレス）、透明、かつ効率的な方法で、これらの機能を達成します。各バリデータ内に含まれるのは、ZetaCoreとZetaClientです。ZetaCoreはブロックチェーンを生成し、複製されたステートマシンを維持する責任を負います。バリデータのオペレータは、このアーキテクチャの異なるコンポーネントを実行します。</p><p>Zeta EVM（zEVM）は、ZetaChainのコアブロックチェーン上に構築されたオムニチェーンスマートコントラクトをデプロイして使用できるEthereum互換の仮想マシンです。zEVM上のコントラクトはZetaChainの相互運用性レイヤーに接続されており、外部チェーン上のアセットをあたかも単一のチェーン上にあるかのようにオーケストレーションすることが可能です。</p><p>ZetaChainは2023年第1四半期にメインネットがリリースされる予定です。はじめはPoAですが、後にPoSへと移行する予定です。また、現時点でテストネット含め各個人がバリデータノードを建てることはできません。</p><h2 id="h-42" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.2 バリデータ</h2><p>バリデータは3つの異なる役割で構成されています。Basicバリデータ、オブザーバ、TSS署名者です。バリデータは、トランザクションを処理し、ネットワークを安全に保つというサービスの対価として、トランザクションからの手数料と報酬が分配され、受け取ります。オブザーバーとTSS署名者は、セキュリティや掛け金の要件が異なるため、Basicバリデーターとは別の規模になります。</p><h3 id="h-421-basic" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.1 <strong>Basicバリデータ</strong></h3><p>ZetaChainは、部分的な同期ビザンチンフォールトトレラント（BFT）コンセンサスアルゴリズムであるTendermintコンセンサスプロトコルを使用します。各バリデータ・ノードは、拘束/委任されたステーキングコイン（ZETA）に比例した投票権により、ブロックの提案に投票することができます。各バリデーターはコンセンサス公開鍵によって識別されます。バリデータは常にオンラインである必要があり、常に成長し続けるブロック生成に参加します。バリデータはそのサービスの対価として、ブロック報酬と取引手数料を受け取ります。</p><h3 id="h-422" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.2 <strong>オブザーバ</strong></h3><p>ZetaChainのコンセンサスにとって重要なもう一つの参加者は、外部のチェーンイベントと状態についてコンセンサスを得るオブザーバです。オブザーバは、外部チェーンの完全なノードを介して、特定のアドレスで特定の関連する取引、イベント、状態について、外部接続チェーンを監視します。オブザーバはシーケンサと検証者の2つの役割に分かれます。シーケンサは関連する外部のトランザクション/イベント/状態を発見して検証者に報告し、検証者はZetaChainを検証して投票し、コンセンサスを得ます。</p><h3 id="h-423-tss" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.3 <strong>TSS署名者</strong></h3><p>ZetaChainは、外部チェーンとの認証された相互作用のために標準的なECDSA/EdDSAキーをまとめて保持します。鍵は、それらの超多数だけがZetaChainを代表して署名できるような方法で、複数の署名者の間で分配されます。重要なことは、いかなる時も、単一のエンティティまたはノードのごく一部が、ZetaChainを代表して外部チェーン上でメッセージに署名できることを確実にすることです。ZetaChainシステムは、経済的安全を確保するために、担保つきのステークと正/負のインセンティブを使用します。</p><h2 id="h-43-zrc-20" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.3 ZRC-20規格</h2><p>ZRC-20は、ZetaChainのオムニチェーンスマートコントラクトプラットフォームに統合されたトークン規格です。ZRC-20を使用すると、開発者は、接続された任意のチェーン上でネイティブアセットをオーケストレーションするdAppsを構築することができます。</p><p>ZRC-20トークンは、Ethereumエコシステムで見られる標準的なERC-20トークンの拡張版で、ZetaChainに接続されたすべてのチェーン上のアセットを管理する能力が追加されています。Bitcoin、Dogecoin、他のチェーン上のERC-20同等物、他のチェーン上のガスアセットなど、あらゆるファンジブルトークンはZetaChain上でZRC-20として表されます。</p><p>ZetaChainが外部チェーンを操作する方法として、GG20リーダーレスしきい値署名方式(TSS)が採られています。ZRC-20はプロトコルレベルで管理されており、外部チェーンの資産をトラストレスに維持管理することができることから、ネイティブBitcoinにオムニチェーンスマートコントラクトを付与することができると期待されています。</p><h2 id="h-44-zrc-20btcmintburn" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.4 ZRC-20(BTC)のmint/burnプロセス</h2><p>ユーザーがBitcoin上に存在するZetaChainのTSSウォレットにBTCを送金すると、ZRC-20コントラクトに反映されます。この際、トランザクションのメモ欄に任意のロジックを指定すると、zEVM上でスマートコントラクトを実行することができます。同様に、ZRC-20(BTC)から、指定したBitcoinアドレスで同量のBTCを受け取ることもできます。</p><h1 id="h-5" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. まとめ</h1><p>以上のことから、次のことがわかりました。</p><ul><li><p>Avalancheが謳うBTCのオムニチェーントークンは、OFTに対応したBTC.bトークンのことであり、BTC.bトークンはAbalanche BridgeによるBTCのラップトークンである。</p></li><li><p>Internet ComputerとZetaChainはプロトコルレベルでBitcoinと統合する。また、ラップトークンとしてそれぞれckBTCとZRC-20が用意され、UXが改善される。それぞれのラップトークンはネイティブBTCに裏付けされており、分散化された方法で管理されることから、「ネイティブでラップされていないトークン」と表現されることがある。</p></li></ul><p>また、インフラ部分に参加できるかどうかという点を比較すると、</p><ul><li><p>Avalanche Bridgeの主要な構成要素であるWardenは限られている。（現状8人）</p></li><li><p>Internet ComputerのノードはICA (Internet Computer Association)が発行するDataCenter IDが必要であり、実質コンソーシアム型チェーンである。ICAについてはリサーチしなかった。</p></li><li><p>ZetaChainのメインネット立ち上げ後はPoAであるが後にPoSへ移行する予定であり、PoS移行後にノードに参加できるようになると思われる。</p></li></ul><p>と、どの製品も現状においてはパブリックとは言い難いです。また、どの経済圏にアクセスできるかという観点で比較すると、</p><ul><li><p>BTC.bはAvalancheおよびLayerZeroが対応するチェーンに限られる</p></li><li><p>ckBTCはICが接続するチェーンおよびIC自体の経済圏に限られる</p></li><li><p>ZRC-20はZetaChainが接続するチェーンおよびZetaChain自体の経済圏に限られる</p></li></ul><p>という結果になりました。</p><p>私個人の感想としては、</p><ul><li><p>BTC.bはアプリケーションレベルで現実に即したレベルで実装できており、今回比較したなかでも一番よく使われている(執筆時)ので評価できる。</p></li><li><p>ckBTCとZRC-20はTSSという技術を使い分散化された方法で、プロトコルレベルでネイティブBTCを維持管理しようとしており、志が高く評価できる。</p></li></ul><p>といった感じになります。</p><h1 id="h-6" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. 参考文献</h1><p>[1] Cliffford, Intel SGX入門 - SGX基礎知識編, 2019/6/15, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://qiita.com/Cliffford/items/2f155f40a1c3eec288cf">https://qiita.com/Cliffford/items/2f155f40a1c3eec288cf</a>.</p><p>[2] Conor Leary, Avalanche Bridge: Secure Cross-Chain Asset Transfers Using Intel SGX, 2021/8/6, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/avalancheavax/avalanche-bridge-secure-cross-chain-asset-transfers-using-intel-sgx-b04f5a4c7ad1">https://medium.com/avalancheavax/avalanche-bridge-secure-cross-chain-asset-transfers-using-intel-sgx-b04f5a4c7ad1</a>.</p><p>[3] Avalanche, Avalanche Bridge Adds Native Bitcoin Support, 2022/6/23, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/avalancheavax/avalanche-bridge-adds-native-bitcoin-support-6306236fb506">https://medium.com/avalancheavax/avalanche-bridge-adds-native-bitcoin-support-6306236fb506</a>.</p><p>[4] Avalanche, LayerZero Aims to Create One, Unified Experience for BTC.b, Expanding BTC.b Transfers to Ethereum, Polygon, Arbitrum, Aptos, and more., 2022/11/18, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/avalancheavax/layerzero-aims-to-create-one-unified-experience-for-btc-b-339eb4d23672">https://medium.com/avalancheavax/layerzero-aims-to-create-one-unified-experience-for-btc-b-339eb4d23672</a>.</p><p>[5] 株式会社日本総合研究所 先端技術ラボ, Internet Computerの概要 ～クラウドコンピューティング基盤を目指すブロックチェーン～, 2022/5/30, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.jri.co.jp/MediaLibrary/file/column/opinion/pdf/13450.pdf">https://www.jri.co.jp/MediaLibrary/file/column/opinion/pdf/13450.pdf</a>.</p><p>[6] hokosugi, Bitcoin 統合の仕組み ー 技術的背景, 2022/11/28, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dfinityjp.netlify.app/docs/current/developer-docs/integrations/bitcoin/bitcoin-how-it-works">https://dfinityjp.netlify.app/docs/current/developer-docs/integrations/bitcoin/bitcoin-how-it-works</a>.</p><p>[7] Manu, Chain-key Bitcoin (ckBTC): bitcoin wrapped by a smart contract, 2022/12/22, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.dfinity.org/t/chain-key-bitcoin-ckbtc-bitcoin-wrapped-by-a-smart-contract/17606">https://forum.dfinity.org/t/chain-key-bitcoin-ckbtc-bitcoin-wrapped-by-a-smart-contract/17606</a>.</p><p>[8] hashigo, ZetaChainのオムニチェーンスマートコントラクトとクロスチェーンメッセージング, 2022/11/28, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo.eth/CCdB_j-jtbl1zlRdGDOlwIn1zGdbMklzNURJemXkAYI">https://mirror.xyz/hashigo.eth/CCdB_j-jtbl1zlRdGDOlwIn1zGdbMklzNURJemXkAYI</a>.</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/78c3f2cf76d06f3d93f039273fb21aaed59dfb58703d39a296fe63065a2d92d7.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ZetaChainのオムニチェーンスマートコントラクトとクロスチェーンメッセージング]]></title>
            <link>https://paragraph.com/@hashigo/zetachain-2</link>
            <guid>leZ6dFtkrfcQMTEXqM7C</guid>
            <pubDate>Sun, 27 Nov 2022 19:37:19 GMT</pubDate>
            <description><![CDATA[1. ZetaChainについてZetaChainは、クロスチェーン間のメッセージングやオムニチェーンコントラクトを実現するL1のブロックチェーンです。 ホワイトペーパーの日本語訳（非公式）はこちら： https://hashigocchi.notion.site/ZetaChain-3c11c23b69df4bf881e2928c33a0d868 また、ホワイトペーパーの要約も用意してあります： https://mirror.xyz/hashigo.eth/5BL0waxhAABJQORAsDLEkn5qbFa5lYWKEnZ8-l_inDs 本記事を読む前に、以上の内容に目を通すことを推奨します。2. ZetaChainのアーキテクチャ（おさらい）[1]2.1 概要ZetaChainはCosmos SDKとTendermint PBFTコンセンサスエンジン上に構築されたProof of Stake (PoS)ブロックチェーンです。よって、ZetaChainは高速なブロック時間（〜5秒）とインスタントファイナリティを享受しています。Tendermint PBFTコンセンサスエン...]]></description>
            <content:encoded><![CDATA[<h1 id="h-1-zetachain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. ZetaChainについて</h1><p>ZetaChainは、クロスチェーン間のメッセージングやオムニチェーンコントラクトを実現するL1のブロックチェーンです。</p><p>ホワイトペーパーの日本語訳（非公式）はこちら：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hashigocchi.notion.site/ZetaChain-3c11c23b69df4bf881e2928c33a0d868">https://hashigocchi.notion.site/ZetaChain-3c11c23b69df4bf881e2928c33a0d868</a></p><p>また、ホワイトペーパーの要約も用意してあります：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/hashigo.eth/5BL0waxhAABJQORAsDLEkn5qbFa5lYWKEnZ8-l_inDs">https://mirror.xyz/hashigo.eth/5BL0waxhAABJQORAsDLEkn5qbFa5lYWKEnZ8-l_inDs</a></p><p><strong>本記事を読む前に、以上の内容に目を通すことを推奨します。</strong></p><h1 id="h-2-zetachain1" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. ZetaChainのアーキテクチャ（おさらい）[1]</h1><h2 id="h-21" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.1 概要</h2><p>ZetaChainはCosmos SDKとTendermint PBFTコンセンサスエンジン上に構築されたProof of Stake (PoS)ブロックチェーンです。よって、ZetaChainは高速なブロック時間（〜5秒）とインスタントファイナリティを享受しています。Tendermint PBFTコンセンサスエンジンは、実運用で300ノードまで拡張可能であることが示されています。将来的にBLSしきい値署名によるアップグレードで、その数は1000以上まで増える可能性があります。ZetaChain上のトランザクションのスループットは、効率的なTendermintコンセンサスプロトコルにより、100TPSに達する可能性があります。</p><p>ZetaChainのアーキテクチャは、しばしばバリデータと呼ばれるノードの分散ネットワークで構成されています。バリデータは、関連する外部の状態とイベントに関するコンセンサスに達する分散型オブザーバとして機能し、また、分散キー署名によって外部のチェーン状態を更新することができます。ZetaChainは、分散型（単一障害点なし、トラストレス、パーミッションレス）、透明、かつ効率的な方法で、これらの機能を達成します。各バリデータ内に含まれるのは、ZetaCoreとZetaClientです。ZetaCoreはブロックチェーンを生成し、複製されたステートマシンを維持する責任を負います。バリデータのオペレータは、このアーキテクチャの異なるコンポーネントを実行します（下記参照）。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">ZetaChainのアーキテクチャ[1]</figcaption></figure><h2 id="h-22" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.2 バリデータ</h2><p>バリデータは3つの異なる役割で構成されています。Basicバリデータ、オブザーバ、TSS署名者です。バリデータは、トランザクションを処理し、ネットワークを安全に保つというサービスの対価として、トランザクションからの手数料と報酬が分配され、受け取ります。オブザーバーとTSS署名者は、セキュリティや掛け金の要件が異なるため、Basicバリデーターとは別の規模になります。</p><h3 id="h-221-basic" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2.1 <strong>Basicバリデータ</strong></h3><p>ZetaChainは、部分的な同期ビザンチンフォールトトレラント（BFT）コンセンサスアルゴリズムであるTendermintコンセンサスプロトコルを使用します。各バリデータ・ノードは、拘束/委任されたステーキングコイン（ZETA）に比例した投票権により、ブロックの提案に投票することができます。各バリデーターはコンセンサス公開鍵によって識別されます。バリデータは常にオンラインである必要があり、常に成長し続けるブロック生成に参加します。バリデータはそのサービスの対価として、ブロック報酬と取引手数料を受け取ります。</p><h3 id="h-222" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2.2 <strong>オブザーバ</strong></h3><p>ZetaChainのコンセンサスにとって重要なもう一つの参加者は、外部のチェーンイベントと状態についてコンセンサスを得るオブザーバです。オブザーバは、外部チェーンの完全なノードを介して、特定のアドレスで特定の関連する取引、イベント、状態について、外部接続チェーンを監視します。オブザーバはシーケンサと検証者の2つの役割に分かれます。シーケンサは関連する外部のトランザクション/イベント/状態を発見して検証者に報告し、検証者はZetaChainを検証して投票し、コンセンサスを得ます。このシステムには、少なくとも1人のシーケンサと複数の検証者が必要です。シーケンサはトラストされる必要はありませんが、少なくとも1つの正直なシーケンサが必要です。</p><h3 id="h-223-tss" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2.3 <strong>TSS署名者</strong></h3><p>ZetaChainは、外部チェーンとの認証された相互作用のために標準的なECDSA/EdDSAキーをまとめて保持します。鍵は、それらの超多数だけがZetaChainを代表して署名できるような方法で、複数の署名者の間で分配されます。重要なことは、いかなる時も、単一のエンティティまたはノードのごく一部が、ZetaChainを代表して外部チェーン上でメッセージに署名できることを確実にすることです。ZetaChainシステムは、経済的安全を確保するために、担保つきのステークと正/負のインセンティブを使用します。</p><h2 id="h-23-zeta-evm-zevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.3 Zeta EVM (zEVM)とオムニチェーンスマートコントラクト</h2><p>Zeta EVM（zEVM）は、ZetaChainのコアブロックチェーン上に構築されたオムニチェーンスマートコントラクトをデプロイして使用できるEthereum互換の仮想マシンです。zEVM上のコントラクトはZetaChainの相互運用性レイヤーに接続されており、外部チェーン上のアセットをあたかも単一のチェーン上にあるかのようにオーケストレーションすることが可能です。</p><h2 id="h-24" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.4 クロスチェーンメッセージング</h2><p>ZetaChainの相互運用性アーキテクチャを通じて、接続されたチェーン上の既存のスマートコントラクトに3つの機能を実装することにより、任意のチェーンから任意のチェーンへメッセージ（データと価値）を送信することができます。ZetaChainのメッセージングシステムは、ZETAコインのワンウェイペグ機構により、新たなブリッジやラップアセットを必要としないネイティブな価値転送を可能にします。ガス代などの手数料はすべてユーザーが一括して支払うことができるため、開発者はシームレスなUXを提供することができます。また、メッセージングは、トランザクションの失敗時の復帰処理をサポートするため、より予測可能で直感的な開発者体験を生み出します。</p><h1 id="h-3" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. オムニチェーンスマートコントラクトとメッセージング</h1><h2 id="h-31-zetachain2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.1 ZetaChainのメッセージングとスマートコントラクトの違い[2]</h2><p>メッセージングは、スマートコントラクトがZetaChain上であろうと外部チェーン上であろうと、開発者が、スマートコントラクト間でデータと値を送信することを可能にします。1つは、外部チェーン上のスマートコントラクトを展開し、LayerZeroのような他の相互運用性メッセージングプロトコルと同様の方法でZetaChainを介してそれらの間でメッセージを渡すだけですが、ZetaChainの相互運用性スマートコントラクトは、開発者が単一の場所内のオムニチェーンロジックを維持し、オーバーヘッドを減らし、BitcoinやDogecoinなどの非スマートコントラクトチェーンでさえ制御できるスマートコントラクトロジックを許可します。</p><h2 id="h-32-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.2 オムニチェーンスマートコントラクトとメッセージングの比較[3]</h2><p>あなたのアイデアをもとに開発を始めるとき、あなたはどのように自分のdAppを構築するべきか疑問に思うかもしれません。ここでは、アプリケーションのアーキテクチャを決定するのに役立つ考慮事項をいくつか紹介します。</p><h3 id="h-321" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.1 アーキテクチャの決定</h3><p>古いソリューションであるメッセージパッシングでは、別のブロックチェーンにメッセージを転送するためのリレーとしてのみZetaChainが使用されます（例：Ethereum → BSCなど）。dAppは、接続された各チェーン上に少なくとも1つのコントラクトをデプロイします。dAppのステートとロジックは、非同期メッセージで接続されたこれらのチェーン上のすべてのコントラクトに散在しています。これは、一方向の非同期ロジックやエフェクトのみを必要とし、統一されたステートを必要としない、または恩恵を受けない特定のアプリケーションにとっては理にかなっています。</p><p>オムニチェーンスマートコントラクトとZRC-20トークンを使用した新しいアーキテクチャは、非常に異なるトポロジーを持ちます：dAppにはzEVM上の1つのコントラクトのみが必要で、外部のチェーンにはdAppコントラクトは必要ありません。zEVMはZRC-20コントラクトを経由して外部チェーン上のコインを管理します。ZRC-20コントラクトについては次の章で説明します。</p><p>dAppは、以下の考慮事項に基づき、これらのソリューションのいずれかを活用することができます。</p><h3 id="h-322-dapp" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.2 dAppの複雑さ</h3><p>メッセージングを使用する場合、異なるチェーン上の多くのコントラクトにメッセージと状態同期をブロードキャストする必要があり、これは実質的により多くの攻撃対象とガス代（各メッセージは追加のガス支払いを必要とし、完全な状態同期を維持するために送信しなければならないメッセージ数はスケールします）につながる可能性があるからです。</p><h3 id="h-323-evm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.3 既存のEVMコントラクトの上での構築</h3><p>Uniswap V2/V3、Curve、Aave、Compoundなど、Ethereum上で監査とテストが行われた共通のアプリケーションは、ZetaChainで簡単に展開でき、その上に構築されることができます。ZRC-20との互換性を追加することでこれらのアプリケーションを拡張することはできますが、それらの変更は最小限であり、ロジックの大部分は同じままで、ユーザーはEthereum上で行うのと同じようにシングルステップのトランザクションでこれらのアプリケーションとやり取りすることができます。一方、メッセージングでは、多くの状況（特に複雑なもの）で、開発者は「車輪を再発明する」必要があります。つまり、まったく別の非同期メッセージングおよびステートシンクシステムでロジックを作り直す必要があり、メッセージングでは既存のアプリケーションを同じように活用することができません。</p><h3 id="h-324" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.4 非スマートコントラクトチェーンのサポート</h3><p>ZRC-20はBitcoin/Algorand/Cardano/XRPを簡単にサポートできますが、スワップ、融資などのアプリケーションのための汎用スマートコントラクトをサポートする能力はなく、非効率です。メッセージングには、接続されたチェーン上のスマートコントラクトが必要なため、これらのチェーンではメッセージングが機能しません。</p><h3 id="h-325" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.5 外部におけるガス代</h3><p>ZRC-20は、外部チェーンとのやり取りがファンジブルなコインに限定されているため、多くのユースケースでメッセージパッシングよりも大幅にガスコストが低くなる可能性があります。（ETH/BNB/MATICの標準Transferには21kガス、ERC20トークンの移動には約60kガスのコストがかかります; 外部チェーン上でロジック/状態がないことはガスコストを大幅に削減します）。メッセージパッシングは本質的に送信元/送信先のチェーンでメッセージデータを処理する必要があり、検証作業等のために追加のガスコストがかかります。</p><h3 id="h-326-yuan" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.6 流動性の一元化</h3><p>オムニチェーンスマートコントラクトでは、ネイティブアセットの流動性を直接ペアリングし、互いに交換することができます。これは、ネイティブアセットを取引するためのステップを最小限にし（1ステップ）、ブリッジやラッピングのステップや複雑なメッセージの送信を伴いません。例えば、統一されたプールを介して、Ethereum上のETHとPolygon上のUSDCを1ステップで直接取引することができます。メッセージを使えば、既存のチェーン上のUniswapプールのような既存の流動性を活用し、ZetaChainを通じてZETAを焼却/造幣することで取引することができます。このアプローチはより複雑（より多くのトランザクションを含むため、ガス代がかかる）かもしれませんが、ZetaChainのエコシステム内の流動性に依存しません。オムニチェーンスマートコントラクトとメッセージングの両方が統一された流動性へのアプローチを提供する一方で、彼のシステム要件に基づいて選択するのは開発者次第です。</p><h3 id="h-327" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2.7 例外処理</h3><p>ZRC-20/zEVMでは、トランザクションが処理されると同時に、外部とのやり取りが標準のERC-20/コントラクトとのやり取り（成功）、またはコントラクトとのやり取りなし（失敗）に限定されるため、例外/復帰処理がはるかにシンプルになります。それに比べ、メッセージングでは復帰処理をサポートしていますが、dApp（とユーザー）はエラーを首を長くして待ち、非同期/イベント駆動の方法で処理しなければなりません。</p><h2 id="h-33-zevm3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.3 メッセージングとzEVMスマートコントラクトの比較例[3]</h2><p>これらの2つの大まかな例は、オムニチェーンスマートコントラクトで構築する場合とメッセージングで構築する場合の違いを示しています。</p><h3 id="h-331-curve" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.3.1 Curve/マルチアセットプールの例</h3><p>まず、Curveを検証してみましょう。Bitcoin上のBTC、Polygon上のMATIC、Ethereum上のETHでEthereum上にCurveプールを作成することを想像してください。</p><ol><li><p>BTCとMATICをEthereumにブリッジする必要があります（新しいラップされたアセットwBTCとwMATICを作成するか、BTCとMATICを表すような、ブリッジvaultに依存する何らかのネイティブ/既存アセットとのスワップを試みる必要があります）。</p></li><li><p>これらのアセットのために作成されたプールに入金します。</p></li><li><p>流動性を引き出すには、プールから引き出して、これらのラップされたバージョンのアセットを受け取る必要があります。</p></li><li><p>それらを一つ一つ、PolygonとBitcoinに戻すブリッジによってアンラップします。</p></li><li><p>誰かがこのプールを通してスワップする場合、その人はラップされたアセットを受け取り、その後、最終的にそれらを送信したい場所にアセットをアンラップ/ブリッジします。</p></li></ol><p>その代わり、BTC、MATIC、ETHをネイティブに管理するオムニチェーンスマートコントラクトを使えば、以下のようなシステムが実現できます。</p><ol><li><p>BTC、MATIC、ETHのアセットをZetaChain上のプールにネイティブに、単純な送金（または同等の）トランザクションを通じて、ワンステップで入金することができます。</p></li><li><p>ZetaChain上の単一のトランザクションで、それぞれのネイティブチェーン上のあなたのアドレスに引き出すことができます。</p></li><li><p>もし誰かがこのプールを通してスワップしたいのであれば、ネイティブアセットを送ることで取引でき、その人はネイティブアセットを直接（例：BitcoinアドレスにBTCを直接）宛先に受け取ることができ、これらのトランザクションはすべて1ステップで行います。</p></li></ol><p>オムニチェーン・マルチアセットプールでは、以下のことが可能です。</p><ul><li><p>LPとスワップするユーザーの双方にとって、より少ないステップ（ガス、時間の節約になります）</p></li><li><p>スワップ＋引き出しが単一のトランザクションで行われ、メッセージングやブリッジングによる非同期タイミングに依存しないことによる、スリッページ最小化</p></li><li><p>ユーザーアセットはブリッジやラップされたアセットvaultに対する脅威にさらされないず、リスクプロファイルの大幅な減少</p></li></ul><h3 id="h-332" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.3.2 レンディングの例</h3><p>オムニチェーンスマートコントラクトの機能は、クロスチェーンレンディングのような複雑なアプリケーションではさらに有利になる可能性があります。基本的な借入フローを想像すると、異なるチェーンとの間のメッセージで次のような手順になります（もちろん、これを実装する方法はたくさんあります）。</p><ol><li><p>チェーン1上にアセットAの担保を預ける。</p></li><li><p>チェーン1にアセットAの担保を預ける。チェーン2にチェーン1の担保Aに対してBの借入を要求する。</p></li><li><p>プロトコルはチェーン1の担保額を確認するメッセージを送信する。</p></li><li><p>プロトコルはチェーン2に対して、元のリクエストを検証するメッセージを返送する。</p></li><li><p>プロトコルは、チェーン1から受け取ったメッセージに基づくA/Bの（何らかのオラクル）価格に基づいて、チェーン2のBを一定量だけ借りることができる。</p></li><li><p>プロトコルは借り手に金額を送信する。</p></li></ol><p>その代わり、ZetaChain上のオムニチェーン対応貸出スマートコントラクトを使えば、貸出は次のようなステップになります。</p><ol><li><p>チェーン1のアセットAとチェーン2のアセットBを管理するzEVM上のAaveのようなコントラクトプールに担保を預け入れる。</p></li><li><p>借り手は、その担保Aに対して、オラクルチェックに基づいてアセットBの借入を要求し、すべて単一の同期関数内で、ターゲットの宛先に送信される。</p></li></ol><h1 id="h-4-zrc-204" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. ZRC-20[4]</h1><p>ZRC-20は、ZetaChainのオムニチェーンスマートコントラクトプラットフォームに統合されたトークン規格です。ZRC-20を使用すると、開発者は、接続された任意のチェーン上でネイティブアセットをオーケストレーションするdAppsを構築することができます。これにより、オムニチェーンDeFiプロトコルやオムニチェーンDEX、オムニチェーンレンディング、オムニチェーンポートフォリオ・マネジメントなどのdAppsが構築できます。さらに、複数のチェーン上のファンジブルトークンを含むあらゆるものを1つの場所から、極めて簡単に、まるですべてが1つのチェーン上にあるかのように構築できるようになります。</p><h2 id="h-41" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.1 はじめに</h2><p>ZRC-20トークンは、Ethereumエコシステムで見られる標準的なERC-20トークンの拡張版で、ZetaChainに接続されたすべてのチェーン上のアセットを管理する能力が追加されています。Bitcoin、Dogecoin、他のチェーン上のERC-20同等物、他のチェーン上のガスアセットなど、あらゆるファンジブルトークンはZetaChain上でZRC-20として表され、（ERC-20など）他のファンジブルトークンと同じようにオーケストレーションできるかもしれません。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">ZRC-20[4]</figcaption></figure><h2 id="h-42" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.2 インターフェース</h2><p>ZRC-20はERC-20をベースに、ZetaChainのCross-Chain Transactions（CCTXs）と統合するために3つの追加関数といくつかの関連イベントを追加しています。</p><pre data-type="codeBlock" text="pragma solidity 0.8.7;
interface IZRC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    function deposit(address to, uint256 amount) external returns (bool);
    function withdraw(bytes memory to, uint256 amount) external returns (bool);
    function withdrawGasFee() external view returns (address, uint256);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Deposit(bytes from, address indexed to, uint256 value);
    event Withdrawal(address indexed from, bytes to, uint256 value);
}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> 0.8.7;</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IZRC20</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">totalSupply</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">balanceOf</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> account</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> recipient, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">allowance</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> spender</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">approve</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> spender, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transferFrom</span>(<span class="hljs-params">
        <span class="hljs-keyword">address</span> sender,
        <span class="hljs-keyword">address</span> recipient,
        <span class="hljs-keyword">uint256</span> amount
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deposit</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> to, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdraw</span>(<span class="hljs-params"><span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> to, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdrawGasFee</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span>, <span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> <span class="hljs-keyword">from</span>, <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> to, <span class="hljs-keyword">uint256</span> value</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Approval</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> owner, <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> spender, <span class="hljs-keyword">uint256</span> value</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Deposit</span>(<span class="hljs-params"><span class="hljs-keyword">bytes</span> <span class="hljs-keyword">from</span>, <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> to, <span class="hljs-keyword">uint256</span> value</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Withdrawal</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> <span class="hljs-keyword">from</span>, <span class="hljs-keyword">bytes</span> to, <span class="hljs-keyword">uint256</span> value</span>)</span>;
}
</code></pre><p>ZRC-20とERC-20を比較すると、入出金のための外部関数が追加され、それぞれに対応したイベントが追加されています。これにより、ZRC-20はERC-20用に構築されたあらゆるアプリケーションと完全に互換性があり、かつ極めてシンプルなインターフェースでオムニチェーン的な機能も実現できます。</p><h3 id="h-421-deposit" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.1 <code>deposit</code></h3><p>ユーザーが接続されたチェーン上のZetaChain TSSアドレスにアセットを送信/預金すると、<code>deposit</code>は<code>zetacore</code>によって呼び出され、預金したアドレスで利用できるようになります。TX<code>message</code>にデータがある場合、システムコントラクト<code>DepositAndCall</code>が呼び出され、ターゲットzEVMコントラクト上の<code>onCrossChainCall</code>への呼び出しによってそのデータを転送します。<code>deposit</code>と <code>DepositAndCall</code>関数は CCTX モジュール（<code>zetacore</code> モジュール）アドレスによってのみコール可能です。</p><p>これはシステムコントラクトがどのように見えるかのスニペットで、ZetaChainネットワークによって管理されるTSSアドレスへの預金を受け取った後、<code>zetacore</code>によって<code>DepositAndCall</code>が呼び出される可能性があります。</p><pre data-type="codeBlock" text="contract SystemContract {
    address public constant FUNGIBLE_MODULE_ADDRESS;
    // ...
    constructor(address fungibleModule) {
        FUNGIBLE_MODULE_ADDRESS = fungibleModule;
    }
    // ...
    function DepositAndCall(address zrc20, uint256 amount, address target, bytes calldata message) external {
        require(msg.sender == FUNGIBLE_MODULE_ADDRESS);
        require(target != FUNGIBLE_MODULE_ADDRESS &amp;&amp; target != address(this));
        IZRC20(zrc20).deposit(target, amount);
        zContract(target).onCrossChainCall(zrc20, amount, message);
    }
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">SystemContract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">constant</span> FUNGIBLE_MODULE_ADDRESS;
    <span class="hljs-comment">// ...</span>
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> fungibleModule</span>) </span>{
        FUNGIBLE_MODULE_ADDRESS <span class="hljs-operator">=</span> fungibleModule;
    }
    <span class="hljs-comment">// ...</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">DepositAndCall</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> zrc20, <span class="hljs-keyword">uint256</span> amount, <span class="hljs-keyword">address</span> target, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">calldata</span> message</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> FUNGIBLE_MODULE_ADDRESS);
        <span class="hljs-built_in">require</span>(target <span class="hljs-operator">!</span><span class="hljs-operator">=</span> FUNGIBLE_MODULE_ADDRESS <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> target <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>));
        IZRC20(zrc20).deposit(target, amount);
        zContract(target).onCrossChainCall(zrc20, amount, message);
    }
}
</code></pre><pre data-type="codeBlock" text="// a contract that implements this interface may be called by a ZRC-20 deposit call
interface zContract {
    function onCrossChainCall(
        address zrc20,
        uint256 amount,
        bytes calldata message
    ) external;
}
"><code><span class="hljs-comment">// a contract that implements this interface may be called by a ZRC-20 deposit call</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">zContract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onCrossChainCall</span>(<span class="hljs-params">
        <span class="hljs-keyword">address</span> zrc20,
        <span class="hljs-keyword">uint256</span> amount,
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">calldata</span> message
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
}
</code></pre><h3 id="h-422-zevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.2 スマートコントラクトチェーンからzEVMコントラクトを入金して呼び出す方法</h3><p>これは、入金するためにAthens 2のTSSアドレスにトランザクションを<code>deposit</code>するために、Ethereumのチェーンから呼び出す例です。</p><pre data-type="codeBlock" text="import { parseEther } from &quot;@ethersproject/units&quot;;
import { ethers } from &quot;hardhat&quot;;
// This is a constant address, the TSS address of the ZetaChain network.
import { TSS_ATHENS2 } from &quot;../systemConstants&quot;;
// Primary function definition
const main = async () =&gt; {
  // Get signer in order to write transction.
  const [signer] = await ethers.getSigners();
  // Sign a transaction that sends Ether to the TSS address.
  const tx = await signer.sendTransaction({
    to: TSS_ATHENS2,
    value: parseEther(&quot;100&quot;)
  });
  // That&apos;s it! ZetaChain will pick up the transaction.
  console.log(&quot;Token sent. tx:&quot;, tx.hash);
};
main().catch(error =&gt; {
  console.error(error);
  process.exit(1);
});
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">parseEther</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@ethersproject/units"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">ethers</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"hardhat"</span>;
<span class="hljs-comment">// This is a constant address, the TSS address of the ZetaChain network.</span>
<span class="hljs-keyword">import</span> { <span class="hljs-title">TSS_ATHENS2</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"../systemConstants"</span>;
<span class="hljs-comment">// Primary function definition</span>
const main <span class="hljs-operator">=</span> async () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-comment">// Get signer in order to write transction.</span>
  const [signer] <span class="hljs-operator">=</span> await ethers.getSigners();
  <span class="hljs-comment">// Sign a transaction that sends Ether to the TSS address.</span>
  const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await signer.sendTransaction({
    to: TSS_ATHENS2,
    <span class="hljs-built_in">value</span>: parseEther(<span class="hljs-string">"100"</span>)
  });
  <span class="hljs-comment">// That's it! ZetaChain will pick up the transaction.</span>
  console.log(<span class="hljs-string">"Token sent. tx:"</span>, <span class="hljs-built_in">tx</span>.hash);
};
main().catch(<span class="hljs-function"><span class="hljs-keyword">error</span> => </span>{
  console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  process.exit(<span class="hljs-number">1</span>);
});
</code></pre><p>代わりに<code>DepositAndCall</code>を行いたい場合、同様のパターンを行うことができますが、Depositコールにデータを含めることができます。この例では、zEVM上に存在する<code>swap</code>コントラクトを呼び出しています。</p><pre data-type="codeBlock" text="import { BigNumber } from &quot;@ethersproject/bignumber&quot;;
import { parseEther } from &quot;@ethersproject/units&quot;;
import { getAddress, isNetworkName } from &quot;@zetachain/addresses&quot;;
import { ethers } from &quot;hardhat&quot;;
import { ZRC20Addresses, TSS_ATHENS2 } from &quot;../systemConstants&quot;;
import { network } from &quot;hardhat&quot;;
// Helper function to format data for sending a swap transaction
const getSwapData = (zetaSwap: string, destination: string, destinationToken: string, minOutput: BigNumber) =&gt; {
  const params = getSwapParams(destination, destinationToken, minOutput);
  return zetaSwap + params.slice(2);
};
// Primary function definition
const main = async () =&gt; {
  if (!isNetworkName(network.name) || !network.name) throw new Error(&quot;Invalid network name&quot;);
  // Here you&apos;re choosing the target token you want the swap to output based on the network
  const destinationToken = network.name == &apos;goerli&apos; ? ZRC20Addresses[&apos;tMATIC&apos;] : ZRC20Addresses[&apos;gETH&apos;]
  console.log(&quot;Swapping native token...&quot;);
  // Get a signer to write your transaction
  const [signer] = await ethers.getSigners();
  // Get the correct address of the swap contract (using a helper function)
  const zetaSwap = getAddress({
    address: &quot;zetaSwap&quot;,
    networkName: &quot;athens&quot;,
    zetaNetwork: &quot;athens&quot;
  });
  // Use formatting function to get the correct data format
  const data = getSwapData(zetaSwap, signer.address, destinationToken, BigNumber.from(&quot;0&quot;));
  // Sign your transaction with Swap data.
  const tx = await signer.sendTransaction({
    data,
    to: TSS_ATHENS2,
    value: parseEther(&quot;0.5&quot;)
  });
  console.log(&quot;tx:&quot;, tx.hash);
};
main().catch(error =&gt; {
  console.error(error);
  process.exit(1);
});
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">BigNumber</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@ethersproject/bignumber"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">parseEther</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@ethersproject/units"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">getAddress</span>, <span class="hljs-title">isNetworkName</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@zetachain/addresses"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">ethers</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"hardhat"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">ZRC20Addresses</span>, <span class="hljs-title">TSS_ATHENS2</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"../systemConstants"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">network</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"hardhat"</span>;
<span class="hljs-comment">// Helper function to format data for sending a swap transaction</span>
const getSwapData <span class="hljs-operator">=</span> (zetaSwap: <span class="hljs-keyword">string</span>, destination: <span class="hljs-keyword">string</span>, destinationToken: <span class="hljs-keyword">string</span>, minOutput: BigNumber) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  const params <span class="hljs-operator">=</span> getSwapParams(destination, destinationToken, minOutput);
  <span class="hljs-keyword">return</span> zetaSwap <span class="hljs-operator">+</span> params.slice(<span class="hljs-number">2</span>);
};
<span class="hljs-comment">// Primary function definition</span>
const main <span class="hljs-operator">=</span> async () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>isNetworkName(network.<span class="hljs-built_in">name</span>) <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span>network.<span class="hljs-built_in">name</span>) <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"Invalid network name"</span>);
  <span class="hljs-comment">// Here you're choosing the target token you want the swap to output based on the network</span>
  const destinationToken <span class="hljs-operator">=</span> network.<span class="hljs-built_in">name</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'goerli'</span> ? ZRC20Addresses[<span class="hljs-string">'tMATIC'</span>] : ZRC20Addresses[<span class="hljs-string">'gETH'</span>]
  console.log(<span class="hljs-string">"Swapping native token..."</span>);
  <span class="hljs-comment">// Get a signer to write your transaction</span>
  const [signer] <span class="hljs-operator">=</span> await ethers.getSigners();
  <span class="hljs-comment">// Get the correct address of the swap contract (using a helper function)</span>
  const zetaSwap <span class="hljs-operator">=</span> getAddress({
    <span class="hljs-keyword">address</span>: <span class="hljs-string">"zetaSwap"</span>,
    networkName: <span class="hljs-string">"athens"</span>,
    zetaNetwork: <span class="hljs-string">"athens"</span>
  });
  <span class="hljs-comment">// Use formatting function to get the correct data format</span>
  const data <span class="hljs-operator">=</span> getSwapData(zetaSwap, signer.<span class="hljs-built_in">address</span>, destinationToken, BigNumber.from(<span class="hljs-string">"0"</span>));
  <span class="hljs-comment">// Sign your transaction with Swap data.</span>
  const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await signer.sendTransaction({
    data,
    to: TSS_ATHENS2,
    <span class="hljs-built_in">value</span>: parseEther(<span class="hljs-string">"0.5"</span>)
  });
  console.log(<span class="hljs-string">"tx:"</span>, <span class="hljs-built_in">tx</span>.hash);
};
main().catch(<span class="hljs-function"><span class="hljs-keyword">error</span> => </span>{
  console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  process.exit(<span class="hljs-number">1</span>);
});
</code></pre><p>初期にサポートされるアセットは、Bitcoinを含むすべての接続されたチェーン上のZETAとガスアセットです。プロトコルは、将来のアップグレードですべてのファンジブルトークンに拡張される予定です。</p><h3 id="h-423-bitcoinzevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.3 BitcoinからzEVMコントラクトを入金・呼び出しする方法</h3><p>Bitcoinでテストするためには、<code>OP_RETURN</code>を設定できるウォレットを使用する必要があります。</p><p>ZRC-20やZetaChainエコシステムの残りの部分で使用するためにZetaChainにBitcoinを入金するには、ZetaChainのTSSによって管理されるアドレスにBitcoinを送る必要があります。トランザクションは、以下のドキュメントにあるようにフォーマットされた<code>OP_RETURN</code>を含むべきです（｜記号は可読性向上のためのもので、実際のメッセージにはそれらを含めるべきではありません）。</p><pre data-type="codeBlock" text="z|0xcc7bb2d219a0fc08033e130629c2b854b7ba9195|00000000000000000000000000000000000000000000000000000000000
"><code>z<span class="hljs-operator">|</span><span class="hljs-number">0xcc7bb2d219a0fc08033e130629c2b854b7ba9195</span><span class="hljs-operator">|</span>00000000000000000000000000000000000000000000000000000000000
</code></pre><ul><li><p>文字「z」は定数で、<code>OP_RETURN</code>が有効であることを確認するためにZetaCoreによって使用されます。</p></li><li><p>アドレスは、トランザクションがzEVMコードを実行する場合はコントラクト、zBTCを送りたいだけの場合はアカウントにすることができます。</p></li><li><p>メッセージは任意であり、宛先のコントラクトによって解析されます（ある場合のみ）。</p></li></ul><p>無効な情報が送信された場合（例：無効なアドレス）、アセットは元の送信者アドレスに戻されます。</p><p>要約すると、zEVMのBTCトランザクションは次のようになります。</p><ul><li><p>ユーザーはBitcoinネットワーク上で1BTCをBitcoinTSSアドレスに送り、txに（<code>OP_RETURN</code>経由で）「deposit to 0x1337」というメモを（口語で）追加します。</p></li><li><p>このTXを受信すると、ZetaCoreステートマシンは、手数料を差し引いた1zBTCを0x1337に鋳造(mint)してクレジットするために、deposit (0x1337, 1e8)を呼び出します。</p></li><li><p>0x1337がExternally Owned Account（EOA）であれば、それでおしまいです。それがコントラクトであれば、ZetaCoreは<code>OP_RETURN</code>メモで指定されたメッセージを送信する<code>onCrossChainMessage</code>関数を呼び出します。</p></li></ul><p>TSSアドレスはBTCを保持しており、このBTC ZRC-20コントラクトの内部で所有権が追跡されます。</p><h3 id="h-424-withdraw" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.4 <code>withdraw</code></h3><p><code>withdraw</code>関数は、任意のExternally Owned Account (EOA)またはスマートコントラクトから呼び出されます。この関数は、金額が焼却され、Withdrawal()イベントを残すことを除けば、transfer()と同じようなものです。このイベントは<code>zetacore</code>モジュールでCCTXをトリガーし、<code>zetaclient</code>はそれをピックアップしてアウトバウンドのtxを処理します。この例では、ある与えられた2つのトークンのプールを持つ、既存のUniswapデプロイメントを使用しています。<code>onCrossChainCall</code>が呼び出されると、ターゲットZRC-20トークンへのスワップを実行し、それをネイティブチェーン上のアドレスに引き出します。</p><pre data-type="codeBlock" text="contract ZEVMSwapApp is zContract {
    address public router02; 
    constructor(address router02_) {
        router02 = router02_;
    }
    
    // Call this function to perform a cross-chain swap
    function onCrossChainCall(address zrc20, uint256 amount, bytes calldata message) external override {
        address targetZRC20;
        address receipient;
        uint256 minAmountOut; 
        (targetZRC20, receipient,minAmountOut) = abi.decode(message, (address,address,uint256));
        address[] memory path;
        path = new addressUnsupported embed;
        path[0] = zrc20;
        path[1] = targetZRC20;
        // Approve the usage of this token by router02
        IZRC20(zrc20).approve(address(router02), amount);
        // Swap for your target token
        uint256[] memory amounts = IUniswapV2Router01(router02).swapExactTokensForTokens(amount, minAmountOut, path, address(this), block.timestamp);
        // Withdraw amountto target recipient
        IZRC20(targetZRC20).withdraw(abi.encodePacked(receipient), amounts[1]);
    }
}
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">ZEVMSwapApp</span> <span class="hljs-keyword">is</span> <span class="hljs-title">zContract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> router02; 
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> router02_</span>) </span>{
        router02 <span class="hljs-operator">=</span> router02_;
    }
    
    <span class="hljs-comment">// Call this function to perform a cross-chain swap</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onCrossChainCall</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> zrc20, <span class="hljs-keyword">uint256</span> amount, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">calldata</span> message</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">override</span></span> </span>{
        <span class="hljs-keyword">address</span> targetZRC20;
        <span class="hljs-keyword">address</span> receipient;
        <span class="hljs-keyword">uint256</span> minAmountOut; 
        (targetZRC20, receipient,minAmountOut) <span class="hljs-operator">=</span> <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">decode</span>(message, (<span class="hljs-keyword">address</span>,<span class="hljs-keyword">address</span>,<span class="hljs-keyword">uint256</span>));
        <span class="hljs-keyword">address</span>[] <span class="hljs-keyword">memory</span> path;
        path <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> addressUnsupported embed;
        path[<span class="hljs-number">0</span>] <span class="hljs-operator">=</span> zrc20;
        path[<span class="hljs-number">1</span>] <span class="hljs-operator">=</span> targetZRC20;
        <span class="hljs-comment">// Approve the usage of this token by router02</span>
        IZRC20(zrc20).approve(<span class="hljs-keyword">address</span>(router02), amount);
        <span class="hljs-comment">// Swap for your target token</span>
        <span class="hljs-keyword">uint256</span>[] <span class="hljs-keyword">memory</span> amounts <span class="hljs-operator">=</span> IUniswapV2Router01(router02).swapExactTokensForTokens(amount, minAmountOut, path, <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>), <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>);
        <span class="hljs-comment">// Withdraw amountto target recipient</span>
        IZRC20(targetZRC20).withdraw(<span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(receipient), amounts[<span class="hljs-number">1</span>]);
    }
}
</code></pre><p>この例がいかにシンプルであるかに注目してください。20行程度のコード（その多くは汎用コード）で、ユーザーがネイティブアセットと他のネイティブアセットを交換できるクロスチェーンスワップdAppを作成できます。これらのシンプルな機能を組み合わせることで、オムニチェーンアプリケーション構築のための強力かつシンプルなソリューションが生まれます。</p><h1 id="h-5-5" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. オムニチェーンスマートコントラクトを利用した流動性プール[5]</h1><p>流動性プールは、ZetaChainの重要な機能と、Cryptoエコシステム全体のためのユーザー体験の向上（手数料の低下、より流動的な取引所、より多用途な金融アプリケーション）の両方を促進します。ZetaChain環境のプールは、コアZETAプール、追加zEVMプール、外部ZETAプールという3種類の主要バケットに分類されます。</p><h2 id="h-51-zeta" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.1 コアZETAプール</h2><p>[ZETA] / [Gas ZRC-20] Uniswap Pool (on zEVM)は、そのチェーンにアウトバウンドトランザクションを書き込むためにZetaChainによって必要とされるコアプールです。チェーンのサポートが追加されるたびに、ZETAとそのチェーンのネイティブガスアセットの間の対応するプールも作成されます。</p><p>ここでは、UniswapV2コントラクトがZETA/gas プールをどのように制御するかを視覚化することができます。流動性は、接続されたチェーンのTSSアドレスに提供され、その後、Uniswap（または任意の交換コントラクト）は、ZETAまたは他のアセットに対してそれらのアセット（ZRC-20）を使用することができます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">コアZETAプール[5]</figcaption></figure><p>例えば、ネイティブガス（ZRC-20）とZETAをペアにしてアウトバウンドトランザクションの支払いを行うコアプールを使って、トランザクションがどのように機能するかを見ることができます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><figcaption HTMLAttributes="[object Object]" class="">ZRC-20を使ったzEVM上のDEX[5]</figcaption></figure><h2 id="h-52-zevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.2 追加zEVMプール</h2><p>どのような流動性プールもzEVM上に作成することができます。ZetaChain上に通常のERC-20トークンを展開し、ZRC-20を通じて外部チェーン・トークンを組み込み、シングルチェーンEVM上と同様に、アプリケーションに必要な流動性プールのあらゆる組み合わせを作成することができます。例えば、ユーザーが異なるアセットに対してより流動的に取引できるように、有用な[ZETA]/[Stablecoin]や[Gas]/[Stablecoin]プールを作成することができます。</p><h2 id="h-53-zeta" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.3 外部ZETAプール</h2><p>ZETAは、スマートコントラクトのガス代やクロスチェーンメッセージングに使用されるように、ZetaChain上だけでなく、あらゆる接続先チェーン上の両方に存在するオムニチェーントークンです。各チェーン上の[ZETA] / [Gas]などの特定のプールは、メッセージングによるクロスチェーンの価値移転を促進するアプリケーションにとって有用です。また、開発者はメッセージングに使用するために、ZETAを取得するための外部チェーン上のプールを必要とします。</p><h1 id="h-6-67" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. クロスチェーンメッセージング[6][7]</h1><p>クロスチェーンメッセージングは、ZetaChainを含む、任意の接続されたチェーンから任意の接続されたチェーンにメッセージを送ることを可能にします。これらは、一般的にすべてのチェーン間で維持する最小限のロジックまたは状態を必要とし、異なるチェーン間で渡される必要があるデータが一方向にのみ転送されるアプリケーションのために最も理にかなっています。新しいラップアセットを必要とせず、メッセージングを通じてあらゆるデータや価値を送ることができます。</p><h2 id="h-61" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6.1 コネクター</h2><p>ZetaChainコネクターは、接続された任意のチェーン間でクロスチェーンメッセージ（データと値）を送信することができます。</p><h3 id="h-611" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1.1 はじめに</h3><p>Zetaコネクターを使用してクロスチェーンのスマートコントラクトを作成するために、あなたのコントラクトは以下のようになります。</p><ul><li><p>メッセージを送信するために<code>connector.send</code>を呼び出す</p></li><li><p>メッセージを受信するために<code>onZetaMessage</code>を処理する</p></li><li><p>メッセージを戻すために<code>onZetaRevert</code>を処理する</p></li></ul><h3 id="h-612" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1.2 チェーン間でデータと値の送信</h3><p>他のチェーンと相互作用するために、自分のコントラクトから<code>connector.send</code>を呼び出します。</p><pre data-type="codeBlock" text="interface ZetaInterfaces {
      /**
      * @dev Use SendInput to interact with the Connector: connector.send(SendInput)
      */
      struct SendInput {
          /// @dev Chain id of the destination chain. More about chain ids https://docs.zetachain.com/learn/glossary#chain-id
          uint256 destinationChainId;
          /// @dev Address receiving the message on the destination chain (expressed in bytes since it can be non-EVM)
          bytes destinationAddress;
          /// @dev Gas limit for the destination chain&apos;s transaction
          uint256 destinationGasLimit;
          /// @dev An encoded, arbitrary message to be parsed by the destination contract
          bytes message;
          /// @dev ZETA to be sent cross-chain + ZetaChain gas fees + destination chain gas fees (expressed in ZETA)
          uint256 zetaValueAndGas;
          /// @dev Optional parameters for the ZetaChain protocol
          bytes zetaParams;
      }
    }

    interface ZetaConnector {
        function send(ZetaInterfaces.SendInput calldata input) external;
    }
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaInterfaces</span> </span>{
      <span class="hljs-comment">/**
      * @dev Use SendInput to interact with the Connector: connector.send(SendInput)
      */</span>
      <span class="hljs-keyword">struct</span> <span class="hljs-title">SendInput</span> {
          <span class="hljs-comment">/// @dev Chain id of the destination chain. More about chain ids https://docs.zetachain.com/learn/glossary#chain-id</span>
          <span class="hljs-keyword">uint256</span> destinationChainId;
          <span class="hljs-comment">/// @dev Address receiving the message on the destination chain (expressed in bytes since it can be non-EVM)</span>
          <span class="hljs-keyword">bytes</span> destinationAddress;
          <span class="hljs-comment">/// @dev Gas limit for the destination chain's transaction</span>
          <span class="hljs-keyword">uint256</span> destinationGasLimit;
          <span class="hljs-comment">/// @dev An encoded, arbitrary message to be parsed by the destination contract</span>
          <span class="hljs-keyword">bytes</span> message;
          <span class="hljs-comment">/// @dev ZETA to be sent cross-chain + ZetaChain gas fees + destination chain gas fees (expressed in ZETA)</span>
          <span class="hljs-keyword">uint256</span> zetaValueAndGas;
          <span class="hljs-comment">/// @dev Optional parameters for the ZetaChain protocol</span>
          <span class="hljs-keyword">bytes</span> zetaParams;
      }
    }

    <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaConnector</span> </span>{
        <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">send</span>(<span class="hljs-params">ZetaInterfaces.SendInput <span class="hljs-keyword">calldata</span> input</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    }
</code></pre><h3 id="h-613-onzetamessage" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1.3 <strong>onZetaMessage</strong></h3><p>ソースコントラクトが<code>connector.send</code>を呼び出した後、ZetaChainシステムは、メッセージを宛先チェーンに転送し、コントラクトアドレス<code>destinationAddress</code>で<code>onZetaMessage</code>を呼び出します。オプションとして、送信側コントラクトは、価値をクロスチェーンに移動させるためにいくつかのZETAトークン（<code>ZetaAmount</code>、ZetaConnectorコントラクトによって使われることをApprove）を提供し、宛先チェーン相互作用のためのガス料金をカバーすることが可能です。ZetaChainシステムは、ZETAトークンを宛先チェーンに移動し、それを受信スマートコントラクト<code>destinationAddress</code>に転送します。宛先チェーンは、このインターフェイスを実装するスマートコントラクトをdeployする必要があります。</p><pre data-type="codeBlock" text="interface ZetaInterfaces {
      struct ZetaMessage {
          bytes zetaTxSenderAddress;
          uint256 sourceChainId;
          address destinationAddress;
          /// @dev Remaining ZETA from zetaValueAndGas after subtracting ZetaChain gas fees and destination gas fees
          uint256 zetaValue;
          bytes message;
      }
    }

    interface ZetaReceiver {
      function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) external;
    }
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaInterfaces</span> </span>{
      <span class="hljs-keyword">struct</span> <span class="hljs-title">ZetaMessage</span> {
          <span class="hljs-keyword">bytes</span> zetaTxSenderAddress;
          <span class="hljs-keyword">uint256</span> sourceChainId;
          <span class="hljs-keyword">address</span> destinationAddress;
          <span class="hljs-comment">/// @dev Remaining ZETA from zetaValueAndGas after subtracting ZetaChain gas fees and destination gas fees</span>
          <span class="hljs-keyword">uint256</span> zetaValue;
          <span class="hljs-keyword">bytes</span> message;
      }
    }

    <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaReceiver</span> </span>{
      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onZetaMessage</span>(<span class="hljs-params">ZetaInterfaces.ZetaMessage <span class="hljs-keyword">calldata</span> zetaMessage</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    }
</code></pre><p>関数内部では、現在のスマートコントラクトが、送信側コントラクトが送信した<code>ZetaAmount</code> ZETAトークン（ガス代を差し引いたもの）をすでに受け取っていると仮定することができます。</p><h3 id="h-614-onzetarevert" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1.4 <strong>onZetaRevert</strong></h3><p>このコントラクト関数呼び出しが何らかの理由で失敗した場合、ZetaChainシステムは、送信側スマートコントラクトの<code>onZetaRevert</code>関数を呼び出します。焼却済ZETAトークンは送信側のコントラクトに払い戻され、送信側のコントラクトはこのクロスチェーンメッセージに関する当該アクションを適切に戻す必要があります。</p><p>送信元チェーンのスマートコントラクトもこのインターフェイスを実装する必要があります。</p><pre data-type="codeBlock" text="interface ZetaInterfaces {
      struct ZetaRevert {
          address zetaTxSenderAddress;
          uint256 sourceChainId;
          bytes destinationAddress;
          uint256 destinationChainId;
          /// @dev Equals to: zetaValueAndGas - ZetaChain gas fees - destination chain gas fees - source chain revert tx gas fees
          uint256 remainingZetaValue;
          bytes message;
      }
    }

    interface ZetaReceiver {
      function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external;
    }
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaInterfaces</span> </span>{
      <span class="hljs-keyword">struct</span> <span class="hljs-title">ZetaRevert</span> {
          <span class="hljs-keyword">address</span> zetaTxSenderAddress;
          <span class="hljs-keyword">uint256</span> sourceChainId;
          <span class="hljs-keyword">bytes</span> destinationAddress;
          <span class="hljs-keyword">uint256</span> destinationChainId;
          <span class="hljs-comment">/// @dev Equals to: zetaValueAndGas - ZetaChain gas fees - destination chain gas fees - source chain revert tx gas fees</span>
          <span class="hljs-keyword">uint256</span> remainingZetaValue;
          <span class="hljs-keyword">bytes</span> message;
      }
    }

    <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ZetaReceiver</span> </span>{
      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onZetaRevert</span>(<span class="hljs-params">ZetaInterfaces.ZetaRevert <span class="hljs-keyword">calldata</span> zetaRevert</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    }
</code></pre><p>送信先トランザクションが失敗した場合、この関数でアプリケーションレベルのロールバックが発生するはずです。</p><h3 id="h-615" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1.5 まとめ</h3><p>ZetaChainのコネクターを使用してあなたのdAppsをマルチチェーンに適応するために、あなたはZetaChainによってサポートされる複数のチェーンにコントラクトをデプロイする必要があります。それらコントラクトは、<code>onZetaMessage</code>および<code>onZetaRevert</code>コールバックを実装し、<code>connector.send</code>を呼び出すことによって、互いの間でメッセージと値を送信することができるようになります。</p><h2 id="h-62" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6.2 用例</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/cross-chain-messaging/connector-api">https://www.zetachain.com/docs/developers/cross-chain-messaging/connector-api</a></p><p>上記のページの下部に、用例一覧が載っています。クロスチェーンメッセージングによって、以下のことに使うことができます。</p><ul><li><p>クロスチェーンメッセージ</p></li><li><p>マルチチェーン価値転送</p></li><li><p>クロスチェーンカウンター</p></li><li><p>クロスチェーンNFT</p></li><li><p>マルチチェーンスワップ</p></li></ul><h1 id="h-7" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. ガス代</h1><h2 id="h-71-8" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7.1 オムニチェーンスマートコントラクトのガス代[8]</h2><p>ZetaChain上のスマートコントラクトと対話するとき、ユーザーはそのトランザクションのためにガスに費やされる価値の一部を含んでいます。</p><p>スマートコントラクトのデプロイメントとスマートコントラクトの呼び出しは、実行するためにガスを必要とします。ユーザはZRC-20入金、メッセージにコントラクト呼び出しを含む、またはZetaChainに直接接続し、zEVMにすでに展開されているコントラクトと対話することにより、外部チェーンからzEVMコントラクトを呼び出すことができます。</p><p>ZetaEVMスマートコントラクトのガス市場/メカニズムは、Ethermintに基づいており、EIP 1559 Ethereumガス代と同様の動作をします。このガスシステムは、悪意のあるユーザーがネットワークをスパミングすることを抑止するために構築されています。</p><h2 id="h-72-9" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7.2 クロスチェーンメッセージングのガス代[9]</h2><p>ユーザー（ウォレット、コントラクト）は、ZetaChainを通してチェーン間でデータと価値を送るために手数料を支払う必要があります。ユーザーは、接続されたチェーン上でZETA（およびメッセージデータ）をコネクターコントラクトに送信することにより、手数料を支払います。このZETAは、バリデータ／ステーカー／エコシステムプールへの支払い、および送信先でのガスへの支払いに使用されます。ユーザーにとっては、これがすべて1つのトランザクションにバンドルされます。</p><h3 id="h-721" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.2.1 データサイズ/ストレージに応じた料金の変動</h3><p>ネットワーク料金には、ユーザーがチェーン上で送信しようとするメッセージサイズ（バイト）に基づくコンポーネントがあります。</p><p>これは、ユーザーが経済的に健全でありながら送信できるデータ量を調整するものです。非常に複雑なデータを送信する場合は、より多くのコストがかかります。この仕組みは、スマートコントラクトの手数料の仕組みと同様に、今後の開発により、変動相場制へと移行する予定です。</p><h2 id="h-73-base-fee89" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7.3 Base Fee[8][9]</h2><p>ZetaChainは、あらゆるトランザクション、クロスチェーンメッセージングトランザクション、またはスマートコントラクトに対して、（例えば）0.01 ZETAのBase Flat Feeを含んでいます。このBase Feeは、ネットワークトラフィックと混雑状況に基づいてネットワークによって調整可能であり、焼却されます。</p><h1 id="h-8" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">8. 参考・引用文献</h1><p>[1] ZetaChain Architecture Overview, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/concepts/zetachain-architecture-overview">https://www.zetachain.com/docs/developers/concepts/zetachain-architecture-overview</a>（アクセス日：2022年11月28日）</p><p>[2] FAQ, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/learn/faq">https://www.zetachain.com/docs/learn/faq</a>（アクセス日：2022年11月28日）</p><p>[3] Omnichain Smart Contracts vs. Messaging, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/concepts/smart-contracts-vs-messaging">https://www.zetachain.com/docs/developers/concepts/smart-contracts-vs-messaging</a>（アクセス日：2022年11月28日）</p><p>[4] ZRC-20, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/omnichain-smart-contracts/zrc-20">https://www.zetachain.com/docs/developers/omnichain-smart-contracts/zrc-20</a>（アクセス日：2022年11月28日）</p><p>[5] Liquidity Pools, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/omnichain-smart-contracts/liquidity-pools">https://www.zetachain.com/docs/developers/omnichain-smart-contracts/liquidity-pools</a>（アクセス日：2022年11月28日）</p><p>[6] Cross-Chain Messaging, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/cross-chain-messaging/overview">https://www.zetachain.com/docs/developers/cross-chain-messaging/overview</a>（アクセス日：2022年11月28日）</p><p>[7] Connector, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/cross-chain-messaging/connector-api">https://www.zetachain.com/docs/developers/cross-chain-messaging/connector-api</a>（アクセス日：2022年11月28日）</p><p>[8] Gas Fees, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/omnichain-smart-contracts/gas-fees">https://www.zetachain.com/docs/developers/omnichain-smart-contracts/gas-fees</a>（アクセス日：2022年11月28日）</p><p>[9] Gas Fees, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/docs/developers/cross-chain-messaging/gas-fees">https://www.zetachain.com/docs/developers/cross-chain-messaging/gas-fees</a>（アクセス日：2022年11月28日）</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2a2e4f95ca217c8b95ec0ceca874448cd49970a05e08da99a862b6d95570341a.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Sismo Protocolの紹介]]></title>
            <link>https://paragraph.com/@hashigo/sismo-protocol</link>
            <guid>gYVMD9dlGzzKbeB8iH9h</guid>
            <pubDate>Wed, 23 Nov 2022 11:01:31 GMT</pubDate>
            <description><![CDATA[1. Sismoとは[1]Sismoは、分散化、プライバシー、ユーザビリティに重点を置いたモジュール式の認証プロトコルです。トークン化された証明書（アテステーション）が発行できます。証明書は、バッジ(Non-Transferable Tokens/SBT)で表現されます。 このプロトコルの二つのインスタンスがPolygonにデプロイされました。Playground, permisionlessプロトコル: どのチームも、自分たちのコミュニティのためにZK Badgesを作成することができます（factoryまたはチュートリアルを利用した場合）Main, curatedプロトコル: ガバナンスを通過したZKバッジを作成することができます1.1 ZKバッジSismoは、バッジの作成方法について何も明らかにしないZKバッジに強い関心を寄せています。ZKバッジの生成プロセスは、ゼロ知識証明（ZK Proof）に基づき、ユーザーとデータのプライバシーを保証します。1.2 モジュール方式と相互運用性Sismoのプロトコルはモジュール式で、複数の種類のバッジが共存しています。これらは、プライバ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-1-sismo1" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Sismoとは[1]</h1><p>Sismoは、分散化、プライバシー、ユーザビリティに重点を置いたモジュール式の認証プロトコルです。トークン化された証明書（アテステーション）が発行できます。証明書は、バッジ(Non-Transferable Tokens/SBT)で表現されます。 このプロトコルの二つのインスタンスがPolygonにデプロイされました。</p><ul><li><p>Playground, permisionlessプロトコル: どのチームも、自分たちのコミュニティのためにZK Badgesを作成することができます（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://factory.sismo.io/">factory</a>または<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/devs-tutorials/create-your-zk-badge-in-15-minutes">チュートリアル</a>を利用した場合）</p></li><li><p>Main, curatedプロトコル: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notion.so/Sismo-Governance-Documentation-8d9f6ac5d2f049dfb15de35664602acb">ガバナンス</a>を通過したZKバッジを作成することができます</p></li></ul><h3 id="h-11-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1.1 ZKバッジ</h3><p>Sismoは、バッジの作成方法について何も明らかにしないZKバッジに強い関心を寄せています。ZKバッジの生成プロセスは、ゼロ知識証明（ZK Proof）に基づき、ユーザーとデータのプライバシーを保証します。</p><h3 id="h-12" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1.2 モジュール方式と相互運用性</h3><p>Sismoのプロトコルはモジュール式で、複数の種類のバッジが共存しています。これらは、プライバシー、分散化、スケーラビリティに関して異なるトレードオフを行う様々なAttester（スマートコントラクト）によって生成されます。Sismoの最終目標は、多様で相互運用可能なBadgeを実現し、創造的な方法で互いに組み合わされ、認証および評価システムに関する真のイノベーションを促進することです。</p><h1 id="h-2-zk2" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. ZKバッジとは[2]</h1><p>Web3ユーザーは、自分のウォレットをアプリケーションへのアカウントログインとして使い始めています。アプリケーションは、ENS名やプロフィール画像など、ユーザーのウォレットに関連するオンチェーンデータを取得します。</p><p>Badgesは、ユーザーが自分の評判や履歴をウォレットにインポートするための新しいWeb3プリミティブです。これにより、ウォレットをログインシステムとして使用するアプリケーション（トークンゲートアプリケーション、イEthereumアプリケーションへのサインイン、スマートコントラクト）において、ゲートのあるサービスへのアクセスや評判の開示を行うことができます。</p><h3 id="h-21-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1 ZKバッジ: プライバシーの守られたバッジ</h3><p>ZKバッジによって、個人情報をプライバシーに配慮した方法でウォレットに転送することができます。</p><p>例えば、Proof of Humanityレジストリのメンバーであれば、新しく作成したウォレットに一つだけ、Proof of Humanity ZKバッジを刻印することができます。このバッジを使って、Web3アプリケーションに接続し、実名を明かさずに自分が人間であることを証明します。</p><p>このシステムにより、Sybil耐性アプリケーション、プライベート投票、プライベートエアドロップ、プライベートグループチャットなど、さまざまなことが可能になります。</p><h3 id="h-22-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2 ゼロ知識証明とZKミンティング</h3><p>このMintプロセスにはゼロ知識証明が含まれ、ZKバッジの資格を証明するために使用されたソース・アカウントは誰にも追跡できないことが保証されています。使用している技術は、ユーザーが個人的に資産を転送することを可能にするトルネードキャッシュと非常によく似ています。ここでは、データを個人的に転送します。</p><h3 id="h-23-sbt" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.3 転送不能トークン / SBT</h3><p>Sismo ZKバッジは譲渡不可能なトークン（ERC1155）で、Soulbound Tokenと呼ばれることもあります。</p><p>それらは、&quot;私はEthereumユーザーのトップ0.1%の一部である&quot;、&quot;私は10k以上のTwitterフォロワーを持っている&quot;、&quot;私はProof Of Humanityレジストリの一部である &quot;といったことを証明できます。</p><p>ここから、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/">curated badges</a>と<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://playground.sismo.io/">permissionlessに公開されたバッジ</a>を確認できます。</p><h3 id="h-24-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.4 ユースケース例[3]</h3><ul><li><p>特定のNFT群のどれかを所有していることを、NFTのあるアカウントを公開せずに公開アカウントで証明する</p></li><li><p>Twitterでたくさんのフォロワーを獲得しているアカウントの集合の一部であることを、非公開アカウントで証明する</p></li></ul><h1 id="h-3-4" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. 用語解説[4]</h1><h3 id="h-31-badge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.1 バッジ(Badge)</h3><p>認証（アテステーション）を表す譲渡不可能なトークン（ERC1155）。各バッジの裏側には、対象となるアカウントのグループが存在する。バッジを付けるには、そのバッジの対象となるアカウント（ソースアカウントと呼ぶ）を所有していることを証明する必要がある。例えば、「EthereumパワーユーザーZKバッジ」を手に入れたいなら、50トランザクション以上のアドレスを所有していることを証明しなければならない。</p><h3 id="h-32-source-account" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2 ソースアカウント(Source Account)</h3><p>ソースアカウント（特定のバッジのための）は、このバッジの適格性を証明するために使用されるアカウントである。ソースアカウントから適格性のproofが生成される。これにより、バッジを宛先アカウントにmintすることができる。ソースアカウントとして（現在のところ）、Ethereumアカウント、GitHubアカウント、Twitterアカウントが使われる。</p><h3 id="h-33-destination-account" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.3 宛先アカウント(Destination Account)</h3><p>（あるバッジにおける）宛先アカウントとは、バッジを受け取るためのアカウントを指す。どんなアカウント（EthereumのEOA）でも指定可能である。つまり、ソースアカウントから宛先アカウントに評判やデータが転送される。</p><h3 id="h-34-vault" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.4 Vault</h3><p>Sismo Vaultは、SismoのアプリのUXを向上させるために使用される暗号化されたストレージである。Sismoのサーバーに保存されるが、暗号化されているため、利用者だけがアクセスできる。これにより、バッジの生成に使用したインポート元とインポート先のアカウントを保存するため、Sismoを使用するたびにアカウントを追加する必要性がなくなる。</p><h3 id="h-35-vault" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.5 Vaultオーナー</h3><p>Vaultオーナーは、インポートされたアカウントで、Vaultを復号化することができる。デフォルトでは、Vaultにインポートされたすべてのソースおよび宛先アカウントは所有者として設定される。この設定は、Vaultの設定で更新することができる。オーナーアカウントでSismoにサインインすると、Vault全体と、そのインポートされたすべてのソースと宛先が取得できる。</p><h3 id="h-36" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.6 アカウントのインポート</h3><p>SismoのVaultにアカウントをインポートするということは、ZKバッジの生成に必要な暗号化ツールを保管することを意味する。アカウントが送信元アカウントとして使用されているか送信先アカウントとして使用されているかにかかわらず、ZKバッジをmintするために必要なZK Proofを後で生成するための最初のステップとして、暗号ツール（シードとコミットメント）を生成する必要がある。Sismoを使用する際にシームレスな体験を提供するために、Vaultはそれら（シードとコミットメント）を保存する。</p><ul><li><p>シード: アカウントからメッセージに署名することで生成される。シードはsecret（アカウントがオーナーに設定されている場合はVaultの暗号鍵、ZKバッジを生成するために必要なコミットメントなど）を生成するために使用される。</p></li><li><p>コミットメント: あなたのシードとアドレスから導き出されるsecretである。これによって、あなたのアカウントからZK Proofが生成される。</p></li></ul><h1 id="h-4-5" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. ガバナンス[5]</h1><p>Sismoガバナンスは、Sismo Protocolの開発と保守を漸進的に監督・管理するために、2021年10月に発足しました。プライバシー、評判、アイデンティティ、ゼロ知識証明に同様の関心を持つキュレーション世代のメンバーが集まるソーシャルコミュニティとしてスタートしました。 プレイグラウンド環境からキュレーション環境へ移行するためのZKバッジの審査は、Sismoコミュニティが担当します。（ただし、迅速に市場に展開するために、2023年Q1頃まではCore チームが担当します[6]）</p><h3 id="h-41" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.1 ガバナンスの場</h3><p>Sismoのガバナンスに参加するために、いくつかのガバナンスの場が用意されており、それぞれが特定の目的をもっています。</p><p>Sismo <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/sismo">Discord</a>サーバーは、現在Sismoコミュニティの主要なディスカッションハブとなっています。ガバナンスチャンネル(「Governance Cave」セクション)では、ガバナンスに関する事柄やプロセス、過去・現在・未来の改善提案について議論することができます。Announcementsチャンネルでは、新しい提案の投票が可能になったことをコミュニティにお知らせします。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://snapshot.org/#/sismo.eth">Snapshot</a>は、ユーザーがオフチェーンで意志を伝えることができるシンプルな投票インターフェースです。SismoのSnapshot空間での投票は、投票に使用されたアドレスが所有するSismo ZKバッジが持つ投票力によって重み付けが行われます。</p><h3 id="h-42-4" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2 コミュニティと投票力[4]</h3><p>Sismo Contributor ZK Badgeは3種類のレベルに分けられます。</p><ul><li><p>レベル1（ユーザー）: 1つの提案につき、行使できる投票力は1 主に、すでにSismoメインアプリケーションと交流のあるすべてのアドレスと、一部の.sismo.eth ensホルダーが対象です。</p></li><li><p>レベル2（インパクトのある貢献者）: 1つの提案につき、行使できる投票力は50 特定のバッジをお持ちの方、Sismo Gitcoinで寄付された方、Sismoのイベントに参加された方、厳選された.sismo.eth ensをお持ちの方などが対象です。</p></li><li><p>レベル3（ビルダー）: 1つの提案につき、行使できる投票力は500 Sismoへの積極的な貢献者、および、Sismo Core Teamのメンバー全員が対象です。</p></li></ul><h3 id="h-43-5" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3 投票力の獲得方法[5]</h3><p>現在でも投票力を獲得する方法が存在するので、紹介します。</p><ul><li><p>レベル1</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/">Curatedプロトコル</a>でZKバッジを一つ以上獲得したユーザー（Playgroundプロトコルは除く）</p></li></ul></li><li><p>レベル2</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/">Curatedプロトコル</a>で<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/proof-of-humanity">Proof of Humanity ZK Badge</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/ethereum-power-users">Ethereum Power Users ZK Badge</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.sismo.io/ens-supporter">ENS Supporters ZK Badge</a>のいずれか一つでも獲得したユーザー（Playgroundプロトコルは除く）</p></li><li><p>Sismoコアチームメンバーがプロジェクトに貢献したお礼に提供した貢献度POAP（レベル2）を請求した人(<em>POAP IDs: 80235 / User Testing #2 / , 81377 / Contributor #2 /)</em></p></li></ul></li><li><p>レベル3</p><ul><li><p>Sismoコアチームメンバーがプロジェクトに貢献したお礼に提供した貢献度POAP（レベル3）を請求した人(POAP IDs: 37527 / Ziki Testers /, 39515 / Ziki Artists /, 39651 / Ziki Community Managers /, 39654 / Ziki Data Analysts /, 39655 / Ziki copywriters /, 39657 / Ziki cryptographers /, 39660 / Ziki Data creators /, 54045 / Ziki Run /, 66267 / Ziki Contributor Poap/)</p></li></ul></li></ul><h1 id="h-5-7" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. 技術に関すること[7]</h1><h2 id="h-51" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.1 コミットメントマッパー</h2><p>コミットメントマッパーは、Sismoが提供するオフチェーンのトラストされたサービスです。これは分離されたインフラストラクチャであり、不変です。アカウント所有者のproofを秘密知識のproofに変換することが可能になります。アカウント所有者は、コミットメントマッパーからレシートを受け取り、自分のアカウントとコミットメント（例えば、secretのハッシュ）を対応付けます。ユーザーのsecretとコミットメントマッパーのレシートの組み合わせが、Delegated Proof Of Ownershipを形成します。</p><h3 id="h-511" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.1 動作原理</h3><p>ユーザーは、アカウント所有の証明（例：EthereumアカウントのウォレットからのECDSA署名、GitHubやTwitterアカウントなどのWeb2アカウントのOAuth認証）とコミットメント（例：自分しか知らないsecretのハッシュや自分のアカウントのEdDSA公開鍵）をコミットメントマッパーに提出します。 コミットメントマッパーは、アカウント所有者証明の有効性を確認し、データベース上に格納されたマッピングにこのアカウントに対するコミットメントを登録します。アカウントがすでにコミットメントとマッピングされている場合、コミットメントマッパーはエラーを返します。次に、マッパーは署名入りのコミットメントレシートをユーザーに送り、コミットメントスキームの通過を保証します。 コミットメントレシートは、アカウント所有者が新しい所有権証明書を送ることで、いつでも取得することができます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/025b1d4ebfd5ccf316f456849f5d9f1b36c84ce64000d7f442a23eca49cf2d93.png" alt="Delegated Proof of Ownership workflow[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Delegated Proof of Ownership workflow[7]</figcaption></figure><blockquote><p>例: SNARKに適したPoseidonハッシュ関数とEdDSA電子署名スキームを用いたCommitment MapperによるHydra Delegated Proof of Ownershipの一例 Ethereumのアカウントとsecretのコミットメントのため、</p><ul><li><p><code>0x123..def</code>の所有者は、アカウントの所有権を証明するメッセージに署名する</p></li><li><p>そのcommitment＝poseidonHash(secret)と共に署名を送信する</p></li><li><p>コミットメントマッパーは署名を検証した後、次のキー:値を登録する 　- キー: <code>0x123...def</code> 　- 値: commitment = poseidonHash(secret)</p></li><li><p>コミットメントマッパーは、以下のようなレシートに（EdDSA秘密鍵で）署名する(poseidonHash(0x123...def, poseidonHash(secret))注: ユーザーはこのレシートを使って、SNARKで次の事柄を証明することができるようになる。</p></li></ul><ol><li><p>secretを知っている（SNARKでposeidonHash(secret)を生成している）</p></li><li><p>コミットメントマッパーを通過した（SNARKでコミットメントマッパーのEdDSA署名を検証する）</p></li><li><p>それらのコミットメントマッパーは関連付けられる（SNARKでレシートの構成を確認する）</p></li></ol></blockquote><h3 id="h-512" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.2 理由</h3><p>Ethereumアカウントの所有権を第三者に証明するのは、一般的にメッセージの署名で簡単にできます。同様に、GithubやTwitterのアカウントもOAuthによって簡単に所有権を証明することができます。しかし、ZK-SNARKs回路のような制約のある環境では、それらの所有権の証明は現実的でないほど高価になってしまいます。 例えば、EthereumアカウントのECDSA署名は、SNARK内部で証明するには非常にコストがかかります。EdDSAアドレス（SNARK内で証明・検証するのが安価）で受け取ったコミットメントマッパー署名を使用することで、Sismoはこの問題を緩和しています。 また、ECDSA署名はmalleable（ECDSAを使用して複数の異なる有効な署名を作成できる）であるため、nullifierとして使用することはできません。Ethereumアカウントに対して単一のコミットメントを強制することで、コミットメントを生成した秘密（ユーザーしか知らない）をnullifierとして使用することができます。</p><h3 id="h-513-proof" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.3 所有権のproofの独立性</h3><p>興味深いのは、同じくコミットメントを用いるセマフォと比較して、コミットメントマッパは所有権の証明のみを検証する点です。つまり、Delegated Proof of Ownershipは、あらゆるシステムで再利用することができるのです。 例えば、Sismo Hydra-S1 Attestersでは、同じコミットメントを使用して、あらゆるアカウントのグループメンバーであることを証明することができます。グループデータ（例えば、アカウントのリスト）は、所有権のproofとは独立しています。</p><h3 id="h-514" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.4 オーフチェーンコミットメント</h3><p>マッピングをオフチェーンにすることで、コミットメントマッパーは、それと相互作用するすべてのアカウントのセット（匿名性セットと呼ばれる）を非公開にすることを保証します。SemaphoreやTornado cashなどの他のプロジェクトも同じようなコミットメントを使用していますが（データをリンクしていますが）、匿名性セットを作成し、公にそれを行っています。 我々サイドには、よりオープンなものにするための道があります。匿名性セットが十分に大きくなれば、私たちの正確なデータを公開することができるようになるでしょう。</p><h3 id="h-515" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.5 セキュリティーモジュール</h3><p>ユーザーは、Sismoによって展開されたコミットメントマッパーをトラストする必要があります。</p><ul><li><p>アカウント所有者の証明を正しく確認する</p></li><li><p>一つのアカウントにつき一つのコミットメントのみを承認する</p></li><li><p>データストア（アカウント識別子のセット）を非公開にする</p></li></ul><p>ベストプラクティスと高いWeb2セキュリティを考慮して、コミットメントマッパーを導入しました。</p><ul><li><p>コミットメントマッパーは、分離されたインフラに配置されたAWS lambdaを使用して実行されます。AWSアカウント全体がコミットメントマッパーをホストするためだけに用いられています。</p></li><li><p>秘密鍵（例：Hydraのコミットメント受信に署名するEdDSA秘密鍵）は、AWS KMSを使用して保存されます。</p></li><li><p>このAWSアカウント内で行われたすべてのアクションはトレースされ、別のアカウントに保存されます。このトレースは変更することができません。つまり、このAWSアカウント内で何が起こったかを正確に監査することができます。</p></li><li><p>このAWSアカウント内で行われたアクションがあった場合、Sismoチーム全体にアラートが送信されます。</p></li></ul><h3 id="h-516" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1.6 コミットメントマッパーの未来</h3><p>私たちは、Sismoへのトラストをより小さくするするコミットメントマッパーの別バージョンを開発中です。コミットメントマッパーの内部で行われる操作は、SNARKの内部で実行され、オンチェーンで検証される予定です。</p><h2 id="h-52" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.2 アカウントレジストリツリー</h2><p>アカウントレジストリツリーは、一部のアテスターが使用可能なグループを保存するためのデータ構造として使用されます。</p><h3 id="h-521-key-value" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2.1 Key-Valueマークルツリー</h3><p>KVマークルツリーは、key-value storeをマークルツリーで強化したものである。マークルツリーはその葉に以下のデータを格納する: hash(key, value)</p><h3 id="h-522" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2.2 アカウントツリー</h3><p>アカウントツリーはKV Merkleツリーであり、keyと値はアカウントである（例：key＝アカウント識別子、値＝アカウント値） これにより、ツリーのルートにアクセスできる検証者（例えばスマートコントラクト）は、証明者（ユーザー）がKVストアにアカウントを所有していることを簡単かつ安価に検証することができる。この証明者は、検証者にマークルproofを送るだけでよい。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bef4a57d34c90be5f6298ccc42a0f6d0d1c968e5f058999f358ac8a749385908.png" alt="Account tree structure[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Account tree structure[7]</figcaption></figure><blockquote><p>アカウントツリーは、アカウントグループを保存することができる。 例えば、以下のようなグループである。</p><ul><li><p>アカウント識別子: ENS DAOに投票したすべてのアドレス</p></li><li><p>アカウント値: 各アドレスの投票数</p></li><li><p>(グループ識別子): 3</p><p>あるユーザー（<code>0x123..def</code>の所有者）は、スマートコントラクト（ルートにアクセスできるアテスター）に対して、5回投票したことを簡単に証明することができる。 彼らは以下の情報を提供するだけである。</p></li><li><p><code>0x123..def</code>の所有者であることの証明: 自分の秘密鍵によるメッセージの署名</p></li><li><p>5: アカウントの値</p></li><li><p>マークルproof（アテスターがアカウントツリーのルートを再構築するために必要なデータ）</p><p>その後、アテスターは次のことを行うだけである。</p></li><li><p>署名の検証</p></li><li><p>葉 = hash(0x123..def, 5)の計算</p></li><li><p>マークルproofの検証（マークルproofの要素に対してリーフをハッシュ化し、それがアカウントツリーのルートに対応するかどうかをチェックする）</p></li></ul></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bef4a57d34c90be5f6298ccc42a0f6d0d1c968e5f058999f358ac8a749385908.png" alt="Account tree structure[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Account tree structure[7]</figcaption></figure><h3 id="h-523" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2.3 レジストリツリー</h3><p>レジストリツリーはKVマークルツリーであり、keyはアカウントツリーのルート、値はアカウントツリーにリンクした特定の値である（例えばHydra-S1ではアカウントツリーの値としてgroupIndexを選択した）。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ae37cc6476a8c4072b71ffccbb3765e0040f39887c07c6ea699944bb3605b767.png" alt="Registry tree structure[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Registry tree structure[7]</figcaption></figure><blockquote><p>先ほどの例で言うと、 ENS Votersのグループには、グループ識別子=3が存在。 ENS Votersの以前のアカウントツリーをレジストリツリーに値3として登録することができる。 するとユーザーは、（レジストリツリーのルートにしかアクセスできない）検証者に、次のことを証明できるようになる。</p><ul><li><p>登録されたアカウントツリーのいずれかに属するアカウントを持っていること</p></li><li><p>アカウントツリーの値が3であること →事実上、自分が3というグループに属していることを証明したことになる。</p></li></ul></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9eb2a4ae48ce4f1f4b6c91dea47b859221c29fc9371674716ef89ba06fbedfe0.png" alt="Registry tree structure[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Registry tree structure[7]</figcaption></figure><h3 id="h-524-hydra-s1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2.4 Hydra-S1アテスター</h3><p>Hydra-S1アテスターはこのスキームを使って、ユーザーがグループの一部であるアカウントを持っていることを証明できるようにしています。所有権のproofはメッセージに署名するよりも少し複雑ですが、一般的な流れは全く同じです。 このスキームはZK-SNARKで行われ、特定のアカウントでグループの一員であることを証明するためにどのアカウントが使われたかを知ることは誰にも不可能です!</p><h2 id="h-53-hydra-zk" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.3 Hydra ZK証明スキーム</h2><p>Hydraファミリーは、Hydra Delegated Proof of Ownershipを使用する証明スキームをバンドルしています。</p><blockquote><p>Vitalik Buterinによる以下の<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2022/06/15/using_snarks.html">記事</a>は、Hydraの背後にある意図と、その背後にあるZK SNARKコンセプトの概要について正確に理解することができます。</p></blockquote><p>Hydraファミリーは現在、三つの証明スキームメンバーを持っています。証明スキームには、その妥当性を検証する検証者のためにproofを生成することができる証明者がいます。</p><ul><li><p>Hydra-S1証明スキーム(<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/sismo-core/hydra-s1-zkps">回路</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/technical-concepts/hydra-zk-proving-schemes/hydra-s1">ドキュメント</a>)(S1 Single Source. バージョン1: ひとつのグループメンバーシップ検証) 2名の証明者がHydra-S1証明スキームを実装し、ZK証明書を生成しています。</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/sismo-core/sismo-protocol/tree/main/contracts/attesters/hydra-s1">Hydra-S1 Simpleアテスター</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/sismo-core/sismo-protocol/tree/main/contracts/attesters/hydra-s1/variants">Hydra-S1 Soulboundアテスター</a></p></li></ul></li><li><p>Hydra-S2証明スキーム（S2: Single Source. バージョン2：複数のメンバーシップの検証）</p></li><li><p>Hydra-M1証明スキーム(M1: Multi Source. バージョン1)</p></li></ul><p>Hydra証明スキームを利用するためには、ユーザは自分のアカウントからトラストされたコミットメントマッパーと対話し、secretのPoseidonハッシュをコミットして、コミットメントマッパーからEdDSA署名付きレシート（自分のアカウント識別子とそのコミットをマッピング）を受け取らなければなりません。 ユーザーのsecretとコミットメントマッパーの署名されたレシートは、Hydra Proof of Ownershipを形成します。 その後、ユーザーはSNARKでそのHydra Proof of Ownershipを使って、自分のアカウントの所有権を証明することができるようになります。</p><blockquote><p>コミットメントマッパーとPoseidonハッシュ関数、EdDSA署名スキームを使用することで、SNARKで安価にDelegated Proof of Ownershipを検証することができます。</p></blockquote><p>すべてのHydra証明スキームは、ひとつまたは複数のHydra Proof of Ownershipの検証を使用します。</p><h3 id="h-531-hydra-s1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.3.1 Hydra-S1</h3><p>Hydra-S1 ZK証明スキームはHydraファミリーの中で最初の証明スキームです。</p><ul><li><p>Hydra = Hydra Delegated Proof of Ownershipを使用（コミットメントマッパー経由）</p></li><li><p>S1 Single Source. バージョン1: ひとつのグループメンバーシップ検証</p></li></ul><p>これは、ユーザーがひとつのZK Proofで、与えられたチケット識別子（別名、外部nullifier）と、アカウントツリーで満たされた定義されたレジストリマークルツリーに対して、以下のことを証明することができます。</p><ul><li><p>二つのアカウントを所有している</p><ul><li><p>ソースアカウント（Hydra Proof of Ownership）</p></li><li><p>宛先アカウント（Hydra Proof of Ownership）</p></li></ul></li><li><p>ソースアカウントはアカウントツリーの一部である（アカウントツリーマークルproof）</p></li><li><p>このアカウントツリーは、レジストリツリーに特定の値で登録されている（レジストリツリーマークルproof）</p></li><li><p>彼らのソースアカウントの値に関する要求は真である</p><ul><li><p>例：「私のアカウントは5より優れている」（非厳密な主張）</p></li><li><p>または「私のアカウント値は厳密に5と等しい」(厳密な主張)</p></li></ul></li><li><p>ticketIdentifier(別名externalNullifier) をソースアカウントのsecret(別名IdNullifier)とハッシュすることによって、userTicket(別名nullifierHash)を正しく生成している</p></li></ul><p>ユーザーチケット(別名nullifierHash)は、ユーザが同じチケット識別子(別名externalNullifier)に対して二つのZKPを使用できないように、検証者によって保存されることがあります。</p><p>Hydra-S1 ZK証明スキームは、Sismoプロトコルの<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/sismo-core/sismo-protocol/tree/main/contracts/attesters/hydra-s1">Hydra S1アテスター</a>で使用されています。</p><blockquote><p>Hydra S1 Simpleアテスターにおいて、Hydra S1証明スキームを使用して、ユーザーは以下のことができます。</p><ul><li><p>グループ識別子で識別される特定のグループアカウントの一部であるソースアカウントを所有していることを証明する(レジストリツリー内のアカウントツリーの値 = groupIdentifier)</p></li><li><p>宛先アカウント（宛先を受信するアカウント）を所有していることを証明する</p></li><li><p>グループ内のアカウントの値について要求する</p></li><li><p>アテスター内部でオンチェーンに保存されるuserTicketを生成する ticketIdentifierは、グループ識別子として定義されています。これにより、ユーザがグループごとに二つのアテステーションを生成することができないようにします。</p></li></ul></blockquote><p>これらのステップはすべて、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/sismo-core/hydra-s1-zkps">ここ</a>で入手可能なhydra-s1circom回路内で実行されます。</p><h3 id="h-532-hydra-m1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.3.2 Hydra M1</h3><p>TBD</p><h2 id="h-54-pythia-zk" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.4 Pythia ZK証明スキーム</h2><p>古代ギリシャの宗教では、PythiaはDelphiにあるアポロ神殿のoracleでした。 Pythia Familyは証明スキームをバンドルし、ユーザーがプライバシーを守りながら中央集権的なサービスによって提供されるオフチェーンデータを証明することを可能にします。 Pythiaの証明スキームの背後にある主な考え方は、中央集権的なサービスがユーザーデータにブラインド署名を行うことです。 これにより、サービスが後でこの署名を証明として使用する際に、ユーザーを追跡できないことが保証されます。</p><blockquote><p>あなたの国民IDはKYCプロバイダーが保管することができます。このデータに従って、あなたは18歳以上のグループに属することができます。</p></blockquote><blockquote><p>Twitterでのあなたのフォロワー数はTwitter社によって保存されます。このデータにより、あなたは10万人以上のフォロワーを持つツイッターアカウントのグループに所属することができます。</p></blockquote><h3 id="h-541-pythia" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.4.1 Pythia証明スキームファミリー</h3><p>証明スキームには、証明を生成する証明者と、その正当性を検証する検証者が存在します。Pythia-1証明スキームでは、ユーザーはブラインド証明スキームを用いてオフチェーンサービスと対話し、プライバシーを保護した形でデータを取得することができます。ユーザーのフロントエンド（証明者）は、次にZK Proofを作成することができます。 検証者は、Pythia-1 Verifierと呼ばれるオンチェーンのスマートコントラクトです。Pythia-1 Verifierは、ZK Proofを検証し、その有効性をTrueまたはFalseのステートメントとして返すスマートコントラクトです。 例えば、SismoプロトコルのPythia-1アテスターの実装では、証明が正しければ、ユーザーはZKをmintできます。Pythia-1証明スキームは、次節で説明する以下の概略図で表されます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f51e9bfe8dd80c3400767e20b71dd3b8454a10aebbf8bfda9a2b33eb7a9b8f5d.png" alt="Pythia-1 Proving Scheme[7]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Pythia-1 Proving Scheme[7]</figcaption></figure><h3 id="h-542-pythia" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.4.2 Pythia証明スキーム</h3><p>Pythia-1証明スキームは、以下のように動作します:</p><p>1.ユーザーは自分のフロントエンドでコミットメント(secretのPoseidonハッシュ)を生成する。secretはフロントエンドによってランダムに生成される。</p><p>Commitment=PoseidonHash(secret)</p><p>2.コミットメントはオフチェーンサービスAPI（KYCプロバイダ、DegenScore、Twitter、Githubなど）に送信される。</p><p>3.オフチェーンサービスは、ユーザーの同意を得てユーザーデータを取得する。これは、例えばKYC登録やアカウントの確認となる。</p><p>4.オフチェーンサービスは、次にコミットメントレシートを生成する。コミットメントレシートは、ユーザーによって送信されたコミットメントの署名（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fr.wikipedia.org/wiki/EdDSA">edDSA</a>）、ユーザーデータの値、およびグループIDである。</p><p>CommitmentReceipt=signEdDSA(Commitment, value, groupId)</p><blockquote><p>値としては、例えばTwitterのフォロワー数や、国民IDカードの年齢などが使われる。この値は、ZK証明によって秘密にされる。groupIdは、本人が対象と主張するグループのID（Twitterのフォロワー数が10万人以上のグループ、または18歳以上のグループ）。</p></blockquote><p>5.Commitment Receiptは、ユーザーのフロントエンドに送られる。</p><p>6.フロントエンドでは、プライベートとパブリックの入力からZK Proofが生成される。</p><ul><li><p>非公開の入力</p><ul><li><p>secret</p></li><li><p>値</p></li><li><p>コミットメントレシート</p></li></ul></li><li><p>公開の入力</p><ul><li><p>バッジのgroupId</p></li><li><p>シビル耐性バッジのためにオンチェーンに保存することができるnullifier</p></li><li><p>オフチェーンサービスの公開鍵</p></li></ul></li></ul><p>nullifier=PoseidonHash(secret, externalNullifier)</p><p>7.このproofは、検証者のコントラクトにオンチェーンで送信される。</p><p>8.Verifierコントラクトは、オンチェーンでZK Proofを検証する。</p><blockquote><p>Sismoプロトコルでは、ZK ProofがPythia-1アテスターに送信され、Pythia-1 Verifierコントラクトが呼び出されます。Pythia-1 VerifierコントラクトがZK ProofについてTrueを返すと、Pythia-1 アテスターはアテステーションを発行し、ユーザーがProofに記載した宛先アドレスにZKバッジを発行します。</p></blockquote><blockquote><p>バッジを受け取った宛先アドレスに、ユーザーのWeb2アカウントをリンクすることはできません。</p></blockquote><h1 id="h-6" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. 参考・引用文献</h1><p>[カバー絵] Sismo Docsのカバーイメージをクロップして載せています</p><p>[1] Sismo Docs - What is Sismo?, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/">https://docs.sismo.io/sismo-docs/</a></p><p>[2] Sismo Docs - What are (ZK) Badges?, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/what-are-zk-badges">https://docs.sismo.io/sismo-docs/what-are-zk-badges</a></p><p>[3] Sismo Docs - What are (ZK) Badges? - ZK Badges use cases, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/what-are-zk-badges/zk-badges-use-cases">https://docs.sismo.io/sismo-docs/what-are-zk-badges/zk-badges-use-cases</a></p><p>[4] Sismo Docs - User DAQ, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/user-faq">https://docs.sismo.io/sismo-docs/user-faq</a></p><p>[5] Sismo Governance Documentation, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notion.so/Sismo-Governance-Documentation-8d9f6ac5d2f049dfb15de35664602acb">https://sismo.notion.site/Sismo-Governance-Documentation-8d9f6ac5d2f049dfb15de35664602acb</a></p><p>[6] SIP-8: Grant temporary Badge Curation power to Sismo Core Team, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://snapshot.org/#/sismo.eth/proposal/0x996f748f78756db5327bb7b6d2a4b817094274b4343cbdbb55e18ac0f1d9de1f">https://snapshot.org/#/sismo.eth/proposal/0x996f748f78756db5327bb7b6d2a4b817094274b4343cbdbb55e18ac0f1d9de1f</a></p><p>[7] Sismo Docs - TECHNICAL CONCEPTS - * , <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.sismo.io/sismo-docs/technical-concepts/">https://docs.sismo.io/sismo-docs/technical-concepts/</a></p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bc99dd07f65309c251bb590d9301872c4ac8414d0bcf97f552bf87b5f88a9851.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[GearboxProtocolの簡単な解説]]></title>
            <link>https://paragraph.com/@hashigo/gearboxprotocol</link>
            <guid>VyOzO2bQjp6BHCjrlmCu</guid>
            <pubDate>Tue, 11 Oct 2022 20:51:14 GMT</pubDate>
            <description><![CDATA[1. はじめにGearboxはレバレッジプロトコルである。 誰でもDeFiネイティブな方法でレバレッジをかけることができ、様々なDeFiプロトコルで使用することができる。例として、Uniswapでのレバレッジ取引、YearnやCurve and Convexでのレバレッジファーム、オプションやデリバティブを含む複雑なデルタニュートラル戦略、複雑なポジションを行うストラクチャープロダクトのためのLeverage-as-a-Serviceなどが挙げられる。[1]2. しくみGearboxProtocolの概要[2]2.1 クレジットマネージャー(Credit Manager)[2]クレジットマネージャーは、クレジットアカウントを管理するための中核となるコントラクトである。V2においては、クレジットマネージャー自体は低レベルのバックドコントラクトとして設計されている。一つのプールはいくつかのクレジットマネージャーと接続できるが、CreditManagerは一つのプールとしか接続できない。プールからの借入を禁止することも可能だが、各クレジットマネージャーは借入金を返済することができる。ク...]]></description>
            <content:encoded><![CDATA[<h1 id="h-1" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. はじめに</h1><p>Gearboxはレバレッジプロトコルである。</p><p>誰でもDeFiネイティブな方法でレバレッジをかけることができ、様々なDeFiプロトコルで使用することができる。例として、Uniswapでのレバレッジ取引、YearnやCurve and Convexでのレバレッジファーム、オプションやデリバティブを含む複雑なデルタニュートラル戦略、複雑なポジションを行うストラクチャープロダクトのためのLeverage-as-a-Serviceなどが挙げられる。[1]</p><h1 id="h-2" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. しくみ</h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fe412b3a55adccb34168d0a9622617e3bb3c2807384dd3820269c2c0f2c00c9.jpg" alt="GearboxProtocolの概要[2]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">GearboxProtocolの概要[2]</figcaption></figure><h2 id="h-21-credit-manager2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.1 クレジットマネージャー(Credit Manager)[2]</h2><p>クレジットマネージャーは、クレジットアカウントを管理するための中核となるコントラクトである。V2においては、クレジットマネージャー自体は低レベルのバックドコントラクトとして設計されている。一つのプールはいくつかのクレジットマネージャーと接続できるが、CreditManagerは一つのプールとしか接続できない。プールからの借入を禁止することも可能だが、各クレジットマネージャーは借入金を返済することができる。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eabcd0412b71585701d9d7d2c201b92ceec29cc49a794ee48947b4d6a1f191ef.jpg" alt="クレジットマネージャーの役割[2]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">クレジットマネージャーの役割[2]</figcaption></figure><h2 id="h-22-ca" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.2 クレジットアカウント(CA)</h2><p>GearboxProtocolはAAVEのような過剰担保型のレンディングプロトコルと違い、大きなレバレッジをかけることができる。これを可能にしているのが、クレジットアカウントである。</p><p>クレジットアカウントは、ユーザーの資金と借りた資金の両方を含む独立したスマートコントラクトである。アカウントを開設すると、すべての操作はこのアカウントを経由することになり、資産もこのアカウントに留まる。クレジットアカウントは自動化されたDeFiウォレットであり、ポジションを保持するだけでなく、プログラム可能性を備える。クレジットアカウントの資金は負債の担保として使用され、ユーザーはクレジットアカウントに注文を送ることでこれらの資金を操作することができる。[2]</p><p>このように、プールから借りた資金はクレジットアカウント内で扱われる。ユーザーはクレジットアカウントをOpenする際に使用したアカウントを用いてクレジットアカウントを操作するため、「レバレッジがかけられるDeFiウォレット」のようなサービスを提供する。戦略を終了したい場合は、クレジットアカウントをCloseして損益を確定することができる。</p><p>クレジットアカウントに入金することができる資金には上限があり、DAOによって管理される。また、利用可能なDeFiコントラクトやトークンはホワイトリストによって厳格に管理される。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e5660e288bd6a97dcad0ccb66261860f458dc62f85b88a46db95a0022574e17a.jpg" alt="クレジットアカウントの機能[3]" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">クレジットアカウントの機能[3]</figcaption></figure><h2 id="h-23-pools4" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.3 プール(Pools)[4]</h2><p>レバレッジをかける際にクレジットアカウントが借りる資金は、流動性プールに存在する。この流動性プールには誰もが資金を預けることができ、利息を得ることができる。</p><h2 id="h-24" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.4 清算</h2><p>ヘルスファクターが1を下回ると、清算人は当該アカウントを清算することができる。この際、Credit Facade関数が用いられる。また、有効期限が切れたアカウントも清算対象となる。[5]</p><p>また、価格オラクルとして、Chainlinkなどのオラクルが用いられる。[6]</p><h2 id="h-25-multicall7" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.5 Multicall[7]</h2><p>MulticallはGearbox V2の新機能である。ユーザーは一つのトランザクションでAdapterやCredit Facadeの呼び出しを一括に実行できる。Multicallを使用すると、ガス効率はよくなり、複雑な戦略を一つのトランザクションで実行でき、さらに清算の処理にかかるコストを低減できるといった、多くの利点がある。</p><h1 id="h-3-apy" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. 実現可能なAPY</h1><p>V2ローンチによって、以下のツイートのようなAPYが実現できるとされている。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/GearboxProtocol/status/1544671931143708675">https://twitter.com/GearboxProtocol/status/1544671931143708675</a></p><h1 id="h-4-dao8" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. DAO[8]</h1><p>投票は譲渡不可能なガバナンストークンを通して、Snapshotで行われる。DAOはプール、アセット、マルチシグの署名者、その他様々なことを決めることができる。</p><p>また、一部のウォレットに権利が集中しすぎないよう、トークンの量に対する投票力の倍率が決まっていたり、会社のウォレットからは投票できないといった制限が課せられている。</p><h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">参考文献</h1><p>[1] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/intro">https://dev.gearbox.fi/docs/documentation/intro</a> (アクセス日：2022/10/12)</p><p>[2] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/credit/architecture">https://dev.gearbox.fi/docs/documentation/credit/architecture</a> (アクセス日：2022/10/12)</p><p>[3] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/credit/intro">https://dev.gearbox.fi/docs/documentation/credit/intro</a> (アクセス日：2022/10/12)</p><p>[4] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/pools/intro">https://dev.gearbox.fi/docs/documentation/pools/intro</a> (アクセス日：2022/10/12)</p><p>[5] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/credit/liquidation">https://dev.gearbox.fi/docs/documentation/credit/liquidation</a> (アクセス日：2022/10/12)</p><p>[6] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/oracle/priceoracle">https://dev.gearbox.fi/docs/documentation/oracle/priceoracle</a> (アクセス日：2022/10/12)</p><p>[7] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.gearbox.fi/docs/documentation/credit/multicall">https://dev.gearbox.fi/docs/documentation/credit/multicall</a> (アクセス日：2022/10/12)</p><p>[8] <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/gearbox-protocol/gear-token-not-yet-live-and-governance-reverse-voting-escrow-75f367985397">https://medium.com/gearbox-protocol/gear-token-not-yet-live-and-governance-reverse-voting-escrow-75f367985397</a> (アクセス日：2022/10/12)</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
        </item>
        <item>
            <title><![CDATA[ZetaChainホワイトペーパー超要約]]></title>
            <link>https://paragraph.com/@hashigo/zetachain</link>
            <guid>Dd4jULEv9k73iQmE33pz</guid>
            <pubDate>Fri, 02 Sep 2022 18:51:54 GMT</pubDate>
            <description><![CDATA[ZetaChainとは？ZetaChainは、あらゆるブロックチェーンと接続するL1チェーンです。先日、ホワイトペーパーとdevnetの立ち上げが発表されました。本ブログでは、ホワイトペーパーの内容を簡単に要約してみようと思います。ものすごく内容を省いたので、逆にわかりにくくなってしまったり、内容の齟齬が生じてしまったりするかもしれません。予めご了承ください。 ホワイトペーパーとウェブサイトはこちら https://www.zetachain.com/whitepaper.pdf https://www.zetachain.com/ZetaChain：ネイティブクロスチェーンスマートコントラクトを備えたブロックチェーン概要本ホワイトペーパーでは、EthereumやSolana、さらにはBitcoinといった、あらゆるブロックチェーンと接続する汎用オムニチェーン型スマートコントラクト対応ブロックチェーンである「ZetaChain」を提案する。 ZetaChainは、PoS型ブロックチェーンで、オブザーバと署名者から成る。これにより、資産のラッピングまたはブリッジすることなく、直接的...]]></description>
            <content:encoded><![CDATA[<h1 id="h-zetachain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ZetaChainとは？</h1><p>ZetaChainは、あらゆるブロックチェーンと接続するL1チェーンです。先日、ホワイトペーパーとdevnetの立ち上げが発表されました。本ブログでは、ホワイトペーパーの内容を簡単に要約してみようと思います。ものすごく内容を省いたので、逆にわかりにくくなってしまったり、内容の齟齬が生じてしまったりするかもしれません。予めご了承ください。</p><p>ホワイトペーパーとウェブサイトはこちら</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/whitepaper.pdf">https://www.zetachain.com/whitepaper.pdf</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zetachain.com/">https://www.zetachain.com/</a></p><h1 id="h-zetachain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ZetaChain：ネイティブクロスチェーンスマートコントラクトを備えたブロックチェーン</h1><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">概要</h2><p>本ホワイトペーパーでは、EthereumやSolana、さらにはBitcoinといった、あらゆるブロックチェーンと接続する汎用オムニチェーン型スマートコントラクト対応ブロックチェーンである「ZetaChain」を提案する。 ZetaChainは、PoS型ブロックチェーンで、オブザーバと署名者から成る。これにより、資産のラッピングまたはブリッジすることなく、直接的に異なるブロックチェーンと同士の相互作用するオムニチェーンdAppsを可能とする。</p><h2 id="h-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1.はじめに</h2><p>一つのブロックチェーンですべての需要に応えることはできず、マルチチェーンの未来は必然だ。そこで、ブロックチェーン間の相互運用性が重要になるが、今日存在するプロジェクトは、大半が特定のブロックチェーンにのみにしか対応していなかったり、安定性の低いブリッジを介する必要があったりする。本ホワイトペーパーでは、相互運用性を促進する新しいパブリックL1チェーンを提案し、クロスチェーンdAppsへの扉を開く。 ZetaChainのビジョンは、すべての主要なブロックチェーン上のパブリックコンピュータであり、その上にクロスブロックチェーンのdAppsが、パブリックで信頼できる持続的なスマートコントラクトとして容易に構築できるようにすることである。</p><h2 id="h-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.背景：ブロックチェーンの進化</h2><h3 id="h-21-bitcoin" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1. Bitcoin：オリジナルな分散型通貨</h3><p>Bitcoinは暗号学、行動経済学、コンピュータサイエンスの技術を駆使した公開台帳である。そのスクリプトはチューリング完全ではないものの、マルチシグや原子スワップなど、シンプルだが有用なアプリケーションをサポートしている。</p><h3 id="h-22-ethereum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2. Ethereum：スマートコントラクトを備えたプログラム可能なブロックチェーン</h3><p>Ethereumは任意の状態遷移関数を実装可能なブロックチェーンであり、Bitcoinで採用されたUXTOからアカウントベースへのシステムへ移行することで、表現豊かなアプリケーションのサポートを可能にした。</p><h3 id="h-23" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.3.マルチチェーンの融合と課題</h3><p>複数のブロックチェーンが混在する未来は確実であるが、各ブロックチェーンは閉じたシステムである。そこで、クロスブロックチェーンを実現する戦略として、サイドチェーン、リレー、公証スキーム、ハッシュタイムロックコントラクト、ブロックチェーン・オブ・ブロックチェーンズなどが挙げられる。</p><h2 id="h-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. 相互運用性に関する試み</h2><p>（本ブログでは省略します。）</p><h2 id="h-4-zetachain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. ZetaChainブロックチェーンアーキテクチャ</h2><h3 id="h-41" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.1. 概要</h3><p>ZetaChainは、Cosmos SDKとTendermint PBFTコンセンサスエンジン上に構築されたPoSブロックチェーンである。バリデータで構成され、関連する外部の状態やイベントに関してコンセンサスを得たり、分散型鍵署名によって外部のチェーンの状態を更新することができる。各バリデータにはZetaCoreとZetaClientが含まれ、前者はブロックチェーンを生成し、複製されたステートマシンを維持し、後者は外部チェーン上のイベントを観察し、アウトバウンドトランザクションに署名する。 <strong>バリデータ</strong>：ステーキングされたZETAコインに比例する投票力を持ち、ブロックの生成に参加する。 <strong>オブザーバ</strong>：ZetaChainが接続する外部チェーンのイベントと状態についてコンセンサスを得る。オブザーバはさらに、外部の様子を検証者に報告するシーケンサと、報告内容をZetaChain上でコンセンサスを得る検証者の二つの役割に分けられる。 <strong>署名者</strong>：ZetaChainは、外部チェーンとの認証された相互作用のための標準的なECDSA/EdDSAキーを集合的に保持する。ZetaChainを代表して署名できるのは、それらの過半数のみとなるように、複数の署名者にキーが配布される。 実際には、上記のシーケンサ以外は同じコンピュータノードに併設される。</p><h3 id="h-42" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2. オブザーバ</h3><p>オブザーバは、独立して外部チェーンの独自のフルノードを使用して観察し、最終決定とみなされる前にZetaChain上でコンセンサスを得る。そして、ZetaChainロジックの実行を自動的にトリガーする。 観察には、アクティブモードとパッシブモードの二つのモードが存在する。後者の「生存性がシーケンサに依存してしまう」という弱点を克服するために、参入障壁を取り除く工夫がされている。</p><h3 id="h-43" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3. マルチパーティしきい値署名スキーム</h3><p>ZetaChainは、外部チェーンの資金を管理し、特権アクション（焼却、造幣、ボールトからの資金移動など）を実行するために、外部チェーンのアカウントを保持する必要がある。アカウントを保持するために、ZetaChainは秘密鍵を持っている必要がある。単一障害点を避けるために、ZetaChainは分散型しきい値署名スキームを必要とする。これは、BitcoinやDogecoinのようなスマートコントラクトではないチェーンや、マルチシグの検証にコストがかかるスマートコントラクトプラットフォームをサポートするためにも必要である。</p><h3 id="h-44-zeta" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.4. クロスチェーンスマートコントラクトとZeta仮想マシン</h3><p>ZetaChainスマートコントラクトは、外部チェーンの状態と直接対話できるように設計されている。 汎用クロスチェーンスマートコントラクトプラットフォームを設計する上で、非同期性とプログラミングモデルという二つの重要な課題が存在する。前者は、他のチェーンの状態を問い合わせたり変更したりすることは非同期であるということを意味する。よって、状態変更は外部チェーンからのメッセージ（観測）によってトリガーされる。後者は、シンプルで堅牢なUTXOベースを採用すると、アカウントベースと異なり、Uniswapのような複雑なdAppsをサポートできなくなることを意味する。 本ホワイトペーパーでは、UTXOとアカウントベースのハイブリッドなアプローチを模索し、それぞれの長所を取り入れる。基本的には、UTXOを使用して外部ブロックチェーントランザクションを表現・追跡し、アカウントベースのスマートコントラクトを使用してロジックと共有グローバルステートを管理する。</p><h3 id="h-45" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.5. トランザクション、サブトランザクション、原子性</h3><p>ブロックチェーンをまたいだトランザクションの原子性をサポートし、安全性を確保するために、スマートコントラクト仮想マシンにいくつかの制約を設ける。主な制約事項は以下の通り。</p><ol><li><p>各UTXOは、一つの出力イベントしか生成できない。</p></li><li><p>クロスブロックチェーンでの価値移転は、すべてZETAトークンでなければならない。</p></li></ol><h2 id="h-5-zeta" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. ZETAトークン</h2><p>ZetaChainのトークンZETAは、ZetaChainスマートコンタクトのガス料金を支払うために使用され、さらにボンディング/ステーキング/スラッシングによってPoS ZetaChainブロックチェーンを保護するために使用される。ZETAはまた、ZetaChainのクロスチェーン転送、スワップ、メッセージ配信、およびセキュリティの中核をなす。ユーザーは、ZETAトークンを任意のチェーンAからチェーンBに直接移動できる。メカニズムは一方向のペッグである（つまり、チェーンAでX量を焼却し、次にチェーンBでX量を造幣する）。 以下の理由から、クロスチェーンで価値を表現するために、独自のトークンZETAを使用する。</p><ul><li><p>ラッピングがないため、同じ原資産を二重に表現することがない。</p></li><li><p>クロスチェーンに移行できる（ネイティブな）価値はZETAトークン経由のみであり、攻撃対象が大幅に減少するため、結果として監査が簡便化し、セキュリティも高くなる。</p></li><li><p>ユーザーは、ZetaChainが提供するクロスチェーンサービスと、デスティネーションチェーン上のガスに対して、ワンステップ/バンドルでZETAを支払うことができる。</p></li></ul><h2 id="h-6" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. ユースケースとアプリケーション</h2><h3 id="h-61" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.1. 値/データによるクロスチェーンメッセージパッシング</h3><p>一つのチェーンから別のチェーンへ確実かつ安全にメッセージを渡すことができるため、ZetaChainのネイティブスマートコントラクトでなくても、強力なクロスチェーンアプリケーションを実現できる。ZetaChainシステムの特徴は、メッセージにZETAコイン（ネイティブクロスチェーン）の形で価値を付与でき、価値をクロスチェーンで移動する必要があるdAppsをかなり簡素化できることにある。メッセージパッシングにより、クロスチェーンDEX、貸付・借入、マルチチェーンNFTなど、様々な重要なアプリケーションを実現することができる。</p><h3 id="h-62" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.2. スマートコントラクトで管理される外部資産</h3><p>Bitcoin、Dogecoin、Moneroなどの主要なブロックチェーンは、AMM取引所などの有用なアプリケーションをサポートできるほど一般的なスマートコントラクト機能を有していない。ZetaChainのクロスチェーンスマートコントラクト機能は、外部チェーン上の資産を直接保有し使用することができるため、ETH、ERC20、Algorand ASAなどの他のネイティブ資産に加え、ZetaChain上のネイティブBitcoinを管理するスマートコントラクトを可能にする。</p><h3 id="h-63-amm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.3. クロスチェーンAMM取引所</h3><p>ZetaChainは、スマートコントラクトの上に構築された真のクロスチェーンAMM分散型取引所を実現することができる。ZetaChain上でAMM DEXを構築する方法には、メッセージパッシングとネイティブZetaChainスマートコントラクトの二つがある。前者ではアセットプールは外部チェーン上のスマートコントラクトによって管理され、後者では、プールはTSSアカウントを介してZetaChainスマートコントラクトによって管理される。</p><h3 id="h-64-nft" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.4. マルチチェーンNFT</h3><p>マルチチェーンNFTの世界では、同じNFTのコレクションが複数のチェーン（Ethereum、Flow、Solanaなど）で発行される。あるNFTが他のチェーンに転送できる場合、ブリッジモデルでは、あるNFTの所有者は誰か、転送の取引記録はどこのチェーンにあるのかといった問題が生じる。この問題は、NFTのクロスチェーン所有権移転を促進するZetaChainスマートコントラクトによって解決できる。</p><h2 id="h-7" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. セキュリティ</h2><h3 id="h-71" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.1. 分散性</h3><p>ZetaChainのシステムは、主に分散化によって単一障害点を持たないように設計されている。ZetaChainはアーキテクチャ的にもインフラ的にも非中央集権的であり、ノードはパーミッションレスに運営される。 一方、外部のチェーンに変更を加える際には、署名鍵の集中化という問題が生じる。この問題は、GG20リーダレスしきい値署名スキーム（TSS）を利用することで解決を図る。</p><h3 id="h-72" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.2 インバウンドとアウトバウンドのトランザクションの保護</h3><p>外部チェーン上の観察されたイベントは、ZetaCoreの状態変化を引き起こすために、ZetaCore上でコンセンサスを得る。また、ZetaCoreの状態変化により、ZetaClientの署名者は、トランザクションを準備・署名し、外部チェーンにブロードキャストする。ZetaChainのコンセンサスメカニズムは、トランザクションが合意されることを保証する。TSSキーは、ZetaClientsの超多数が署名できることだけを保証する。</p><h3 id="h-73" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.3. 恣意的な造幣に対する包括的な防御策</h3><p>ZetaChainノードは、ZETAトークンの造幣を開始する前に、チェーン全体の供給量をチェックする。ZETAの総供給量はChainlinkによって提供され、接続された各チェーンに提示される。この保護機能により、誰も恣意的に造幣することができず、ZETAの総供給量がチェーン間で固定されたままであることが保証される。 また、バリデータノードが攻撃者に制圧されるような最悪のシナリオにおいて危険にさらされる資金は、悪用された時点でクロスチェーンに移動しているZETAの量に限られる。静止している資金は危険にさらされない。</p><h3 id="h-74" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.4. 外部チェーンに対する攻撃</h3><p>ZetaChainで接続された外部チェーンが攻撃された場合、二重支払い・検閲・原子性を喪失するような復帰・フォークといった違反が発生する可能性がある。しかし、ZetaChainは総供給量がチェックされるため、これらのケースのいくつかを軽減することができる。</p><h2 id="h-8" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">8. 結論</h2><p>ZetaChainは、ほとんどすべての既存または将来のブロックチェーンおよびL2ロールアップへの接続と、それらのチェーン上のネイティブ資産の全供給へのアクセスで構築される分散型クロスチェーンアプリケーションのための最も一般的なプラットフォームを提供する。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6f192c4f0dc2bc4a5e76e2503ae5c0d68844dd889df1eaacdda9af6d62dcbe4e.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[PhezzanはオーダーブックDEXにリテール流動性をもたらす]]></title>
            <link>https://paragraph.com/@hashigo/phezzan-dex</link>
            <guid>iHiGywCUUbtKhH2jBLpW</guid>
            <pubDate>Wed, 31 Aug 2022 18:53:36 GMT</pubDate>
            <description><![CDATA[免責事項: ここで紹介するものはすべて、ハイレベルな考え、図解、概念にすぎません。Phezzanチームが解明しなければならない詳細な事柄がたくさんあります。Phezzan Protocolで流動性を提供する場合、間違いなくリスクがあります。Financialなアドバイスはなく、DYORの徹底をお願いします。1. 過去2021年後半、Phezzanの2人の創業者は、Apple App Storeのソーシャルネットワーキングカテゴリで100位以内に入ったことがあるスクリーン共有アプリの最後のスタートアップを閉鎖しました。そのビジネスは利益を生むものではありませんでしたが、私たちは人々が求めるものを作りました。今日に至るまで、毎週、ユーザーはいつアプリを復活させるのかと尋ねてきています。 私たち自身は長年のトレーダーであったため、2021年後半にL2がブームになっていたこともあり、DEXの領域を調べ始めました。私たちはあらゆる種類のDEXを試しましたが、CEXのそれとは比べものにならないという結論に達しました。DEXが未来だとしたら、5年後にCEXに勝つためにはどんなDEXが必要なので...]]></description>
            <content:encoded><![CDATA[<p><strong>免責事項:</strong> <em>ここで紹介するものはすべて、ハイレベルな考え、図解、概念にすぎません。Phezzanチームが解明しなければならない詳細な事柄がたくさんあります。Phezzan Protocolで流動性を提供する場合、間違いなくリスクがあります。Financialなアドバイスはなく、DYORの徹底をお願いします</em>。</p><h1 id="h-1" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>1. 過去</strong></h1><p>2021年後半、Phezzanの2人の創業者は、Apple App Storeのソーシャルネットワーキングカテゴリで100位以内に入ったことがあるスクリーン共有アプリの最後のスタートアップを閉鎖しました。そのビジネスは利益を生むものではありませんでしたが、私たちは<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.paulgraham.com/good.html">人々が求めるものを作りました</a>。今日に至るまで、毎週、ユーザーはいつアプリを復活させるのかと尋ねてきています。</p><p>私たち自身は長年のトレーダーであったため、2021年後半にL2がブームになっていたこともあり、DEXの領域を調べ始めました。私たちはあらゆる種類のDEXを試しましたが、CEXのそれとは比べものにならないという結論に達しました。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/@phezzan/the-lazy-case-for-dexs-over-cexs-46b44895cc8d">DEXが未来だとしたら</a>、5年後にCEXに勝つためにはどんなDEXが必要なのでしょうか？</p><h1 id="h-2" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>2. 現在</strong></h1><p>さて、ここからは各DEXとその問題点を見ていきます。Phezzanはperp DEXなので、主にperp DEXの話をします。</p><h2 id="h-21-ammdex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.1 AMM形式のDEX</h2><p>AMMとそのバリエーション（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://driftprotocol.medium.com/deep-dive-into-drifts-dynamic-vamm-part-1-3-c2121fbce3c4">vAMM</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dodoex.github.io/docs/docs/pmm/">PMM</a>など）は、現在、パーペチュアルDEXで使われている主流の方式です。これはDeFiの最大の驚異の1つです。ブートストラップ流動性、リテールLPの利回り稼ぎの場、そして無限のコンポーザビリティを兼ね備えます。いくつかの取引ペアでは、UniswapはBinanceやCoinbaseと比較して<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.paradigm.xyz/2022/05/the-dominance-of-uniswap-v3-liquidity">2倍から3倍の流動性</a>を持っています。</p><p>AMM型DEXの問題点は単純で、<strong>変動損失</strong>（IL）です。ILという名称自体には<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/JHancock/status/1496280159917383682?s=20&amp;t=sz82-C6DFBwECE-qLtCETQ">賛否</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/pintail_xyz/status/1496282460107255818?s=20&amp;t=sz82-C6DFBwECE-qLtCETQ">両論</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/AnthonyLeeZhang/status/1500699359586959363?s=20&amp;t=sz82-C6DFBwECE-qLtCETQ">あります</a>が、ILの背景にある考え方は、Crypto投資家が資産を流動性プールに預けて何もしない場合、プール内の資産の価格が大きく動けば、大負けする可能性があるというものです。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://anthonyleezhang.github.io/pdfs/lvr.pdf">学者</a>や<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/traderjoe_xyz/status/1561804731412013056?s=20&amp;t=xapiAuwBijdvrWp6cH0HFQ">プロトコル</a>がいつかILの問題を解決することは間違いありませんが、少なくとも今のところLPはポジションと価格帯を積極的に管理しなければ、AMMの流動性を予測可能なリターンで管理することはできないのです。</p><h2 id="h-22-dex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.2 オーダーブック形式のDEX</h2><p>簡単に言えば、dYdXは現在最も優れたパーペチュアルDEXでしょう。取引量が多く、取引速度が速く、手数料が小さく、流動性が高いです。</p><p>オーダーブック・パーペチュアルDEXの問題点は、<strong>リテールLPとして、何もできない点</strong>です。流動性を提供できないし、利回りも稼げない。プロのマーケットメーカーは自ら流動性を提供し、どの取引ペアが適切かを判断し、マーケットを作ります。</p><p>プロのマーケットメーカーは、ボラティリティの高い資産に対する意欲が低く、一般的に新しい市場のリスクを評価するのに長い時間を要します。例えば、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://snapshot.org/#/dydxgov.eth/proposal/0x414e5154825082a0b60483e51a32c3c7a89b617f9a2a54e4f0624ad1a9ab269b">dYdXコミュニティは3ヶ月ほど前に</a>$APE/$GMTのような、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.binance.com/en/markets/futures">主要</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ftx.com/markets">CEX</a>の中で常にトップ10にランク入りしている新しい取引ペアを追加するよう投票したものの、まだ何も起こっていません。</p><h2 id="h-23-dex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.3 オラクル式DEX</h2><p>GMXに代表されるオラクル式DEXが最近注目されています。</p><p>オラクル式DEXの問題点は、もう少し複雑です。ここではLPであることのデメリットだけ話します。オラクル式DEXのLPは、基本的にトレーダーに対して賭けることになります。オラクル式DEXのLPは、その取引が有利であろうとなかろうと、あらかじめ決められたオラクル価格の注文をすべて受けなければならないので、収益が予測できません。</p><p>簡単に言えば、トレーダーが勝つと、オラクル式DEXのLPは負けます。</p><h2 id="h-24" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.4 まとめ</h2><p>上記の3種類のDEXの長所と短所をまとめると、以下の表のようになります。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f2636d6018e33a1ce363d35d92847de040af98da8735402b0a04bdcb3af14c5c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-3" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>3. 今後の展開</strong></h1><p>オラクル式DEXは価格発見がないため、今後主流になるとは考えにくいです。そうなると、残された選択肢は2つになります。</p><ol><li><p>優れたAMMアルゴリズムを設計し、変動損失がないようにする。Phezzanチームにはその能力はない。</p></li><li><p>オーダーブックにリテール流動性をもたらす。オーダーブック形式のDEXで、AMM形式のDEXにいるように、誰もがのんびりとマーケットを作ることができ、しかも変動損失がない。</p></li></ol><p>これこそがPhezzanが実現することです。<strong>Phezzan Protocolは、リテール流動性を可能にするオーダーブック形式のパーペチュアルDEXになります</strong>。</p><p>LPは悪いトレードをする必要はありません。資本効率がよく、変動損失がありません。ボラティリティの高い資産はパーミッションレスでサポートされ、価格発見はPhezzan自体で行われます。</p><p>さあ、飛び込んでみましょう。</p><h1 id="h-4-phezzandex" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>4. PhezzanはオーダーブックDEXにリテール流動性をもたらす</strong></h1><p>これ以上つまらない詳細を説明する前に、Phezzan Protocolで流動性を提供する操作がどのように見えるかを見てみましょう。</p><h2 id="h-41-phezzan-liquidity-marketplace" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.1 Phezzan Liquidity Marketplace</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fa87526134d155d9baccf083efbdde34eda66c826fad4b026330323e9ad76a95.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>LPがPhezzan ProtocolのWebサイトに入ると、Phezzan Liquidity Marketplaceが表示されます。このページには、プロのマーケットメーカーがオーダーブックでマーケットを行う際に使用するボットやアルゴリズムである、あらゆる種類のオーダーブックマーケットメイキングストラテジー（「MMストラテジー」）が表示されます。</p><p>各MMストラテジーは、ヘッジファンドマネージャー（MMストラテジーオーナー）が投資家（LP）から資金を受け取り、投資家に代わって投資（マーケットメイク）し、利益が出れば手数料を受け取る、個別のヘッジファンドのようなものです。</p><p>LPは各MMストラテジーの基本情報、例えば関連市場、ストラテジー名、開発者、TVL、APY、手数料レート、開始日、監査済みかどうかなどを見ることができます。</p><p>これはあくまで例なので、MMストラテジーは4つだけです。将来的には、数百、数千のMMストラテジーが掲載される予定です。LPは検索、基準によるソート、流動性の管理を簡単に行うことができます。</p><h2 id="h-42" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.2 ストラテジー詳細ページ</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dbce3bc663d99f594daf073a9a01feacb26852e5b5916f952883d286b0266d0f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>興味のあるストラテジーをクリックすると、その詳細が表示されます。このページにはたくさんの情報があります。早速見てみましょう。</p><h3 id="h-421" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.1 プールの情報と説明</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef30cc74dcdd1502cfe6e1d2e6b03fcc2f01ba9bcb9496f2d37cc2b574e9bffb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>左上には、プール情報と説明が表示されます。これらは、このストラテジーに関する基本的な情報であり、非常にわかりやすいものです。</p><p>なお、これらの情報はすべて<strong>カスタマイズ可能</strong>です。Phezzanにストラテジーを掲載することは<strong>パーミッションレス</strong>であり、ストラテジー所有者がすべての情報をコントロールすることができます。</p><h3 id="h-422-apytvl" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.2 APYとTVL</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5fd83506c4943565bb5682b3322ecbfe4218e105da2e357072039c4d5cce1e7e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>なぜ、人々は他のDEXのプールやPhezzanのストラテジーに流動性を提供するのでしょうか？　素敵なAPYを得るためです！</p><p>上のチャートで、潜在的なLPは特定のMMストラテジーのAPYの履歴を見ることができます。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e43f3d040624aca1d78f3b944e4d1264d910a4593d49ce105d373a825b17ff7c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>APYと同様に、上記は特定のMMストラテジーのTVLの履歴です。</p><h3 id="h-423" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.3 私が提供する流動性</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cba28edc4c398f134e00479f44c741017113d6715ec9c3e0973c99c088a891c5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>このパートでは、特定のストラテジーにおけるLPの総ポジションと関連情報を表示します。</p><h3 id="h-424" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.2.4 流動性のポジション</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a878cda331c935d1af177f6b3cf851e98c7c034c0b0fce17339a1336bdafeb57.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>MMストラテジーの所有者は、在庫リスクをコントロールし、マーケットメイキング活動のために安定したキャッシュ フローを得たいと考えるでしょう。よって、MMストラテジーにはロックアップ時間が必要な場合があります。LPは一つのMMストラテジーに対して、異なる資金量とロックアップ時間の適用のもと、異なる流動性ポジションを提供することができます。</p><p>例えば上図のLPは、同じMMストラテジーに対して、300,000ドルと202,154ドルの2つの流動性ポジションを提供しました。この2つのポジションはそれぞれ異なる日にロックが解除されます。</p><p>LPは、コードの変更、利益分配の仕組みの変更など、MMストラテジー自体に異常がない限り、ロック解除日前に資本を引き出すことはできません。</p><p>Phezzanのロックアップ期間は最短で7日、最長で365日です。1週間より短いものはMMストラテジーのオーナーにとって問題となり、1年より長いものは、ボラティリティの激しい暗号市場にとって長すぎるのです。ストラテジー所有者は、7日から365日の範囲でロック時間の要件を設定することができます。LPが同じMMストラテジーに自動で再投資するオプションも用意される予定です。</p><h2 id="h-43" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.3 利益分配の仕組み</h2><h3 id="h-431-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3.1 3つの収入/利益源</h3><p>さて、「利益分配のメカニズム」に戻ります。ここから面白くなります。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7e0008fbf9ea432c64b9540567168f6e2b018d0abe9a208dfab332e421985f3c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>ストラテジーが市場を形成するとき、収益/利益の源泉は3つあります。</p><p>「PnL」はMMストラテジーが<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.investopedia.com/terms/m/marketmakerspread.asp#:~:text=The%20market%2Dmaker%20spread%20is,are%20willing%20to%20commit%20to.">スプレッドで稼ぐ</a>利益です。Phezzanはオーダーブックモデルを採用しているので、MMストラテジーが優秀であれば、スプレッドで稼ぐことができ、利益の全額がMMストラテジーに支払われます。</p><p>「Fee」はPhezzan Protocolからの取引手数料のリベートです。取引手数料の一部はPhezzan Protocolに支払われ、残りはMMストラテジーに支払われます。</p><p>「Reward」は、MMストラテジーに配布されるPhezzanトークンです。</p><p>他のDEXとは異なり、PhezzanはPnL/Fee/Rewardを個々のアドレスに配布しません。その代わり、<strong>Phezzan ProtocolはPnL/Fee/Rewardを各MMストラテジーに分配します</strong>。</p><p><strong>MMストラテジーのオーナーは、利益分配の仕組みを設定し、ストラテジーに資金を提供したLPと自分との間で収入/利益を分配することになります</strong>。</p><p>なぜでしょう？</p><h3 id="h-432" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3.2 マーケットに決定させる</h3><p>MMストラテジーのオーナーによってマーケットメイクのスタイルは異なり、流動性への要求も異なります。アリスは高頻度取引を行うマーケットメーカーで、多くの資金を必要としますが、その資金がどの程度ロックされるかはあまり気にしません。ボブは古いタイプの人間で、あるポジションをしばらく持ち続けたいと考えているため、短期間に多くの流動性を得るよりも、安定した流動性を得たいと考えています。</p><p>LPによってMMストラテジーや報酬に対する欲求も異なるかもしれません。クレアはより多くのPhezzanトークンを好み、フランクはスプレッドから得られる利益をより多く得たいと考えるかもしれません。</p><p>重要なのは、<strong>PhezzanチームはMMストラテジーのオーナーとLPの間の最適な利益分配の仕組みを知らないし、これからも知ることがない点です</strong>。</p><p>LPは多くのMMストラテジーの中から選ぶことができるため、Phezzan ProtocolはMMストラテジーの所有者に利益分配の仕組みを設計させるにとどまります。MMストラテジーオーナーは流動性を高めるため、LPとの利益のバランスを取るため、そして互いに競争するために利益分配の仕組みを設定します。</p><p>MMストラテジーオーナーは、市場シェアを素早く獲得するために10%の手数料を設定することも、十分に自信がある場合は90%の手数料を設定することもできます。</p><p>また、競争激化を避けるため、最低5%の手数料を設定し、MMストラテジーに関する費用としてPhezzanは一律に受け取ります。</p><p>もし、LPがMMストラテジーAの利益分配の仕組みを気に入らなければ、より好ましいMMストラテジーに流動性を提供することができます。</p><h3 id="h-433-phezzan" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3.3 Phezzan戦争</h3><p>さらに踏み込んでみましょう。</p><p>LPがMMストラテジーに資本を預けると、PhezzanはそのMMストラテジーの流動性の所有権を表すERC-721トークンを発行します。</p><p><strong>MMストラテジーのオーナーや基礎となる取引ペアのプロトコルチームは、必要に応じてそのトークンを使って、Phezzan Protocolの外部で追加のインセンティブ、つまり「賄賂」を提供することができるのです。これは本質的に、</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://every.to/almanack/curve-wars"><strong>Curve戦争</strong></a><strong>のようなPhezzan戦争を生み出すことになります</strong>。</p><p>最高のMMストラテジーが勝利しますように。</p><h3 id="h-434" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4.3.4 安全対策</h3><p>LPの自然な疑問点として、MMストラテジーのオーナーがあなたの資本を持ち逃げしたり、利益分配の仕組みを一夜にして自分たちに有利に変えたり、あるいはハイリスクなストラテジーを実行して、多くを失うことなく多くを稼ぐなどといったことが起こらないことをどうやって知ることができるのか、という点があるでしょう。MMストラテジーのオーナーは、LPの資産を持ち逃げすることはできません。</p><p>Phezzanのオンチェーンvaultコントラクトは、各MMストラテジーに関連するLPの資金を追跡します。MMストラテジーは自分のアドレスに関連付けられたLPの資金を使ってマーケットを行うことができますが、vaultから資産を引き出すことはできません。もし、悪意のあるハッカーがMMストラテジーのコードを変更した場合、Phezzanのバックエンドはその変更を検知し、そのMMストラテジーをマーケットメイクから無効化します。よって、検知されたMMストラテジーはマーケットメイキングができなくなります。将来的には、このプロセスは分散化され、コードの侵害をうまく特定した人が報酬を得ることになります。</p><p><strong>利益分配の仕組みを変更すると、影響があります</strong>。</p><p>すべての利益分配の仕組みはオンチェーン、オープンソースでなければならず、月に一度だけ変更することができます。MMストラテジーのオーナーが利益分配の仕組みを変更した場合、そのストラテジーに流動性を提供したLPは、たとえそれがLPのロック解除日前であっても、何の影響もなく合理的な時間内に流動性を引き出すことができます。</p><p><strong>リスクの高いストラテジーは可能だが、合理的ではありません</strong>。</p><p>Phezzan Protocolは<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learn.phezzan.xyz/phezzan-academy/random-thoughts-from-the-phezzan-team/2.-whats-the-plan-to-build-a-dex-for-average-people-not-just-for-established-firms-and-whales">すべての人にパーペチュアル取引を民主化すること</a>を目指していますが、Phezzanで新しいLPストラテジーを提供することは決して簡単なことではありません。よいMMストラテジーを作れるのは、業界の専門家か、志の高い若い才能のある人たちでしょう。Phezzan Protocolのユーザーのうち、MMストラテジーを作成できる知識と技術的な専門知識を持つ人はごく一部です。</p><p>MMストラテジーの掲載はパーミッションレスですが、それでも開発には時間がかかります。Phezzanは、無意味なMMストラテジーのアップロードを避けるために手数料の仕組みを導入し、MMストラテジーが<strong>監査済みかオープンソースかDoxxedか</strong>を明確に表示し、MMストラテジーの異常な行動を積極的に監視する予定です。</p><p><strong>MMストラテジーのオーナーにとってリスクはないわけではありません</strong>。</p><p>MMストラテジーのオーナーが流動性を得るためには、MMストラテジーが儲かることを証明するために、最初に自己資金を投入する必要があります。MMストラテジーの開発に時間を費やし、MMストラテジーを運用するためにPhezzanに手数料を支払い、評判を落とすリスクもあるのです。</p><p><strong>DYOR</strong></p><p>Phezzanは、流動性の提供にはリスクがつきものであること、また、詳細な情報が必要であることを理解しています。Phezzanチームはユーザーの資金の安全性を確保するために可能な限りの努力をします。同時に、DYORをお願いします。</p><h1 id="h-5" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>5. 利点</strong></h1><p>では、なぜ誰もがこれを使うのでしょうか？　どんなメリットがあるのでしょうか？</p><h2 id="h-51" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.1 トレーダーにとって</h2><p>トレーダーにとって、PhezzanのUI/UX体験は、他の主要なCEXやDEXとあまり変わらないでしょう。</p><p>プロのマーケットメーカーは自己資金をあまり投入せず、リテールLPは高いリスクを許容しつつ高いリターンを求める傾向が強いため、MMストラテジーのオーナーはよりボラティリティの激しい取引ペアに投入できるリソースが増え、Phezzanは<strong>よりボラティリティの激しいコインのための最高の流動性を持つことができる</strong>ようになります。</p><p>さらに、BTC/ETHのようなブルーチップコインについては、Uniswapで起こったように、Phezzanでも徐々に流動性が高まり、トレーダーにとってより<strong>タイトなスプレッドとより低いスリッページが実現する</strong>でしょう。</p><p>それは、<strong>すべての人のためのパーペチュアル取引の民主化</strong>です。</p><h2 id="h-52" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.2 流動性プロバイダーにとって</h2><p>Phezzan Liquidity Marketplaceのおかげで、LPは簡単にオーダーブックに流動性を提供できるようになりました。</p><p>長期的には、Phezzan ProtocolのLPになることは、AMMスタイルやオラクルスタイルのperp DEXのLPになるよりも<strong>収益性が高く、予測しやすい</strong>と思われます。</p><p>さらに、LPはMMストラテジーの所有者やPhezzan以外のプロトコルから特別なインセンティブを得ることができるかもしれません。</p><p>これが<strong>流動性提供の民主化</strong>です。</p><h2 id="h-53-mm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.3 MMストラテジーのオーナーにとって</h2><p>過去には、大手のプロのマーケットメーカーだけがオーダーブックでマーケットを作ることができました。</p><p>しかし、Phezzan Liquidity Marketplaceでは、誰でもMMストラテジーをアップロードして、デカブツに挑戦することができるのです。</p><p>ヘッジファンドを辞めたばかりで、マーケットメーキングビジネスを始めたいが、十分な資金がないですか？　Phezzan Liquidity Marketplaceにお越しください。</p><p>本当によいMMストラテジーを持っていて、それを試してみたいが、不安定な取引ペアであまりリスクを取りたくないですか？　Phezzan Liquidity Marketplaceにお越しください。</p><p>金融やコンピュータサイエンスの強いバックグラウンドがあり、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.amazon.com/Monkey-Business-Swinging-Through-Street/dp/0446676950">猿のように</a>働きたくなく、ゼロから始めたい？　Phezzan Liquidity Marketplaceにお越しください。</p><p>つまり、私たちはそれを心得ています。プロのマーケットメーカーの中には、私たちを笑う人もいるでしょう。私たちは、過去に大儲けした古い堅実な業界に挑戦しようとしているのです。ホテル業界はAirbnbについて、タクシー業界はUberについて、そしてTradFiはDeFiについてそう言っています。</p><p>それが、<strong>すべての人のためのマーケットメイキングの民主化</strong>です。</p><h2 id="h-54-buidler" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.4 BUIDLerにとって</h2><p><strong>パーミッションレスMMストラテジー・リスティングと並んで、パーミッションレス・トレーディングペア・リスティングがあります</strong>。</p><p>BUIDLerにとっては、自分のトークンを新しい取引ペアとして上場し、自分のトークン取引ペアのためにマーケットを作ってくれるMMストラテジーのオーナーを見つけ、自分自身のパーペチュアル取引ペアを持つことができ、すべてがパーミッションレスとなります。</p><p>これは、<strong>すべての人のためのパーペチュアル上場と取引の民主化です</strong>。</p><h1 id="h-6" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. 最後に</h1><p>ここまで読んでいただき、ありがとうございました。Phezzanチームは、Phezzan Liquidity Marketplaceについてまだ多くの詳細を把握する必要があることを理解しています。<strong>この記事は、ミッションステートメントを作るというより、会話を始めるためのものです</strong>。</p><p>もしあなたが潜在的なトレーダー、LP、MMストラテジーのオーナー、あるいはPhezzan Liquidity Marketplaceが提供するものに興味があるなら、Phezzanの<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/PhezzanProtocol">DMはいつでも開いています</a>。</p><p>また、Phezzanチームにメール（<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://contact@phezzan.xyz/">contact@phezzan.xyz</a>）で連絡したり、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/phezzanprotocol">Telegramグループ</a>や<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/Q5hCgACQ">Discordコミュニティ</a>に参加することも可能です。</p>]]></content:encoded>
            <author>hashigo@newsletter.paragraph.com (hashigo)</author>
        </item>
    </channel>
</rss>