見出し画像

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

トランザクションの基礎

トランザクション=取引です。 簡単に表すと、小切手のようなもになります。あなたが小切手2Bitcoinの価値がある小切手を持っていて、私にコーラ1本を2Bitcoinで買った。その小切手にサインを書いて私に渡す。で、私が使う時も同じように使う。

トランザクションの流れ
トランザクションは取引のデータ。それに私が署名をするとネットワークに取引内容を伝え、マイナーが未検証取引を集め、ブロックに記録する。それから、ネットワークにブロックを伝え、十分な回数のブロックに承認されるとトランザクションは有効なものとして認識される。受け取り主がそのお金を使えるようになります。

トランザクションの構造
トランザクションはインプット(送り主)からアウトプット(受け取り主)への価値の移転を記したもの。
AさんからInput5000を出し Bさんに4000支払い、1000円はお釣りとしてもらいたい。その場合、Aさんは電子署名と公開鍵をつけBさんに送る。Bさんは4000受け取り。Aさんに990返す。10をマイナーが手数料としてもらう。これを記したものがトランザクションです。

UTXO
未使用残高。これはBCに記録されている。ウォレットアプリでは、これが残高として表示される。
お金を受け取るとUTXOに記録され、使用する際はUTXOを消費してインプットを作成。

BCが分散台帳技術と言われる理由
トランザクションの中身は、送る側(input)と受け取る側(output)の合計が等しくなければならない。
複式簿記の台帳で貸方と借方に同じ額が記入されるのとおなじ。
Aさんは、5000円と1600円で6600円合計持っている。 6600円はAさんが使える金額。AさんはBさんに4000円支払うために、UTXOの5000円を使い支払い。
inputに5000と、公開鍵と電子署名を記入。Bさんは元々持っていたUTXO2000円と、受け取った4000円で6000円になる。
Aさんは最終的に1600円と先ほどのあまり1000円からマイナーに十円支払った。990円と合わせる。UTXO 合計2590円になる。

トランザクションのアウトプットとは
トランザクションによって作られたUTXO(未使用残高)がトランザクションアウトプットのこと。
アウトプットは出金額とOutputを使用するにあたって満たさなければならない解除条件から成り立っている。本人しかお金を使えないようにロックしていて、それを解除する。Locking scripitというプログラミングの言語=scriptPubkeyがある。
OUTPUTのなかには、出金額。そして解除条件。その中に、受け取り側のアドレスも公開鍵ハッシュとして含まれている。

トランザクションのインプットは?
・インプットはUTXOへのポインタ(どの未使用残高なのか?を指し示す。)
・インプットの構成
使用するUTXOのトランザクションハッシュ(トランザクションのデータをハッシュ化したハッシュ値)。使用したい未使用残高があり、これを使用するよ〜といっているのがトランザクションハッシュ値。
使用するUTXOのインデックス番号。使用したいUTXOのアウトプットに受取人が複数人いて、1.Aさん2.Bさんとアウトプットのどちらのお金を使うのか。そのときにAさんのお金を使用したい場合は、UTXOのインデックス番号を1とする。インデックスを使用すれば、誰から支配をするのかを、選択できる。
・UTXOのロック解除のスクリプト 。scriputsig(unloking script)の中に電子署名、公開鍵が含まれている。

手数料って?!
inputとoutputの差額がマイニング手数料としてマイナーに支払われる。
マイナーはトランザクションのブロックに含めるインセンティブとして働く。少額でもインセンティブは発生し、それがゆえに無駄なトランザクションをあまりしないようにしている。それは自分に入る報酬が増えるから、手数料の高いトランザクションが優先してまいにんぐされる。

トランザクションスクリプト 
スクリプトはプログラミンング言語の一種で、これを実行することでトランザクションのゆうこうせいをチェックする。
Outputのscruptpubkeyは、outputを使用するために満たさないといけないロック条件。そのため、ロッキングスクリプト と呼ばれて、公開鍵ハッシュをスクリプト 化したものである。
inputのscriptsigは、outputのスクリプト条件を解除するもので、unlocking scriptとも呼ばれる。sigはsignetureの略で、署名をスクリプト 化したもの。

スクリプト言語
プログラミング言語の一つ、BCはスクリプト 言語で書かれている。
保存形式。データの入れ物をスタックと言い、これにデータ1を追加し、次にデータ2を追加。データが新しいものを先に取り出すため、データ2から取り出し、結果データ1をが残る。

スクリプトの例
「3+4==7を検証」「==」とは左辺と右辺が等しいか?!正しければture、間違っていればfoluse.
上記をスクリプト言語で書くと、3 4 + 7 ==
処理の例、スタックに3がはいり、次に4が入る すると+でスタックの中は7。さらに7を追加して、 7 7 == は等しいのでtureが返る仕組み。

電子署名を検証
トランザクションスクリプトでどのようにロックし、解除するのか?scriptsig(電子署名と公開鍵)+scriptpubkey(電子署名を検証するスクリプと)==署名検証をつなげた状態でスクリプトを実行している。 最後に残ったのがtureであればロックを解除。 ture以外のものが残れば、ロックは解除できない。

スクリプトの種類
pay-to-Public-key-Hash - 一番使用されてる。
マルチシグネチャ- Utxoを使用するために複数人の署名が必要。ロック条件にM-of-nを使用している。つまりn人のうちm人が署名すればそのお金が使用できる。
データアウトプット - scriptPubkeyにデータを入れる。ファイルの存在証明やスマートコントラクトのために使用。
pay-to-script-Hash - scriptpubkeyにスクリプトをせっていすることで、簡単に複雑なスクリプト を使えるようになった。マルチシグネチャはスクリプト が長くなりがち、その際に簡単なスクリプトで書きかんたんにする。





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