サルでもわかる?ブロックチェーン復習

ブロックチェーンについて復習します
これを読めばサルでもわかるかも?

1361 views

トランザクションの構造

概要

「トランザクション」とはどの金額が、どのように送金されたのか表現するデータのこと。
トランザクションデータ自体には、個人を特定するデータは含まない。
しかし、秘密鍵や公開鍵を用いた電子署名を使うことで、所有権を証明するんや。
ブロックチェーンは、ブロック同士が数珠つなぎになり、前後で依存関係を持つことで、全体の整合性を保つ。トランザクションデータも同じく数珠つなぎにする構造やで。

トランザクションデータを取得してみる

[入力]

import requests

APIURL = "https://blockchain.info/rawtx/"
#TXID = "0e942bb178dbf7ae40d36d238d559427429641689a379fc43929f15275a75fa6"
TXID = "0e942bb178dbf7ae40d36d238d559427429641689a379fc43929f15275a75fa6"
r = requests.get(APIURL + TXID + "?format=hex")
print(r.text)

[出力]

010000000245d50a313eb89a71bb501380334e58973b7b3c0fb4614f8645d07d728b8574aa010000008c493046022100b3c7f1c56384c6145673b94fa226af8d02a263a1ed9f3505fdf0e94cc681193e022100d677eb3cbb9b82da961626ccfdc31a6041195123ae236b5ed1a34250c4163e73014104545e7c6d2acc161567860039bc3068d4af5432b1afe34d2909bf8996b95c10a6445692bc3f458a0503c45084f99329d5e90d84f21a52a5d11add62eb26340db2ffffffff49de1cd30c20d1f22a2e966b0d195d20b0f133e8de426f7d1610525a64a09daf000000008b483045022100d4ea6ce46296548d38f02da337daebef00f443134f3b68f4ad8946a961728b0402207573dc96e324037d1934fa5105a517608364a2b273e694dce53714745fa135f4014104e89667c1c2cf4eb91324debcc7742b8eb22406c59d6033794124efb7cce37b78ddd5e3c3474aeb9dbf7689c9d36d776b7d21debe4d75142cb43a2529fb3a6da4ffffffff0100286bee000000001976a914c1ac9042b50a9d2e7a6a1b42bad66e61a9ec3f6b88ac00000000

異なる出力

[入力]

import requests

APIURL = "https://blockchain.info/rawtx/"
#TXID = "0e942bb178dbf7ae40d36d238d559427429641689a379fc43929f15275a75fa6"
TXID = "0e942bb178dbf7ae40d36d238d559427429641689a379fc43929f15275a75fa6"
r = requests.get(APIURL + TXID )
print(r.text)

[出力]

{
   "ver":1,
   "inputs":[
      {
         "sequence":4294967295,
         "witness":"",
         "prev_out":{
            "spent":true,
            "spending_outpoints":[
               {
                  "tx_index":0,
                  "n":0
               }
            ],
            "tx_index":0,
            "type":0,
            "addr":"1BNZJx7pM4GTqe8MgEZoji2fUS3fKnJH2i",
            "value":500000000,
            "n":1,
            "script":"76a91471c4f6b0f56fef3cbdbae6f297631a27ab159f9888ac"
         },
         "script":"493046022100b3c7f1c56384c6145673b94fa226af8d02a263a1ed9f3505fdf0e94cc681193e022100d677eb3cbb9b82da961626ccfdc31a6041195123ae236b5ed1a34250c4163e73014104545e7c6d2acc161567860039bc3068d4af5432b1afe34d2909bf8996b95c10a6445692bc3f458a0503c45084f99329d5e90d84f21a52a5d11add62eb26340db2"
      },
            ~~~以下省略~~~

UTXO

概要

UTXOとは、未使用のトランザクションアウトプットの意味やで。
UTXOは複数に分割することができん。
イメージは千円札を半分に切っても500円にならないのと一緒や。
ユーザーが送金を行い、トランザクションを組成するとき、UTXOをかき集め、支払いたい金額より大きくなるようにするんや。(7500円払うために10000円札出すようなもの。)
この時、支払い額より多かったらおつり分を新しいUTXOでもらえるで

アカウントベース方式とUTXO方式

ブロックチェーンにおける残高を管理する方法は

  • アカウントベース方式
  • UTXO方式

の二つがある。

アカウントベース方式

[長所]

  • 実装が簡単
  • 複雑な処理が扱いやすい

[短所]

  • 匿名性を高めにくい

UTXO方式

[長所]

  • 匿名を高めやすい
  • スケーラビリティを高めやすい
  • 二重支払いを防止しやすい

[短所]

  • 実装が複雑になる

コインベース取引

概要

報酬を獲得する取引を「コインベース取引」という。
例えば、マイニングに成功したマイナーはマイニング報酬を得るとかやな。


トランザクションはinputとoutputが連鎖する。
その始点がコインベース取引やで。
コインベース取引の特徴は「input」の値を持たない。
つまり、消費するUTXOを持たないただ一つのトランザクションやで。
※UTXOは合計の値が増加するタイミング

スクリプト言語

概要

スクリプト言語とは、スタックと呼ばれるデータ構造を利用した言語や。
LIFO形式。

CP_CODE

ビットコインで使用する言語
ステートレスという特徴を持つんやで。

トランザクションの種類

トランザクションには3つの種類がある

方式 説明
P2PKH(pay-to-public-key-hash) 公開鍵のハッシュ値をLocking
P2PK(pay-to-public-key) 公開鍵をLocking scriptに配置
P2SH(pay-to-secret-hash) 複雑なスクリプトをハッシュ値でシンプルにする

P2PKH

P2PKH方式は2019年時点でよく使われる。
outputに公開鍵のハッシュ値が配置される。

P2PK

比較的古い方式やで

P2SH

新しい方式でより複雑な取引を扱うことができるんやで。

Page 8 of 9.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

owl

自己紹介

駆け出しエンジニア
だいたいweb系をかじってる
最近ちょとブロックチェーンに興味出てきた

サイト/ブログ

https://github.com/owl0109

ツイッター

@kijiken1