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

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

Truffle

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

Truffleでちょっと特殊(?)なテストを書こうとしたら思ったよりもハマってしまったので、備忘録的に残しておきます。 miner.stopしたら動かないテスト miner.stopするとsendTransactionでフリーズする理由 miner.stopでフリーズしないテスト まとめ

ganache-cliのデータを永続化する

今回はganache-cliのデータをファイルに吐き出して永続化する方法について説明します。 ganache-cliのデータを永続化できるとDappsのサンプルを提供する時にセットアップ済みのnodeもセットで提供できるため、非常に有用ですよね。 0x protocolでもganache-c…

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

今回はみんなが待ち望んでいたと思われる非常に便利なツールを紹介します。 それがこちら。sol-traceです! github.comReadme.mdを見て分かる通り、truffleのtestに組み込むことでrevertが発生した時に、エラーの対象のソースファイルと行数を表示してくれま…

Ethereumを学習するときのロードマップ

自分がEthereumを学習したときの経験を元にゼロからEthereumを勉強するためのロードマップをまとめてみました。 先人たちは大体この流れで学習を進めていったと思います。

lk-test-helpersの導入方法20180417版/truffleでimportを使う

github.com をtruffle testで使うための導入方法20180417版です。y-nakajo.hatenablog.com こちらの以前の記事で紹介していた手順が最新のbabelでは使えなくなっていたので、最新版のbabelに対応した導入手順をまとめ直しました。

truffle consoleで終了処理を追加する方法

truffle consoleを終了するときに追加で何らかの処理を実行したいときはconsole(=REPL)起動中でも次のようにして追加できます。 > repl.repl.on("exit", () => {~~なんか自前の終了処理~~})これで.exitしたときに追加の終了処理を走らせてREPLを正常に終了さ…

ganache-cli@beta+web3.eth.subscribeを試してみた

y-nakajo.hatenablog.com 前回の記事の続きになります。 タイトルの通りweb3.eth.subscribeを試してみました。 が、テストのためだけにGethのノードを準備するのはめんどくさいのでtestRPCあらため、ganache-cliでWebSocketサーバ起動できないのかなぁ?と思…

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

追記 Geth1.8.1に対応したtruffle 4.0.8がすでにリリースされていますのでtruffleを最新版にアップデートしてください。 最新のgo-ethereum 1.8.1でgetTransactionReceiptの挙動が変わっており、それが原因で現状truffle migrate などが正常に動かなくなって…

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

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

絶対にtoken喪失の起きないtokenを実装してみた

ERC-223 tokenは画期的な部分もありますが、完全にtokenの喪失を防げるわけでは無いです。 例えば、fallback関数を定義済みのContractに対しては送金可能だし、0x00000000000000000000000000000000000001234に送金したら多分private keyを持っている人がいな…

estimateGasのすゝめ

Ethereumでスマートコントラクトを実行するとgasを消費します。そのため、スマートコントラクトを実行するために発行するTransactionにgas limitを指定する必要があります。 さて、このgas limitって一体いくつに設定したらいいのでしょうか?Transactionのg…

Truffleのmigrateでasync/awaitを使う方法

今回はtruffleのmigrate taskの中でasync/awaitを使って非同期処理をする方法についてまとめました。 この記事は truffle v4.0.4時点でのものです。migrate taskの中でasync/awaitを使いたいシチュエーションとしては、例えば、TokenAとUseTokenという2つの…

truffle-hdwallet-providerはmnemonicがundefinedでも使えてしまうので注意

タイトルの通りです。基本的には他のHDWalletから取得したmnemonicをimportすることが多いと思いますが、ちょっとしたミスでやらかした場合、十中八九etherを盗まれてしまうので注意してくださいね。すでにpull requestも投げられてるのですがまだ取り込まれ…

Solidityのテストでカバレッジを計測する

Contractのセキュリティーを担保する上で、テストのカバレッジ率100%を目指すのは結構重要です。今回は、テストのカバレッジ率を出す方法についてまとめます。今回使うツールはsolidity-coverageです。 github.com

truffle-hdwallet-providerがマルチアカウントに対応

MultiSIg Contractのテストをしたくてtruffle-hdwallet-providerをマルチアカウントに対応しようかと思い、久しぶりにgithubを覗いてみたらすでに対応されていました。github.com ということで早速動作確認してみました。

Revert opcodeの使い方

EthereumのByzantiumからrevert使うとエラーメッセージをよしなにできるらしいですよ?っていうのが内輪で話題になったので実際にどういう風に利用できるのかを調べてみました。byzantiumのリリースノートはこちら。 blog.ethereum.org

ERC223Tokenを試してみた

とあるEthereumグループでちょっと話題になったERC223Tokenを実際に試してみました。 ERC223Tokenについてはこちらの方がわかりやすく説明されているので参照ください。 qiita.comERC223のリポジトリはこちら。 GitHub - Dexaran/ERC223-token-standard

Ropstenにつなげた時の exceeds block gas limit エラー

意外に情報が少なくて、解決するのに時間かかったので自分用メモのつもりでブログに残しておきます。 Ropstenのガスリミットは4700000 Ropstenのガスリミットは4700000だそうです。truffle(に限らないのかな?)でgas limitを指定しなかった時のデフォルト…

Eventにつけるindexedの役割

ContractのEventの仕組み - アルゴリズムとかオーダーとかに引き続きContractのEvent関連のお話です。 Eventを定義する時にparameterにindexedというmodifierを付与する事ができます。今回はこのindexedの仕組みについてまとめてみました。

TruffleのtestでEventがWatchingできなくて困った

今回はContractのEventをテストする時の注意点や思いついたtipsなどをまとめました。 結局は非同期で動いていることを意識してなかったのが原因ではあるのですが、node動かしながら試してたことをそのままテストに書いてもうまくいかないといういい例の一つ…

ContractのEventの仕組み

Ethereum Advent Calendar 2017 の 7 日目の記事です。 ContractにEventを定義すると、Contractの状態が変更された時などに必要な人が通知を受け取れるようになります。 しかし、getter系のfunctionにはEventが設定できなかったりします。 今回はこのEventの…

OpenZeppelin(zeppelin-solidity)のtest/helpersを使う方法

更新 この記事の内容は古いため、20180417現在では使えません。最新での導入方法についてはこちらにまとめています。 y-nakajo.hatenablog.com OpenZeppelin(zeppelin-solidity)はEthereumのContract作るなら使わないと損だよ!ってぐらい便利なContractのラ…

dockerでコンテナ実行時のユーザー権限で動く開発環境の構築

ethereumの勉強をやってるととにかくnpmでいろいろ入れたり消したりするんだけど、npmでローカルインストールした時に自分の意図しないプロジェクトにまで影響出ることがあって、なんだかめんどくさくなったので今更ながらにdockerで開発環境を分ける事にし…

TruffleのConsoleでJavaScriptファイルをロードする方法

例えば、task/hoge.jsをTruffleのConsoleで読み込みたい場合は truffle(develop) > .load task/hoge.jsで読み込めます。 最初ファイルへのパスを""で囲んで実行しててエラーにしかならなくて焦りました。requireにしろimportにしろ""で囲むものが多いから間…

Libraryを利用したContractをTruffleでデプロイする方法

Libraryを利用したContractをデプロイする時はLibraryのアドレスをリンカーに教えないとContractがデプロイできません。(できても正常に動きません)TruffleでLibraryとContractをlinkしてデプロイする方法はTruffleの公式ドキュメントにさらーっと書いてる…

Truffleのデバッガーを試してみた。

結論:使いづらい。。。。。。 現状はbrowser-solidityの方がいいかも。step実行の時のstepの単位がよくわからない(opcode単位でも行数単位でもないっぽい?)し、途中でlineナンバーが拾えないようでエラー吐くし。。一応、truffle debuggerを簡単に試すや…

Truffleで簡単なContractの作成からテストまで

Truffleを用いたContractの作成〜単体テストの実行までの流れをまとめます。 今回ははメッセージを誰でも保存、閲覧できるだけの簡単なContractを作成して、また簡単なテストを書いて実行してみます。Truffleのインストールについては過去の記事をご覧くださ…

TrffuleでContractのABIがおかしくなった時の解消法

TruffleでContractを修正&デプロイを繰り返してるとたまに、ABIがおかしくなります。(引数が必要ないgetメソッドに引数もとめられたりとか。。。)その場合は、./build/contracts/以下のファイルを全て削除すると治ります。./build/contracts/以下にはコン…

Truffleで簡単にコントラクトをビルドして触ってみる

今回はTruffle(読み方はトリュフ)を使った開発環境の構築手順をまとめてみます。truffleframework.com