① 比特幣區塊里的各個欄位含義(先寫了個nonce)
nonce是個啥意思?根據bitcoin wiki
nonce是一個4-byte大小的區域,nonce的值設定使得該塊的hash是以一串0開頭的。
對於塊數據的一點點改變(比如nonce)都會引起block hash的巨大變化。由於逆向預測hash值相對應的一組bit值(hash原文)是不可行的,在嘗試足夠多的nonce值且計算每個nonce值相對應的block hash之後可以找到一個滿足有指定數量 0 bits (0比特位) 的hash值。而 0 bits的數量值是由difficult設定的。最終產生的hash須得是一個小於當前difficulty值。
因為這個迭代的計算耗費時間和資源,塊的出現也就是得到了正確的nonce值,這構成了 proof of work
關於以太坊里的nonce 網上很多解釋,很多一上來就是 交易計數器 , 然而卻把跟POW有關的丟了嗎?事實上以太坊里的nonce有兩種意思,一個是proof of work nonce,一個是account nonce。
那智能合約呢?合約也算是Account的一種,那也有nonce嗎?
是的,而且合約裡面的nonce也差不多,也是一個counter。在智能合約里,nonce的值代表的是該合約創建的合約數量。只有當一個合約創建另一個合約的時候才會增加nonce的值。但是當一個合約調用另一個合約中的method時 nonce的值是不變的。
在以太坊中nonce的值可以這樣來獲取(其實也就是屬於一個賬戶的交易數量):
但是這個方法只能獲取交易once的值。目前是沒有內置方法來訪問contract中的nonce值的,除了自己定義一個counter來計數...
那好,再來看一下Ethereum Block中的nonce:
以太坊和比特幣區塊鏈一樣,也需要proof of work(計劃轉移到股份證明也早已在做了)。在比特幣區塊鏈中,pow應該是要算出一個符合難度要求的值,通常是以一串0開頭的。這個難度一直在變化。可以查看 比特幣區塊鏈的POW難度變化 。
② 以太坊的共識演算法是什麼
以太坊的共識演算法是什麼?
以太坊是一種基於區塊鏈技術的去中心化應用平台,其共識演算法是實現區塊鏈網路共識的重要組成部分。以太坊採用了稱為「工作量證明」(Proof-of-Work,PoW)的共識演算法來驗證交易和添加新的區塊到鏈上。
在以太坊中,挖礦節點使用計算能力來解決數學難題,這些數學難題需要大量計算資源來解決。完成解題的礦工將獲得以太幣的獎勵,並由網路確認其工作結果,從而將新的區塊添加到區塊鏈中。
如何保障共識演算法的安全性?以太坊通過調整困難度(Difficulty),使得挖礦難度與算力成正比。也就是說,當更多的挖礦節點加入網路並提高算力時,難度也相應變化,確保全網總共識難度保持一定的水平。
除了工作量證明,以太坊還計劃採用「證明權益」(Proof-of-Stake,PoS)的共識演算法來替代PoW。在PoS共識演算法中,用戶需要投入一定量的以太幣來驗證交易和添加新的區塊。隨著用戶持有的以太幣數量越多,其參與共識的權利也就越大。
總的來說,以太坊的共識演算法採用了PoW和未來可能會採用PoS,這兩種演算法均是為了保障區塊鏈網路的安全性。隨著技術的進步和共識演算法的不斷演進,以太坊將在不斷優化共識演算法的同時,實現更好的去中心化應用平台。
③ 區塊鏈高度怎麼查詢(區塊鏈地址查詢怎麼查)
區塊高度越高說明什麼區塊高度(Blockheight)是指一個區塊的高度是指在區塊鏈中它和創世區塊之間的塊數。區塊高度是可以通過該區塊在區塊鏈中的位置識別區塊的另一種方式。第一個區塊,其高度為0,每一個隨後被存儲在第一個區塊之上的區塊在區塊鏈中都比前一區塊「高」出一個位置,就像箱子一個接一個堆疊在其他箱子之上。
和區塊頭哈希值不同的是,區塊高度並不是唯一的標識符,在區塊鏈的增長過程中可能會出現兩個或兩個以上的區塊有同樣的高度,這種情況叫做「區塊鏈分叉」。
區塊鏈是blockchain翻譯而來的,看見「鏈」人們聯想到的是長長的鏈條,它有長度的概念。但在區塊鏈中,並不叫區塊長度,而是區塊高度,你可以把區塊鏈理解為區塊堆。
創世區塊,即第0塊,位於最底層,然後每一塊都疊在前一塊之上,這樣就比較好理解區塊高度了。我們查詢某個區塊信息時,除了通過它的哈希,還可以通過它的區塊高度進行查詢。
區塊高度的作用
區塊高度是區塊的標示符,區塊有兩個標示符,一是區塊頭的哈希值,二是區塊高度。區塊頭的哈希值是通過SHA256演算法對區塊頭進行二次哈希計算而得到的數字。區塊哈希值可以唯一、明確地「標識」一個區塊,並且任何節點通過簡單地對區塊頭進行哈希計算都可以獨立地獲取該區塊哈希值。區塊高度是指該區塊在區塊鏈中的位置。區塊高度並不是唯一的「標識」符。雖然一個單一的區塊總是會有一個明確的、固定的區塊高度,但反過來卻並不成立,一個區塊高度並不總是識別一個單一的區塊。兩個或兩個以上的區塊可能有相同的區塊高度,在區塊鏈里爭奪同一位置。
如何檢測區塊鏈智能合約的風險等級高低隨著上海城市數字化轉型腳步的加快,區塊鏈技術在政務、金融、物流、司法等眾多領域得到深入應用。在應用過程中,不僅催生了新的業務形態和商業模式,也產生了很多安全問題,因而安全監管顯得尤為重要。安全測評作為監管重要手段之一,成為很多區塊鏈研發廠商和應用企業的關注熱點。本文就大家關心的區塊鏈合規性安全測評談談我們做的一點探索和實踐。
一、區塊鏈技術測評
區塊鏈技術測評一般分為功能測試、性能測試和安全測評。
1、功能測試
功能測試是對底層區塊鏈系統支持的基礎功能的測試,目的是衡量底層區塊鏈系統的能力范圍。
區塊鏈功能測試主要依據GB/T25000.10-2016《系統與軟體質量要求和評價(SQuaRE)第10部分:系統與軟體質量模型》、GB/T25000.51-2016《系統與軟體質量要求和評價(SQuaRE)第51部分:就緒可用軟體產品(RUSP)的質量要求和測試細則》等標准,驗證被測軟體是否滿足相關測試標准要求。
區塊鏈功能測試具體包括組網方式和通信、數據存儲和傳輸、加密模塊可用性、共識功能和容錯、智能合約功能、系統管理穩定性、鏈穩定性、隱私保護、互操作能力、賬戶和交易類型、私鑰管理方案、審計管理等模塊。
2、性能測試
性能測試是為描述測試對象與性能相關的特徵並對其進行評價而實施和執行的一類測試,大多在項目驗收測評中,用來驗證既定的技術指標是否完成。
區塊鏈性能測試具體包括高並發壓力測試場景、尖峰沖擊測試場景、長時間穩定運行測試場景、查詢測試場景等模塊。
3、安全測評
區塊鏈安全測評主要是對賬戶數據、密碼學機制、共識機制、智能合約等進行安全測試和評價。
區塊鏈安全測評的主要依據是《DB31/T1331-2021區塊鏈技術安全通用要求》。也可根據實際測試需求參考《JR/T0193-2020區塊鏈技術金融應用評估規則》、《JR/T0184—2020金融分布式賬本技術安全規范》等標准。
區塊鏈安全測評具體包括存儲、網路、計算、共識機制、密碼學機制、時序機制、個人信息保護、組網機制、智能合約、服務與訪問等內容。
二、區塊鏈合規性安全測評
區塊鏈合規性安全測評一般包括「區塊鏈信息服務安全評估」、「網路安全等級保護測評」和「專項資金項目驗收測評」三類。
1、區塊鏈信息服務安全評估
區塊鏈信息服務安全評估主要依據國家互聯網信息辦公室2019年1月10日發布的《區塊鏈信息服務管理規定》(以下簡稱「《規定》」)和參考區塊鏈國家標准《區塊鏈信息服務安全規范(徵求意見稿)》進行。
《規定》旨在明確區塊鏈信息服務提供者的信息安全管理責任,規范和促進區塊鏈技術及相關服務的健康發展,規避區塊鏈信息服務安全風險,為區塊鏈信息服務的提供、使用、管理等提供有效的法律依據。《規定》第九條指出:區塊鏈信息服務提供者開發上線新產品、新應用、新功能的,應當按照有關規定報國家和省、自治區、直轄市互聯網信息辦公室進行安全評估。
《區塊鏈信息服務安全規范》是由中國科學院信息工程研究所牽頭,浙江大學、中國電子技術標准化研究院、上海市信息安全測評認證中心等單位共同參與編寫的一項建設和評估區塊鏈信息服務安全能力的國家標准。《區塊鏈信息服務安全規范》規定了聯盟鏈和私有鏈的區塊鏈信息服務提供者應滿足的安全要求,包括安全技術要求和安全保障要求以及相應的測試評估方法,適用於指導區塊鏈信息服務安全評估和區塊鏈信息服務安全建設。標准提出的安全技術要求、保障要求框架如下:
圖1區塊鏈信息服務安全要求模型
2、網路安全等級保護測評
網路安全等級保護測評的主要依據包括《GB/T22239-2019網路安全等級保護基本要求》、《GB/T28448-2019網路安全等級保護測評要求》。
區塊鏈作為一種新興信息技術,構建的應用系統同樣屬於等級保護對象,需要按照規定開展等級保護測評。等級保護安全測評通用要求適用於評估區塊鏈的基礎設施部分,但目前並沒有提出區塊鏈特有的安全要求。因此,區塊鏈安全測評擴展要求還有待進一步探索和研究。
3、專項資金項目驗收測評
根據市經信委有關規定,信息化專項資金項目在項目驗收時需出具安全測評報告。區塊鏈應用項目的驗收測評將依據上海市最新發布的區塊鏈地方標准《DB31/T1331-2021區塊鏈技術安全通用要求》開展。
三、區塊鏈安全測評探索與實踐
1、標准編制
上海測評中心積極參與區塊鏈標准編制工作。由上海測評中心牽頭,蘇州同濟區塊鏈研究院有限公司、上海七印信息科技有限公司、上海墨珩網路科技有限公司、電信科學技術第一研究所等單位參加編寫的區塊鏈地方標准《DB31/T1331-2021區塊鏈技術安全通用要求》已於2021年12月正式發布,今年3月1日起正式實施。上海測評中心參與編寫的區塊鏈國標《區塊鏈信息服務安全規范》正處於徵求意見階段。
同時,測評中心還參與編寫了國家人力資源和社會保障部組織,同濟大學牽頭編寫的區塊鏈工程技術人員初級和中級教材,負責編制「測試區塊鏈系統」章節內容。
2、項目實踐
近年來,上海測評中心依據相關技術標准進行了大量的區塊鏈安全測評實踐,包括等級保護測評、信息服務安全評估、項目安全測評等。在測評實踐中,發現的主要安全問題如下:
表1區塊鏈主要是安全問題
序號
測評項
問題描述
1
共識演算法
共識演算法採用Kafka或Raft共識,不支持拜占庭容錯,不支持容忍節點惡意行為。
2
上鏈數據
上鏈敏感信息未進行加密處理,通過查詢介面或區塊鏈瀏覽器可訪問鏈上所有數據。
3
密碼演算法
密碼演算法中使用的隨機數不符合GB/T32915-2016對隨機性的要求。
4
節點防護
對於聯盟鏈,未能對節點伺服器所在區域配置安全防護措施。
5
通信傳輸
節點間通信、區塊鏈與上層應用之間通信時,未建立安全的信息傳輸通道。
6
共識演算法
系統部署節點數量較少,有時甚至沒有達到共識演算法要求的容錯數量。
7
智能合約
未對智能合約的運行進行監測,無法及時發現、處置智能合約運行過程中出現的問題。
8
服務與訪問
上層應用存在未授權、越權等訪問控制缺陷,導致業務錯亂、數據泄露。
9
智能合約
智能合約編碼不規范,當智能合約出現錯誤時,不提供智能合約凍結功能。
10
智能合約
智能合約的運行環境沒有與外部隔離,存在外部攻擊的風險。
3、工具應用
測評中心在組織編制《DB31/T1331-2021區塊鏈技術安全通用要求》時,已考慮與等級保護測評的銜接需求。DB31/T1331中的「基礎設施層」安全與等級保護的安全物理環境、安全通信網路、安全區域邊界、安全計算環境、安全管理中心等相關要求保持一致,「協議層安全」、「擴展層安全」則更多體現區塊鏈特有的安全保護要求。
測評中心依據DB31/T1331相關安全要求,正在組織編寫區塊鏈測評擴展要求,相關成果將應用於網路安全等級保護測評工具——測評能手。屆時,使用「測評能手」軟體的測評機構就能准確、規范、高效地開展區塊鏈安全測評,發現區塊鏈安全風險,並提出對應的整改建議
怎樣通過RPC命令實現區塊鏈的查詢
基本架構如下:
前端web基於socket.io或者REST實現,
後端加一層mongodb/mysql等資料庫來代替單機leveldb做數據存儲
目的應該是:
1.加速查詢
2.做更高層的數據分析
3.做分布式資料庫
思考:
這些online的查詢固然可以方便我們的日常用,那如何與相關應用集成呢?我們是否可以通過簡單的rpc命令實現同等的效果?
有幾個用處:
1.大家都可以做自己的qukuai.com或blockchain.info的查詢:)
2.集成RPC命令到自己的店鋪,收款後查詢用
3.集成到錢包應用
4.其他應用場景
cmd分析:
根據高度height查blockhash
./bitcoin-cligetblockhash19999
2.然後根據blockhash查block信息
./bitcoin-cligetblock
{
"hash":"",
"confirmations":263032,
"size":215,
"height":19999,
"version":1,
"merkleroot":"",
"tx":[
""
],
"time":1248291140,
"nonce":1085206531,
"bits":"1d00ffff",
"difficulty":1.00000000,
"chainwork":"",
"previousblockhash":"",
"nextblockhash":""
}
3.根據tx查詢單筆交易的信息:
沒建index時,只能查詢自己錢包的信息,若不是錢包的交易,則返回如下:
./bitcoin-cligetrawtransaction
error:{"code":-5,"message":"Invalidornon-wallettransactionid"}
那怎麼辦呢?直接分析代碼找原因:
//Returntransactionintx,andifitwasfoundinsideablock,itshashisplacedinhashBlock
boolGetTransaction(constuint256hash,CTransactiontxOut,uint256hashBlock,boolfAllowSlow)
{
CBlockIndex*pindexSlow=NULL;
{
LOCK(cs_main);
{
if(mempool.lookup(hash,txOut))
{
returntrue;
}
}
if(fTxIndex){
CDiskTxPospostx;
if(pblocktree-ReadTxIndex(hash,postx)){
CAutoFilefile(OpenBlockFile(postx,true),SER_DISK,CLIENT_VERSION);
CBlockHeaderheader;
try{
fileheader;
fseek(file,postx.nTxOffset,SEEK_CUR);
filetxOut;
}catch(std::exceptione){
returnerror("%s:DeserializeorI/Oerror-%s",__func__,e.what());
}
hashBlock=header.GetHash();
if(txOut.GetHash()!=hash)
returnerror("%s:txidmismatch",__func__);
returntrue;
}
}
if(fAllowSlow){//,andscanit
intnHeight=-1;
{
CCoinsViewCacheview=*pcoinsTip;
CCoinscoins;
if(view.GetCoins(hash,coins))
nHeight=coins.nHeight;
}
if(nHeight0)
pindexSlow=chainActive[nHeight];
}
}
if(pindexSlow){
CBlockblock;
if(ReadBlockFromDisk(block,pindexSlow)){
BOOST_FOREACH(constCTransactiontx,block.vtx){
if(tx.GetHash()==hash){
txOut=tx;
hashBlock=pindexSlow-GetBlockHash();
returntrue;
}
}
}
}
returnfalse;
}
pi節點區塊高度不顯示PI節點區塊高度不顯示可能是由於網路連接出現問題而導致的,建議重新檢查網路連接,重啟PI節點,以及更新PI節點軟體至最新版本,若仍無法顯示出來,可使用區塊鏈瀏覽器查看區塊高度。
怎麼樣在以太坊上查詢區塊鏈幣可以輸入錢包地址、交易ID、區塊哈希或者區塊高度等信息直接查詢,非常方便。
如果是查詢賬戶余額、賬戶的歷史交易數據等信息,建議直接輸入錢包地址查詢;如果是查詢某筆轉賬的相關信息,比如是否到賬、進展如何,輸入交易ID是最方便的。
當然了,區塊鏈瀏覽器不僅可以查詢自己的賬戶,也可以查詢別人的賬戶以及相關的交易信息,包括比特幣創始人中本聰的賬戶。
④ 挖礦真的能賺錢嗎!數據帶你看清真相……
「擁有三台挖礦機,不用去上班了!在家躺著等收錢!!!」
「3個月回本,除去電費,剩下的全是利潤。」
……
滿屏都充斥著這樣的文字,與蠱惑。
你心動過么?
懷疑過么?
想擼起袖子買一台來試試看么?
當你手攥2萬元,准備入場,卻不知該買幣好,還是挖幣好時,不妨讀讀下面這些數據。
因為,買幣和挖幣,真的沒有太大差別!!(至少,2018年的以太坊是這樣。)
如果再考慮所耗費的時間成本、電費成本、維護成本、全網算力提升,等等這些關鍵因素。那麼,挖幣將是一件非常不劃算的事情。
為什麼?
看下面的數據,你就知道了。
假設手裡有2萬元閑置資金,你是准備買幣?還是入手一台礦機來挖幣?
如果參考以太坊(eth),我們來算算2種方案各自的優劣。
方案A——買幣
假設在2018.01.10(當天eth價格為1402.47美元,摺合人民幣9011.35元),花2萬元買入2.2枚eth,即:
方案B——挖幣
假設仍以2萬元價格買入一台礦機(6塊顯卡:訊景RX570 4G戰狼版),相關參數為:
以2018.01.10當天eth難度值(difficulty value = 2005.905T)來計算,這台礦機,一天能挖出0.022枚,如下表:
★ 情形一:假設全網算力不變
如果全網算力沒有提升(即eth難度值仍為2005.905T),那麼,我們這台礦機每天都能挖出0.022枚eth:
100天後,我們收獲2.22枚eth:
如果不考慮幣價波動,此時已經收回了當初購買礦機的成本:
再用一周的時間(大約6天),之前消耗的電費也可以完全賺回來。
也就是說,在購買礦機後的第107天,除去每日電費,剩下的全是凈利潤。
這樣看來,挖礦要比直接買幣有賺頭得多。
但實際情況,真的是這樣嗎????
這樣的收益結果,是在一個非常重要的前提下運算得到的,即
「全網算力不變!!! 」
但是,全網算力真的不發生改變嗎?
下面是近3個月(2017.10.17-2018.01.16)eth的難度值增長圖:
正是由於算力提升,難度值在持續增長。
因而,我們的假設:全網算力保持不變,是不合理的。
那麼,在真實的環境下,挖礦究竟能帶來多少收益呢?
★ 情形二:全網算力逐步提升
如果全網算力每天都在提升,那麼,我們購買的礦機,每天的挖幣量,不再均衡地保持在0.022水平線上,而是逐日遞減:
上圖是在全網算力每天遞增的情況下,日挖幣量的曲線。
如果全網算力以天為單位,有時增加,有時降低,那麼,日挖幣量曲線將是波動的。
為了弱化這種日波動帶來的影響,假設全網算力每個月增長一次,難度值每個月上升25%(數據來源: etherscan.io/chart/diff...
),則每個月的挖幣量為:
即「在不考慮幣價波動,eth難度值每月增長25%的情況下,以2萬元的成本,購入一台算力為170Mh/s的礦機,全天24小時運行5個月後,即可回本」。
從數據上來看,全網算力的增長,並沒有過多的影響回本時間(僅僅多出50天):
關鍵是在收回成本後,挖礦真的能帶來更多的收益嗎?
繼續往下算,看看第6個月~第12個月能夠獲得的eth數量:
將表格中的最後1列繪製成曲線圖:
從圖中能夠看到,從第6個月開始,曲線越來越平緩,直到第12個月,近乎為一條水平線,也就是說,同樣的礦機,下半年持續挖,也只能再挖出0.63個eth。
假設電價為0.5元/度,一天消耗24度電。那麼,全年的電費約為4380元。
然而,居民用電採用階梯定價的方式,礦機持續跑一年,電價會比0.5元/度再高出0.2-0.4元不等(視地區而定),故全年因挖礦而產生的電費,大約維持在5568元左右。
總結一下,如果花2萬元入手一台算力為170MH/s、日耗電量為24度電的礦機,其成本為:
假設eth難度值每月增長25%,且礦機沒有損耗(即算力一直維持在170Mh/s),那麼,全年挖幣量為3.038枚。不同的幣價,對應的收益約為:
參照挖礦成本(2.56萬元),不同的幣價,所對應的收益-成本為:
所以,總的來說,只要幣價堅挺,挖礦是有利可圖的。
但是,其收益也僅和買幣所帶來的收益大體相同,如果考慮設備損耗以及全網算力快速提升等必然因素。那麼,挖礦所獲得的收益,實際上要小於直接買幣所能賺取的收益。
最後,附上「買幣、挖礦的成本-收益對比圖」:
⑤ 簡單的解釋一下什麼是區塊鏈
區塊鏈是一個信息技術領域的術語。從本質上講,它是一個共享資料庫,存儲於其中的數據或信息,具有「不可偽造」「全程留痕」「可以追溯」「公開透明」「集體維護」等特徵。基於這些特徵,區塊鏈技術奠定了堅實的「信任」基礎,創造了可靠的「合作」機制,具有廣闊的運用前景。
2019年1月10日,國家互聯網信息辦公室發布《區塊鏈信息服務管理規定》。2019年10月24日,在中央政治局第十八次集體學習時,習近平總書記強調,「把區塊鏈作為核心技術自主創新的重要突破口」「加快推動區塊鏈技術和產業創新發展」。「區塊鏈」已走進大眾視野,成為社會的關注焦點。
2019年12月2日,該詞入選《咬文嚼字》2019年十大流行語。
(5)以太坊修改difficulty擴展閱讀:
區塊鏈金融應用:
2016年起,各大金融巨頭們也聞風而動,紛紛開展區塊鏈創新項目,探討在各種金融場景中應用區塊鏈技術的可能性。特別是普銀集團率先開創了「區塊鏈+」本位制數字貨幣的先河。
本位制數字貨幣是資產經過第三方機構完成鑒定、評估、確權、保險等流程,經過縝密的數字演算法寫入區塊鏈,形成資產與數字貨幣之間的本位對應關系,稱之為本位制數字貨幣。
為了實現區塊鏈金融大跨越大發展,為了推動中國經濟新發展,加速全球資產流通,實現一代代人為之奮斗不已的復興夢想,普銀集團將於2016年12月9日在貴州舉行普銀區塊鏈金融貴陽戰略發布儀式;
會上將就區塊鏈實現資產的數字化流通、區塊鏈金融交易模式、並對區塊鏈服務與社會公共產業的應用落地展開探討。此次大會將標志著區塊鏈金融落地應用的開始,標志著全新金融生態的變革與發展。
⑥ 以太坊stratum協議原理
參照比特幣的 stratum協議 和 NiceHash的stratum協議規范 編寫了一版以太坊版本的stratum協議說明.
stratum協議是目前最常用的礦機和礦池之間的TCP通訊協議。
以太坊是一個去中心化的網路架構,通過安裝Mist客戶端的節點來轉發新交易和新區塊。而礦機、礦池也同時形成了另一個網路,我們稱之為礦工網路。
礦工網路分成礦機、礦池、錢包等幾個主要部分,有時礦池軟體與錢包安裝在一起,可合稱為礦池。
礦機與礦池軟體之間的通訊協議是 stratum ,而礦池軟體與錢包之間的通訊是 bitcoinrpc 介面。
stratum是 JSON 為數據格式.
礦機啟動,首先以 mining.subscribe 方法向礦池連接,用來訂閱工作。
礦池以 mining.notify 返回訂閱號、ExtraNonce1和ExtraNonce2_size。
Client:
Server:
其中:
是 訂閱號 ;
080c是 extranonce ,Extranonce可能最大3位元組;
礦機以 mining.authorize 方法,用某個帳號和密碼登錄到礦池,密碼可空,礦池返回 true 登錄成功。該方法必須是在初始化連接之後馬上進行,否則礦機得不到礦池任務。
Client:
Server:
難度調整由礦池下發給礦機,以 mining.set_difficulty 方法調整難度, params 中是難度值。
Server:
礦機會在下一個任務時採用新難度,礦池有時會馬上下發一個新任務並且把清理任務設為true,以便礦機馬上以新難度工作。
該命令由礦池定期發給礦機,當礦機以 mining.subscribe 方法登記後,礦池應該馬上以 mining.notify 返回該任務。
Server:
任務ID : bf0488aa ;
seedhash : 。每一個任務都發送一個seedhash來支持盡可能多的礦池,這可能會很快地在貨幣之間交換。
headerhash : 。
boolean cleanjobs : true 。如果設為true,那麼礦工需要清理任務隊列,並立即開始從事新提供的任務,因為所有舊的任務分享都將導致陳舊的分享錯誤。如果是 false 則等當前任務結束才開始新任務。
礦工使用seedhash識別DAG,然後帶著headerhash,extranonce和自己的minernonce尋找低於目標的share(這是由提供的難度而產生的)。
礦機找到合法share時,就以」 mining.submit 「方法向礦池提交任務。礦池返回true即提交成功,如果失敗則error中有具體原因。
Client:
任務ID : bf0488aa
minernonce : 6a909d9bbc0f 。注意minernonce是6個位元組,因為提供的extranonce是2個位元組。如果礦池提供3位元組的extranonce,那麼minernonce必須是5位元組
Server:
一般的礦機與礦池通訊過程就如下所示:
⑦ 區塊鏈分叉有什麼風險(什麼叫區塊鏈分叉)
區塊鏈為什麼有分叉?分叉會發生什麼情況?????區塊鏈的分叉(fork)的形成原因可能有多種。
????當兩個結點幾乎在同一個時間挖到了礦並同時發布區塊,此時就出現臨時性的的分叉(statefork),
????本質上是對比特幣這個區塊鏈當前的狀態產生了意見分歧,
????當人為的發起分叉攻擊(forkingattack),也就是故意造成這類分叉(deliberatefork)還有一類分叉是,當比特幣的協議發生了改變的時候,軟體需要升級。而在分布式系統中不能保證所有節點同時升級軟體,假設存在部分節點未升級,會導致協議分叉(protocolfork)。對協議修改的內容的不同,又可以將分叉分為硬分叉(hardfork)和軟分叉(softfork);
????比特幣協議增加新協議,擴展新功能,未升級軟體的舊節點會不認可這些修改,會認為這些特性是非法的。這也就是對比特幣協議內容產生分歧,從而導致的分叉叫硬分叉。此時,就出現了新節點永遠沿著新節點產生的鏈挖礦,舊節點永遠沿著舊節點鏈挖礦,由於新節點算力足夠強,所以形成兩條永遠都在延伸且平行的鏈。只要這部分舊節點永遠不更新,則舊鏈將一直延續,可見這種分叉是持久性的。
出現hardfork後,便變成了兩條平行的鏈,也就造成了社區分裂。社區中有一部分人,會認為下面的鏈才是根正苗紅,各個鏈上的貨幣獨立。以太坊歷史上的一件大事就是硬分叉事件。以太坊稱為ETH,但目前看到的ETH已經不是最初的ETH了,以太坊在歷史上發生過硬分叉,另一個鏈稱為ETC。實際上,ETC才是以太坊設計原本的協議,而ETH是黑客攻擊ETH上一個智能合約THEDAO後,進行回滾的協議鏈(將黑客攻擊偷取的以太幣採用硬分叉方式回滾回到另一智能合約,然後退還給真正擁有者)。
????分叉之初,由於兩個鏈分叉造成了互相影響,產生了很多麻煩。比如:在ETH鏈上有一筆轉賬B-C,有人便在ETC鏈上回放,將ETC鏈上的貨幣頁轉給了C(C收到兩筆錢)。後來,對兩條鏈各添加了一個chainID,將兩個鏈區分開,才使得這兩條鏈真正分開。
如果對BTC協議添加限制,使得原本合法交易在新交易中不合法,便會形成軟分叉。
當大多數節點已經更新完畢之後,舊節點認可新節點挖出的區塊,因此發布自己挖出的區塊,但新節點不認可舊結點挖出的區塊,便沿著上一個新節點發布的區塊繼續挖礦,當新節點擁有大部分算力的時候,新鏈會越來越長,從而舊節點挖出並發布的區塊一直被拋棄,無法獲得出塊獎勵,最終倒逼舊節點升級軟體,實現所有節點認可新協議並進行升級。可見,只要系統中擁有半數以上算力節點更新軟體,此類分叉不會出現永久性分叉。比特幣腳本中的P2SH就是通過軟分叉方法加進去的。
?
????這一部分我並沒有查到太多的資料,但是在絕大多數共識協議之中我們都假設需要過半算力;
????在理論上,如果掌握了50%以上的算力,就擁有了獲得記賬權的絕對優勢,可以更快地生成區塊,也擁有了篡改區塊鏈數據的權利。因此,當具有過半的算力,也就是51%都是誠實可靠的,能保證整一個區塊鏈在合法有序的進行運行。
????但是為什麼選擇過半的算力,而不是過半的用戶?比特幣系統,任何人都可以加入,且創建賬戶及其簡單,只需要本地產生公私鑰對即可。只有轉賬(交易)時候,比特幣系統才能知道該賬戶的存在。這樣,黑客可以使用計算機專門生成大量公私鑰對,當其產生大量公私鑰對超過系統中一半數目,就可以獲得支配地位(女巫攻擊)。因此,比特幣系統中很巧妙的使用算力作為投票的依據。
到底啥是區塊鏈分叉?
分叉,是區塊鏈世界中一個神奇的名詞。區塊鏈網路從此一分為二,不同共識的人們從此分道揚鑣。這究竟是一次動盪的分裂,還是一次新的共識的形成?
區塊鏈的分叉,可以說是區塊鏈網路中獨有的一種版本升級方式,就像我們生活中使用的互聯網軟體一樣,使用了一段時間以後,自然而然就需要進行優化升級,從而去解決一些用戶的使用問題。區塊鏈也是這樣,只不過它的升級比較特別,升級的時候會由參與的礦工共同來決定,甚至還能產生多種版本,不像互聯網一樣一家獨裁、沒有選擇的餘地。
它的原理是這樣的,由於區塊鏈是一個由數據塊組成的鏈式結構。所以,當他要升級的時候,實際上會從某一個數據塊開始,連到兩個不同的數據塊上,從而分成了兩條鏈;就好像樹枝一樣,大家共用同一個樹干,共享會分開前的數據,但是又有很多條樹枝屬於多條鏈,而這個過程就叫做分叉。
之前我們也說了,區塊鏈的升級是由礦工們一起來決定,既然參與的人多了,就會有不同的意見,當大家能達成共識的時候,分叉出來的兩條鏈相當於一個是老的版本,一個是新的版本,兩者兼容;老鏈上的礦工升級後,逐漸向新鏈過渡,最終大家升級完成只剩新鏈,這叫做軟分叉。具體來說軟分叉屬於系統內的短暫現象,並不會分叉出一個新的區塊鏈。區塊鏈系統升級,一部分節點並哪怕沒有及時升級,也仍舊可以工作。比特幣軟分叉之後不會像硬分叉一樣產生兩條鏈,而是還會保持在一條鏈上,軟分叉會進行一些升級,但是不會影響整個系統的穩定性和有效性,舊節點會兼容新節點,只是新節點不兼容舊節點而已,二者依然可以共存在一條鏈上。
當礦工們不能達成共識的時候,大家雖然共用之前的數據,但是形成了兩條新的鏈,就好比物種進化一樣,一部分猴子進化成了人類,另一部分進化成了猩猩,兩種物種都發生了改變,互不兼容,這叫做硬分叉。也就是說區塊鏈發生永久性分歧,在新共識規則發布後,部分沒有升級的節點無法驗證已經升級的節點生產的區塊,通常硬分叉就會發生。代碼出現一個硬分叉,會改變演算法的難度級別。
實質意義上的分叉之所以產生,是因為項目在動態發展過程中原社區內部理念產生了不可調和的分歧。區塊鏈背後的社區作為去中心化組織,主張非暴力自由人的自由聯合,這意味著在向未知的將來邁進的過程中,當遇到的新問題超出了原有既定游戲規則之時,分歧一旦產生將很難達成一致,這是由區塊鏈基因里去中心化的屬性決定的。
區塊鏈技術的發展還處於很初期的狀態,分叉對於區塊鏈來說,就相當於一個技術迭代的過程,隨著人們不斷發現區塊鏈技術現有的限制,只有不斷升級和擴展這項技術,才能讓區塊鏈技術走向成熟。當然,這種分叉跟區塊鏈不可篡改的特性正在背道而馳,但沒有天生完美的技術,區塊鏈也不例外,技術的發展如果在發生錯誤時都不可控,那這種技術就無法做到普世,人們對它的信任度也無法提升。且分叉的結果是由社區成員投票決定的,某種程度上來說依舊遵守著去中心化的原則。
人們對區塊鏈分叉各執己見,但在區塊鏈發展的歷史進程里,分叉無疑讓區塊鏈變得更有故事性和可能性了。總的來說,分叉這種升級方式雖然麻煩很多。但是,他卻給了每個人更多選擇的權利。也許,區塊鏈就在這樣的求同存異之中孕更多的可能性。
區塊鏈鼻祖比特幣之8:分叉帶來的雙花支付、51%攻擊與解決辦法分叉
前面講到了比特幣通過區塊鏈+工作量證明的獨特設計來解決了時間順序,但是不能保證在同一時刻有兩個節點算出了正確的解,雖然這種可能性很低很低。這就帶來了區塊的分叉。
雖然說幾乎同時有兩個節點計算出這一數學問題的可能性微乎其微,但是仍然存在這樣的可能性,所以分叉就以為著同一個區塊的後面可能會跟上兩個不同的區塊。
規則的打破一直要到下一個區塊被人解開。則會立即轉向最長的區塊,而那些短的區塊則會被拋棄。數學問題使得區塊很難被同時拆解。要連續發生多次更是困難。最終區塊鏈會穩定下來。也就是說所有人對最後幾個區塊順序達成共識。分叉意味著,譬如,若你的交易出現在較短的支鏈,它就會失去進入區塊鏈的位置。一般而言,只代表他會回到未確認交易池。然後被納入到下一個區塊。
比特幣網路如何解決分叉帶來的雙花支付
可惜,交易失去區塊位置的潛在可能,給了本來定序系統防範的重復支付攻擊機會。考慮下面的一個攻擊者A,其首先用自己的比特幣交換B節點的貨物,其立即又支付給自己。然後其通過努力的製造更長的鏈條來讓自己的支付替代掉B節點的支付,從而實現了雙重支付,B節點既得不到錢,還失去了貨物。
這時交易會退回到未確認池中,因為A節點已經利用參照同樣的input交易取而代之。節點就會認為Bob的交易無效。因為已使用掉。
你可能會猜測A節點會預先的計算出一支區塊鏈,然後抓住時機發布到網路。但是每個區塊的數學謎題阻擋了這個可能性。如前面所訴,解開區塊是猜測出一個隨機數的過程。一旦得出答案,解出的哈希值就會成為指紋一樣的區塊識別。只要區塊內容有一丁點變化,下一個區塊的參考值就會完全不同。此機制的結果就是無法在區塊鏈中置換區塊。在得到前一個區塊之前,下位區塊無法被解開。前一個區塊的指紋也是雜湊函數的引數之一。
同時,該工作量證明機制還解決了在集體投票表決時,誰是大多數的問題。如果決定大多數的方式是基於IP地址的,一IP地址一票,那麼如果有人擁有分配大量IP地址的權力,則該機制就被破壞了。而工作量證明機制的本質則是一CPU一票。「大多數」的決定表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那麼誠實的鏈條將以最快的速度延長,並超越其他的競爭鏈條。如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之後所有區塊的工作量,並最終趕上和超越誠實節點的工作量。我們將證明,設想一個較慢的攻擊者試圖趕上隨後的區塊,那麼其成功概率將呈指數化遞減。另一個問題是,硬體的運算速度在高速增長,而節點參與網路的程度則會有所起伏。為了解決這個問題,工作量證明的難度(theproof-of-workdifficulty)將採用移動平均目標的方法來確定,即令難度指向令每小時生成區塊的速度為某一個預定的平均數。如果區塊生成的速度過快,那麼難度就會提高。
如果有一台超級電腦,能夠在區塊解題中獲勝?
即便是一台超級電腦,或者時幾百上千台電腦也很難贏得解一個區塊的勝利,因為競爭對手不是任一台電腦,而是整個比特幣網路。你可以用買彩票來比擬。操作千百台電腦,如同買了千百張彩票一樣。
51%攻擊是指的什麼
根據前面的例子,我們知道,要想有50%的概率領先其他人解題得到勝利,就需要掌握全網50%以上的算力。要連續領先他人解出區塊,掌握的運算能力還需要高得多。所以區塊鏈中的交易是受到數學競賽所保護。惡意用戶必須和整個網路較量。區塊連接建立的結果,使得在支鏈越前方的交易越安全。惡意的用戶必須在更長的時間贏過全網路,來達成重復支付,替換前面的區塊鏈。所以,系統只有支端末尾易受到重復支付攻擊。這也是為什麼系統建議多等幾個區塊,才能確認收款成功。
個人博客:
區塊鏈交易有哪些風險進行區塊鏈交易時,3個最需要注意的災難性的風險是(嚴重性從高到低排序):個人風險、平台風險和政策風險最大風險:個人風險如果沒有把控好個人風險,可能會遇到:1.密碼,私鑰被盜,錢包和交易平台里的所有數字資產丟失(無法找回)2.你的信息會被地下黑產賣來賣去,幾乎沒有隱私3.如果你在其他地方(銀行,證券交易平台)使用相同或類似的密碼,其他地方的資產也會被盜如何規避個人風險:增加密碼強度,不要重復使用密碼,不要在網上發送密碼…電腦不要裸奔(不裝安全殺毒軟體),不要上亂七八糟的網站(「黃賭毒」的網站是木馬病毒的重災區)所有需要
區塊鏈面臨哪些風險需要解決的?雖然在資本和人才湧入的推動下,區塊鏈行業迎來快速發展,但是作為一個新興產業,其安全漏洞頻繁示警的狀況引發了人們對區塊鏈風險的擔憂。
國家信息技術安全研究中心主任俞克群指出,對於隱私暴露、數據泄露、信息篡改、網路詐騙等問題,區塊鏈的出現給人們帶來了很多期望。但區塊鏈的安全問題依然存在諸多的挑戰。
俞克群表示,目前區塊鏈還處在初級階段,存在著密碼演算法的安全性、協議安全性、使用安全性、系統安全性等諸多的挑戰。
國家互聯網應急中心運行部主任嚴寒冰也指出,區塊鏈如果要在全球經濟佔有重要地位,必須首先解決其面臨的安全問題。
嚴寒冰指出,區塊鏈安全問題包含多個方面。比如說傳統的安全問題,包括私鑰的保護,包括應用層軟體傳統的漏洞等。另外,新的協議層面也有一些新的協議帶來的漏洞。
去中心化漏洞平台(DVP)提供的數據也顯示區塊鏈安全問題的嚴峻性。DVP負責人吳家志透露,自7月24日來的一周內,DVP就已經收到白帽子所提供的312個漏洞,涉及175個項目方。其中包括智能合約、知名公鏈,交易所等一系列項目。高危漏洞達122個,占所有漏洞的39.1%,中危漏洞53個,占所有漏洞的17%。
中國信息安全測評中心主任助理李斌分析說,當前區塊鏈分為公有鏈、私有鏈、聯盟鏈三種,無論哪一類在演算法、協議、使用、時限和系統等多個方面都面臨安全挑戰。尤為關鍵的是,目前區塊鏈還面臨的是51%的攻擊問題,即節點通過掌握全網超過51%的算例就有能力成功的篡改和偽造區塊鏈數據。
值得注意的是,除了外部惡意攻擊風險,區塊鏈也面臨其內生風險的威脅。俞克群提醒說,如何圍繞著整個區塊鏈的應用系統的設備、數據、應用、加密、認證以及許可權等等方面構築一個完整的安全應用體系,是各方必須要面臨的重要問題。
吳家志也分析說,作為新興產業,區塊鏈產業的從業人員安全意識較為缺乏,導致目前的區塊鏈相關軟硬體的安全系數不高,存在大量的安全漏洞,此外,整個區塊鏈生態環節眾多,相較之下,相關的安全從業人員力量分散,難以形成合力來解決問題。迎接上述挑戰需要系統化的解決方案。
內容來源中新網
⑧ 浠ュお鍧婃寲鐭跨殑闅懼害璋冩暣鏄鎬庝箞鏍風殑
浠ュお鍧婃寲鐭跨殑闅懼害璋冩暣鏄鎬庢牱鐨勶紵
浠ュお鍧婃寲鐭跨殑闅懼害璋冩暣鏄鎬庢牱鐨勶紵
浠ュお鍧婁綔涓轟竴縐嶈櫄鎷熻揣甯侊紝鍏跺畨鍏ㄦт笌鍙闈犳ф湁璧栦簬鎸佺畫鐨勬寲鐭挎椿鍔ㄣ傜劧鑰岋紝闅忕潃鎸栫熆浜烘暟鐨勫炲姞錛屽叾闅懼害閫愭笎澧炲姞錛屼嬌寰楁寲鐭垮彉寰楄秺鏉ヨ秺鍥伴毦銆傚洜姝わ紝浠ュお鍧婇噰鍙栦簡涓縐嶅彨鍋氬姩鎬侀毦搴︾殑鎶鏈錛岄氳繃瀹氭湡璋冩暣闅懼害鏉ョ『淇濇寲鐭跨殑鍏姝e拰紼沖畾銆
鍔ㄦ佽皟鏁撮毦搴︾殑鑳屾櫙鍜屾剰涔
浼犵粺鐨勬寲鐭挎祦紼嬮氬父閲囩敤鍥哄畾闅懼害鐨勬寲鐭挎柟娉曪紝鍗沖湪涓孌墊椂闂村唴淇濇寔涓嶅彉鐨勬寲鐭塊毦搴︺傜劧鑰岋紝榪欑嶆柟娉曞湪鎸栫熆浜烘暟杈冨皯鐨勬儏鍐典笅鏄鏈夋晥鐨勶紝浣嗛殢鐫瓚婃潵瓚婂氱殑浜哄弬涓庢寲鐭挎椿鍔錛岃繖縐嶆柟娉曠殑灞闄愭у紑濮嬫樉鐜般傚傛灉闅懼害璁劇疆榪囬珮錛屾墍鏈夊弬涓庢寲鐭跨殑浜洪兘鍙鑳藉け璐ワ紱濡傛灉闅懼害璁劇疆榪囦綆錛屽彧鏈変竴灝忛儴鍒嗘寲鐭跨殑浜鴻兘澶熸垚鍔燂紝鑰屽叾浠栦漢鐨勬敹鐩婁細鐩稿簲鍑忓皯銆
鍥犳わ紝涓轟簡瑙e喅榪欎釜闂棰橈紝浠ュお鍧婇噰鍙栦簡涓縐嶅姩鎬佽皟鏁撮毦搴︾殑鏂規硶錛屽嵆瀹氭湡鏇存敼鎸栫熆闅懼害銆
鍔ㄦ侀毦搴﹁皟鏁寸殑宸ヤ綔鍘熺悊
鍔ㄦ侀毦搴﹁皟鏁寸殑涓昏佸師鐞嗘槸錛屾牴鎹鐗瑰畾鐨勮勫垯鏉ヨ$畻鍑轟笂涓孌墊椂闂村唴鐨勬寲鐭挎垚鍔熺巼錛屽苟鎹姝よ皟鏁翠笅涓孌墊椂闂寸殑鎸栫熆闅懼害銆
鏇村叿浣撳湴璇達紝浠ュお鍧婇噰鐢ㄤ簡涓縐嶅彨鍋欵thereumDifficultyBomb錛堜互澶鍧婇毦搴︾偢寮癸級鐨勬妧鏈銆傝繖欏規妧鏈浣跨敤涓涓鎵璋撶殑闅懼害緋繪暟鏉ヨ〃紺烘寲鐭跨殑闅懼害銆傛瘡褰撲竴孌墊椂闂寸粨鏉熸椂錛堥氬父涓15縐掞級錛屼互澶鍧婁細灝嗗綋鍓嶇殑闅懼害緋繪暟涓庣洰鏍囬毦搴︾郴鏁拌繘琛屾瘮杈冦傚傛灉褰撳墠闅懼害緋繪暟楂樹簬鐩鏍囬毦搴︾郴鏁幫紝鍒欎細鑷鍔ㄨ皟鏁翠笅涓涓鍛ㄦ湡鐨勭洰鏍囬毦搴︾郴鏁幫紝浣垮叾鏇村姞鎺ヨ繎褰撳墠闅懼害緋繪暟銆
榪欑嶉毦搴﹁皟鏁存柟娉曚嬌寰楁寲鐭誇漢浠鑳藉熷湪鐩稿圭ǔ瀹氱殑闅懼害涓嬫寔緇鎸栫熆錛岃岄毦搴︾殑璋冩暣涔熻兘鏇村ソ鍦伴傚簲甯傚満闇瑕佸拰鑷鐒跺洜緔犵殑鍙樺寲錛屼繚璇佷簡鏁翠釜浠ュお鍧婄綉緇滅殑紼沖畾鍜屽畨鍏ㄣ
鎬葷粨
鍔ㄦ佽皟鏁撮毦搴︽槸浠ュお鍧婃寲鐭跨殑涓欏瑰叧閿鎶鏈錛岃兘澶熺『淇濇寲鐭跨殑鍏騫蟲у拰紼沖畾鎬с傞氳繃鍛ㄦ湡鎬у湴璋冩暣闅懼害緋繪暟錛屼互澶鍧婅兘澶熸洿濂藉湴閫傚簲甯傚満闇奼傚拰鑷鐒跺洜緔犵殑褰卞搷錛屼粠鑰屼繚璇佹寲鐭誇漢鑳藉湪杈冧負騫崇ǔ鐨勯毦搴︿笅鎸佺畫鎸栫熆銆
⑨ 區塊鏈如何查詢區塊高度(區塊鏈怎麼查地址)
區塊高度是指區塊鏈的容量嗎?答:一、區塊高度不是指區塊鏈的容量。
二、區塊高度的內涵
區塊高度是區塊鏈接在主鏈的個數,也就是連接在區塊鏈上的塊數。
三、區塊高度的作用
1、區塊高度是區塊的標示符。
2、區塊有兩個標示符,一是區塊頭的哈希值,二是區塊高度。
3、區塊頭的哈希值是通過SHA256演算法對區塊頭進行二次哈希計算而得到的數字。
區塊哈希值可以唯一、明確地標識一個區塊,並且任何節點通過簡單地對區塊頭進行哈希計算都可以獨立地獲取該區塊哈希值。
4、區塊高度是指該區塊在區塊鏈中的位置。
區塊高度並不是唯一的標識符。
怎麼樣在以太坊上查詢區塊鏈幣
可以輸入錢包地址、交易ID、區塊哈希或者區塊高度等信息直接查詢,非常方便。
如果是查詢賬戶余額、賬戶的歷史交易數據等信息,建議直接輸入錢包地址查詢;如果是查詢某筆轉賬的相關信息,比如是否到賬、進展如何,輸入交易ID是最方便的。
當然了,區塊鏈瀏覽器不僅可以查詢自己的賬戶,也可以查詢別人的賬戶以及相關的交易信息,包括比特幣創始人中本聰的賬戶。
區塊高度越高說明什麼區塊高度(Blockheight)是指一個區塊的高度是指在區塊鏈中它和創世區塊之間的塊數。區塊高度是可以通過該區塊在區塊鏈中的位置識別區塊的另一種方式。第一個區塊,其高度為0,每一個隨後被存儲在第一個區塊之上的區塊在區塊鏈中都比前一區塊「高」出一個位置,就像箱子一個接一個堆疊在其他箱子之上。
和區塊頭哈希值不同的是,區塊高度並不是唯一的標識符,在區塊鏈的增長過程中可能會出現兩個或兩個以上的區塊有同樣的高度,這種情況叫做「區塊鏈分叉」。
區塊鏈是blockchain翻譯而來的,看見「鏈」人們聯想到的是長長的鏈條,它有長度的概念。但在區塊鏈中,並不叫區塊長度,而是區塊高度,你可以把區塊鏈理解為區塊堆。
創世區塊,即第0塊,位於最底層,然後每一塊都疊在前一塊之上,這樣就比較好理解區塊高度了。我們查詢某個區塊信息時,除了通過它的哈希,還可以通過它的區塊高度進行查詢。
區塊高度的作用
區塊高度是區塊的標示符,區塊有兩個標示符,一是區塊頭的哈希值,二是區塊高度。區塊頭的哈希值是通過SHA256演算法對區塊頭進行二次哈希計算而得到的數字。區塊哈希值可以唯一、明確地「標識」一個區塊,並且任何節點通過簡單地對區塊頭進行哈希計算都可以獨立地獲取該區塊哈希值。區塊高度是指該區塊在區塊鏈中的位置。區塊高度並不是唯一的「標識」符。雖然一個單一的區塊總是會有一個明確的、固定的區塊高度,但反過來卻並不成立,一個區塊高度並不總是識別一個單一的區塊。兩個或兩個以上的區塊可能有相同的區塊高度,在區塊鏈里爭奪同一位置。
怎樣通過RPC命令實現區塊鏈的查詢基本架構如下:
前端web基於socket.io或者REST實現,
後端加一層mongodb/mysql等資料庫來代替單機leveldb做數據存儲
目的應該是:
1.加速查詢
2.做更高層的數據分析
3.做分布式資料庫
思考:
這些online的查詢固然可以方便我們的日常用,那如何與相關應用集成呢?我們是否可以通過簡單的rpc命令實現同等的效果?
有幾個用處:
1.大家都可以做自己的qukuai.com或blockchain.info的查詢:)
2.集成RPC命令到自己的店鋪,收款後查詢用
3.集成到錢包應用
4.其他應用場景
cmd分析:
根據高度height查blockhash
./bitcoin-cligetblockhash19999
2.然後根據blockhash查block信息
./bitcoin-cligetblock
{
"hash":"",
"confirmations":263032,
"size":215,
"height":19999,
"version":1,
"merkleroot":"",
"tx":[
""
],
"time":1248291140,
"nonce":1085206531,
"bits":"1d00ffff",
"difficulty":1.00000000,
"chainwork":"",
"previousblockhash":"",
"nextblockhash":""
}
3.根據tx查詢單筆交易的信息:
沒建index時,只能查詢自己錢包的信息,若不是錢包的交易,則返回如下:
./bitcoin-cligetrawtransaction
error:{"code":-5,"message":"Invalidornon-wallettransactionid"}
那怎麼辦呢?直接分析代碼找原因:
//Returntransactionintx,andifitwasfoundinsideablock,itshashisplacedinhashBlock
boolGetTransaction(constuint256hash,CTransactiontxOut,uint256hashBlock,boolfAllowSlow)
{
CBlockIndex*pindexSlow=NULL;
{
LOCK(cs_main);
{
if(mempool.lookup(hash,txOut))
{
returntrue;
}
}
if(fTxIndex){
CDiskTxPospostx;
if(pblocktree-ReadTxIndex(hash,postx)){
CAutoFilefile(OpenBlockFile(postx,true),SER_DISK,CLIENT_VERSION);
CBlockHeaderheader;
try{
fileheader;
fseek(file,postx.nTxOffset,SEEK_CUR);
filetxOut;
}catch(std::exceptione){
returnerror("%s:DeserializeorI/Oerror-%s",__func__,e.what());
}
hashBlock=header.GetHash();
if(txOut.GetHash()!=hash)
returnerror("%s:txidmismatch",__func__);
returntrue;
}
}
if(fAllowSlow){//,andscanit
intnHeight=-1;
{
CCoinsViewCacheview=*pcoinsTip;
CCoinscoins;
if(view.GetCoins(hash,coins))
nHeight=coins.nHeight;
}
if(nHeight0)
pindexSlow=chainActive[nHeight];
}
}
if(pindexSlow){
CBlockblock;
if(ReadBlockFromDisk(block,pindexSlow)){
BOOST_FOREACH(constCTransactiontx,block.vtx){
if(tx.GetHash()==hash){
txOut=tx;
hashBlock=pindexSlow-GetBlockHash();
returntrue;
}
}
}
}
returnfalse;
}