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

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

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で開発環境を分ける事にし…

拡張・変更可能な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メソッド…

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を簡単に試すや…

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…

etherの受け取り可能なContractの作成

今回はetherの送金を受け付ける事ができるContractの作成方法をまとめます。 当たり前すぎな事なのか、意外に記事がなかったので。。。Solidityの公式ドキュメントで記述のある箇所はこちら Function Modifiers 結論を先にいうと、etherを受け取りたいメソッ…

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

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

Parity問題について調べてみた

2017/11/08にParityチームが告知したセキュリティーアラートについて興味があったのでちょっと調べてみました。 こちらのブログの記事の内容を読んだことをまとめています。 medium.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環境の構築とプライベ…

bitcoin-rubyで送金する

今回はbitcoin-rubyを用いてbitcoinの送金transactionを生成して送金してみます。環境は前回の記事からの続きとなります。 openassets-rubyをrailsに組み込んでみる - アルゴリズムとかオーダーとか bitcoin-rubyのBlockとTxをbitcoinのデータから生成する -…

bitcoin-rubyのBlockとTxをbitcoinのデータから生成する

前回の記事 openassets-rubyをrailsに組み込んでみる - アルゴリズムとかオーダーとかの続きです。今回はbitcoin-rubyで定義されているBitcoin::Protocol::BlockとBitcoin::Protocol::Txクラスを生成してみます。

openassets-rubyをrailsに組み込んでみる

openassets-rubyを組み込んでbitcoinを使うrailsプロジェクトを作ってみる。 github.com

公開鍵暗号と署名検証は別物だった

Bitcoinの勉強ついでに署名検証の仕組みについてまったくわかってなかったので色々調べてる最中です。 で、知ってた単語のRSA暗号とかDSAとかECDSAとかで色々ググってた時に見つかった記事ですごい興味深かったのでブログに残しとこうかなと。www.machu.jp続…

segwitのtransactionをsendできた!

sendrawtransactionでエラー出ずに送信できました! ので手順を載せます。1. addwitnessaddress (bitcoin address) して作ったwitnessaddressあてにコインを送る。以下は送った結果 < listunspent > [ { "txid": "0bfbc74a43d5ef0ed1cfa300e58f96c0ad0d0ec1f…

segwitのtransactionが作れた(?)けども。。。

以前の記事 y-nakajo.hatenablog.comで、作れなかったwitness transactionだけど、createwitnessaddressが必要なかった。。 5.以降を以下の手順にしたら作れたけど。。。witnessのscript?の最後がerrorになっててsendrawtransactionできなかった。 手順だけ…

segwitのtransactionを作ってみる

0bin.net にmulti-sigでのsegwit transactionの作り方は乗ってたけど、普通のアドレスでの作り方が調べてもなかったのでいろいろ試してみた結果を載せておきます。結論としては、signrawtransactionがうまく作れなくて頓挫してます・・・。とりま、発行した…

トロポジカルソートの数え上げとDP(1)

D: 徒競走 - AtCoder Beginner Contest 041 | AtCoder が解説を見てもさっぱりわからなかくて数日頭を悩ませているので、理解できたものから少しずつまとめていこうと思います。 まず、初っ端につまづいたのが次の一文 頂点集合 S をトポロジカルソートする…

大きな数の割り算の余りを求める

つい最近AtCorderに参加しました。 アルゴリズムは好きだけど今まで真面目に勉強はしていなかったのでこれを機にしっかりとまとめていこうと思います。 とりあえず最初の記事としては個人的に面白かった&すごく簡単な問題についてアルゴリズムの組み立てと…