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

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

Ethereum

ContractのEventの仕組み

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

拡張・変更可能なContractパターン solidity-proxy

EthereumでContractを作って運用を考えるとやっぱり頭を悩ませるのが、コードの変更が不可能な事。 基本的にContractであまり複雑な事をすべきではないとは思うけど、それでもやっぱりサービスの成長とともにコードのアップデートも必要となる。 libraryやde…

Solidityのstorage,memoryキーワードとは何か?

Solidityのlibraryのメソッドはだいたいこんな形の定義になる。 function (StructHoge storage self, uint _val) {最初の引数にstorageキーワードをつけないとコンパイルエラーになっちゃうから必須のキーワードのようだ。 で、このstorageが何のために必要…

Solidityの外部ライブラリの呼び出し方いろいろ

Solidityで用意されている外部のcontractのメソッドを呼び出すdelegatecallのtipsみたいなものをまとめてみました。 思いついた使い方は以下の4通り。A. library定義を利用して呼び出す B. 外部Contractのaddressをあらかじめ準備してdelegatecallメソッド…

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

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

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

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

Contractのcall, delegatecallの時に可変長引数を渡す方法

Solidityでdelegatecallのサンプルを試していた時に、通常の呼び出しだとuint[]やstringなどのいわゆる可変長な型を引数にとるメソッドのdelegatecallが思った通りに動いてくれなくて、その原因や実装方法について調べました。具体的には以下のstackexchange…

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

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

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

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

Ethereumの便利サイト紹介

Ethereum界隈の動向を調べたり何たりするときによくお世話になる(orなりそう)便利なサイトを紹介します。Ethereum BlockChain Explorer and Search 言わずと知れた、Ethereumのメインネット上のトランザクションやコントラクトなどを確認できるサイトethga…

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

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

簡単なコントラクトを作ってみる

今回はEthereumで簡単なコントラクトを作って実行してみます。qiita.com とか inon29.hateblo.jp を参考にしてます。内容もほとんど一緒です。

Error: insufficient funds for gas * price + valueについて

Ethreumのプライベートチェーンノードを立てて送金を試してみたら以下のエラーが発生した。 > eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")}) Error: insufficient funds for gas * price + value at w…

Ethereumはどのようにうごいているのか を読んでみた

coffeetimes.hatenadiary.jp今はこの記事がバズってるから読んでみるといいですよ。って教えてもらったので早速読んでみました。以下感想など。 World stateの説明でMerkle treeが出てくるけどbitcoinのMerkle treeみたいなものと思えばいいのかな?でも説明…

Ethereumの環境構築

偉い人にスマートコントラクト勉強してっていわれたので、勉強した内容とかをまとめておこうかなと思います。 とりあえずはなにはともあれ、Ethereumの環境がないとなにもできないのでまずは環境構築から初めて行きます。今回はEthereum環境の構築とプライベ…