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

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

Solidity Assembly入門 ~ Function Selector ~

今回の記事はSolidity Assembly入門という連載記事の第5回目です。

この連載ではSolidityのコードをコンパイルした時に生成されるopcodeについて解説していきます。
この連載ではSolidityのコードをデバッグするのに必要な知識を得られることを目的としています。
前回の記事はこちら。
y-nakajo.hatenablog.com

第5回目の今回は、Solidityの関数をEVM上でどのように表現されているのかについて説明します。公式ドキュメントはこちらです。
Solidity Document#Function Selector
Solidity Document#Functions

続きを読む

Node.jsのtestでsinonを使ってspyする

今回の記事はNode.jsのTest用ライブラリの紹介です。
Node.jsでtestを書く時に今までmochaとchaiを使ってきました。今回はconsole.warnの呼び出しをspyしたくてどうやったらいいのか?を調べていた時にこのライブラリを発見しました。
sinonjs.org

ちょっと触った感じ、非常に使いやすいmockupツールだと思います。以降はconsole.warnをspyすることを題材にして使い方を説明します。

続きを読む

debug_traceTransactionとprogram counterとsource mapping

y-nakajo.hatenablog.com
今回は上記の以前の記事で触れた、Ethereumのdebug機構について調べたことをまとめていきます。
Ethereumでは任意のtxをdebugするための機能が、またSolidityではbyte codeとソースファイルをmappingするための情報が提供されています。
今回はこれらの情報について説明します。

続きを読む

sol-trace - truffleのtestでエラー行を表示する

今回はみんなが待ち望んでいたと思われる非常に便利なツールを紹介します。
それがこちら。sol-traceです!
github.com

Readme.mdを見て分かる通り、truffleのtestに組み込むことでrevertが発生した時に、エラーの対象のソースファイルと行数を表示してくれます!

ちなみに、上記のバージョンだとviewやpureなどのconstantな関数を呼び出した時には反応しなかったので、eth_callでも行数が表示されるように修正してPRを出しています!
github.com

以下、使い方を簡単に説明します。

続きを読む

OmiseGoのeWalletをRuby on Railsで利用する

OmiseGoのeWalletのv1.0.0-pre.1がリリースされました。今回の記事ではeWalletの構築とRuby on RailsからeWalletを利用する方法についてまとめます。
github.com

続きを読む

非中央集権的なPausableの提案

今回はこちらの記事を読んで思いついたSmartContractの紹介記事です。
btcnews.jp

今回、BancorはPausableを継承したSmartContractを作成していたことで、BNTに関してはすぐにpaused状態にして流出を防ぐことができました。
しかし、この処置に関しては上記の通り、中央集権的であり運営が絶対的なパワーを持っている事実は否めません。そこで今回はその問題を回避するためのDecentralizedPausableを作りましたのでその紹介をします。

続きを読む