Ethereum 〜Bitcoinとの違いに着目して〜


# はじめに
この記事は<a href="https://qiita.com/advent-calendar/2022/ambl-rd">AMBL株式会社 Advent Calendar 2022</a>の6日目の記事です。

この記事では、暗号通貨であるイーサリアムの特徴とイーサリアムとビットコインとの違いについて紹介します。

# 時間がない人向けEthereumとBitcoinの違い
| 項目 | Ethereum | Bitcoin |
|:-:|:-:|:-:|
| 概要 | 次世代の分散型プラットフォーム  | 分散型デジタル通貨 |
| 目的  |  様々なアプリケーションやプラットフォームの構築 | 決済や資産の管理/価値の保存  |
| 特徴  | スマートコントラクトによるプログラムによる契約  | ブロックチェーンによる分散型台帳技術  |
| 通貨  |  イーサリアム (ETH) | ビットコイン (BTC)  |
| コンセンサスの仕方  | Pos(Proof of Stake)  | Pow(Proof of Work)  |
| １ブロックの生成速度  | 15秒  | 10分  |
| 発行上限枚数  | 未定  | 2100万BTC  |


# Bitcoinとは
ETHとの比較に入る前に、Bitcoinの概要だけでも知っておく必要があります。
会話形式でやり取りする<a href="https://openai.com/blog/chatgpt/">ChatGPT</a>に、ビットコインの説明をしてもらいましょう。

![bitcoin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/6bc7a465-eb7e-4bb5-a845-124c4dc3330a.png)

概要をこんなに素早くまとめてくれるのは便利ですね。

より詳しく知りたい方は下記の記事を参考にしてください。

https://www.bitpoint.co.jp/column/tips12/?cats_not_organic=true

ホワイトペーパーを読んでみようという方は下記からアクセス可能です。

https://bitcoin.org/bitcoin.pdf

# Ethereumとは
<a href="https://openai.com/blog/chatgpt/">ChatGPT</a>に、Ethereumの説明もしてもらいましょう。
![Ethereum.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/8db63c36-f494-615d-00d0-c72752131b04.png)


分散型アプリケーションやスマートコントラクトなど、聞きなれない言葉が出てきました。以下にその説明を記します。

## 分散型アプリケーション(DApps)とは
分散型アプリケーション(DApps)とは、単一のサーバーではなく、コンピュータノードの分散ネットワークによって動作が維持されるソフトウェアプログラムです。

通常のアプリとDAppsを比較したほうがわかりやすいと思います。
![app-dapps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/d2541a9e-2956-b09a-311d-638737017c20.png)




| 項目 | 通常のアプリ | 分散型アプリ |
|:-:|:-:|:-:|
| 概要  | 中央集権型のアプリケーション | P2Pネットワークを採用したアプリケーション |
| 特徴 | 中央サーバーによるデータの管理  | 分散型の台帳技術によるデータの管理  |
| 通信 | クライアントからサーバーへの要求 | ピア間での直接通信 |
| 機能 | 単一の機能の提供  |  複数のアプリケーションやプラットフォームの構築が可能 |

通常のアプリは中央サーバーによるデータの管理が基本的な構造です。
一方、分散型アプリでは、中央の管理者がおらず、分散型のデータ管理ができることが特徴です。



## スマートコントラクトとは
スマートコントラクトとは、ある条件を満たした場合に自動的に執行される契約のことです。
![スクリーンショット 2022-12-03 17.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/7aa3eae7-f1c2-11f2-767f-a35cd448443e.png)


下記はSolidityの一般的なコントラクトのコード例です。
言語はSolidityというイーサリアム独自の言語を用いています。
```
contract Contract名 {
    //スマート・コントラクトで行う処理をここに記述
}
```
例えば、「Hello World」をコントラクトで記述してみます。

```
contract HelloWorld {
    function get() constant returns (string retVal) {
        return "Hello World!!";
    }
}
```
get()という関数が呼び出されると、「Hello World!!」という文字が返ってくるようになっています。

コントラクトは、JavaやPythonなどオブジェクト指向言語のクラスに相当するものです。コントラクトの中身は状態の保持をする機能やメソッドに相当するような関数、ローカル関数などを持ちます。

## コントラクトの中身
「コントラクトの中身は状態を保持する」と先述しましたが、状態とは…？となった方もいると思います。

Ethereumでは、「状態」は、アカウント情報のことを指します。アカウントは、20bytesのアドレスと、アカウント間における情報のやり取りを保持します。

### Ethereumアカウント
Ethereumアカウントは4つのフィールドを含みます。

- nonce　
    (各トランザクションの処理が一度きりであることを確約するためのカウント情報)
- アカウントの現在のether balance
- アカウントのcontract code　(もし存在すれば)
- アカウントのstorage　(デフォルトは空)

etherはEthereumにおけるトランザクション手数料を支払うために利用されます。

### トランザクション
トランザクションは、著名付きデータパッケージを参照するために使用されます。この著名付きデータパッケージは、ドメインやIPアドレスのほかに秘密鍵によって管理されるアカウントから送られたメッセージを保管します。トランザクションは、以下を含みます。

- メッセージの受信者
- 送信者を特定する署名
- 送信者から受信者へ送られるehterの量
- 署名付きデータパッケージ(デフォルトは関数を持たない)
- startgas値：トランザクションの実行にかかる、計算のステップ数の最大値
- gasprice値：送信者が払う、1計算ステップ当たりの手数料

手数料はstartgas×gaspriceで計算されます。
各トランザクションには、故意による無限ループや無駄なコードの消費を避けるために実行コードの計算ステップ数の上限を設ける必要があります。計算の基本ユニットは「gas」と呼びます。大抵、１計算ステップは１gasを消費します。

このような手数料を設ける意図としては、攻撃者に対して全計算ステップに比例した大量の支払いを強要し、ブロック書き換えのモチベーションを下げることにあります。
ブロックとは、トランザクションを包括したものです。

## コンセンサスアルゴリズム　ー正しいブロックであると誰がどう決めるかー
Ethereumは2022年9月にProof of Work(PoW)からProof of Stake(PoS)に移行しました。Proof of Work(PoW)とProof of Stake(PoS)のメリット・デメリットを表で記します。
|  | Proof-of-Work | Proof-of-Stake |
|:-:|:-:|:-:|
| 概要 | マイナーが、計算された難問を解くことで、ブロックを生成し、トランザクションを処理することで、合意を形成する。 | 最大32ETHをデポジットとした人々が、Validatorとしてブロックを生成し、トランザクションを処理することで、合意を形成する。 |
| 利点 | 計算コストが高いため、攻撃者が攻撃することが困難。  |  手数料を徴収できるため、収益性が高い。 |
| 欠点 | 計算コストが高く、エネルギーを大量に消費するため、環境問題が懸念される。  | 中心集権的  |


PoWは主にビットコインで使用されているアルゴリズムです。マイニングでブロックチェーン上に取引を記録することが可能でした。計算上困難な問題を最初に解いた採掘者は、その報酬と台帳に新しいブロックを追加する権利を得ることができます。
しかし、マイニングは膨大な電力を消費するため環境へ負荷がかかります。

そこでPoSを採用することにより、マイニングが不要になり環境への負荷がかからなくなります。ETH出資比率に比例して次のブロック生成者（Validator）を選びます。Validatorがより多くの暗号通貨を保有していればいるほど、次のブロックの生成に選ばれる可能性が高くなります。

Validatorはイーサリアム上のスマートコントラクトにETHという形で明示的に資本を賭けます。このETHは担保として機能し、Validatorが不正や怠惰な振る舞いをした場合に破棄されることがあります。Validatorは、ネットワーク上に伝播された新しいブロックが有効であることを確認し、時には自ら新しいブロックを作成し、伝播する責任を負うことで、報酬を得ます。
つまり、報酬の条件が「計算量と処理速度」から、「保有量と保有年数」へと変化しました。


## ETHのここが大事！！

- コインだけでなく、コインを用いるプラットフォームも提供している
- スマートコントラクトの構築が可能
- 分散型アプリケーションも作成可能
- コンセンサスの方法はPOSに移行



# BitcoinとEthereumの違い
ビットコインとイーサリアムのブロックチェーンおよびネットワークは、全体の目的から異なります。
ビットコインは通貨の代替として作成されたため、交換の媒体や価値の保存を目指しています。一方イーサリアムはグローバルな仮想マシンを介した、スマートコントラクトと分散型アプリケーションを促進するためのプラットフォームを目的としています。

| 項目 | Ethereum | Bitcoin |
|:-:|:-:|:-:|
| 概要 | 次世代の分散型プラットフォーム  | 分散型デジタル通貨 |
| 目的  |  様々なアプリケーションやプラットフォームの構築 | 決済や資産の管理/価値の保存  |
| 特徴  | スマートコントラクトによるプログラムによる契約  | ブロックチェーンによる分散型台帳技術  |
| 通貨  |  イーサリアム (ETH) | ビットコイン (BTC)  |
| コンセンサスの仕方  | PoS(Proof of Stake)  | PoW(Proof of Work)  |
| １ブロックの生成速度  | 15秒  | 10分  |
| 発行上限枚数  | 未定  | 2100万BTC  |



# 参考記事
https://www.sbifxt.co.jp/beginner/cfd-column004.html

https://hedge.guide/cryptocurrency/guide/how-does-ethereum-work

https://github.com/ethereum/wiki/wiki/%5BJapanese%5D-White-Paper

https://phemex.com/ja/academy/%E5%88%86%E6%95%A3%E5%9E%8B%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3dapps%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B

https://coincheck.com/ja/article/10

https://gaiax-blockchain.com/solidity

https://www.investopedia.com/articles/investing/031416/bitcoin-vs-ethereum-driven-different-purposes.asp