どんなクリプトのプロジェクトでも用意するベスティングコントラクトだが、実装のパターンがいくつか考えられる。
プロジェクトに最適なベスティングコントラクトを考える。
TokenTimeLock.sol
ロックアップしたトークンを線形にリリースするコントラクトを作る
ここで、線形に開放する方法については、お勉強した。
少し気になるのが
- 投資家ごとにコントラクトをデプロイしてあげる
- 全部の投資家を一つのコントラクトで管理する
どちらが良いのかという点だ。
まず、投資家ごとにコントラクトをデプロイしてあげる方が、コントラクトはシンプルになるため、非常に安全だ。 それぞれの投資家ごとにクリフの期間を柔軟に変更することもできる
しかし、ガス代が気になる。
Ethereum Mainnet では、かなりの額になる。
これを許容できるかどうかで、設計が変わってくる
Pegaxy Vesting Contract
ガス代を計測してみたいので、こちらのコントラクトのデプロイのガス代を計測する
このコントラクトは投資家ごとにコントラクトを分けてデプロイしている。
ただ、こちらは Polygon なので、ガス代は無視してコントラクトを設計している可能性が高い。
Pegaxy は 90 前後のコントラクトをデプロイしている。
Polygon Transaction Hash (Txhash) Details | PolygonScan
Calc Gas Price
このコントラクトのデプロイコストは 1,711,899gas だった。
30 gwei/gas の場合
90 個デプロイするとなると
サービス開始前に、べスティングのコントラクトのためにこれだけ使うのは現実的ではない。
ただ、Polygon だと、無視できる額だ。
「じゃあ、Proxy を前に立てて、一回一回のデプロイの値段を下げよう」
というのも、べスティングのコントラクトのためにやるのは違うと思う。
面倒なので、計測しないが、多分、コストは下がるが、それでも無視できないほどではあると思う。
なので、大人しく一つのコントラクトで複数の投資家を管理するのが良いと思う。
- コストの安い L1 や L2 では、投資家ごとにコントラクトをデプロイするは良さそう
- Ethreum Mainnet ではおとなしく、複数の投資家を一つのコントラクトで管理するのが良さそう