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

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

Hardhat IgnitionのThe next nonce for〜 エラーについて

Hardhatを触り始めていきなりつまづいたエラーだったので、解決策と発生の流れについて自分なりに調べたことをまとめておく。
Hardhatの挙動についてはまだまだ浅学なので内容の正しさについてはご注意を。

  • エラーの内容
  • 解決方法
    • 一番手っ取り早い方法
    • 多分きれいな方法
  • 発生手順
  • 原因
続きを読む

Hardhat Consoleの使い方

TruffleからHardhatに乗り換えたので、よく利用しているConsoleの使い方についてもまとめる。
あまりConsoleを直接叩いてEthereumとやりとりする人は見ない気もするが誰かの参考にでもなれば。
いちばんは自分用のメモ。

Hardhatの導入と基本的な使い方は以前の記事を参考に。
y-nakajo.hatenablog.com

  • accountsの取得
  • balanceの取得
  • contractのインスタンス
  • contract methodの実行
続きを読む

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
続きを読む