たのしい工学

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

【Ethereum開発】コントラクトとtransaction

   

外部アカウントからコントラクトのtransactionを生成する

https://gyazo.com/9ea683091b21b8400b6c7d14faf5fb1d

送金transactionとコントラクト生成transactionの違いは、toプロパティで、前者の場合には送金先のアドレスが入力されますが、後者の場合には、空欄とします。空欄とすることで、新しいコントラクトが生成されるイメージです。

dataプロパティはsolidityコンパイラから出てくるコードがネットワークに送られて格納される場所です。

このコードは全世界からアクセス可能であり、セキュリティの概念は含んでいません。

https://gyazo.com/60de5afa8e34be3f4e9769f8037cc1ae

コントラクトのトランザクションを生成する場合にも、v r sのプロパティはふくまれます。これらは、送信者の秘密鍵から生成されるデータで、送信者のアドレス情報を生成するために用いられます。

これから理解していくことは、transactionを送る必要があるブロックチェーン上のデータをどのように更新するかということです。

ブロックチェーンに格納されたデータを変更したい場合は、いつでもtransactionを送信する必要があります。

そのほかにトランザクションの送信に際して必要なことは、

・採掘されるまで(nonceが確定するまで)待つ
・作業証明アルゴリズムの実行(10~30秒かかる)

ブロックチェーンの格納されたデータが更新される前に、transactionが承認されるまで待つ必要があるのです。

下図のように、基本的には、setMessage()を実行すると、ブロックチェーンが変更され、transactionが関与する必要があります。一方、getMessage()の方を実行しても、何も変更されません。

https://gyazo.com/5efab7b27f474ef34a4b6a2ad32aa9e5

Contract functionの実行

https://gyazo.com/07b0b3d5c0a9044b1d59a744628d549b

コントラクトに属する関数を呼び出すには二つの方法があります。

「関数呼び出し」と「関数へのtransaction送信(Sending a Transaction to a Function)」です。

・関数呼び出し(Calling a function)
https://gyazo.com/f7ea85ff8a73fc2ac02be9d52d9b41c5

この薄青色のメッセージボタンはmessageに設定された値を表示します。この関数はtransactionを伴わないので、即座に実行されます。これは、マイニングをする必要がありません

さらに、関数を呼び出すことは自由です。

ここで、メッセージを呼び出すたびにすぐに動作します。

・関数へのtransaction送信(Sending a Transaction to a Function)

基本的には、特定のデータを対象とするコントラクトインスタンスにtransactionを送信することによって、データを変更します。

https://gyazo.com/fccf9cd7e22198963b98f673275c6e0c

この薄赤色のsetMessageボタンがそれに相当します。
こちらの関数を呼び出した場合の特徴として、transactionをネットワークに送信するたびに、処理に時間がかかります。

proof of work アルゴリズムの実行には約15秒かかることを確認しています。

そして、関数にtransactionを送信するには、お金がかかります。

今、リミックス上でsetMessage関数にtransactionを送信してみましょう。

https://gyazo.com/509b2da526ee6340f1f02861d62fdd1d

setMessageから"greetigns"というメッセージを送信すると、Accountの値が100ethから99.9999999....に変わったことがわかります。

今、トランザクションを送信したときには一瞬に見えましたが、これはローカルなネット上でのtransaction送信だからです。

これが、公衆のネットワーク上にいるときには、これらのtransactionを実行するには時間がかかります。

今日はここまでです。

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

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

ではでは!

 - BlockChain, テクノロジー