Develop with pleasure!

福岡でCloudとかBlockchainとか。

Ethereum

Berlinアップグレード前に存在した脅威の開示

Ethereum Foundation Blogで公開された、先月アップグレードされたBerlin以前に存在した脅威に関する開示記事↓ blog.ethereum.org 脅威とは? ↑の記事で取り上げられている脅威というは、処理に時間のかかるトランザクションを作成することでDoS攻撃を可能に…

witプロトコルを利用したBeam Sync

こないだGethに導入された新しい同期方法Snap Syncについて書いたけど↓ techmedia-think.hatenablog.com 今回は、Beam Syncという同期方法↓ https://github.com/ethereum/stateless-ethereum-specs/blob/master/beam-sync-phase0.md を調べてみる。 Beam Syn…

ステートレスクライアントのためのVerkle Trie

Ethereumのスケーラビリティを考えた際にネックになるのが巨大なステートストレージ。利用者は1回だけ手数料を積んだトランザクションを発行するだけだけど、ネットワークに参加するフルノードは以降ずっとそのデータを維持しなければならず、ステートの成…

Geth v1.10.0で導入された新しい同期方法Snap sync

ノードが新しくブロックチェーンネットワークに参加した際、最初にチェーンの初期同期を開始するが、ブロックチェーンの成長と伴にこの初期同期のスピードというのがネックになる。先日リリースされたGeth v1.10.0では、Ethereumのブロックチェーンを同期す…

Merkle Patricia Trieの構造とボトルネック

Ethereumのステートを管理する上で重要な構成要素の1つがMerkle Patricia Trie。ビットコイナーならマークルツリーはお馴染みだが、Merkle Patricia Trieはマークルツリーとはだいぶ勝手が違うデータ構造なので、どんな仕組みで構築されて、特定のアイテム…

EthashのPoWとLight Clientの検証コスト

最近、Geth v1.9.0で導入されたUltra Light ClientがブロックヘッダーのPoWの検証をスキップしているのを知った。Bitcoinとかだと軽量ノードはブロックヘッダーのみダウンロードし有効なPoWのチェックはしてるから何故そういうアプローチなのか、EthereumのP…

EthereumのDNSを利用したブートストラップノードの探索

EthereumでもEIP-1469によりノード探索プロトコルでDNSがサポートされたので、内容見てみる↓ arachnid.github.io ↓で解説したように、ノードを起動するとハードコードされたブートストラップノードを使って、アウトバウンドピアの接続対象を検索する。 techm…

Ethereumのノード探索の仕組みとエクリプス攻撃とその対策

EthereumのP2Pネットワークまわりの仕様について、まずノード探索の仕組みについて理解する。 Ethereumのノード探索の仕組み Ethereumは分散ハッシュテーブル(DHT)の一種であるKademliaをベースにしたノード検出プロトコルを実装している(Kademlia自体は…

コントラクトの関数で例外を投げる

Solidityで作成するコントラクトの関数から例外を投げる方法について。 http://solidity.readthedocs.io/en/develop/control-structures.html#exceptions コントラクトの関数内で手動で例外を投げたい場合throwを使う。例外が投げられると現在実行中の処理が…

Rubyで書かれたテスティングフレームワークtethでコントラクトをテストする

Ethereum使ったアプリケーションをRubyで書けないかなーと思ってRubyのライブラリを調べてみた。 EthereumのRubyライブラリ 公式ドキュメントで紹介されているのは以下の3つ。 ruby-ethereum Rubyで書かれたEVM(Ethereum Virtual Machine)の実装 github.c…

Solidityのソースファイルのレイアウト仕様

Layout of a Solidity Source File — Solidity 0.4.3-develop documentation Solidityのソースファイルのレイアウト仕様について↑ざっとみておく。 ソースファイルには任意の数のcontractの定義を記述できる。 Version Pragma ソースファイルにはversion pra…

Ethereumのコントラクトのロジックの更新

Ethereumのコントラクトはブロックチェーンに記録されると基本的に変更ができない。 じゃあコントラクトにバグがあったり機能追加したい場合にどうするの? という疑問がわく。 DELEGATECALL Homesteadから導入されたEIP-7として定義されているDELEGATECALL…

Solidityで記述するEthereumのスマートコントラクト

Ethereumを使ったスマートコントラクト(Solidity版)の作り方について見てみる。 Introduction to Smart Contracts — Solidity 0.4.3-develop documentation シンプルなスマートコントラクト ストレージ Solidityにおけるコントラクトとは、Ethereumのブロ…

Ethereum環境のセットアップとPrivate Chainの作成

Bitcoinのブロックチェーンは取引記録を台帳に記録していくプラットフォームなのに対し、Ethereumは独自のブロックチェーンネットワークで分散アプリケーションを実行するプラットフォームを提供している。 今回は、そんなEthereumの動作環境を作ってみた。 …