在收到交易後,每乙個節點都會在全網廣播前對這些交易進行校驗,並以接收時的相應順序,為有效的新交易建立乙個池(交易池)。
每乙個節點在校驗每一筆交易時,都需要對照乙個長長的標準列表:
交易的語法和資料結構必須正確。
輸入與輸出列表都不能為空。
交易的位元組大小是小於max_block_size的。
每乙個輸出值,以及總量,必須在規定值的範圍內 (小於2,100萬個幣,大於0)。
沒有雜湊等於0,n等於-1的輸入(coinbase交易不應當被中繼)。
nlocktime是小於或等於int_max的。
交易的位元組大小是大於或等於100的。
交易中的簽名數量應小於簽名運算元量上限。
解鎖指令碼(sig)只能夠將數字壓入棧中,並且鎖定指令碼(pubkey)必須要符合isstandard的格式 (該格式將會拒絕非標準交易)。
池中或位於主分支區塊中的乙個匹配交易必須是存在的。
對於每乙個輸入,如果引用的輸出存在於池中任何的交易,該交易將被拒絕。
對於每乙個輸入,在主分支和交易池中尋找引用的輸出交易。如果輸出交易缺少任何乙個輸入,該交易將成為乙個孤立的交易。如果與其匹配的交易還沒有出現在池中,那麼將被加入到孤立交易池中。
對於每乙個輸入,如果引用的輸出交易是乙個coinbase輸出,該輸入必須至少獲得coinbase_maturity (100)個確認。
對於每乙個輸入,引用的輸出是必須存在的,並且沒有被花費。
使用引用的輸出交易獲得輸入值,並檢查每乙個輸入值和總值是否在規定值的範圍內 (小於2100萬個幣,大於0)。
如果輸入值的總和小於輸出值的總和,交易將被中止。
如果交易費用太低以至於無法進入乙個空的區塊,交易將被拒絕。
每乙個輸入的解鎖指令碼必須依據相應輸出的鎖定指令碼來驗證。
a). 驗證交易後,位元幣節點將交易新增到自己的交易池中,用來暫存尚未被加入到區塊的交易記錄
b). 位元幣節點為交易池中的每筆交易分配乙個優先順序,並選擇較高優先順序的交易記錄來構建候選區塊。
優先順序從高到低: 創幣交易(區塊建立獎勵交易) > 高優先順序交易 > 按礦工費排序的交易 > 不含礦工費的交易
c). 創幣交易+高優先順序交易 == 50k
d). 區塊被填滿後,剩餘交易繼續留在交易池
//區塊結構
乙個區塊將主要包括如下內容:
4 位元組的區塊大小資訊;
80 位元組的區塊頭資訊:
版本號:4 位元組;
包含的所有驗證過的交易的(merkle)樹根的雜湊值,32 位元組;
時間戳:4 位元組;
難度指標:4 位元組;
nonce:4 位元組,pow 問題的答案;
交易個數計數器:1~9 位元組;
所有交易的具體內容,可變長
區塊頭部結構
挖礦節點不斷重複進行嘗試,直到它找到的隨機調整數使得產生的雜湊值低於某個特定的目標為什麼需要調整
位元幣區塊平均10分鐘生成乙個,是位元幣的心跳時間,必須幾十年內保持恆定。但是隨著挖礦人數的不斷變化,必須動態調整難度以調整產出時間。
如何調整
調整由每個完整節點獨立自動完成,每2016個區塊(2周)調整一次,調整公式是由最新2,016個區塊的花費時長與20,160分鐘比較得出的。
為了防止難度的變化過快,每個週期的調整幅度必須小於乙個因子(值為4)。如果要調整的幅度大於4倍,則按4倍調整。
a). 挖礦節點一旦完成計算,立刻將這個區塊發給它的所有相鄰節點。
b). 其它節點在接收並驗證這個新區塊後,加入自身區塊鏈中,並放棄正在計算的高度相同的區塊,立即開始計算下乙個區塊
c). 繼續傳播此區塊。
區塊鏈維護3種區塊
a). 連線到主鏈上的
b). 主鏈上產生分支的(備用鏈) 位元幣總是選擇最長的鏈,所以分支鏈的情況會在再下乙個塊被找到時解決
c). 已知鏈中沒有找到已知父區塊的 之後收到父區塊時會被取出鏈結上
位元幣挖礦
什麼是 挖礦 簡單來說,數字貨幣網路是乙個龐大的p2p記賬體系,網路中的每一筆交易都需要被確認才能生效,而確認交易需要使用運算能力 即 算力 來解決大量 隨機的數學難題,挖礦 就是通過挖礦裝置 即 礦機 為整個網路提供運算能力,解決數學難題以確認交易的過程。作為對礦機貢獻算力的回報,數字貨幣網路將根...
位元幣挖礦 錢包
1 安裝 plain view plain copy apt get install bitcoind 2 修改配置檔案 plain view plain copy vi bitcoin.conf 內容如下 rpcuser abc rpcpassword 123 server 1 rpcallowi...
位元幣的挖礦原理
位元幣的挖礦原理,實際上就是乙個資料記錄的過程。區塊鏈是個人人都可以參與資料處理的資料庫,每隔段時間,就需要礦工將之前沒有經過大家確認的交易資料收集起來,進行處理。但問題就來了,礦工那麼多,到底用誰處理的資料?所以,系統就有了乙個特殊的機制。所有參與的礦工,把資料打包的時候,必須加入乙個叫做 雜湊值...