Skip to content
This repository was archived by the owner on Jun 4, 2024. It is now read-only.
This repository was archived by the owner on Jun 4, 2024. It is now read-only.

BulksaleV1.sol のclone生成(Factory.deploy)のガス代削減 #4

Description

@0xMotoko

問題

  • minimal proxyの生成であるFactory.deployが300000gasほどかかる。minimal proxyの生成自体は60000gasほどなので、proxy生成後のinitialize関数においてstorageを使い過ぎていることが問題であると言える。

弊害

  • 普通にBulksaleをデプロイするよりは1/10のコストにできてはいるものの、さらに34%ほどコストを圧縮できる余地があり、それができていない。

見積もり

  • 現在 BulksaleV1 は 9 slots のstorageを使用しているが、bytes32[2] の2 slotsに圧縮できる余地がある。

仮実装

https://github.com/DeFiGeek-Community/BulksaleFactory/blob/gasgolf/bulksale-initialize/contracts/BulksaleV1.sol#L94-L175

結果と課題

  1. 前述のSSTORE削減・圧縮策は実装でき、かつガス代削減効果が確認できた。120000gasほどのガス代削減が期待できた。

  2. 問題があったのは、storage保存とは関係のない関数呼び出しの部分。ここは本来2000gasほどしかかからない処理なのに、なぜか関数呼び出しに400000gas徴収されるようになった。(bytes(len=63)でもbytes32[2]でも高額なままだった。しかしmain branchのbytes abiArgs(len=288)の場合は2000gasほどで済んでいる。)

  3. 撤退根拠は 1) 本ガス代削減の効果が120000gasであり、平時において$20ほどのガス代削減になるが、これはORUが実用化されている昨今の状況を鑑みるに、必死に追うべき目標ではないと言える。2) gas golfをしないことによってコントラクトコードが人間にとって読みやすく、バグが介在しにくくなるメリットとのトレードオフと考えることもできる 3) あたらしくコミュニティに入ってくるメンバーが問題箇所を解決しV2以降に公開することもまた選択肢として悪くないと判断した

ネクストアクション

  • 上記(2)にある関数呼び出しを解決する

期日

  • 急ぎではない

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions