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: 隨機數 以上爲去塊頭組成部分。
a.比特幣的交易不是經過帳戶的增減來實現的,而是一筆筆關聯的輸入/輸出交易事務 b.花費"輸入",產生"輸出",這個輸出就是"未花費過的交易輸出",也就是UTXO.每一筆交易事務都由一個惟一的編號,稱交易事務ID,經過哈希計算而來,引用"輸出",主要提供交易事務id和所處"輸出"獵豹中的序號就能夠了。 c.因爲沒有帳戶的概念,所以當"輸入"部分的金額大於所需"輸出",必須給本身找零,這個找零也是做爲交易的一部分包含在"輸出中"
證實哪一條UTXO是屬於誰
1.輸入腳本,2.輸出腳本。也叫鎖定腳本和解鎖腳本。
1.用私鑰簽名解鎖本身的某一條UTXO(也是以前的輸出)
2.對方公鑰鎖定新的"輸出",成功後,這筆新的"輸出"就成了對方的UTXO經過輸入,輸出腳本實現轉帳。ide