見出し画像

未来のために学んでおきたい。「Blockchain (ブロックチェーン) 」の概要10.Bitcoinスマートコントラクト

スマートコントラクト

何人かが合意した内容を人がいなくても自動的に実行する仕組み
非スマートコントラクトは店頭で店員さんにお金を支払うイメージで、自動販売機がスマートコントラクトのイメージ。

BCにおけるスマートコントラクト
・契約内容がBC上に改ざん困難な状態で記録されている。
・そして、上記に書かれた条件がみたされると、自動的に契約が成立する仕組み。

トークンは企業や個人がBCで独自に発行するコイン
トークンのしくみ
例えば、youコインとyouICOのコントラクトがあると仮定する
コントラクト=アドレスをもっていてトランザクションの送り先になるもの
ICO=あたらなトークンを販売して、公開販売できる。株みたいなもので、資金の調達手段。
トークンを使った例でいうと、youICOに私が1000円をしはらうと、1youコイン自動的に私に支払われる。ある条件をみたすと、自動で実行されている。

スマートコントラクトとイーサリアム
イーサリアムはスマートコントラクトのぷらっとフォーム。誰もがイーサリアム上でスマートコントラクトを使いアプリケーションを開発できる。

スマートコントラクトのアカウント
2種類ある。
1.EOA - 通常のウォレットアカウントでプライベートキーを持っている(資金管理できる)
2.コントラクト - スマートコントラクト用のアカウントでプライベートキーをもっていないから資金管理などはできない。スマートコントラクトのコードを持っている。アドレスをもっているから、トランザクションの送り先としてコントラクトを指名できる。

コントラクトアカウントでスマートコントラクトを実行する。
トランザクションの送り先にコントラクトアカウントを指定する。例えば、私がトランザクションのoutputにコントラクトアカウントのアドレスを指定してトランザクションを作成したとする。その後コントラクトアカウントでは、トランザクションのデータをインプットしてスマートコントラクトのコードが実行される。

スマートコントラクトのトランザクションの構造


ナンス
複数の人にトランザクションを送らないとならないときに、その順番を間違いなく送れるように用意る数字。
お金をあなたが10ETH持っていて、Aに先に6ETH支払い、Bに後から8ETHを送金したい。しかし、先にBに支払ってしまうと、本当はAに払う事が重要だが、それが難しくなる。これをふせぐために使う。
PoWとは別物のナンス

ガス
EOAがコントラクトアカウントにトランザクションを作成し、コントラクトを実行。すると、PCのリソースを使う事になる。これのリソースを使いすないようにコントロールするのがガス。
EOAはトランザクションを作成する時に、ガスの価格上限値をきめる。
ガスの価格はトランザクションの送り主が決め、値が高いほどトランザクションが速く承認される。イーサリアムは単位をgwei。
ガスの上限値は、コントラクトがの実行しすぎないように、ガスの上限値をきめる。コントラクトはプログラミングで実行するが、コードが間違うとエラーでおわらないのに、実行し続ける現象が起こる。永遠に続くスマートコントラクト防ぐためにじょうげんを決める。
ガスの使用量が上限値以下ならコントラクトは実行でき、値を超えるとコントラクトは元の状態に戻る。

データ
コントラクトの時に使用する、バイナリーデータ。

スマートコントラクトの仕組み
コントラクトの作成
コントラクトコード作成→コンパイル→デプロイ→アカウント作成
コントラクトコードはプログラミング言語で、スマートコントラクトの条件を記載。多くの場合はsolidityやVyperでコードがかかれる。
コントラクトコードをバイトコードに変換する。(コンパイルするという)
このコードはコンピュータに読みやすく仮想マシン上で実行するためにコンパイルしている。
0x00000000・・・のアカウント宛にトランザクションを作成するとコントラクトができる。これをデプロイといい、その後仮想マシン上で実行される。

コントラクトの実行方法
EOAがコントラクトアカウント宛に、仮想マシーン上でトランザクションを作成するとコントラクトは実行される。

外部情報を取り入れるオラクル
スマートコントラクトは外部情報を取り込むことができない。
たとえば、野球でAチームがBチームに勝と10ETHでまけると逆に10ETH支払わないといけない。その場合、どちらが勝ったのか?が重要になるが、この情報を取り込む仕組みがない。
オラクルは、これを補うもので、外部からの情報をオラクルが取り込むと、信じる。
外部から情報を集め、署名付きトランザクションでBC上にデータを取り込む。その情報をコントラクトのストレージにデータを入れて使用できるようにする。
合意形成するためにはコントラクトを誰が実行しても同じ結果が出るようにしなければならず、使用する外部データは全員が同じ物をみないといけない。オラクルの共通情報によって、全員が正しいと信じ、誰が実行しても同じ結果がでるようにしている。

オラクライズ
オラクルのお仕組みを提供する、情報提供サービス。EOAがコントラクト宛にトランザクションを作成、コントラクトがオラクライズにデータをリクエストすると、検証したデータを返す。するとコントラクトは情報をしようできる。

Dapps:自律分散型アプリケーション
スマートコントラクトのアプリケーションのこと。
Dappsである定義
アプリケーションはオープンソースであり、データや記憶に公開・暗号化されたBCを使用。さらに、仮想通貨のトークンを所有し、トークンエコのミノーを形成。アプリへの貢献度が暗号を使用したアルゴリズムに証明され、それによりトークンが生成。

daapsは通常のwebサービスと同様の構成。スマホでアクセス、フロントエンドのソフトウェアが作動し、その画面上の動きを支えるのはバックエンドソフトウェア。バックエンドがスマートコントラクトのロジックになっているのが、Daapsの特徴。


この記事が気に入ったらサポートをしてみませんか?