[EIP] 100個のEIPを記事にまとめてみて思うこと

# はじめに

初めまして。
**CryptoGames**というブロックチェーンゲーム企業でエンジニアをしている **cardene（かるでね）** です！
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームは**クリプトスペルズ**というブロックチェーンゲームです。

https://cryptospells.jp/

今回はEthereumへの改善提案である「**EIP**」を、100個以上まとめてみて思うことをまとめていこうと思います。
まとめた**EIP**記事は以下にまとめられています。

https://cardene.notion.site/ERC-EIP-Extention-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

2023年12月27日現在では、`138`の**EIP**を記事にまとめています。
日本でもこの記事を書けるのは一握りだと思うので、ぜひ少しでも興味を持った方は読んでいってください。
また、ぜひこの記事を読んだ後、気になる**EIP**の記事があれば読んでみてください。

直近もQiitaのアドベントカレンダーで「**ERC・EIP Advent Calendar 2023**」というタイトルで、**EIP**の記事を1人で毎日まとめていました。

https://qiita.com/advent-calendar/2023/erc-eip

# EIPとは

EthereumのEIP（Ethereum Improvement Proposal）は、イーサリアムプラットフォームに対する改善提案のことです。
イーサリアムの機能拡張、プロセス、または環境に影響を与える変更や新機能の提案を形式化する方法で、コミュニティの一員から誰でも提案できます。
EIPの目的は、透明性と共同作業を通じてイーサリアムの進化を促進することです。

## EIPの種類

EIPには主に以下の種類があります。

### Standard Track

#### コア
イーサリアムプロトコル自体の変更（例：コンセンサスルールの変更、ネットワークプロトコルの変更など）。

#### ネットワーキング
ピア間通信のプロトコルなど、ネットワーク層に影響を与える提案。

#### インターフェース
クライアントやユーザがイーサリアムと対話するためのAPIやインターフェースの標準。

#### ERC (Ethereum Request for Comments)
イーサリアム上でのトークン標準など、アプリケーションレイヤの規約や標準。

### Meta EIP
イーサリアムのプロセス自体や周辺環境に関する提案（EIPプロセス自体の変更など）。

### Information EIP
ガイドラインや情報提供のための文書。
技術的な標準を設定しませんが、コミュニティに知識を提供して議論を促進することを目的としています。

## EIPのプロセス
EIPプロセスは以下のステップに分かれています。

1. **Idea**
    - **Draft**前のアイデア段階。
    - EIPのリポジトリ内で追跡されません。
2. **Draft**
    - 誰でもEIPを草案として書くことができ、それをイーサリアムのEIPリポジトリに提出します。
3. **Review**
    - コミュニティや専門家が提案をレビューし、フィードバックを提供します。
4. **Last Call**
    - **Final**に移行する前の最終チェック段階。
    - 通常14日後のレビュー終了日を設定し、この期間中に変更が行われると**Review**段階に戻される。
5. **Final**
    - 多くの議論と改善を経て、EIPが最終稿として受け入れられます。
6. **Stagnant**
    - 半年以上更新がない状態。
    - **Draft**に戻すことで、**Stagnant**状態から復活させることができます。
7. **Withdrawn**
    - EIPの著者は提案されたEIPを取り下げた状態です。
    - この状態は最終的なものであり、このEIP番号を使用して復活することはできません。
    - 後日そのアイデアが追求された場合は、新しい提案とみなされます。
8. **Living**
    - 継続的に更新され、最終状態に達しないように設計されたEIPのための特別な状態。
    - これには**EIP1**が含まれています。

より詳しくは以下を参考にしてください。

https://eips.ethereum.org/

https://ethereum.org/ja/eips/

# 有名なEIP

この章では有名なEIPを簡単に紹介していこうと思います。

## ERC20

トークンを発行するための規格。
新規にトークンを発行するときに一般的に使用される規格です。

https://chaldene.net/erc20

## ERC721

NFTを発行するために一番使用されている規格。

https://chaldene.net/erc721

## ERC1155

NFTを発行するための規格。
ゲームアイテムなど、同じアイテムが複数必要なときなどによく使用される規格です。

https://chaldene.net/erc1155

## ERC4337

プロトコルの変更をせずにAccount Abstractionを実装する規格。

https://qiita.com/cardene/items/8c97ca7c93c4557ebfc2

## ERC3525

**ERC721**と**ERC20**の特徴を併せ持ったトークンを発行する規格。

https://qiita.com/cardene/items/9dc7bad8211af65fa285

## ERC6551

NFTをウォレットのように扱うことができる規格。

https://qiita.com/cardene/items/8a0e50b939e0c95f3592

# EIP100個まとめてみて思うこと

この章では、実際にEIP100個以上記事にまとめてきて感じたことや気づきなどをまとめていきます。

## アップデート版がある

**ERC721**や**ERC20**を使用して、より使いやすくする規格などは結構あります。
今回それを拡張版として扱います。
上記の拡張版に対して、「**ERC〇〇の特定の部分をアップデートして、より使いやすくしました**」という規格をわりかし見かけました。
この規格の特徴としては、**EIP**の作者が同じことが多かったり、特定の機能だけをアップデートしていることが多いです。
アップデート版を別規格として出すこともあるということは、**EIP**をまとめてから初めて知りました。
また、中には「**ERC〇〇にバグが見つかり、そのバグを修正しました**」という規格もありました。
中身はほとんど同じで、バグ修正部分だけ違うというのはなかなか見ないので、こんな使い方もあるのだなと新鮮な気持ちになったのを覚えています。

## どこで使うの？

「**この規格どこで使うのだろう？**」という規格もちょいちょい見かけました。
単純に自分の知見や理解力が低いために、活用場面や具体的な使用例を思いつかないだけかもですが、記事にまとめながら若干モヤモヤしたのを覚えています。
例え使わないとしても、「**EIPにまとめた**」というのはステータスになるため、邪推ですがそんなモチベーションの人もいるんじゃないかと思ったりもしました。

:::note info
そう簡単に**Final**フェーズになれないので、そんな低い志ではまとめ切れないとは思うのでいなさそうですが...。
:::

## FinalのEIPは少ない

2023年12月27日現在では、7500以上のERCが提案されています。
その中でFinalフェーズのものは200~300個ほどしかありません。
全体から見るとめちゃくちゃ少なく感じます。
中には**Stagnant**や**Withdrawn**フェーズになってしまったものもありますが、それでも少なく感じます。

一方、**Draft**や**Review**のものは結構あるので、そこに溜まっていっているのかなと思います。

## Finalになる順番と番号は関係ない

**Final**フェーズになったり、**Withdrawn**フェーズになるのは番号が低い順からなっていくものと思っていましたが、実際はそんなことありませんでした。
もちろん、番号が低いほど提案された時期が前なので、フェーズが進むタイミングは必然的に早いです。
しかし、中には細かい部分の議論がずっとなされていたり、理由はわからないですが5年くらい**Review**フェーズの提案があったりします。

提案の内容によっては、シンプルなものであればすぐ通ると思いますし、複雑なものほど議論が活発になされると思うので時間がかかります。

提案者の熱意も影響してくると思うので、番号はあくまで提案された順番であって、フェーズにはそこまで影響してこないということは記事にまとめ始めてから知りました。

## 有名規格でもFinalでないものもある

前章でまとめた有名EIPでも、まだ**Draft**フェーズのものがあったりします。
例えば**ERC4337**などがそうです。

https://eips.ethereum.org/EIPS/eip-4337

**Final**フェーズのものである方が実装する上では信頼できますが、より有用な規格であればフェーズに関係なく使用したいというモチベーションが生まれます。
そのため、議論が進むと並行して実装が活発になされているものもあります。

**Final**になったものがよく使われているものだと思っていましたが、そんなことはないと知れたのは大きかったです。

## おもしろい規格はたくさんある

提案されている規格の中で、有名規格以外はほとんど知られていません。
**EIP**をつぶさに見ているコアな人や、エンジニア出ない限り**EIP**の規格などメディアやX（旧Twitter）で取り上げられない限り知るよしもありません。
私自身、ハッカソンで2つの規格を使用したサービスを作成しましたが、聞いている人の反応は「**...**」という感じでした。

:::note info
「**サービスがいまいち**」、「**自分の説明が下手**」というのは十二分にありますが...。
:::

ただ、そんな知られていない規格の中でも面白いものはたくさんあります。
この記事の最後の章ではそんな規格達をまとめるので、ぜひ見ていただけると嬉しいです。

:::note info
そんな有名じゃない規格を広げる人になりたい！
:::

ちなみにハッカソンで使用した規格は以下に概要をまとめています。

https://github.com/cardene777/KAKUSHIKA/blob/develop/docs/specifications.md#erc6381

# EIP100個まとめてみて得られたこと

前章では、**EIP**を100個まとめて思うことをまとめました。
この章では、**EIP**を100個まとめて得られたことについてまとめていこうと思います。

## 需要がある

**EIP**自体は英語なので、それを日本語にして記事にまとめるのは意外と需要があるということを徐々に知りました。
記事にまとめてX（旧Twitter）で共有すると、時々「**勉強になる！**」などの反応をいただけて、ありがたいことに誰かの役に立っていて嬉しい限りです。
いくら翻訳ツールやChatGPTをはじめ多くのAIツールが出ていても、自分をはじめ英語が苦手な方も多いと思います。
それに加え、**EIP**は専門知識を多分に含んでいるため、日本語で補足しながら記事にまとめるのは需要があるようです。
また、コントラクトを作成する上で、なんらかの参考実装やアイデアを探している人の役に立っているようです。
日本語で調べてもほとんど情報が出てこないので、気になる規格を見かけたときに自分の記事が参考になっているは嬉しいです。
この調子で今後も**EIP**をガンガンまとめて行きます。

## 認知につながる

ひたすら**EIP**をまとめていると、誰かに取り上げていただいたり、自分のことを知ってくれる人が増えました。
「**EIPまとめている人**」的な認知のされ方で、ある意味名刺がわりになって個人的には嬉しい限りです。
自分のことを知ってくれる人が増えると、いろんな規格をより多くの人に知らせることができるため、その点も喜ばしいです。

## 手札が増えた

コントラクトの作成時や、なんらかのプロジェクトで施策練っているときに**EIP**を多く知っているというのは武器になります。
チームメンバーに「**〇〇のようなことができないか**」と問われた時でも、自分がこれまでまとめてきた**EIP**の中から活用できそうなものを提案できるため、まさに手札が増えている状態です。
遊戯王などのカードゲームをやったことがある人ならわかると思いますが、手札が多いということはそれだけ様々な戦略を組むことができて有利です。
しかも、遊戯王などと違う点は「**手札制限がない**」ということです。
どんどん手札を蓄えていき、よりやりたいことにマッチした提案ができるようになろうと思います。

# なんでEIPをまとめているのか

あまり興味はないかもですが、この章で自分が「**なぜEIPをまとめ続けているのか**」についてコラムのような感じでつらつら書いていきます。

まとめている理由を一言で表すと、「**楽しいから**」です。
めちゃくちゃシンプルですが、楽しくないとこんなこと続けられません。
ゲームで例えるとわかりやすいのですが、デイリークエストをこなしている感じです。
報酬は賞賛やいいねなどですが、それは結果的についてきただけで、なくても今までのように続けています。
毎日コツコツこなしていく感じが個人的にはツボになっています。

そして、「**心の安らぎ**」でもあります。
個人的にこのような記事を書くのは好きなので、特に業務が忙しくて心身ともに疲弊している時などは、**EIP**などの記事を書くことで心を癒しています。

もちろん、より多くの人に**EIP**を届けたいという気持ちもありますが、まとめ続けている部分としては「**楽しい**」と「**心の安らぎ**」がおおきいです。
あまり同じ感覚の人はいないかも知れないですが、以上が自分が**EIP**をまとめ続けている理由です。

お褒めの言葉や役に立ったという言葉は嬉しいので、まとめ続けているモチベーションにつながっています。
今後は、どこかの企業の勉強会で使われたり、参考資料として活用されたりしたら嬉しいなと思っております。

# 個人的に好みなEIP

この記事の最後として、個人的に好みな**EIP**をいくつか紹介していこうと思います。

## ERC3643

https://qiita.com/cardene/items/1978a45e1b98133491c5

法律などが影響する証券化されたトークンなどを対象に、特定のユーザーや投資家によるトークンの発行から取引までのライフサイクルをコントラクトで管理する仕組みが提案されています。

## ERC4907

https://qiita.com/cardene/items/253672c18241edcc57eb

NFTを一定期間使用できる権限を管理する仕組みを提案している規格です。
アドレスにロールを付与することで、保有ではなく使用権限を付与できるようになっています。

## ERC5173

https://qiita.com/cardene/items/2133591db882b3e096e5

過去のNFT保有者にもロイヤリティを付与する仕組みを提案している規格です。

## ERC6150

https://qiita.com/cardene/items/38c75ae824373684aecd

NFTにファイル構造のような階層構造をもたらす規格です。
管理が複雑になりますが、できることの幅が広がりそうな仕組みです。

## ERC6381

https://qiita.com/cardene/items/d22d76d1cf66c34f1e57

コントラクト内で絵文字を管理し、NFTに絵文字を付与する仕組みを提案しています。
NFTに絵文字を付与することで、一種のユーザーリアクションとして扱うことができます。

## ERC7508

https://qiita.com/cardene/items/83b2bfcc0499556cb8a0

NFTに様々な属性情報を持たせることができる規格です。

## ERC721C

https://qiita.com/cardene/items/771c0250f86b09d54f30

これは正式な**EIP**ではなく、あくまで**ERC721**の拡張機能です。
オンチェーンロイヤリティを強制化する仕組みで、実装している仕組みが個人的には面白いなと思っています。

オンチェーンロイヤリティ系の他規格を知るとより楽しめるので、以下の記事も併せて紹介しておきます。

https://qiita.com/cardene/items/456ccacca080fd72e3ec

# 最後に

今回は「**100のEIPを記事にまとめてみて思うこと**」についてまとめてきました。
特に読んだ方に学びがある記事ではないかも知れないですが、個人的にまとめてみたかったのでまとめました。
これを機にもっと多くの**EIP**をより多くの人が知ってくれるきっかけになってくれたら嬉しいです。

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58


https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4