比特幣的發行和挖礦

概述

挖礦的用途

1. 搶奪區塊打包權
2. 驗證交易事務
3. 獎勵發行新幣
4. 廣播新區塊

你們約定一個規則,共同按照這個規則競爭,競爭成功誰就有數據打包權,打包完成後廣播給別人,別人驗證無問題就存入本身的數據文件中。算法

規則------->工做量證實

難度值: 一個門檻
        規定一個256位的證書,做爲難度爲1的目標值:
        X00000000FFFFFFF.......
        當時全網的算力,大約須要10分鐘左右的運算能獲得一個符合這個難度爲1的值。
    0號區塊的難度信息
        "nonce": 2083236893
        "bits": "1d00ffff"
        "difficulty": 1
    noce:一個隨機數,挖礦計算獲得
    bits: 存儲難度的十六進制目標值,存儲在區塊頭部
        源碼中,用4字節,32位存儲256位長度的難度目標值(壓縮過)
    壓縮方法:
        1. 4個字節的高位字節用來存儲難度值得有效字節數
            有效字節數: 從第一個不全爲0的字節開始的部分。
            約定:若是難度值有效位的最高位爲1,則須要在前面補上0x00
            舉例:難度爲1的目標值,X00000000FFFFFFF.......(十六進制計數,沒一位兩個字節,因此前8個0爲4字節),有四個字節長度爲0,減掉這些0的長度共計32bit,剩餘256-32=224,也就是28個字節,由於F轉換爲2進製爲1111,第一位爲1,因此補上0x00,所以有效位總計29個字節,29的十六進制爲1D
        2. 另外3個字節中存儲的是目標值有效位的最高3個字節,此時目標 值有效位前面已經加上2個0,所以最高3個字節爲0x00FFFF,合起來壓縮後的值就是0x1D00FFFF
    此4個字節前2位一般爲冪或指數,後6位爲係數:目標值 = 係數*2^(8*(指數-3))次方
        難度值:差很少兩週調整一下新的難度值,算力在增長。爲了維持差很少10分鐘出一個區塊,難度要跟隨算力變化而調整。
        難度值會愈來愈大,目標值會愈來愈小,目標值越小越難挖礦。
    新的難度值 = 當前難度值*(最近的2016個區塊的實際出塊時間/2016分鐘)

挖礦計算

1.挖礦的計算公式:
    SHA256(
        SHA256(version + prev_hash + markle_root + ntime + nbits + nonce)
    ) < TARGET
    TARGET: 難度目標值,若是計算出來的值小於這個值,就算挖礦成功
    各名詞解釋:
        version : 區塊的版本號
        prev_hash: 前一個區塊的哈希值
        merkle_root: 準備打包的交易事務哈希樹,也就是梅克爾根
        ntime: 區塊時間戳
        nbits: 當前難度
        noce: 隨機數
    以上爲去塊頭組成部分。

挖礦

  1. 概念
    挖礦就是重複計算區塊頭的哈希值,不斷修改該參數,直到與難度目標值匹配的一個過程,多個節點同時匹配,誰的鏈最長爲準。
  2. cainbase交易
    挖礦獎勵做爲一條交易事務包含在區塊的交易事務中的,至關於系統給礦工轉了一筆比特幣。通常位於區塊的第一條。
  3. 挖礦獎勵規則
    2019年1月建立出第一個區塊,每21萬區塊產量減半(大約4年),到2140年,全部比特幣(20999999.98)將所有發行完畢。
  4. 比特幣錢包
    比特幣地址生成過程:
    比特幣的發行和挖礦
    核心錢包,輕錢包
    核心錢包: 完整交易驗證,是否有足夠餘額,是否雙花。
    跟核心客戶端在一塊兒,能夠建立錢包地址,收發比特幣,加密錢包,備份錢包
  5. SPV錢包
    大體過程:
    1.下載完整區塊頭數據,區塊頭中包含區塊的梅克爾根------->SPV方式靠它實現
    2.算出待驗證支付的交易事務哈希值taHash
    3.找到taHash所在的區塊,驗證一下全部區塊的區塊頭是否包含在帳本數據中
    4.得到所在區塊中計算梅克爾根所須要的哈希值
    5.計算出梅克爾根
    6.若計算結果與所在區塊的梅克爾根相等,則支付交易是存在的
    7.根據該區塊所處的高度位置,還能夠肯定該交易獲得了多少個確認
    注:僅能看到當前支付的支付交易是否被髮起而已,並不能保證這筆交易事務最終進入到主鏈中,須要等待覈心節點進行全面的交易驗證,而且礦工打包到區塊後進入主鏈。
  6. 管理多個私鑰的錢包技術(分層肯定性錢包(HD Wallets))
    特色:
    1. 用一個隨機數來生根私鑰,這與任何一個比特幣錢包生成私鑰沒區別
    2. 用一個肯定的,不可逆的算法,基於根私鑰生成任意數量的子私鑰
  7. 未花費事務輸出,UTXO,(Unspent Transaction Output)

比特幣的發行和挖礦

a.比特幣的交易不是經過帳戶的增減來實現的,而是一筆筆關聯的輸入/輸出交易事務
b.花費"輸入",產生"輸出",這個輸出就是"未花費過的交易輸出",也就是UTXO.每一筆交易事務都由一個惟一的編號,稱交易事務ID,經過哈希計算而來,引用"輸出",主要提供交易事務id和所處"輸出"獵豹中的序號就能夠了。
c.因爲沒有帳戶的概念,所以當"輸入"部分的金額大於所需"輸出",必須給本身找零,這個找零也是做爲交易的一部分包含在"輸出中"

證實哪一條UTXO是屬於誰
1.輸入腳本,2.輸出腳本。也叫鎖定腳本和解鎖腳本。
1.用私鑰簽名解鎖本身的某一條UTXO(也是以前的輸出)
2.對方公鑰鎖定新的"輸出",成功後,這筆新的"輸出"就成了對方的UTXO經過輸入,輸出腳本實現轉帳。ide

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息