たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【Ethereum開発】トランザクション送信のコスト

   

EtherとWei

1Etherは100京weiです。

https://gyazo.com/2955017510bc150dad6908e276a957c7

こちらのサイトで、単位変換の関係がわかりやすく示されています。
Ethereum Unit Converter

Gas

コードを書いて、それをサーバに展開し、リモートサーバーにコードを実行させる場合には、お金を払う必要があります。

たとえば、AWS上のEC2サーバでコードを実行させる場合に利用料金が発生しますよね。そういうものだとおもってください。

ブロックチェーンのコントラクトでも同様です。コントラクトを実行
するには、実行する人間がお金を払う必要があるのです。

Gasの料金はネットに公開されており、こちらから確認できます。
Gas Costs from Yellow Paper -- EIP-150 Revision (1e18248 - 2017-04-12) - Google スプレッドシート

https://gyazo.com/872baae522caa515d4bf6e50e8643b3a

シートを開いてもらえばわかりますが、G列には実際に送金によってどのようなことができるのかが書かれています。C列はGasの料金をあらわします。

https://gyazo.com/5247a8a28a3fd7f18174ab881d82e5be

たとえば、G列のAddition operationは足し算操作ですが、こちらはC列を見ると、3とあるので、3gasを支払う必要があります。Addition operationのしたはMultiplication operationで、掛け算操作で、こちらは5gas支払う必要があります。

こちらを念頭に、次の関数を考えてみましょう
https://gyazo.com/dca5f842e97dedb2ba696b5272a7fc8c

さきほどの説明から、関数の実行にはgasをコストとして支払う必要があります。では、どれくらいのgasを支払う必要があるのかですが、この関数の場合、a+b,b-a,a*b,a==0の分だけgasを支払えばよいです。それぞれのgasの量はさきほどのスプレッドシートの定義の中からこれらの演算に対応する箇所をみつけます。そして、それらの総和がこの関数を実行するためにひつようなgasの量となるのです。

では、このdoMath関数を呼び出すためのトランザクションが実行されたとしましょう。gasPrice=300、gaslimit=10であり、これは、gasの単位ごとに300weiを支払い、gasの利用限度(関数一回の実行あたりの)が10gasですよという意味です。つまり、300wei/gasという意味です。

https://gyazo.com/948bb381afc4a1d37775f063bfc9cd4f

いま、この関数を実行すると、14gas利用することになります。この場合、gaslimitの10gasを超えているので、すべての演算が実行されることはありません。substractが実行されたところ(計6gas消費)までで、ほかのコードは実行されません。

https://gyazo.com/77a9300b64af132f0374ecc5c3344043

gaslimitが20になった場合はどうなるでしょうか。この場合、14gasが消費されて、あまった6gasはあなたのもとに戻ります。

では、実際にいくら支払うのかを計算してみましょう。

https://gyazo.com/54403b0e9609363759d7bf1fa429f46d

このように、ブロックチェーン上のデータを変更、または格納する操作にはすべてお金がかかるということを忘れないようにしましょう。

このことから、アプリケーションによっては、とてもお金がかかるものができる可能性があることがわかりますね。

トランザクションを発行するひとはだれもがgas価格を支払う必要があることをわすれないでください。

今日はここまでです。
いかがでしたでしょうか?

ちなみに、ここからじぶんで開発を学んでいきたいひとは、
世界最大級のオンライン学習サイトUdemyから「Ethereum and Solidity: The Complete Developer's Guide」を探してみてください。

続きは随時アップしていく予定です。

ではでは!

 - BlockChain, テクノロジー