<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PoS</title>
	<atom:link href="https://techgrowup.net/tag/pos/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Sat, 05 Apr 2025 14:00:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>PoS</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Polygonを解説！イーサリアムのスケーリングを変えるLayer2ソリューションの仕組み・メリット・開発手順</title>
		<link>https://techgrowup.net/blockchain-polygon/</link>
					<comments>https://techgrowup.net/blockchain-polygon/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sat, 05 Apr 2025 14:00:00 +0000</pubDate>
				<category><![CDATA[ブロックチェーン]]></category>
		<category><![CDATA[Layer2]]></category>
		<category><![CDATA[Matic]]></category>
		<category><![CDATA[Plasma]]></category>
		<category><![CDATA[Polygon]]></category>
		<category><![CDATA[PoS]]></category>
		<category><![CDATA[イーサリアム]]></category>
		<category><![CDATA[スケーラビリティ]]></category>
		<category><![CDATA[スマートコントラクト]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2736</guid>

					<description><![CDATA[はじめに ブロックチェーン技術の普及とともに、イーサリアムのネットワーク混雑や高騰するガス手数料が頻繁に取り沙汰されるようになりました。こうした問題を解決するための「Layer2ソリューション」が注目される中、Polyg [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">はじめに</h1>



<p class="wp-block-paragraph">ブロックチェーン技術の普及とともに、イーサリアムのネットワーク混雑や高騰するガス手数料が頻繁に取り沙汰されるようになりました。こうした問題を解決するための「Layer2ソリューション」が注目される中、<strong>Polygon（旧Matic Network）</strong> はイーサリアムとの高い互換性やマルチチェーン対応などを掲げ、<strong>高速かつ低コスト</strong>で大量のトランザクションを処理できる基盤として急速に存在感を高めています。<br><a rel="noopener" target="_blank" class="" href="https://wiki.polygon.technology/">Polygon公式Wiki<span class="fa fa-external-link external-icon anchor-icon"></span></a>にも詳しいドキュメントがある通り、Polygonは<strong>Plasma</strong>や<strong>PoS (Proof of Stake)</strong> ブリッジを活用し、EVM互換を維持しながら拡張性を提供するLayer2エコシステムを形成しています。本記事では、その仕組みからメリット、スマートコントラクトの開発手順、代表的なユースケースまで、総合的に解説します。イーサリアム上での開発・運用を考えている方や、安価で高速なブロックチェーンインフラを探している方にとって、Polygonが一つの有力な選択肢となるでしょう。</p>



<h2 class="wp-block-heading">Polygonの背景と特徴</h2>



<h3 class="wp-block-heading">イーサリアムのスケーラビリティ問題</h3>



<p class="wp-block-paragraph">イーサリアムは多くのDeFiやNFTプロジェクトを生み出しましたが、その人気の裏返しとしてネットワーク混雑時には手数料（ガス代）が高騰し、トランザクション処理速度も落ちるケースがしばしば起こります。こうしたスケーラビリティの制約を解消し、<strong>ユーザーが安価かつ迅速にDAppを利用できる環境</strong>を提供することがLayer2ソリューションの大きな使命です。</p>



<h3 class="wp-block-heading">Polygonとは</h3>



<p class="wp-block-paragraph">Polygon（旧名 Matic Network）は、イーサリアムチェーンと互換性を持ちながら<strong>独自のサイドチェーン</strong>を運用し、高速・低コストを実現しているプロジェクトです。</p>



<ul class="wp-block-list">
<li><strong>PoS (Proof of Stake)</strong> のチェーンを提供し、ブリッジを通じてイーサリアム上の資産やトークンを簡単に移動できる</li>



<li><strong>Plasmaフレームワーク</strong>を用いたオプションのセキュリティモデル</li>



<li>2021年以降は<strong>Polygon</strong>という名前で活動の幅を広げ、<strong>PoSチェーン</strong>に加えて<strong>ZK Rollup</strong>や<strong>Optimistic Rollup</strong>など複数のソリューションを取り込もうとする「マルチチェーンエコシステム」へと進化</li>
</ul>



<h3 class="wp-block-heading">MATICトークン</h3>



<p class="wp-block-paragraph">Polygonのネイティブトークンは<strong>MATIC</strong>（マティック）。PoSチェーンにおけるガス手数料の支払い、ステーキングによるバリデータのインセンティブなどに利用されます。Polygonネットワークの名称変更に伴ってトークン名を変える話もあったものの、最終的にはMATICが維持され、各種取引所で売買が行われています。</p>



<h2 class="wp-block-heading">Polygonの技術アーキテクチャ</h2>



<h3 class="wp-block-heading">PlasmaとPoSの連携</h3>



<p class="wp-block-paragraph">もともと<strong>Plasma</strong>はイーサリアムで提案されたオフチェーン処理の概念で、「小さなサブチェーン（子チェーン）」を構築し、大量のトランザクションをまとめて証明をイーサリアムに送信するという手法です。<br>Polygonの初期バージョンは<strong>Plasma + PoS</strong>のハイブリッドアプローチを採用し、<strong>安全性</strong>と<strong>高スループット</strong>を両立。具体的には、イーサリアムのメインネット上に<strong>Checkpoint</strong>を定期的に記録し、PoSチェーンの状態が不正にならないよう保証する設計がなされています。</p>



<h3 class="wp-block-heading">マルチチェーンエコシステム</h3>



<p class="wp-block-paragraph">Polygonは単なる1つのPoSサイドチェーンだけでなく、<strong>多様なスケーリング技術</strong>を取り入れる方向へ進化中です。</p>



<ul class="wp-block-list">
<li><strong>Polygon PoS</strong>（メインのPoSチェーン）</li>



<li><strong>Polygon Hermez</strong>（ZK Rollupを統合）</li>



<li><strong>Polygon Miden, Polygon Zero</strong>（ZKプロジェクト）</li>



<li><strong>Polygon Nightfall</strong>（Rollup + プライバシー技術）<br>開発者は自分のユースケースに合ったスケーリングソリューションを選択し、Polygon上でDAppを構築できるようになるという戦略が打ち出されています。</li>
</ul>



<h3 class="wp-block-heading">2層のセキュリティ</h3>



<p class="wp-block-paragraph">PolygonのPoSチェーンでは<strong>バリデータ</strong>たちがMATICをステークし、ブロックの提案・検証を行います。その一方でイーサリアム上の<strong>Root Contract</strong>がPoSチェーンの最終状態を追認し、もしチェーンが不正に改竄されるならイーサリアムへのメインチェーンにあるセキュリティメカニズムで保護する形となります。<br>これにより、<strong>プルーフ・オブ・ステーク</strong>での高速処理と、**メインネット（イーサリアム）**での最終的な安全性というハイブリッドを実現します。</p>



<h2 class="wp-block-heading">主要なメリットとユースケース</h2>



<h3 class="wp-block-heading">低手数料・高速トランザクション</h3>



<p class="wp-block-paragraph">Ethereumメインネットに比べると、<strong>数秒以内のブロックタイム</strong>かつガス代が数分の1〜数百分の1という環境が整えられています。そのため、<strong>マイクロペイメント</strong>や<strong>ゲーム内トランザクション</strong>、多数のNFT発行など小額・高頻度のトランザクションが必要なユースケースに適しています。</p>



<h3 class="wp-block-heading">DeFiの拡張</h3>



<p class="wp-block-paragraph">多くのDeFiプロジェクト（Aave、SushiSwap、Curveなど）がPolygon上でサービスを展開し、ユーザーはイーサリアムの資産をブリッジしてPolygonで運用することで<strong>大幅に手数料を節約</strong>できます。トレーダーや流動性提供者が混雑や高コストから解放され、DeFiの流動性が高まる効果が期待されます。</p>



<h3 class="wp-block-heading">NFTとゲーム</h3>



<p class="wp-block-paragraph">NFTマーケットやブロックチェーンゲームでも<strong>Polygon</strong>が人気を得ています。メインネットより格段に安い手数料でミントやトレードができ、<strong>ユーザー体験</strong>が向上。<strong>OpenSea</strong>などの大手NFTプラットフォームもPolygonをサポートしているため、アーティストやコレクターが参入しやすい環境が整っています。</p>



<h3 class="wp-block-heading">DAOsや支払いアプリ</h3>



<p class="wp-block-paragraph">PolygonのPoSチェーンを使えば、<strong>支払い</strong>や<strong>投票</strong>などのアクションを高速・安価に実行可能です。これによりDAOの投票コストが下がり、ユーザーの参加が活性化したり、公共サービスでの実装も検討される動きがあります。</p>



<h2 class="wp-block-heading">開発の流れ：Smart Contract &amp; DApp</h2>



<h3 class="wp-block-heading">Solidity互換</h3>



<p class="wp-block-paragraph">Polygonはイーサリアムと<strong>EVM互換</strong>があり、Solidity等で書かれたコントラクトを<strong>ほぼそのまま</strong>Polygon PoSチェーン上にデプロイできます。ツールチェーン（Truffle/Hardhatなど）もEVM互換の<strong>RPCエンドポイント</strong>を指定すればOKです。</p>



<h4 class="wp-block-heading">Hardhatでの簡易設定例</h4>



<p class="wp-block-paragraph"><strong>hardhat.config.js</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="require(&quot;@nomiclabs/hardhat-waffle&quot;);

module.exports = {
  solidity: &quot;0.8.0&quot;,
  networks: {
    polygon: {
      url: &quot;https://polygon-rpc.com/&quot;, // Matic/Polygon mainnet RPC
      accounts: [&quot;0xyourprivatekey&quot;] // テスト用秘密鍵
    },
    mumbai: {
      url: &quot;https://rpc-mumbai.maticvigil.com&quot;, // テストネット
      accounts: [&quot;0xyourprivatekey&quot;]
    }
  }
};" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">require</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;@nomiclabs/hardhat-waffle&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #4EC9B0">module</span><span style="color: #D4D4D4">.</span><span style="color: #4EC9B0">exports</span><span style="color: #D4D4D4"> = {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">solidity:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;0.8.0&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">networks:</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">polygon:</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">url:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;https://polygon-rpc.com/&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #6A9955">// Matic/Polygon mainnet RPC</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">accounts:</span><span style="color: #D4D4D4"> [</span><span style="color: #CE9178">&quot;0xyourprivatekey&quot;</span><span style="color: #D4D4D4">] </span><span style="color: #6A9955">// テスト用秘密鍵</span></span>
<span class="line"><span style="color: #D4D4D4">    },</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">mumbai:</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">url:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;https://rpc-mumbai.maticvigil.com&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #6A9955">// テストネット</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">accounts:</span><span style="color: #D4D4D4"> [</span><span style="color: #CE9178">&quot;0xyourprivatekey&quot;</span><span style="color: #D4D4D4">]</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">};</span></span></code></pre></div>



<p class="wp-block-paragraph">あとは <code>npx hardhat run scripts/deploy.js --network polygon</code> のように実行するとデプロイされます。</p>



<h3 class="wp-block-heading">ブリッジを利用した資産移動</h3>



<p class="wp-block-paragraph">イーサリアム上のERC-20やERC-721をPolygonに移す場合、<strong>公式ブリッジ</strong>あるいはサードパーティツールを使って<strong>資産のロック＆Mint</strong>を行います。ユーザー目線では「イーサリアムからPolygonへ送金」のようなUIになることが多いです。</p>



<ul class="wp-block-list">
<li><strong>PoSブリッジ</strong>: トークン転送にPoS検証を使う。数分〜数十分程度で完了（場合により異なる）</li>



<li><strong>Plasmaブリッジ</strong>: セキュリティがより厳格だが引き出しに長めのチャレンジ期間がある</li>
</ul>



<h2 class="wp-block-heading">コードサンプル：SolidityコントラクトをPolygonにデプロイ</h2>



<p class="wp-block-paragraph">以下の例は、先ほどの Hardhat config を使って<code>Counter.sol</code>を Polygon のMumbaiテストネットにデプロイするイメージ。</p>



<h4 class="wp-block-heading"><code>contracts/Counter.sol</code></h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Counter {
    uint256 public count;

    constructor(uint256 _initial) {
        count = _initial;
    }

    function increment() public {
        count++;
    }

    function reset() public {
        count = 0;
    }
}" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// SPDX-License-Identifier: MIT</span></span>
<span class="line"><span style="color: #C586C0">pragma</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">solidity</span><span style="color: #D4D4D4"> ^0.8.0;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">contract</span><span style="color: #4EC9B0"> Counter</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> count;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">constructor</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_initial</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">        count = _initial;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">increment</span><span style="color: #D4D4D4">() </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        count++;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">reset</span><span style="color: #D4D4D4">() </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        count = </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<h4 class="wp-block-heading"><code>scripts/deploy.js</code></h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="async function main() {
  const [deployer] = await ethers.getSigners();
  console.log(&quot;Deploying contract with account:&quot;, deployer.address);

  const Counter = await ethers.getContractFactory(&quot;Counter&quot;);
  const counter = await Counter.deploy(10); // initial value
  await counter.deployed();
  
  console.log(&quot;Counter deployed to:&quot;, counter.address);
}

main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">async</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">main</span><span style="color: #D4D4D4">() {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> [</span><span style="color: #4FC1FF">deployer</span><span style="color: #D4D4D4">] = </span><span style="color: #C586C0">await</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">ethers</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">getSigners</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Deploying contract with account:&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">deployer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">address</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">Counter</span><span style="color: #D4D4D4"> = </span><span style="color: #C586C0">await</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">ethers</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">getContractFactory</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Counter&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">counter</span><span style="color: #D4D4D4"> = </span><span style="color: #C586C0">await</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Counter</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">deploy</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// initial value</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">await</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">counter</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">deployed</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Counter deployed to:&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">counter</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">address</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">main</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">  .</span><span style="color: #DCDCAA">then</span><span style="color: #D4D4D4">(() </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">process</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">exit</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">  .</span><span style="color: #DCDCAA">catch</span><span style="color: #D4D4D4">((</span><span style="color: #9CDCFE">error</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">error</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">error</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">process</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">exit</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  });</span></span></code></pre></div>



<p class="wp-block-paragraph">実行:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npx hardhat run scripts/deploy.js --network mumbai" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">hardhat</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">scripts/deploy.js</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--network</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mumbai</span></span></code></pre></div>



<p class="wp-block-paragraph">成功すれば、<code>counter.address</code> にコントラクトがMumbaiテストネット上でデプロイされる。あとはPolygonスキャンなどのブロックエクスプローラーでコントラクトを確認できる。</p>



<h2 class="wp-block-heading">セキュリティとリスク</h2>



<h3 class="wp-block-heading">セキュリティモデル</h3>



<p class="wp-block-paragraph">Polygonはイーサリアムとは異なる独自のバリデータセットがPoSでチェーンを運営しているため、<strong>イーサリアム本体ほどの分散性</strong>を必ずしも持たない可能性があります。ただし、定期的に<strong>イーサリアムのマスター契約</strong>と同期することで、不正なチェーン改ざんが起きにくい仕組みを敷いています。<br>DeFiやNFT等の重要プロジェクトがPolygon上で稼働していることから、ハッキングやブリッジ攻撃などのリスクは常に存在し、セキュリティ監査やコミュニティチェックが不可欠です。</p>



<h3 class="wp-block-heading">ブリッジ攻撃</h3>



<p class="wp-block-paragraph">過去にはクロスチェーンブリッジがハッキングされ、大量の資産流出が起こった事例が他プロジェクトで報告されています。Polygonでも同様のリスクがあり、ブリッジを利用する際は<strong>公式の信頼できるエンドポイント</strong>や、しっかりしたマルチシグや監査を受けているサービスを選ぶことが大切です。</p>



<h3 class="wp-block-heading">中央集権的要素</h3>



<p class="wp-block-paragraph">Polygonが独自のバリデータ選出ルールや管理者コントラクトを持つため、ネットワーク運営にどれほど<strong>中央集権</strong>が介在するか、コミュニティ内で議論されることもあります。検閲耐性や永久改ざん防止がどの程度保障されるかは、イーサリアムやビットコインと比べると若干異なる評価となるでしょう。</p>



<h2 class="wp-block-heading">今後の展望</h2>



<h3 class="wp-block-heading">ZK技術への注力</h3>



<p class="wp-block-paragraph">PolygonはPoSチェーンだけでなく、<strong>ZK Rollup</strong>や<strong>ZK EVM</strong>にも積極的に投資しています。ZK技術（ゼロ知識証明）を用いることで<strong>プライバシーとスケーラビリティ</strong>を両立し、より安全かつ高速なブロックチェーンプラットフォームを形成する計画が進んでいます。</p>



<h3 class="wp-block-heading">マルチチェーン時代との整合</h3>



<p class="wp-block-paragraph">今後、<strong>クロスチェーンブリッジ</strong>や<strong>マルチチェーン対応</strong>がさらに進む中で、Polygonは**“イーサリアムのインターネットオブブロックチェーン”**を標榜し、さまざまなレイヤー2やサイドチェーンを統合するハブになる可能性があります。<br>他のLayer2（Arbitrum, Optimism, zkSyncなど）や独自チェーンとの競争・協調関係がどう変化していくかに注目が集まっています。</p>



<h3 class="wp-block-heading">アプリ連合とエコシステム拡大</h3>



<p class="wp-block-paragraph">Polygon上で稼働するアプリケーション（Aave, QuickSwap, OpenSea, GameFi等）が増加することで、<strong>流動性</strong>や<strong>ユーザー基盤</strong>が強化され、さらなる開発者や企業が参入する好循環が期待されます。特に大手ゲーム会社やエンタープライズ企業がPoSチェーンを導入するケースも増えれば、多くのユーザーがブロックチェーンを意識せずに使える世界がより近づくでしょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Polygonは「イーサリアムのスケーリングソリューション」として、<strong>高速トランザクション</strong>や<strong>低手数料</strong>を提供しながら、イーサリアムとの高い互換性を保つLayer2/Sidechainプラットフォームです。PlasmaやPoSなどの技術を組み合わせて独自のアーキテクチャを実現し、多くのDeFiプロジェクトやNFTサービスが活用を進めています。</p>



<ul class="wp-block-list">
<li><strong>メリット</strong>
<ul class="wp-block-list">
<li>EVM互換のため開発が容易で、Solidityや既存ツールを活用可能</li>



<li>トランザクション手数料が安く、高速処理が可能</li>



<li>大手DeFiやNFTマーケットが次々に参入し、ユーザー体験が向上</li>
</ul>
</li>



<li><strong>注意点</strong>
<ul class="wp-block-list">
<li>イーサリアム本体ほどの分散度があるかは議論が分かれる</li>



<li>ブリッジ攻撃などクロスチェーン特有のリスク</li>



<li>コミュニティ主導やガバナンス強化が進みつつあるが、中央集権的要素への批判も残る</li>
</ul>
</li>



<li><strong>今後の見通し</strong>
<ul class="wp-block-list">
<li>ZK技術の採用拡大や複数ソリューションの取り込みで、ハブ的な役割を果たす方向へ</li>



<li>マルチチェーン時代に対応し、イーサリアムの主要なサイドチェーンとして位置づけを強化</li>



<li>大規模ゲームや企業導入などのユースケースが増えれば、ユーザー数も急激に伸びる可能性</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">もしあなたがイーサリアムでDAppを開発中で、<strong>高いガス代や遅延</strong>に悩まされているなら、Polygonへのデプロイを検討してみる価値は大いにあります。EVM互換によって既存コードをほぼそのまま移植できるうえ、ユーザーは<strong>リーズナブル</strong>な手数料でトランザクションを行えます。ぜひ公式Wikiや開発者向けドキュメントを参照しながら、Polygonでのスマートコントラクト開発を試してみてはいかがでしょうか。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/blockchain-polygon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ステーキング報酬の仕組みを徹解説！運用方法から報酬設計、実装のポイントまでわかりやすく紹介</title>
		<link>https://techgrowup.net/blockchain-staking/</link>
					<comments>https://techgrowup.net/blockchain-staking/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Fri, 21 Mar 2025 03:22:44 +0000</pubDate>
				<category><![CDATA[ブロックチェーン]]></category>
		<category><![CDATA[PoS]]></category>
		<category><![CDATA[インセンティブ]]></category>
		<category><![CDATA[ステーキング]]></category>
		<category><![CDATA[ステーキング報酬]]></category>
		<category><![CDATA[スラッシング]]></category>
		<category><![CDATA[ノード運用]]></category>
		<category><![CDATA[バリデーター]]></category>
		<category><![CDATA[分散型]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2677</guid>

					<description><![CDATA[はじめに ブロックチェーン技術の進化に伴い、Proof of Stake（PoS）やそのバリエーションを採用するネットワークが増えています。こうしたネットワークでは、**ステーキング（Staking）**と呼ばれる仕組み [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">はじめに</h1>



<p class="wp-block-paragraph">ブロックチェーン技術の進化に伴い、Proof of Stake（PoS）やそのバリエーションを採用するネットワークが増えています。こうしたネットワークでは、**ステーキング（Staking）**と呼ばれる仕組みを通じてノードがブロック提案や検証を行い、ネットワークの安全性を支えています。そのインセンティブとして支払われるのが「ステーキング報酬」です。<br>本記事では、ステーキング報酬の基本的な仕組みや計算方法、設計のポイントについて解説します。初心者にもわかりやすいように丁寧にまとめました。コード例も交えて、ステーキングの世界を俯瞰してみましょう。</p>



<h2 class="wp-block-heading">ステーキング報酬とは？</h2>



<h3 class="wp-block-heading">PoS（Proof of Stake）とステーキングの関係</h3>



<p class="wp-block-paragraph">ステーキング報酬を理解するには、まずPoSのコンセンサスアルゴリズムを簡単に把握する必要があります。ビットコインのように膨大な計算リソースを投入するProof of Work（PoW）に対し、PoSはコインを保有（ロック）することでブロック提案権や検証権を得る仕組みです。</p>



<ul class="wp-block-list">
<li><strong>ステーキング</strong><br>ネットワークのネイティブトークンを、一定量ロックする（預ける）行為</li>



<li><strong>バリデーター（Validator）</strong><br>ステーキングを行うことでブロック検証の権利を得たノード</li>



<li><strong>報酬</strong><br>正しくブロック提案や検証に参加したバリデーターに発生する報酬</li>
</ul>



<p class="wp-block-paragraph">この報酬は、ネットワークが生成する新規トークンやトランザクション手数料の一部などから支払われる場合が多く、参加者へのインセンティブとして機能しつつ、ネットワークの安全性や分散性を高める役割を担います。</p>



<h3 class="wp-block-heading">ステーキング報酬の重要性</h3>



<ul class="wp-block-list">
<li><strong>セキュリティ維持</strong>: 報酬があることで、ノード運営者が正しく検証作業を行い、悪意ある行動を取らないインセンティブが生まれる</li>



<li><strong>インフレコントロール</strong>: 新規発行されるトークンの一部を報酬とする設計では、発行量を調整することでインフレ率を制御可能</li>



<li><strong>コミュニティ活性化</strong>: ステーカーが増えればネットワークの分散度合いが高まり、コミュニティ全体の強度が増す</li>
</ul>



<h2 class="wp-block-heading">ステーキング報酬の設計ポイント</h2>



<h3 class="wp-block-heading">報酬プールの決定</h3>



<p class="wp-block-paragraph">ステーキング報酬は、<strong>どこからトークンを持ってくるか</strong>が重要です。一般的には以下の選択肢があります。</p>



<ol class="wp-block-list">
<li><strong>新規発行（インフレ）</strong><br>ブロック生成に応じて新しくトークンを発行し、ステーキング報酬に充てる方式。参加者が増えれば報酬が薄まる反面、ネットワーク参加を促す効果も期待できる。</li>



<li><strong>手数料プール</strong><br>取引手数料の一部（または全部）を報酬プールに回す方式。新規発行を抑えたい場合や、低インフレを目指すプロジェクトで用いられる。</li>



<li><strong>特別な財源</strong><br>プロトコル開発元や基金が初期に用意したトークンプールから段階的に支給するケースもある。</li>
</ol>



<h3 class="wp-block-heading">報酬レートの決定</h3>



<p class="wp-block-paragraph">単純に「ステーキングした量に比例して一律の利回りを設定する」方式もあれば、ステーカー数やネットワークの状況に応じて動的に変化させる方式も存在します。</p>



<ul class="wp-block-list">
<li><strong>固定利回り（Fixed APR）</strong><br>年利○％などと固定しておく。設計がシンプルだが、ネットワークの動向に合わせた調整ができない。</li>



<li><strong>変動利回り（Variable APR）</strong><br>ステーキング比率（全供給量に対するステーク量の割合）に応じて利回りが変化する。DeFi的な設計で採用されることが多い。</li>



<li><strong>複利計算</strong><br>報酬が追加のステークとして再ロックされる形にすることで、複利効果が働く仕組みも考えられる。</li>
</ul>



<h3 class="wp-block-heading">ロック期間と解除条件</h3>



<p class="wp-block-paragraph">ステーキングの際に「最低ロック期間」を設けるプロジェクトが多く見られます。ロック期間中は資金が動かせない反面、その間に一定の利回りが保証される仕組みもあります。逆に、いつでも解除可能だが報酬率が低めに設定されているケースもあります。</p>



<ul class="wp-block-list">
<li><strong>長期ロックのメリット</strong>
<ul class="wp-block-list">
<li>高いAPR（年利）</li>



<li>トークン価格への下落圧力低減（流通量をロックするため）</li>
</ul>
</li>



<li><strong>短期ロックのメリット</strong>
<ul class="wp-block-list">
<li>流動性確保</li>



<li>ユーザーがリスクを取りやすい</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">ステーキング報酬の計算例</h2>



<p class="wp-block-paragraph">ここでは、単純な計算モデルを用いてステーキング報酬を算出する例を示します。</p>



<h3 class="wp-block-heading">報酬計算の基本式</h3>



<p class="wp-block-paragraph">報酬額 = (個人ステーク量 / ネットワーク全体のステーク量) × 報酬プール × (経過期間/1年間)</p>



<p class="wp-block-paragraph">例として、下記の前提を置いてみましょう。</p>



<ul class="wp-block-list">
<li>ネットワーク全体のステーク量: 1,000,000トークン</li>



<li>報酬プール: 100,000トークン/年</li>



<li>個人ステーク量: 10,000トークン</li>



<li>経過期間: 6ヶ月（半年）</li>
</ul>



<p class="wp-block-paragraph">すると、半年間の報酬額は以下のように計算できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="(10,000 / 1,000,000) × 100,000 × (6/12) 
= 0.01 × 100,000 × 0.5
= 500トークン" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">(10,000 / 1,000,000) × 100,000 × (6/12) </span></span>
<span class="line"><span style="color: #D4D4D4">= 0.01 × 100,000 × 0.5</span></span>
<span class="line"><span style="color: #D4D4D4">= 500トークン</span></span></code></pre></div>



<p class="wp-block-paragraph">この計算は非常に単純化したモデルですが、報酬構造の基本的な考え方をイメージするには十分です。実際にはネットワーク全体のステーク量やインフレ率、手数料分配などで日々変動が生じるケースがほとんどです。</p>



<h2 class="wp-block-heading">コードサンプル：Solidityでステーキング報酬を実装</h2>



<p class="wp-block-paragraph">以下は、Solidity（イーサリアム用のスマートコントラクト言語）で簡単なステーキング報酬機能を表現したサンプルコードです。あくまで学習用の例であり、本番環境にそのまま使えるわけではありません。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStaking {
    // ステークしたユーザーの情報を管理する構造体
    struct StakeInfo {
        uint256 amount;
        uint256 lastClaimTime;
    }

    // ユーザーアドレス =&gt; StakeInfo
    mapping(address =&gt; StakeInfo) public stakers;

    // 一年あたりの報酬レート（例: 10% = 10 * 1e16 / 100）
    uint256 public annualRewardRate = 10 * 1e16; // 10% in decimal

    // トークン残高 (本サンプルではステーキング専用)
    mapping(address =&gt; uint256) public balances;

    // イベント通知
    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event Claimed(address indexed user, uint256 reward);

    // ステーキング関数
    function stake(uint256 _amount) external {
        require(_amount &gt; 0, &quot;Stake amount must be &gt; 0&quot;);
        // 本来であれば ERC20 transferFrom などでトークンを実際に移動する
        
        // 報酬を更新
        updateRewards(msg.sender);

        // 残高とステーク情報を更新
        balances[msg.sender] += _amount;
        stakers[msg.sender].amount += _amount;

        emit Staked(msg.sender, _amount);
    }

    // 報酬請求 (Claim)
    function claim() public {
        updateRewards(msg.sender);
    }

    // アンステーキング関数
    function unstake(uint256 _amount) external {
        require(stakers[msg.sender].amount &gt;= _amount, &quot;Not enough staked&quot;);
        
        // まず報酬を更新
        updateRewards(msg.sender);

        // 残高とステーク情報を更新
        balances[msg.sender] -= _amount;
        stakers[msg.sender].amount -= _amount;

        // 本来なら ERC20 transfer() でユーザーにトークンを返す
        
        emit Unstaked(msg.sender, _amount);
    }

    // 内部関数: 報酬を更新
    function updateRewards(address _user) internal {
        StakeInfo storage info = stakers[_user];
        if (info.amount == 0) {
            info.lastClaimTime = block.timestamp;
            return;
        }

        // 経過時間 (秒)
        uint256 timeDiff = block.timestamp - info.lastClaimTime;
        // 年率報酬計算 (年間 = 365 * 24 * 3600秒 = 31536000)
        uint256 pendingReward = info.amount 
            * annualRewardRate 
            * timeDiff 
            / 1e18 
            / 31536000;  // decimal調整

        info.lastClaimTime = block.timestamp;

        if (pendingReward &gt; 0) {
            // 本来はトークン残高を増やしたり、別のERC20コントラクトをmintする
            emit Claimed(_user, pendingReward);
        }
    }
}
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// SPDX-License-Identifier: MIT</span></span>
<span class="line"><span style="color: #C586C0">pragma</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">solidity</span><span style="color: #D4D4D4"> ^0.8.0;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">contract</span><span style="color: #4EC9B0"> SimpleStaking</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ステークしたユーザーの情報を管理する構造体</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">struct</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">StakeInfo</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> amount;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> lastClaimTime;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ユーザーアドレス =&gt; StakeInfo</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">mapping</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> =&gt; StakeInfo) </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> stakers;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 一年あたりの報酬レート（例: 10% = 10 * 1e16 / 100）</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> annualRewardRate = </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> * </span><span style="color: #B5CEA8">1e16</span><span style="color: #D4D4D4">; </span><span style="color: #6A9955">// 10% in decimal</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// トークン残高 (本サンプルではステーキング専用)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">mapping</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> =&gt; </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> balances;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// イベント通知</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">event</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Staked</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">indexed</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">user</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">amount</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">event</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Unstaked</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">indexed</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">user</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">amount</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">event</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Claimed</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">indexed</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">user</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">reward</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ステーキング関数</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">stake</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_amount</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">external</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">require</span><span style="color: #D4D4D4">(_amount &gt; </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;Stake amount must be &gt; 0&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 本来であれば ERC20 transferFrom などでトークンを実際に移動する</span></span>
<span class="line"><span style="color: #D4D4D4">        </span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 報酬を更新</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">updateRewards</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 残高とステーク情報を更新</span></span>
<span class="line"><span style="color: #D4D4D4">        balances[</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">] += _amount;</span></span>
<span class="line"><span style="color: #D4D4D4">        stakers[</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">].amount += _amount;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">emit</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Staked</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">, _amount);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 報酬請求 (Claim)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">claim</span><span style="color: #D4D4D4">() </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">updateRewards</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// アンステーキング関数</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">unstake</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_amount</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">external</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">require</span><span style="color: #D4D4D4">(stakers[</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">].amount &gt;= _amount, </span><span style="color: #CE9178">&quot;Not enough staked&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// まず報酬を更新</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">updateRewards</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 残高とステーク情報を更新</span></span>
<span class="line"><span style="color: #D4D4D4">        balances[</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">] -= _amount;</span></span>
<span class="line"><span style="color: #D4D4D4">        stakers[</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">].amount -= _amount;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 本来なら ERC20 transfer() でユーザーにトークンを返す</span></span>
<span class="line"><span style="color: #D4D4D4">        </span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">emit</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Unstaked</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">msg.sender</span><span style="color: #D4D4D4">, _amount);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 内部関数: 報酬を更新</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">updateRewards</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">address</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_user</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">internal</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        StakeInfo </span><span style="color: #569CD6">storage</span><span style="color: #D4D4D4"> info = stakers[_user];</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (info.amount == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">            info.lastClaimTime = </span><span style="color: #569CD6">block</span><span style="color: #D4D4D4">.timestamp;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 経過時間 (秒)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> timeDiff = </span><span style="color: #569CD6">block</span><span style="color: #D4D4D4">.timestamp - info.lastClaimTime;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 年率報酬計算 (年間 = 365 * 24 * 3600秒 = 31536000)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">uint256</span><span style="color: #D4D4D4"> pendingReward = info.amount </span></span>
<span class="line"><span style="color: #D4D4D4">            * annualRewardRate </span></span>
<span class="line"><span style="color: #D4D4D4">            * timeDiff </span></span>
<span class="line"><span style="color: #D4D4D4">            / </span><span style="color: #B5CEA8">1e18</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">            / </span><span style="color: #B5CEA8">31536000</span><span style="color: #D4D4D4">;  </span><span style="color: #6A9955">// decimal調整</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        info.lastClaimTime = </span><span style="color: #569CD6">block</span><span style="color: #D4D4D4">.timestamp;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (pendingReward &gt; </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 本来はトークン残高を増やしたり、別のERC20コントラクトをmintする</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">emit</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Claimed</span><span style="color: #D4D4D4">(_user, pendingReward);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li><code>stake()</code> 関数: ユーザーが <code>_amount</code> をステークして報酬獲得の対象になる</li>



<li><code>unstake()</code> 関数: ステークしているトークンを引き出す（報酬計算後）</li>



<li><code>updateRewards()</code> 関数: 最後の請求時間からの経過時間をもとに報酬を計算</li>
</ul>



<p class="wp-block-paragraph">この例ではかなり単純化していますが、実際のプロジェクトでは<strong>スラッシング機能</strong>（不正行為やオフライン罰則）の導入や、<strong>複数の報酬プール</strong>を扱うロジックなど、さらなる仕組みが必要となります。</p>



<h2 class="wp-block-heading">スラッシング（Slashing）とは</h2>



<h3 class="wp-block-heading">悪意ある行動への罰則</h3>



<p class="wp-block-paragraph">PoSネットワークでは、ブロック提案者が悪意を持って二重署名やチェーン分岐を行うと、ネットワークの安全性が損なわれます。その対策として、<strong>スラッシング</strong>と呼ばれる罰則メカニズムが用意されていることが一般的です。</p>



<ol class="wp-block-list">
<li><strong>二重署名</strong>: 同時に複数のブロックを作り、チェーンを混乱させる行為</li>



<li><strong>ハイブリッド（オフライン長期化）</strong>: 長期間にわたってオンラインで検証を行わず、ネットワークに参加していない状態</li>
</ol>



<p class="wp-block-paragraph">これらの行為が検出された場合、ステーキングしたトークンの一部（あるいは全部）を没収することで、悪意ある行動を抑制します。</p>



<h2 class="wp-block-heading">今後の展開と注目ポイント</h2>



<h3 class="wp-block-heading">L1とL2の連携</h3>



<p class="wp-block-paragraph">多くのPoSチェーンがL2ソリューション（RollupやState Channelなど）との連携を強化しており、ステーキング報酬もまた<strong>レイヤー2上でのインセンティブ設計</strong>が進むと予想されます。<br>報酬分配をよりスケーラブルかつ低手数料で行う仕組みが整えば、ステーキング参加者が増える可能性があります。</p>



<h3 class="wp-block-heading">トークンエコノミクスの多様化</h3>



<p class="wp-block-paragraph">DeFiやNFTなどと絡め、<strong>独自ガバナンストークン</strong>を発行して報酬設計を複雑化するプロジェクトも増えています。既存のステーキングに加え、「流動性ステーキング」「二重報酬プログラム」など、エコシステムがさらに多様化するでしょう。</p>



<h3 class="wp-block-heading">規制と法的側面</h3>



<p class="wp-block-paragraph">一部の国や地域では、ステーキング報酬を<strong>証券</strong>として扱うかどうか等、法的な議論が進んでいます。プロジェクト運営者は、規制当局の動向を注視しながら報酬設計を行う必要があります。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">ステーキング報酬は、ブロックチェーンネットワークの安全性や維持コスト、インフレ率をコントロールするための重要な仕組みです。以下のポイントを押さえておくと、設計や理解に役立ちます。</p>



<ol class="wp-block-list">
<li><strong>ステーキングの本質</strong>: コインをロックしてネットワークを支える行為が、PoSコンセンサスの要</li>



<li><strong>報酬プールの設定</strong>: 新規発行（インフレ）や手数料プールなど、財源がどこにあるかで設計は大きく変わる</li>



<li><strong>報酬レートの決定</strong>: 固定APR/変動APRなどを検討し、ネットワークの稼働状況に応じて調整</li>



<li><strong>ロック期間と解除</strong>: ユーザーの流動性と報酬率のバランスをどう取るか</li>



<li><strong>スラッシングによるセキュリティ強化</strong>: 悪意あるノードを抑制する仕組みとして機能</li>



<li><strong>今後の展開</strong>: L2ソリューションや複合的なトークンエコノミクスと組み合わさり、さらに高度なステーキングモデルが登場する見込み</li>
</ol>



<p class="wp-block-paragraph">ステーキング報酬の仕組みを正しく理解し、安定したインセンティブモデルを構築することは、ブロックチェーンプロジェクトの成功に直結します。運用者・開発者としては、<strong>プロトコル設計だけでなくユーザー体験、セキュリティ、規制面の考慮</strong>を総合的に行い、持続可能なコミュニティを築く視点が欠かせません。</p>



<p class="wp-block-paragraph">初めてのステーキング参加者は、まずは自分が関心のあるPoSチェーンの報酬設計やロック期間、リスク（スラッシング条件など）をよく確認し、小額から試してみるのがおすすめです。以上の知識を活かして、より豊かなステーキングライフを目指してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/blockchain-staking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>イーサリアムのコンセンサスメカニズム解説：PoWからPoSへ、仕組みとメリット・デメリットを深堀り</title>
		<link>https://techgrowup.net/blockchain-etherium-pos/</link>
					<comments>https://techgrowup.net/blockchain-etherium-pos/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Fri, 21 Mar 2025 03:16:34 +0000</pubDate>
				<category><![CDATA[ブロックチェーン]]></category>
		<category><![CDATA[Beacon Chain]]></category>
		<category><![CDATA[Ethereum]]></category>
		<category><![CDATA[PoS]]></category>
		<category><![CDATA[PoW]]></category>
		<category><![CDATA[The Merge]]></category>
		<category><![CDATA[イーサリアム]]></category>
		<category><![CDATA[コンセンサスアルゴリズム]]></category>
		<category><![CDATA[ステーキング]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2673</guid>

					<description><![CDATA[はじめに イーサリアムは登場以来、ブロックチェーン技術を活用したスマートコントラクトや分散型アプリケーション（DApp）のプラットフォームとして世界中の注目を集めてきました。そのイーサリアムの根幹を支えるのが「コンセンサ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">はじめに</h1>



<p class="wp-block-paragraph">イーサリアムは登場以来、ブロックチェーン技術を活用したスマートコントラクトや分散型アプリケーション（DApp）のプラットフォームとして世界中の注目を集めてきました。そのイーサリアムの根幹を支えるのが「コンセンサスメカニズム」です。もともとはビットコインと同様に「Proof of Work（PoW）」を採用していましたが、2022年に「The Merge（ザ・マージ）」を実施し、現在は「Proof of Stake（PoS）」へと移行しています。</p>



<p class="wp-block-paragraph">本記事では、<a rel="noopener" target="_blank" href="https://ethereum.org/en/developers/docs/consensus-mechanisms/">ethereum.org<span class="fa fa-external-link external-icon anchor-icon"></span></a> のドキュメントを参考にしながら、イーサリアムにおけるコンセンサスの仕組みを分かりやすく解説します。PoWとPoSの違いやそれぞれのメリット・デメリット、ステーキングやブロック提案の仕組み、コード例などを盛り込みました。開発者だけでなく、ブロックチェーン技術の初心者の方にも理解しやすいよう構成していますので、ぜひ最後までご覧ください。</p>



<h2 class="wp-block-heading">コンセンサスメカニズムとは？</h2>



<h3 class="wp-block-heading">コンセンサスとは何か</h3>



<p class="wp-block-paragraph">ブロックチェーンは、中央管理者がいない分散型のネットワークです。多数のノード（コンピュータ）が参加し、それぞれが同じデータ（台帳）を正しいと認識できる必要があります。その「正しいデータ」を合意する仕組みが「コンセンサスメカニズム」です。</p>



<p class="wp-block-paragraph">コンセンサスアルゴリズムにはさまざまな種類がありますが、代表的なのが**Proof of Work（PoW）とProof of Stake（PoS）**です。ビットコインがPoWを採用していることは有名ですが、イーサリアムはもともとPoWを使っていたものの、より省電力かつスケーラブルとされるPoSへの移行を目指し、実際に「The Merge」を通じてPoSへと移行しました。</p>



<h3 class="wp-block-heading">イーサリアムにおけるコンセンサス</h3>



<p class="wp-block-paragraph">イーサリアムの初期バージョン（Frontier, Homestead, Metropolisなど）はPoWを採用していました。これはビットコインと同様、マイナーがマイニングを行い、最初にハッシュ値の難易度要件を満たすノードが新たなブロックを提案する仕組みです。しかし、消費電力の増大やスケーラビリティ問題が顕在化し、開発コミュニティは早期からPoSへの移行計画を掲げてきました。</p>



<p class="wp-block-paragraph">2022年9月の**The Merge（ザ・マージ）**によって、イーサリアムはPoWからPoSへと正式にコンセンサスアルゴリズムを切り替え、電力消費を大幅に削減、さらにネットワークの性能拡張に向けた基盤を整えた形です。</p>



<h2 class="wp-block-heading">Proof of Work（PoW）の概要</h2>



<h3 class="wp-block-heading">PoWの仕組み</h3>



<p class="wp-block-paragraph">Proof of Work はビットコインで広く知られる合意形成アルゴリズムであり、イーサリアムでもThe Merge以前まで用いられていました。具体的には次のように動作します。</p>



<ol class="wp-block-list">
<li><strong>マイニング</strong>: マイナー（採掘者）が膨大な計算を行い、ブロックヘッダのハッシュ値が特定の難易度（Difficulty）以下になるようにNonce（ナンス）を探し当てる</li>



<li><strong>ブロック生成</strong>: 最初に要件を満たすブロックを見つけたマイナーが、そのブロックをネットワークにブロードキャスト</li>



<li><strong>ブロック報酬</strong>: ブロックを生成したマイナーは報酬（新規発行されるETHおよびトランザクション手数料）を受け取る</li>
</ol>



<h3 class="wp-block-heading">メリットとデメリット</h3>



<ul class="wp-block-list">
<li><strong>メリット</strong>
<ul class="wp-block-list">
<li>長年の運用実績があり、高い信頼度</li>



<li>計算リソースによるセキュリティが確立</li>
</ul>
</li>



<li><strong>デメリット</strong>
<ul class="wp-block-list">
<li>膨大な電力を消費（環境負荷が高い）</li>



<li>ハッシュレートの高いマイナーに有利（51%攻撃リスクも存在）</li>



<li>トランザクションスループットの限界</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">イーサリアム独自のEthash</h3>



<p class="wp-block-paragraph">ビットコインがSHA-256を使うのに対し、イーサリアムは独自の<strong>Ethash</strong>アルゴリズムを使用していました。一般的なASIC耐性を高める設計で、GPUマイニングが中心となっていましたが、高い消費電力やスケーラビリティ課題は残っていたのです。</p>



<h2 class="wp-block-heading">Proof of Stake（PoS）の概要</h2>



<h3 class="wp-block-heading">PoSの仕組み</h3>



<p class="wp-block-paragraph">Proof of Stake は、コインを保有（ステーキング）している参加者がブロック提案権を得やすい仕組みです。大まかな動作イメージは次の通りです。</p>



<ol class="wp-block-list">
<li><strong>ステーキング</strong>: ネットワークに参加したいバリデーター（検証者）は一定量のETHをデポジットコントラクトに預ける</li>



<li><strong>ブロック提案</strong>: ランダム選出されたバリデーターが新たなブロックを提案し、他のバリデーターが検証を行う</li>



<li><strong>報酬とペナルティ</strong>: 正常にバリデーターを行えばステーキング報酬を受け取り、悪意ある行動をすればステークしたETHの一部または全部が没収される（スラッシング）</li>
</ol>



<h3 class="wp-block-heading">メリットとデメリット</h3>



<ul class="wp-block-list">
<li><strong>メリット</strong>
<ul class="wp-block-list">
<li>大幅な省電力化（マイニングが不要）</li>



<li>ブロック生成の高速化やスケーラビリティ向上の余地</li>



<li>参加ハードルが相対的に低くなる（GPUやASIC不要）</li>
</ul>
</li>



<li><strong>デメリット</strong>
<ul class="wp-block-list">
<li>トークンを大量保有する参加者が有利になる懸念</li>



<li>経済設計を誤るとステーク集中が起きる可能性</li>



<li>実装が複雑（安全性とライブ性をどう担保するか）</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">イーサリアムのPoS（The Merge後）</h3>



<p class="wp-block-paragraph">イーサリアムのPoSでは、<strong>Beacon Chain</strong> という別のチェーンでPoSを先行実装し、最終的にメインチェーンと統合する形でThe Mergeを実現しました。現在はステーキングされているETHを持つバリデーターがブロック提案を行い、トランザクションを処理しています。</p>



<h2 class="wp-block-heading">The Merge（ザ・マージ）とは</h2>



<h3 class="wp-block-heading">概要</h3>



<p class="wp-block-paragraph">The Merge はイーサリアムにおけるPoWからPoSへの切り替えイベントを指します。具体的には、従来のPoWチェーン（Execution Layer）とPoSを動かしていたBeacon Chain（Consensus Layer）を統合し、ブロック提案と検証の仕組みをPoS側に一本化するアップグレードです。</p>



<h3 class="wp-block-heading">目的と効果</h3>



<ul class="wp-block-list">
<li><strong>電力消費を99%以上削減</strong>: マイニングのための高い計算リソースが不要になる</li>



<li><strong>セキュリティと分散化の両立</strong>: 大量のETHをステークしてバリデーターになる仕組み</li>



<li><strong>今後のスケーラビリティ改善</strong>: Sharding（シャーディング）などのアップデートをスムーズに導入可能</li>
</ul>



<h3 class="wp-block-heading">移行後の世界</h3>



<p class="wp-block-paragraph">The Merge後、イーサリアムは環境負荷の大幅削減を実現し、追加のトランザクション処理能力（シャーディング）やL2ソリューションとの連携によってさらにスケーラビリティを高める可能性があります。ただし、一部のマイナーはPoWチェーンを維持しようとして別のフォーク（ETHWなど）を作成する動きもありましたが、主流はあくまでPoSチェーンとなっています。</p>



<h2 class="wp-block-heading">イーサリアムPoSの仕組みをもう少し詳しく</h2>



<h3 class="wp-block-heading">バリデーターとステーク</h3>



<ol class="wp-block-list">
<li><strong>バリデーター登録</strong><br>32 ETH 以上をデポジットコントラクトに送信し、Beacon Nodeを起動してバリデーターとして登録する</li>



<li><strong>ブロック提案</strong><br>ランダム選出によってバリデーターが次のブロック提案者として選ばれる（スロット単位）</li>



<li><strong>アテステーション</strong><br>他のバリデーターは提案されたブロックを検証し、「正しい」「間違っている」などの投票を行う（アテステーション）</li>



<li><strong>報酬とペナルティ</strong>
<ul class="wp-block-list">
<li><strong>報酬</strong>: 正常に提案・検証を行うと、ステーキング報酬がバリデーターに付与される</li>



<li><strong>ペナルティ（スラッシング）</strong>: 不正やオフライン状態が続くと、ステークしたETHの一部または全部が没収される</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">スロットとエポック</h3>



<ul class="wp-block-list">
<li><strong>スロット（slot）</strong>: イーサリアムPoSにおけるブロック生成の単位（約12秒に1回）</li>



<li><strong>エポック（epoch）</strong>: 32スロットをまとめた概念。エポックごとにバリデーターのランダム選出が行われる</li>
</ul>



<p class="wp-block-paragraph">この仕組みによってブロック提案と検証プロセスを効率的かつ安全に回すことができ、アテステーションによる迅速なコンセンサス確立も可能となっています。</p>



<h2 class="wp-block-heading">簡易コード例：PythonでPoSのバリデーター抽選をシミュレート</h2>



<p class="wp-block-paragraph">以下のコード例は、学習目的でPoSの「ステーク量に応じてバリデーターをランダム選出する」概念をシンプルに示しています。実際のイーサリアムPoSは遥かに複雑な仕組み（RANDAO、BLS署名など）を採用していますが、本質的なイメージを掴むのに役立つでしょう。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import random

class Validator:
    def __init__(self, name, stake):
        self.name = name
        self.stake = stake

class PoSNetwork:
    def __init__(self, validators):
        self.validators = validators

    def select_block_proposer(self):
        total_stake = sum(v.stake for v in self.validators)
        rand_value = random.uniform(0, total_stake)
        cumulative = 0
        for v in self.validators:
            cumulative += v.stake
            if rand_value &lt;= cumulative:
                return v

def main():
    # バリデーター3名を用意
    validators = [
        Validator(&quot;Alice&quot;, 32),
        Validator(&quot;Bob&quot;, 64),
        Validator(&quot;Charlie&quot;, 96),
    ]
    network = PoSNetwork(validators)

    # 10回ブロック提案者を抽選
    for i in range(10):
        proposer = network.select_block_proposer()
        print(f&quot;Block {i}: Proposed by {proposer.name} (stake={proposer.stake})&quot;)

if __name__ == &quot;__main__&quot;:
    main()" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> random</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Validator</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">__init__</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">stake</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.name = name</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.stake = stake</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">PoSNetwork</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">__init__</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">validators</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.validators = validators</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">select_block_proposer</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        total_stake = </span><span style="color: #DCDCAA">sum</span><span style="color: #D4D4D4">(v.stake </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> v </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.validators)</span></span>
<span class="line"><span style="color: #D4D4D4">        rand_value = random.uniform(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, total_stake)</span></span>
<span class="line"><span style="color: #D4D4D4">        cumulative = </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> v </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.validators:</span></span>
<span class="line"><span style="color: #D4D4D4">            cumulative += v.stake</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> rand_value &lt;= cumulative:</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> v</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">main</span><span style="color: #D4D4D4">():</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># バリデーター3名を用意</span></span>
<span class="line"><span style="color: #D4D4D4">    validators = [</span></span>
<span class="line"><span style="color: #D4D4D4">        Validator(</span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">32</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        Validator(</span><span style="color: #CE9178">&quot;Bob&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">64</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        Validator(</span><span style="color: #CE9178">&quot;Charlie&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">96</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">    ]</span></span>
<span class="line"><span style="color: #D4D4D4">    network = PoSNetwork(validators)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 10回ブロック提案者を抽選</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> i </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        proposer = network.select_block_proposer()</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Block </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">i</span><span style="color: #569CD6">}</span><span style="color: #CE9178">: Proposed by </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">proposer.name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> (stake=</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">proposer.stake</span><span style="color: #569CD6">}</span><span style="color: #CE9178">)&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    main()</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>select_block_proposer()</code> で <code>rand_value</code> を用いてステーク量に比例した確率でバリデーターを選ぶ</li>



<li>実際のイーサリアムPoSでは、BLS署名やRANDAO、Committee選抜など多段の乱数生成プロセスや検証フローが導入されている</li>
</ul>



<h2 class="wp-block-heading">メリットとデメリットを総整理</h2>



<h3 class="wp-block-heading">PoWのメリット・デメリットまとめ</h3>



<ul class="wp-block-list">
<li><strong>メリット</strong>
<ul class="wp-block-list">
<li>長年の実績とコミュニティサポート</li>



<li>物理的な計算リソースに基づくシンプルなセキュリティモデル</li>
</ul>
</li>



<li><strong>デメリット</strong>
<ul class="wp-block-list">
<li>膨大な電力消費（環境負荷）</li>



<li>ASIC 等によるマイニングの中央化リスク</li>



<li>スケーラビリティが限定的</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">PoSのメリット・デメリットまとめ</h3>



<ul class="wp-block-list">
<li><strong>メリット</strong>
<ul class="wp-block-list">
<li>電力消費の大幅削減</li>



<li>スケーラビリティ改善への足掛かり</li>



<li>ステーキングによる新たなインセンティブ設計（金融商品のようにETHで報酬を得られる）</li>
</ul>
</li>



<li><strong>デメリット</strong>
<ul class="wp-block-list">
<li>トークン大量保有者が有利になりがち</li>



<li>経済設計や乱数生成などのプロトコルが複雑</li>



<li>長期間オフラインの場合ペナルティを受けるなど、バリデーター運用に注意が必要</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">イーサリアムは、もともとビットコインのようなPoWで動いていましたが、<strong>The Merge</strong>によってPoSへとコンセンサスメカニズムを大きく転換しました。これはブロックチェーンの歴史においても極めて重要な出来事であり、環境負荷の軽減やスケーラビリティの可能性拡大など、多くのメリットをもたらしています。</p>



<ul class="wp-block-list">
<li><strong>PoW</strong>: 膨大な計算によるマイニング。長い実績がある一方で、高い電力消費やスケーラビリティ制限が課題</li>



<li><strong>PoS</strong>: ステーキングに基づくブロック提案。低い電力消費、経済設計の柔軟さ、セキュリティ確保などを両立可能</li>
</ul>



<p class="wp-block-paragraph">イーサリアムは今後も<strong>シャーディング</strong>や<strong>Rollup</strong>などのレイヤー2技術との連携を深め、処理能力やユーザー体験を向上させる方向に進化が見込まれます。開発者にとっては、PoSに移行したイーサリアム上でのスマートコントラクト開発やステーキングサービス、DeFiとの連携など、新たなビジネスチャンスや技術領域が広がっています。</p>



<p class="wp-block-paragraph">最後に、コンセンサスメカニズムはブロックチェーンの根幹となる技術要素です。PoSに関心がある方は、ステーキングの参加やバリデーター運用を試してみるのもよいでしょう。多くのエコシステムプロジェクトがステーキングをサポートし、GUIやクライアントツールも充実してきています。これからのイーサリアムは、単なる「暗号通貨」ではなく、<strong>より持続可能かつ拡張性の高い分散型アプリケーション基盤</strong>として進化を続けていくことでしょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/blockchain-etherium-pos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
