アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

HardHatの基本的な使い方

今更ながらではあるが、2023年9月にConsensysよりTruffleの開発停止が発表された。

consensys.io

上記ブログでは、今後のSmartContractの開発環境はHardhatを利用するようにアナウンスされている。
自分も今までTruffleのみでHardhatは利用していなかったのでこれを機にHardhatの使い方の基本を学ぶ。
ここで取り扱うのはEthereumのSmartContractである。

Hardhat公式ブログのGuidesをやっていく。
hardhat.org

  • 環境
  • 1. hardhatのインストール
  • 2. hardhatプロジェクトの作成(初期化)
  • 3. Contractの作成からデプロイまで
  • 4. テストネットへのデプロイ
続きを読む

Ethernaut CTFでぼろぼろにされた話(次のためのメモ)

先日(ブログ記事執筆時だと一昨日) OpenZeppelinが主催するEthernaut CTFが開催されていました。

ctf.openzeppelin.com

こちら、オンライン参加可能なので色々と時間もできたタイミングだしということで参加してみました。土日なので本当は近場にお出かけ予定でしたが、優勝賞金でMacBook買ってあげるからという必死の説得によって妻にも参加OKをもらいました。
最終的にはタイトルにある通り全然解けなかったです。
次に参加するためにメモとして参加した後の反省点を残そうと思います。

  • 成績
  • 問題
    • 1問目 ボーナス問題
    • 2問目 フラッシュローン問題
    • 3問目 EVM bytecodeを解析する問題
    • 4問目 Solidityのコード解析問題
  • 反省点
続きを読む

React + Metamask SDKのDappsチュートリアルを公開しました

タイトルの通り、React + Metamask SDKで作成するDappsのチュートリアルを公開しました。
github.com


リッチなDappsを作る場合は、BuidleGuidl もありますが、リッチすぎて基本を押さえるのが難しいと思ったので自前で作ってみました。

内容は非常に簡単なERC20トークンを扱うDappsの作成チュートリアルです。Metamaskとそのほかもろもろの基本の使い方を抑えるのには十分かと思います。

EVMのmemory gas cost

EVMのMemoryは利用サイズに応じてgas costが増加する。具体的にどの程度の値になるのかを調べたので記事に残しておく。

なお、gas costの詳細な計算式は以下の公式サイトを参照
github.com

続きを読む

SSZのMerkleization

前回に引き続きSSZ(Simple Serialize)について解説する。今回はSSZのMerkleizationについてまとめる。

前回の記事はこちら。
y-nakajo.hatenablog.com

Merkleizationについては、引き続きSSZの仕様を参考にした。
github.com

概要

Eth1.0ではPatricia Merkle Trieを採用していたが、sszではよりシンプルにするために、Binary Merkle Treeを採用した。
さらにhashアルゴリズムもより汎用性を高めるためにkeccak256ではなく、広く利用されているsha256を採用した。
また、SSZではSchema構造を維持したままMerkleizeされる。これにより、Schemaの一部のデータのみをProofと共に共有することが可能となっている。

例えば次に示すDepositDataスキーマをMerkleizeする場合は、下図のtreeが構成され、root hashが求まる。

class DepositData(Container):
    pubkey: BLSPubkey # (= Bytes48)
    withdrawal_credentials: Bytes32
    amount: Gwei # (= Uint64)
    signature: BLSSignature  # Signing over DepositMessage (= Bytes96)
DepositDataのMerkleization

以降、Merkleization方法の各ステップを詳しく解説する。

  • 概要
  • 基本の処理の流れ
    • Basic Typeの場合
    • Vector[B, N]
    • List[B, N]
    • Bitvector[N]
    • Bitlist[N]
    • Union
    • Vector[Composit Type, N]
    • List[Composit Type, N]
    • Container
続きを読む

SSZ - Simple Serialize

本記事では、現在のConsensus-Layer(旧Beacon Chain)で採用されているシリアル化アルゴリズムのSimple Serialize、通称sszについてまとめる。

sszについてまとめるにあたり、以下のサイトを参考にした。

github.com
ethereum.org
eth2book.info

  • 導入の理由
  • sszで定義されている型
    • 基本型(basic type)
    • 複合型(composite type)
      • Container
      • Vector
      • List
      • Bitvector
      • Bitlist
      • Union
  • alias
  • 初期値(Default Value)
  • Serialization
    • fixed size と variable size
    • basic serialization
    • 具体例
  • Decode方法
  • 参照実装
続きを読む

Validatorのリワード計算方法

Validatorの報酬の計算方法は以下のページに整理されているが、これはPhaase0の計算式である。
kb.beaconcha.in

Consensus-LayerはAltairとBellatrixの2回のアップデートが加えられており、現在のValidatorの報酬計算式は変更されている。詳しくは以下のページまとめられているが、自分なりにも整理する。
pintail.xyz

なお、ここではConsensu Layerの報酬の計算方法のみを記載している。The Merge後はこれにプラスしてexecution-layerの手数料報酬も得られる。

  • 計算式の変更理由
  • phase0の計算方法
    • base reward
    • reward and penarty
  • Altairの計算方法
    • base rewardとsync reward
    • reward and penarty
  • 実例
  • 参考
続きを読む