Web3.0を知っておこう
イーサリアムの普及と共に市民権を得つつあるのが「Web3.0」という言葉です。
Web3.0は、現在のWeb2.0をアップデートした次世代の概念であり、集権的に管理されたWebサービスを非中央集権型へと進化させることを意味します。
イーサリアムでは、web3.jsというJavaScriptライブラリを使用して非中央集権型サービス「DApps(Decentralized Applications)」を開発することが可能です。
web3.jsは、ブラウザ上で実行されるJavaScriptアプリケーションとイーサリアムの橋渡しを行う役割を持ちます。
また、SwarmというP2Pストレージへのインターフェースと、WhisperというP2Pメッセージングサービスも含まれます。
これら3つの要素が、Web3.0サービス(DApps)を開発するための主な開発ツールとなるのです。
Überprüfen Sie den Fortschritt Ihrer Lektion
Wenn Sie die Lektion verstanden haben,
klicken Sie auf die Schaltfläche "Prüfen"!
EOAとコントラクトって何?
ビットコインがウォレットに紐づくBTCの金額をUTXOによって算出している一方、イーサリアムはアカウントという仕組みを構築しています。
イーサリアムには、外部所有アカウント(EOA:Externally Owned Account)とコントラクトアカウントの2種類が存在します。
我々は普段、ウォレットを使って他者へイーサを送金していますが、このウォレットに紐づくアカウントがEOAです。
秘密鍵によって制御され、「0x」で始まるウォレットアドレスを持つ仮想通貨ウォレットだと認識されているものの実態になります。
これに対して、スマートコントラクトの実行コードを有しているのがコントラクトアカウントです。
秘密鍵を有しておらず、スマートコントラクトによって制御されます。
コントラクトアカウントにもEOAと同様にアドレスが存在し、イーサを受け取ることが可能です。
ただし、コントラクトアカウントには秘密鍵が存在しないため、トランザクションを開始することはできません。
つまり、コントラクトアドレスを起点とするイーサの送金はできないことになります。(EOAを起点に、コントラクトアカウントを経由して別のEOAへイーサを送金することは可能)
Überprüfen Sie den Fortschritt Ihrer Lektion
Wenn Sie die Lektion verstanden haben,
klicken Sie auf die Schaltfläche "Prüfen"!
イーサリアムのトランザクション構造を理解しよう
イーサリアムにおけるトランザクションは、EOAによって作成された署名つきのメッセージとして扱われブロックチェーンに記録されます。
レッスン1で学習した通りイーサリアムは「ワールドステートコンピュータ」とも呼ばれ、ネットワーク全体で1つの状態(ステート)を管理しています。
この状態に対して変更を加えるのがトランザクションです。
イーサリアムのトランザクションは、主に以下の要素によって構成されます。
- nonce(ナンス):トランザクションの番号
- gasPrice(ガス価格):トランザクション発行者が支払っても良いと考える手数料
- gasLimit(ガス上限):トランザクション発行者が当該トランザクションを作成する際に支払っても良いと考える手数料の最大値
- to(送信先):トランザクションの送信先イーサリアムアドレス
- value(イーサ):送信するイーサの量
- data(データ):署名つきデータのパッケージ(バイナリデータのペイロード)
- v、r、s(署名):トランザクションを発行するEOAのデジタル署名を構成する3つの要素
単にイーサを送受信するだけであれば、これらのトランザクション要素を理解する必要はありません。
しかしながら、イーサリアムの仕組みをより詳しく理解するにはトランザクションの理解は必須事項です。
トランザクションの構造を把握しておくと、例えばトランザクションに送信元(from)のイーサリアムアドレスが表示されている場合に、それは使用するウォレットソフトによって追加されたものだと知ることができたりします。
トランザクションに付随して、ここで少しガス(Gas)について理解を深めておきましょう。
レッスン1で学習しましたが、ガスはイーサリアムを使用する際の手数料です。
表面的にはガスはイーサによって支払われますが、内部構造的にはガス=イーサ(ETH)ではありません。
ガスは、イーサリアム内でイーサとは別の概念として存在する独自の仮想通貨であり、イーサリアム世界の外には出てこないものになります。
ガスがイーサと分離した存在として処理されているのは、イーサの価格が急激に上下動した場合の影響からネットワークを保護するためです。
トランザクションの発行者は、トランザクションを発行する際にgasPrice(ガス価格)を設定します。
このgasPriceが高いほど、トランザクションは早く処理される可能性が高くなります。
なお、gasPriceの最小値はゼロです。
つまり、無料のトランザクションを作成することもできるのです。
ただし、イーサリアムの需要が高まっている際にはgasPriceの高いものから優先的に処理される可能性が高いため、gasPriceがゼロのトランザクションはいつまで経っても処理されない可能性があります。
またプルーフオブワーク(PoW)におけるマイナーは、トランザクションを処理する際のgasPriceに規定値を設けている場合がほとんどです。
そのため、規定値を下回るgasPriceが設定されたトランザクションは永久的に処理されません。
トランザクションの発行時には、gasPriceに加えてgasLimitも設定します。
これは、トランザクションを完了するために最大いくらまでなら支払ってもよいかを表す値です。
一般的なトランザクションであるウォレット同士のイーサの送金(EOAからEOAへの送金)の場合、gasLimitは21000に固定されています。
この21000(gasLimit)に対して設定したgasPriceを掛けると、当該のトランザクションで必要なガスの合計値が算出できます。
なお、設定されたガスはトランザクションの実行にかかった分だけが差し引かれ、残った分は送信元のEOAに返金されます。
逆に、ガスが不足したトランザクションは無効となり、消費されたガスも返却されません。
これは、不正なトランザクションを作成するのを防ぐための仕組みです。
そのため、gasPriceは余裕を持って多めに設定するのが一般的です。(gasPriceはウォレットで設定することができます)
少し文脈は変わりますが、トランザクションの構成要素の1つである「to(送信先イーサリアムアドレス)」には、20バイトのアドレス(EOA、コントラクトアドレスいずれも可)が設定されます。
このとき、イーサリアムはtoの値が20バイトであること以外は確認しません。
つまり、20バイトの値であればどんなデータでも設定することになります。
そのため、誤って存在しないアドレスを設定してしまった場合でも、そのアドレスが有効かどうかを知ることはできないのです。
一方で、この仕組みをうまく応用したのがBurn(バーン、焼却)です。
Burnは、意図的に存在しないアドレスに仮想通貨を送金することで、永久的に引き出せない状態にし市場に出回る仮想通貨を減らすことで、全体としての価値を高める際などに行われます。
Überprüfen Sie den Fortschritt Ihrer Lektion
Wenn Sie die Lektion verstanden haben,
klicken Sie auf die Schaltfläche "Prüfen"!
デジタル署名とトランザクション
トランザクションに関する項目の最後に、デジタル署名について簡単に触れておきます。
イーサリアムで使用されるデジタル署名のアルゴリズムは、ECDSA(Elliptic Curve Digital Signature Algorithm、楕円曲線デジタル署名アルゴリズム)です。
デジタル署名は、イーサリアムにおいて次の3つの役割を果たします。
- 秘密鍵の所有者が、イーサの支払いやコントラクトの実行を許可したことを証明する
- 証明の証拠を否定することはできない
- 署名されたトランザクションは誰にも変更されていないことを証明する
署名に関する仕組みにマルチシグネチャというものが存在します。
これは、1つのトランザクションに対して複数の署名を施すことができる仕組みです。
マルチシグネチャにより、例えば誤ってイーサを送金するのを防止することができます。
このマルチシグネチャの仕組みは、イーサリアムには存在しません。
しかしながら、スマートコントラクトをうまく活用することで擬似的にマルチシグネチャを実装することは可能です。
これを実現するには、コントラクトウォレットと呼ばれるプログラムにイーサを移行する必要があります。
コントラクトウォレットの具体例としては、例えば複数のウォレットからコントラクトウォレットに対してイーサが送金された場合に、コントラクトウォレットからイーサを送金するトランザクションが発行される、といったものが考えられるでしょう。
これにより、擬似的にマルチシグネチャを実装することができます。
Überprüfen Sie den Fortschritt Ihrer Lektion
Wenn Sie die Lektion verstanden haben,
klicken Sie auf die Schaltfläche "Prüfen"!