區塊鍊(Block Chain)_理論_挖礦到底是在挖捨麼???


在探討何謂  「區塊鍊」 以及 其來龍去脈之前

先來回顧

你在日常生活中去便利商店甚至是夜市攤販
買東西時
會給錢 可能是紙鈔或零錢


但是隨著科技發展
漸漸地買東西從實體店面轉為網路電子商務

給錢、付款一詞不再僅侷限於實體給付
更延伸為一筆帳的資料紀錄

所以演變為  「錢」  到底是用捨麼樣子呈現的議題


試想有一個超大帳本裡頭紀載全世界所有人交易買賣的紀錄
任何人的資產和交易紀錄全紀錄在此

會衍生出一些問題
有誰要來建立並管控這個超大帳本呢???
而且系統細部功能
1.所有權認定(資產要歸給誰、流動的交易錢財歸給誰??)
2.支配權行使(誰有權可以去挪用這些錢??)
3.清算、結算運作
4.資訊紀錄信任(帳戶資訊的保護  、 不可被隨意更動)

圖截自: http://iknow.stpi.narl.org.tw/Post/Read.aspx?PostID=13354

於是有一個日裔美國人 化名 Satoshi 於2008年
跳出來開發出這套管理大帳簿的伺服器端應用程式(Node節點)
和客戶端(電子錢包 eWallet)連節伺服器的軟體

且整套系統已公開金鑰加密技術(匿名機制)
來確保使用者的安全性  以及資產「所有權」、「支配權」之行使機制 !!!

公鑰(一串0、1字串) 作為  個人帳戶號碼(使用者名稱)
確保 個人隱私(匿名)

各節點間資料傳遞播送方式採用  溢散式(Propagation Casting)

我們大家一起來建立上述這些機制吧
讓願意一起加入這計畫的志願人士(有錢人、企業人)
自備軟硬體和網路來下載Server軟體
使用者只需要下載並安裝即可用這項服務

願意提供伺服器的用戶端就會形成所謂的節點(Node)
終端使用者 (End User) 則可以下載並使用 網路零錢包來和這些節點連結

這就是所謂的  區塊鍊(Block Chain) 最原始雛形

節點間透過網路和彼此訂定的協定來連結更新帳簿資料並確保一致姓
(一個帳簿只要一更動,其餘一起立即更新)

終端使用者透過錢包連任一節點來得到帳簿服務
這一整個網路串起來的架構就像是虛擬的線上銀行帳簿

並不需要去實體店面排隊
或是領取號碼牌等等



所有權認定 vs  支配權行使

所有權認定(資產要歸給誰、流動的交易錢財歸給誰??)
支配權行使(誰有權可以去挪用這些錢??)

那連結到網路節點後可能客戶A他在某商城購買東西生成一筆交易紀錄
此時買家  客戶A
賣家 某商城

彼此針對某一節點要做存入這一筆買賣紀錄時
誰有權來做這件事呢????
那想當然是 買家 客戶A
好  那節點 要如何確認 下達存入此筆紀錄指令真的就是 客戶A 進行的呢????
如何確認接收資訊真偽
我們的 Satoshi 大大 就使用了 PKC (Public Key Cryptography)
公開金鑰加密技術



因此若節點端可以把加密訊息解出明碼訊息
則代表確立是客戶A 所下達的指令
解決了所有權、支配權問題!!!


至於清算和結算

則是
客戶A資產 會等於
第一次登陸資產
加上  所有他人轉給他的資產總額
減去 其轉給他人的資產總額


那問題是否就全解決了呢???
其實還有需要探討
Q1 如何確保每一節點之帳簿不可被隨意竄改
Q2 當資料同步時若發生衝突的解決方案




為了解決這兩項問題
Satoshi 大大很厲害地藉由
區塊(Block)、鍊(Chain)這兩個詞的抽象概念來解決


到底何謂區塊(Block) ??? 何謂鍊(Chain)???



https://www.chinamoneynetwork.com/2017/08/23/fosun-leads-new-funding-round-chinese-blockchain-solutions-provider-onchain

在上面一些敘述 還有若你嘗試上網去查 Block Chain 這個詞
會看到的大多數會是以一堆節點連節點所構成的網子般示意圖



每一個節點其時並不是像剛剛舉例的
只會對應一個使用者端或是一筆交易在做

每一節點都可能接收到多筆交易
當各個節點所收到的交易紀錄達到一定量的時候呢
就會開始產生出一個區塊(Block)


區塊的樣貌 說實在十分抽象



於下方摘錄自
"Mastering Bitcoin: Programming the Open Blockchain" 
https://www.amazon.com/Mastering-Bitcoin-Programming-Open-Blockchain/dp/1491954388
Author : Andreas M. Antonopoulos
書中的
Example 8-3. Block 277,316

















在此本書中就有一個例子
我們能夠比較清楚看出來一個Block其實就有點像是用 Json 這種特定格式包裹的資料串
這邊你所看到的即是第277,316個Block


中間是我們 Transactions 交易的部分

所以大概能看出來總共包含419筆交易紀錄



上方則是屬於Header區塊
則會紀錄當前的Block資料累積大小 、版本、交易的Summary、第幾塊等等資訊
Hash 則代表整區塊的封裝機制的辨別編碼,透過雜湊演算法生成。
雜湊演算法 : 主要可用於防範文件資料被竄改的演算法
----> 其實就是一種將數據打散的一台果汁機


這裡舉個例子

今天朋友A跟你借了300塊錢
所以朋友A總共欠你300元
那你就白紙黑字寫在你我共同的記帳小本子中
你寫你的  他也寫他的
各自寫各自的記帳本

結果到還錢那天
朋友A竟然說他只欠你30元
差了一個零
將近是從可以買5個60元便當跌到半個都不能買的錢

你很生氣然後要彼此掏出各自當天記帳本欠錢的金額
你的是對的 可是對方 或許有偷改
此時就會產生資料未有防範更改保障的問題產生!!!


Q1 如何確保每一節點之帳簿不可被隨意竄改

為了確保 tx區塊紀錄不會被更動
tx區塊眾多筆transactions 的 summary則記錄在 merkleroot 當中

在Block Chain中會針對 Header區塊的資料當作傳入參數輸入
並運行由美國國家安全局所設計的國際標準 Sha256 Hash演算
輸出的hash value 紀錄於 頂端 hash欄位


所以當有心人士想去竄改tx區塊之前
會需要先去重新製作一個tx 的 summary 也就是 merkleroot
想去重製merkleroot則必須先重算Hash Value
那若無法重新計算Hash Value 就無法去改變tx區塊紀錄 了

若是熟識這類型演算機制的高手
想當然 重新計算Hash Value是有可能被實踐的
那基本上整個機制仍無法滿足安全的防範



也因此 我們的 Satoshi 大大十分精明自定義一個條件式的Hash
多創一個difficulty欄位
其設計理念就是想將重計算Hash變得更加困難


difficulty 若轉為  16進制表示
則你會發覺  它其實是

1180923195.25802612,

0x       19           03a30c
         exponent  coefficient 

此時就會帶入值到下方條件式

計算出來的 Hash Value 要小於  coefficient * 2 ^ (8*(exponent - 3))

(十六進制)
03a30c * 2 ^ ( 0x08 * 0x16 )   

(轉為二進制展開)
=  "0000000000000003A30C00000000000000000000000000000000000000000000"
原"0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4"

所以由此可見原本合法無更改的Hash Value 是有小於 coefficient * 2 ^ (8*(exponent - 3))
計算出來結果的



條件式Hash值是很不容易計算的!!

那要去計算或破解出一個符合 difficulty條件的Hash值
其實步驟就是土法煉鋼

Step1.先猜一個nonce值
Step2.用SHA256 演算 計算出一個Hash Value
Step3.在將結果和difficulty所代表之目標值做比對 若Hash 有比目標值小
則就是我們要的Hash
不合就回Step1.反覆做


所以可能大概要計算十幾億次

懂的老手就將 "猜nonce值,計算並比對Hash值"  動作
稱為 「挖礦」

即我們所要尋找有符合difficulty條件的Hash值

因為有Hash才可建立出區塊
才能綁定Block內部的交易值


那由於每一個網路節點皆是由志願者們
主動去維護、去計算Hash值
為了給予這些志願人士努力維護Block Chain的獎賞
(在計算Hash時 需要耗費龐大電力、機器、時間成本!!!!)

每當有成功建立出一個Block的時候,就能於該Block加入一筆交易
在此生態系當中就會給予某某 50BTC
(現在的匯率會算成台幣大概是 9775475.14台幣 -->9百萬多台幣)
BTC個數也因此而增加
為了不使 BTC 個數無限制膨脹增加
約每四年  生態系所允許之回饋金BTC個數就會折半
從2009年到現在已折半過兩次
因此現在每成功建立一次Block所能獲得的回饋以降到12.5BTC(2443868.78->2百萬多台幣)
https://zt.coinmill.com/BTC_TWD.html#BTC=12.5



針對
Q2 當資料同步時若發生衝突的解決方案  部分
會在下一張做分享



參考文章:


從開發人員角度十分鐘理解區塊鏈技術
https://www.slideshare.net/WillHuangTW/blockchain-from-a-developers-perspective

比特幣從「不了解」到「被誤解」——詳解區塊鏈技術
http://trad.ibtimes.com.cn/articles/49362/20170518/600349.htm

4個Q&A,快速了解「區塊鏈」及「比特幣」!
https://www.managertoday.com.tw/articles/view/55486

區塊鏈專案仍舊活躍者僅8%
http://iknow.stpi.narl.org.tw/Post/Read.aspx?PostID=13952

三分鐘教你看懂區塊鏈的交易流程
https://kknews.cc/finance/68knz2v.html

「區塊鏈」到底是什麼?專業懶人包在這裡
https://www.mile.cloud/zh-hant/what-is-blockchain/











留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題