【Ethereum開発】コントラクトとtransaction
外部アカウントからコントラクトのtransactionを生成する
送金transactionとコントラクト生成transactionの違いは、toプロパティで、前者の場合には送金先のアドレスが入力されますが、後者の場合には、空欄とします。空欄とすることで、新しいコントラクトが生成されるイメージです。
dataプロパティはsolidityコンパイラから出てくるコードがネットワークに送られて格納される場所です。
このコードは全世界からアクセス可能であり、セキュリティの概念は含んでいません。
コントラクトのトランザクションを生成する場合にも、v r sのプロパティはふくまれます。これらは、送信者の秘密鍵から生成されるデータで、送信者のアドレス情報を生成するために用いられます。
これから理解していくことは、transactionを送る必要があるブロックチェーン上のデータをどのように更新するかということです。
ブロックチェーンに格納されたデータを変更したい場合は、いつでもtransactionを送信する必要があります。
そのほかにトランザクションの送信に際して必要なことは、
・採掘されるまで(nonceが確定するまで)待つ
・作業証明アルゴリズムの実行(10~30秒かかる)
ブロックチェーンの格納されたデータが更新される前に、transactionが承認されるまで待つ必要があるのです。
下図のように、基本的には、setMessage()を実行すると、ブロックチェーンが変更され、transactionが関与する必要があります。一方、getMessage()の方を実行しても、何も変更されません。
Contract functionの実行
コントラクトに属する関数を呼び出すには二つの方法があります。
「関数呼び出し」と「関数へのtransaction送信(Sending a Transaction to a Function)」です。
この薄青色のメッセージボタンはmessageに設定された値を表示します。この関数はtransactionを伴わないので、即座に実行されます。これは、マイニングをする必要がありません
さらに、関数を呼び出すことは自由です。
ここで、メッセージを呼び出すたびにすぐに動作します。
・関数へのtransaction送信(Sending a Transaction to a Function)
基本的には、特定のデータを対象とするコントラクトインスタンスにtransactionを送信することによって、データを変更します。
この薄赤色のsetMessageボタンがそれに相当します。
こちらの関数を呼び出した場合の特徴として、transactionをネットワークに送信するたびに、処理に時間がかかります。
proof of work アルゴリズムの実行には約15秒かかることを確認しています。
そして、関数にtransactionを送信するには、お金がかかります。
今、リミックス上でsetMessage関数にtransactionを送信してみましょう。
setMessageから"greetigns"というメッセージを送信すると、Accountの値が100ethから99.9999999....に変わったことがわかります。
今、トランザクションを送信したときには一瞬に見えましたが、これはローカルなネット上でのtransaction送信だからです。
これが、公衆のネットワーク上にいるときには、これらのtransactionを実行するには時間がかかります。
今日はここまでです。
ちなみに、ここからじぶんで開発を学んでいきたいひとは、
世界最大級のオンライン学習サイトUdemyから「Ethereum and Solidity: The Complete Developer's Guide」を探してみてください。
続きは随時アップしていく予定です。
ではでは!