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

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

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とそのほかもろもろの基本の使い方を抑えるのには十分かと思います。

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
  • 実例
  • 参考
続きを読む

2022年12月Ethereum Mainnetの同期について

先ほどEthereum Mainnetの同期が完了したので、同期に必要なシステム要件と掛かった時間を記録として残す。
なお、同期に必要となる時間はネットワーク状況や、接続したpeerによって大幅に前後することに注意。また、今回同期に用いたマシンは個人利用PCであり、並行して各種プログラムも稼働中であったことを追記しておく。


結果だけ先に記すと、execution layerの同期が完全に完了するまでにおおよそ6日ほど要した。

  • PCスペック
  • node clients
    • execution layer
    • consensus layer
  • 実行コマンド
    • execution layer
    • consensus layer
  • 同期ログ
    • 開始時期
    • Post Merge同期開始
    • execution layer 同期完了
  • Mainnet 同期完了時のストレージ消費量
続きを読む