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

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

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代が節約できるのかを解説します。

続きを読む

brew install で solidity 0.4.19をインストールする

brew upgrade solidityしても0.4.19が落ちてこなくてなんでだろう?ってずっと思ったら、homeberw用の配布ファイル(になるのかな?)のsolidity.rbに記載してあるバージョン番号を書き換え忘れているのが原因だったようです。
github.com

PR出てたのでそちらを指定してbrew install実行したら無事solidity compilerをバージョンアップできました。

brew unlink solidity
brew install https://raw.githubusercontent.com/dostu/homebrew-ethereum/27e8ace58eacae6c7a066d9ab362e97f666ff486/solidity.rb

MacOSX+Geth1.8.0-unstableでRopstenを同期する

Raiden Networkを試してみようと思い、まずはドキュメントに書いてある通りRopstenで動かすために同期をし始めたのですが一向に進まないどころかさっぱりpeerを見つけることもできなくて四苦八苦してしまいました。
なんとか解決(?)できたので同じ症状で困っている人のためにブログにまとめておきます。

結論としては、Geth 1.8.0-unstableにバージョンアップしたら同期が始まりました。1.7.3使ってる人はもう少ないのかな?
ということで、Macbrewを使ったGeth 1.8.0環境への変更方法をまとめます。
以下はすでにethereumのrepositoryをbrew tap済みでgoもインストール済みの前提で進めます。

1.古いGethを削除

brew uninstall --force ethereum

2.develop版のGeth 1.8.0をインストール

release版はまだないのでdevelop版を指定することで1.8.0をインストールできます。

brew install ethereum --devel

3.昔のデータが残ってるかもしれないので削除

geth --testnet removedb

4. Gethを起動

geth --testnet --fast --cache 1024 console

これですぐに同期が始まりました。light client modeで使いたいのですがlight指定だとなかなか同期が始まらなくて断念しました。うーん残念。。

ERC-777 新しいToken標準の提案

Ethereumの開発者コミュニティーでは常に新しい提案が発表されています。Token Contractの標準としては現状EIP20が主流ですが、この標準規格も問題がないわけではなく、常にそれらの問題を解決するための新しいToken標準が提案されています。

今回は比較的新しい提案であるERC-777について調べてみたことをまとめました。

github.com

続きを読む

ContractのInterface検出機能の提案ERC-165とERC-820を調べてみた

新しく提案されているERCでは他のERCを利用しているものが多くなってきました。今回はその中でも個人的によく目について気になっていたERC-165とERC-820について調べたことをまとめます。

ERC-165とERC-820は基本的にはどちらもStandard Interface Detection、標準インターフェース検出の提案です。ContractがEIPで定義されたどのインターフェースを実装しているかを定義する方法を提案しています。
ERC-165はNon-fungible Token Standardの提案であるERC-721で利用さており、またERC-820は多分一番新しい?拡張Tokenを提案しているERC-777で利用されています。
github.com
github.com

続きを読む