スマートコントラクトエンジニアの成長過程とキャリアについて


## はじめに
はじめまして。[InsureDAO](https://www.insuredao.fi/)のFounderの[kohshiba](https://twitter.com/kohshishiba)です。Ethereum advent calendar 2021のシリーズのひとつとして本記事を書いています。2021年はDeFi, NFTなど去年に比べると多くのプロジェクトが出てきており、市場の拡大が一気に進み始めた年だったと思います。

同時にエンジニアの需要が飛躍的に高まっており、また新しくスマートコントラクトの領域に挑戦したい人も多い年だったと思いますので、この記事では実際にスマートコントラクトエンジニア初心者を対象に、実戦で活躍できるようになるまでの道筋の参考になればと思います。内容に関しては筆者が実際にDeFi開発で体験したものが中心になっていることをご了承ください。

プログラミング経験自体がない場合はProgateなどで基礎を習得することをお勧めします。

## 目次
1. 見習いレベル
2. 一人前レベル
3. エキスパートレベル
4. キャリアについて
5. おわりに


## 見習いレベル
このレベルのエンジニアはブロックチェーンってなに？Solidityってなに？というところから始まると思います。まずは実際にSolidityの習得を行いつつ、Ethereumの基本的な動作を理解するところからはじめるといいと思います。

キャリア感として基礎レベル以上の人と一緒に開発を進める、または補佐を行うことになると思います。もしもDeFiではなく、伝統的な取引所で働く場合などはSmart contractの知識はここまでで十分な場合もあるかもしれません。

具体的にはどのプロジェクトでも関わることの多いトークンのコードを理解することをお勧めします。Fungible（各トークンが他トークンと代替可能）な[ERC20](https://docs.openzeppelin.com/contracts/4.x/erc20)とNon Fungible（各トークンが他トークンと代替不可能）な[ERC721](https://docs.openzeppelin.com/contracts/4.x/erc721)の2種類を抑えおけば間違いありません。今後のプロジェクトではトークンのみを採用するようなEthereumとライトな関わりをするプロジェクトも多いと思いますので、おすすめです。

また、Ethereumブロックチェーンの基礎として以下は最低限覚えておいていただきたいです。
*現時点ではPoWとETHコインの価値によりネットワークのセキュリティを担保していること
*ネットワークの分散性、トランザクション処理速度の間には重要なトレードオフが存在すること
*現時点では約15秒のブロックタイムで動いていること
*アカウントとコントラクトアドレスの存在
*Ethereumチェーンの状態を変更するトランザクションにはGas代がかかること
*暗号に基づく署名によって全てのトランザクションが生成されること
*コードで定義された挙動が絶対でバグが存在してトークンが流出したとしても取り戻すのが難しいこと

なおEthereumの仕様については定期的にアップデートされており、2022~2023ごろETH2.0への変更に伴い大幅なアップデートが予定されています。早く基礎レベルのエンジニアになって対応できるようになりましょう。

以下は学習の参考になるサイト、資料です。
Crypto zombie: https://cryptozombies.io/jp/course
初心者向けコミュニティ: https://buildspace.so/
技術本: https://www.amazon.co.jp/dp/B0836T6LXX/

## 一人前レベル
このレベルのエンジニアは多くのプロジェクトで一人前のエンジニアとして活躍できるようになるでしょう。他の人の補助を必要とせずに自分でドキュメント調べるなどで自らアーキテクチャを設計し、実装、テストそしてデプロイするところまでフルサイクルをこなすことができる人がここに当てはまります。

以下に書いてあることがある程度理解できるようになれば、DeFiやNFTのプロジェクトにエンジニアとして参加できるようになるでしょう。このレベルではトークンだけでなく、複雑なコントラクトを書いていくことになると思います。またトークンに独自の機能を追加したい場合もあるでしょう。

### Solidityの更なる理解

現場のベストプラクティスを理解する必要があります。
以下のコードはSolidityの基本的なプログラミングパターンをあつめたものです。
https://github.com/fravoll/solidity-patterns
https://medium.com/@robhitchens

また、テストのテクニックなども以下に記載があります。
https://qiita.com/oishun/items/696cb7dbcab3c8e8e308

### スマートコントラクトを用いたプロジェクトの理解
以下では代表的なプロジェクトをご紹介します。

**ERC20 token exchange(Uniswap)**
UniswapはERC20トークンの交換所においておそらく最も有名なDappのひとつでしょう。
Website: https://uniswap.org/
Github: https://github.com/Uniswap

**ERC721 token exchange (Opensea)**
OpenseaはWyvern Protocolというプロトコルを元に作られているため、こちらを参考にするとよいでしょう。
Website: https://wyvernprotocol.com/
Github: https://github.com/wyvernprotocol/wyvern-v3

**Stable coins: (USDC)**
ステーブルコインは価値がドルにペッグ(連動)されたトークンです。
Stable coinを代表するトークンの一つであるUSDCを紹介します。
Github: https://github.com/centrehq/centre-tokens
またステーブルコインそのものについてはここの紹介記事をご覧ください。

**Oracle: (Chainlink)**
Chainlink　Website: https://chain.link/

### 開発ツール一式を使いこなせるようにする。
開発キット：https://hardhat.org/
ライブラリ：https://openzeppelin.com/contracts/

### フロントエンドやミドルウェアを理解する。
Ethereum内でのデータ保存と計算は大変コストがかかるので、一般的に容量の大きいデータの保存や整形は必須のもの以外は全て外部にて管理するのが必須となります。以下はアーキテクチャを設計する際に必要となるツールやSolidityの仕様の理解です。
https://thegraph.com/en/
https://qiita.com/hakumai-iida/items/3da0252415ec24fe177b

### コードの脆弱性と攻撃パターンについて理解する
バグやハッキングによって2021年もDeFiでは多くの資金が流出しました。エンジニアとしてはこれらのリスクを事前に把握したうえで、可能であれば監査を実施したほうがいいです。
脆弱性リスト: https://consensys.github.io/smart-contract-best-practices/known_attacks
監査会社: https://quantstamp.com/

### 分散性、DAO、ガバナンスの理解
分散性と効率性を追求するために、現在のガバナンスツールについて知っておくことも大切です。
https://snapshot.org/#/
https://aragon.org/

また、実際にコーディングを実施する際はEthereumのメインネットチェーンだけではなく、BSCやFantomなど様々なチェーンにデプロイし、様々なプロトコルとの繋ぎ込みを行うことでしょう。その際は相手のプロダクトの安全性がそのまま自分らのプロダクトに影響します。プロトコルのコードを読み、Admin権限の強さやシステム上のリスクなどについても理解することが大切です。

## エキスパートレベル
基礎編までは、おおよそスマートコントラクトエンジニアとしてDeFiやNFTプロジェクトの開発に携わるための基礎となるスキルについて紹介しましたが、ここからはそれらをもとにプロジェクトを前に進めていくために必要になる項目について紹介します。


### 他プロジェクトのメカニズムや挙動の理解
上記で紹介したプロダクトはごく一部ですので、自分のプロジェクトに関連するプロダクトや興味のあるプロダクトに触れてみるのが大切です。アグリゲーター、Liquidity as a service、オプション、アルゴテーブルコイン、保険、合成資産、クロスチェーンスワップなどをがお勧めです。

### 金融やアートなどのドメイン知識の理解
DeFiやNFTなどはイノベーションですが、伝統的な既存のエコシステムで使われている仕組みは応用されています。
具体的には為替取引、オプション、債券、デリバティブ、先物などの仕組みはDeFiでも実現されており、また今後のエコシステム全体の成長に伴って既存のエコシステムとある程度同じような成長をたどり融合していくでしょう。それらを踏まえた上で、既存の仕組みを知っていくことは有用です。

### L2、ZK、ETH2.0などの理解
https://vitalik.ca/general/2021/01/05/rollup.html
https://vitalik.ca/general/2021/04/07/sharding.html
https://twitter.com/VitalikButerin/status/1466411377107558402
https://github.com/Rari-Capital/nova

### ガス、OpcodeやEVMの理解
https://mudit.blog/solidity-gas-optimization-tips/
https://eips.ethereum.org/EIPS/eip-2929
https://qiita.com/Akatsuki_py/items/05e8ad91d09f9db1fe64

### 規制の理解
米国を中心に暗号資産全体の規制が着々と進んでいますが、プロダクトと密接に関わっていますのでこちらの動向も抑えたほうがいいでしょう。

## キャリアについて
ここまで、様々な項目を見てきみましたが、DeFiやNFTともに日々ものすごい速度で進化しており、それらのスピードについていくだけでも大変ですが、常に先端を走っている人々に共通するのは、情熱だと感じています。

DeFiのエンジニアは海外プロジェクトであれば、シニアクラスのエンジニアであれば年間1千万円以上＋トークンの報酬があるプロジェクトも多くあり、今後DeFi界隈で働きたい方々にとっては魅力的な条件かと思います。また、紹介している記事やプロジェクトは海外初のものが多くなっており、英語がベースになっておりますのでこちらも習得したほうが機会が増えると思います。

## さいごに
最後に、InsureDAOではSolidityエンジニアを募集しています。
興味ある方は[@kohshiba](https://twitter.com/kohshishiba)までご連絡ください。