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

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

web3.eth.filterとweb3.eth.subscribe

web3.jsは現状2つのバージョンが開発されています。1つはweb3@0.x.x(現行は0.20.5)とweb3@1.0.0です。truffleが利用しているのが0.x.x系で、npm install web3 するとインストールされるのがweb3@1.0.0系です。
0.x.xがstableバージョンであり、1.0.0はまだβバージョンです。
両者の大きな違いは、0.x.x系はcontractのfunction呼び出し等にcallbackが必須となっていますが、1.0.0系ではpromisefyされているのでコールバックは必要なく、Promiseを返してくれるため簡単に同期/非同期処理が書けます。
また、もう一つ大きな違いが、タイトルにあるようにイベントフィルタの仕組みです。1.0.0ではイベントの監視処理がリニューアルされています。

今回はこのイベントフィルタの仕組みについて調べたことをまとめます。

続きを読む

ERC-712 ヒューマンリーダブルな型付署名の提案

今回はEthereumに新しく機能を追加する提案であるERC-712を紹介します。
この提案はRPCにすでにあるeth_signをさらに拡張した新しい機能を追加する提案です。μRaidenでも疑似的に実装して利用しています。
github.com

続きを読む

Geth 1.8.1でとりあえず動くTruffleを公開しました

追記

Geth1.8.1に対応したtruffle 4.0.8がすでにリリースされていますのでtruffleを最新版にアップデートしてください。



最新のgo-ethereum 1.8.1でgetTransactionReceiptの挙動が変わっており、それが原因で現状truffle migrate などが正常に動かなくなっています。
web3.jsやtruffleなどでもissueが上がっており、とりあえずの修正版PRがmergeされたりしてるのですが、暫定版でとりあえず動くようにしました的なtruffleが出てきてないので作りました。
github.com

インストール方法は次の通り

npm uninstall truffle
npm install https://github.com/nakajo2011/truffle#fix-geth-1-8-receipt-err

この問題ちょっと根が深いので本当にとりあえず動かせるようにしただけです。正式にTruffle等から対応完了のアナウンスがあったらすぐに乗り換えてください。

Transactionの消費gasは最大50%offまで!

Hi-Etherのslackで興味深い質問がありました。

storageのデータを削除するときには gasがrefundされるという認識だったのですが、arrayの要素を全削除するときにgasが大量にかかるのはどうしてでしょうか?教えていただきたいです。

確かに、以前の記事でstorage上からデータを削除(non zero から zeroに変更)した場合は、refundGas=15000、 used gas=5000で最終的に10000gasが戻ってくると思っていました。が、実際に100件の値を持つuintの配列を生成して削除してみると削除時に270000gasほど消費されてしまいました。

今回は、このrefundGasとtransactionで消費されるgasの計算方法について調べたことをまとめます。

続きを読む

ERC-20が抱える問題

ERC-20を拡張したToken Standardの提案がいくつか出てきています。これらの提案が新たにされている背景としてはERC-20のToken Standardは2つの問題を抱えているためです。
今回はこの2つの問題について詳しく説明したいと思います。

続きを読む

32byte blockを意識してgas代を節約しよう

Ethereumではstorageにデータを格納する場合、32byteごとにgas代がかかります。この32byteの境界を意識することでガス代が節約できます。
という話をたまに聞くのですが、実体験として経験したことがなかったので実際に試してみました。
今回は試してみたテストコードと節約できたgas代を提示し、なぜgas代が節約できるのかを解説します。

続きを読む