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

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

go-ethereumのpruningを試してみた

今回は、go-ethereumのv1.10から追加されたコマンドである、`go-ethereum snapshot prune-state`を試してみたのでその結果を共有する記事となる。
このコマンドは、go-ethereumのfull nodeを維持すると溜まっていってしまうstate trieのゴミデータを削除(枝切り)するためのコマンドである。つまり、言い換えるとgo-ethereumで肥大化していくストレージの容量を削減することができる。

より詳細な情報については公式ブログを参照。
blog.ethereum.org

  • state trieのゴミデータ
  • 今までpruningが実装されなかった理由
  • v1.10からpruningが実装された理由
  • 実際に試してみた
    • 環境
    • 実行前情報
    • 実行後情報
    • 実行時間
続きを読む

gethのsyncingについてのソース解析メモ その3

今回はgethのsyncingの全体的な処理の流れについてまとめる。

前回のまでの記事はこちら。

  • syncの開始
  • remote peerのhandshakeとpeerSetへの登録
  • fetching処理
  • fetchHeadersについて
  • idle peerとtask queueとprocessHeaders
    • peerの取得
    • requestの取得
  • まとめ
続きを読む

gethのsyncingについてのソース解析メモ その2

前回の続きとして、今回は特にReceiptsの取得処理周りを見ていく。Receiptの取得処理はfast syncの時に呼ばれ、full syncでは呼ばれないというコメントがあるが、そこの動きがよくわかっていないので、該当コードがどうなっているかを解析する。

  • ReceiptsPacket パケット受け取ってから
  • func (d *Downloader) fetchParts について
  • Receipts要求メッセージを送っている部分
  • func (d *Downloader) fetchParts のfetchReceipts処理
  • ReserveReceiptsの実態
  • q.receiptTaskQueueにitemをpushしている箇所
  • まとめ
続きを読む

gethのsyncingについてのソース解析メモ その1

Ethereumのfull/fast/snap syncの違いについてより詳しく調べいたと思い、gethのソースを読み始めた。
が、なかなかにボリュームがあるのと、同期処理についてかなり複雑だったので、頭の整理のために解析中の内容をメモとして残しておく。

  • full/fast syncのプロセスについて
  • Block headerのrequest部分
  • response受け取り部分
続きを読む

Apollo Client(React)のGetting Startedを動かすまで

つい最近、社内ハッカソンでGraphQLのライブラリである、ApolloApollo Client(React版)を触ってみた。その時に、公式のGetting Startedを動かすのに少し手間取ったので、ここに手順をまとめておく。
最後に、GraphQLを触ってみたときの所感を簡単にまとめる。

公式のGetting Startedの記事は以下を参照。
www.apollographql.com

  • 環境
  • 1. Reactのインストール
  • 2. graphqlとApollo Clientのインストール
  • 3. コンソール上で実行するClientの作成
  • 4. Apollo ClientをReact Appに組み込む
  • 5. まとめ
続きを読む

StreamによるState管理のすすめ

つい最近、社内ハッカソンでFlutterを用いたアプリ開発を行いました。その時に、FlutterやReactなどにおける、State ManagementやApplication Architecture(というか設計手法?)について色々と議論しました。

その中で、Flutterでよく使われているBlocパターンと、自分が昔経験したReactive MVVMが非常に似ており、Blocパターンが採用しているStreamを用いたState管理について良さを説明してくださいといわれたけど、うまく説明できませんでした。

ということで、今回の記事ではStreamを用いたstate管理の利点をまとめたいと思います。

  • はじめに
  • アプリケーション設計の基本
  • Streamを使う利点
  • オセロゲームはその入力を受け付けるべきか?
  • ネットワーク対戦型オセロゲームでも、シングルプレイでもBusiness Logicのinputは同じ
  • その入力は同期処理?非同期処理?
  • まとめと欠点
続きを読む

truffleでminer.stopなテストの書き方

Truffleでちょっと特殊(?)なテストを書こうとしたら思ったよりもハマってしまったので、備忘録的に残しておきます。

  • miner.stopしたら動かないテスト
  • miner.stopするとsendTransactionでフリーズする理由
  • miner.stopでフリーズしないテスト
  • まとめ
続きを読む