比特幣的merkle樹
❶ 比特幣挖礦一定要用計算機嚒我們為什麼不能用紙和筆來計算呢
比特幣其實是一個毫無用處的一串數字,但是被大家公認為有用,它就像鑽石、古董、字畫、游戲皮膚等被賦予了價值。既不能吃,也不能用,但我們還是會認可它們的價值。
「挖礦」僅僅只是讓更多的人參與進區塊鏈網路的建設中來,這么多的電費用來「計算」一串虛擬的數值這樣真的好嗎?比特幣並不是一個保值的東西,價格浮動較大,炒比特幣可能一夜暴富,也可能一夜變成窮光蛋。比特幣也並非宣稱那樣安全,2014年全球最大的比特幣交易網站MtGox被黑客入侵導致破產,價值4.67億美元的比特幣瞬間蒸發。犯罪分子用它來洗錢、逃稅等等,政府想去調查也是相當困難的一件事。以上個人淺見,歡迎批評指正。認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!
❷ 什麼是Merkle Tree
什麼是Merkle Tree
Merkle Tree,是一種樹(數據結構中所說的樹),網上大都稱為Merkle Hash Tree,這是因為 它所構造的Merkle Tree的所有節點都是Hash值。Merkle Tree具有以下特點:
1. 它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結構的所有特點;
2. Merkle樹的葉子節點上的value,是由你指定的,這主要看你的設計了,如Merkle Hash Tree會將數據的Hash值作為葉子節點的值;
3 非葉子節點的value是根據它下面所有的葉子節點值,然後按照一定的演算法計算而得出的。如Merkle Hash Tree的非葉子節點value的計算方法是將該節點的所有子節點進行組合,然後對組合結果進行hash計算所得出的hash value。
❸ 比特幣如何算
比特幣計算需要以下參數:
1、block的版本 version
2、上一個block的hash值: prev_hash
3、需要寫入的交易記錄的hash樹的值: merkle_root
4、更新時間: ntime
5、當前難度: nbits
挖礦的過程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范圍是0~2^32, TARGET可以根據當前難度求出的。除了x之外,還可以嘗試改動merkle_root和ntime。由於hash的特性,找這樣一個x只能暴力搜索。
一旦計算者A找到了x,就可以廣播一個新的block,其他客戶端會驗證計算者A發布的block是否合法。
如果發布的block被接受,由於每個block中的第一筆交易必須是將新產生25個比特幣發送到某個地址,當然計算者A會把這個地址設為計算者A所擁有的地址來得到這25個比特幣。
❹ 關於比特幣以及相關數字貨幣的幾個嚴重疑問
block的版本 version
上一個block的hash值: prev_hash
需要寫入的交易記錄的hash樹的值: merkle_root
更新時間: ntime
當前難度: nbits
挖礦的過程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范圍是0~2^32, TARGET可以根據當前難度求出的。除了x之外,你還可以嘗試改動merkle_root和ntime。由於hash的特性,找這樣一個x只能暴力搜索。
一旦你找到了x,你就可以廣播一個新的block,其他客戶端會驗證你的block是否合法。如果你的block被接受,由於每個block中的第一筆交易必須是將新產生25個比特幣發送到某個地址,當然你會把這個地址設為你所擁有的地址來得到這25個比特幣。
---------------------------------------------------------------
比特幣從開始到現在的每一筆交易記錄都保存在網路上,整個比特幣網路維護的一個巨大的交易記錄文件(現在大約12G)。 這個文件的更新周期平均是10分鍾,新加入的交易記錄叫做一個block,而這個碩大的文件由一串block組成,叫做block chain.
為什麼是25個比特幣?
這是規定。最初是50個比特幣,每產生剩下比特幣的一半,這個所得就會減半,這樣最終能產生的比特幣總量趨近於2100萬。如果你現在仍然聲稱挖到了50個比特幣,這是不會被其他客戶端接受的,這個block就算白挖了。
怎麼保證更新周期平均是10分鍾?
TARGET越小,解出x的難度就越大,每產生2016個block(約14天),網路會根據這段時間產生新block的平均間隔調整之後的TARGET。
是不是計算速度最快的人總是先解出來?
不是。你總是想把挖礦所得據為己有,所以每個人在計算時,發送挖礦所得的地址是不一樣的,這樣merkle_root就不同,也就是說每個人是從不同的初始狀態開始求解的。
同時解出來怎麼辦?
block chain會出現分叉,部分客戶端接受了A,部分接受了B,直到某個分支變得更長,所有人就會選擇這個更長的分支。如果你挖出來的不幸沒有被選中,你的挖礦所得就無效了。
既然選更長的分支,那我用很低的難度去求解怎麼辦?
客戶端在眾多分支中找到符合當前難度且最長的。
這些計算浪費了嗎?
如果你要把一筆錢花兩次,你需要這么做。挖到一個新的block,但是藏著不廣播,並繼續挖礦。找到商家A,支付比特幣,讓網路上的其他人挖到block並寫入這筆交易記錄。找到商家B,支付比特幣,寫入自己挖的block。如果你能搶先挖到兩個block並廣播出去,所有人會以你這個更長的分支為當前的block chain,商家A收到的比特幣就不被承認了。這樣攻擊成功的概率取決於你計算hash的速度。整個網路的計算力足夠高的話,這樣的攻擊或者成功率極低,或者成本極大。
❺ 什麼是默克爾樹
默克爾樹(Merkle tree)是一種哈希二叉樹,1979年由Ralph Merkle發明,將數據存儲在樹狀結構的葉子節點中,並通過對數據的逐級哈希(Hash)操作確保數據的不可篡改性。葉子節點數據的任何變動,都會傳遞到上一級節點並最終反應到樹根的變化。比特幣區塊裡面的每一筆交易就是通過默克爾樹結構進行存儲的。
❻ 比特幣錢包
比特幣(bitcoin)誕生於2008年的一篇論文。
一個署名為中本聰的人,提出了革命性的構想:讓我們創造一種不受政府或其他任何人控制的貨幣!這個想法堪稱瘋狂:一串數字,背後沒有任何資產支持,也沒有任何人負責,你把它當作錢付給對方,怎麼會有人願意接受?
Merkle tree
跟二叉樹長得很像,只是這個是下面兩個節點取哈希值得到上面節點。只需要記住根節點,就可以檢測整棵樹有沒有被篡改。
根哈希值存在block header里,交易過程存在block body里。全節點包括block header和block body,但是輕節點(比如手機上比特幣錢包)只包括block header。這棵樹可以證明包含某個交易已經被寫進了區塊鏈。
3.共識協議
去中心化的貨幣要注意的兩個問題:
1.誰能發行數字貨幣:挖礦。
2.怎麼驗證交易的合法性:區塊鏈。
雙花攻擊(double spending attack)
雙花攻擊是數字貨幣的一個主要挑戰。
比特幣中的交易都要有輸入和輸出,幣從哪來,花到哪去。
正常情況也可能有兩個分叉,因為兩個節點同時獲得記賬權,兩個節點打包的區塊,同時計算出了那個隨機數。此時會暫時兩個分叉共存,直到其中某一個區塊搶先找到了下一個區塊,這條就成了最長合法鏈,另一個分叉就被丟棄。
女巫攻擊(sybil attack)
某惡意節點不停產生賬戶,賬戶總數超過總賬戶的一半,則取得了區塊鏈的控制權。
比特幣中的共識協議(Consensus)
一些節點是有惡意的,大部分節點是好的。
想法1:把一些交易打包到區塊里作為候選區塊,讓每個區塊投票,如果通過就寫入區塊鏈。
不行,因為有的惡意節點一直發布一些含有惡意交易的區塊,則一直投票,佔用資源。而且有的節點不投票。
想法2:不按賬戶個數投票,而是按照計算力投票。每個節點都可以產生合法交易放入區塊,這些節點就開始試隨機數,直到找到H(block header)≤ target,則這個節點有記賬權。
唯一產生比特幣的途徑
coinbase transaction。這個不用指出幣的來源,有了記賬權的節點(找到了隨機數)會有出塊獎勵。
50BTC->25BTC->12.5BTC,每21萬個比特幣,獎勵就減半。
比特幣爭奪記賬權的過程叫挖礦。爭奪記賬權的節點叫礦工。
❼ 比特幣如何算出來的
要想了解bitcoin的技術原理,首先需要了解兩個重要的密碼技術: HASH碼:將一個長字元串轉換成固定長度的字元串,並且其轉換不可逆,即不太可能從HASH碼猜出原字元串。bitcoin協議里使用的主要是SHA256。
公鑰體系:對應一個公鑰和私鑰,在應用中自己保留私鑰,並公開公鑰。當甲向乙傳遞信息時,可使用甲的私鑰加密信息,乙可用甲的公鑰進行解密,這樣可確保第三方無法冒充甲發送信息;同時,甲向乙傳遞信息時,用乙的公鑰加密後發給乙,乙再用自己的私鑰進行解密,這樣可確保第三者無法偷聽兩人之間的通信。最常見的公鑰體系為RSA,但bitcoin協議里使用的是lliptic Curve Digital Signature Algorithm。 和現金、銀行賬戶的區別? bitcoin為電子貨幣,單位為BTC。在這篇文章里也用來指代整個bitcoin系統。 和在銀行開立賬戶一樣,bitcoin里的對應概念為地址。每個人都可以有1個或若干個bitcoin地址,該地址用來付賬和收錢。每個地址都是一串以1開頭的字元串,比如我有兩個bitcoin賬戶,和。一個bitcoin賬戶由一對公鑰和私鑰唯一確定,要保存賬戶,只需要保存好私鑰文件即可。 和銀行賬戶不一樣的地方在於,銀行會保存所有的交易記錄和維護各個賬戶的賬面余額,而bitcoin的交易記錄則由整個P2P網路通過事先約定的協議共同維護。 我的賬戶地址里到底有多少錢? 雖然使用bitcoin的軟體可以看到當前賬戶的余額,但和銀行不一樣,並沒有一個地方維護每個地址的賬面余額。它只能通過所有歷史交易記錄去實時推算賬戶余額。 我如何付賬? 當我從地址A向對方的地址B付賬時,付賬額為e,此時雙方將向各個網路節點公告交易信息,告訴地址A向地址B付賬,付賬額為e。為了防止有第三方偽造該交易信息,該交易信息將使用地址A的私鑰進行加密,此時接受到該交易信息的網路節點可以使用地址A的公鑰進行驗證該交易信息的確由A發出。當然交易軟體會幫我們做這些事情,我們只需要在軟體中輸入相關參數即可。 網路節點後收到交易信息後會做什麼? 這個是整個bitcoin系統里最重要的部分,需要詳細闡述。為了簡單起見,這里只使用目前已經實現的bitcoin協議,在當前版本中,每個網路節點都會通過同步保存所有的交易信息。 歷史上發生過的所有交易信息分為兩類,一類為"驗證過"的交易信息,即已經被驗證過的交易信息,它保存在一連串的「blocks」裡面。每個"block"的信息為前一個"bock"的ID(每個block的ID為該block的HASH碼的HASH碼)和新增的交易信息(參見一個實際的block)。另外一類指那些還"未驗證"的交易信息,上面剛剛付賬的交易信息就屬於此類。 當一個網路節點接收到新的未驗證的交易信息之後(可能不止一條),由於該節點保存了歷史上所有的交易信息,它可以推算中在當時每個地址的賬面余額,從而可以推算出該交易信息是否有效,即付款的賬戶里是否有足夠余額。在剔除掉無效的交易信息後,它首先取出最後一個"block"的ID,然後將這些未驗證的交易信息和該ID組合在一起,再加上一個驗證碼,形成一個新的「block」。 上面構建一個新的block需要大量的計算工作,因為它需要計算驗證碼,使得上面的組合成為一個block,即該block的HASH碼的HASH碼的前若干位為1。目前需要前13位為1(大致如此,不確定具體方式),此意味著如果通過枚舉法生成block的話,平均枚舉次數為16^13次。使用CPU資源生成block被稱為「挖金礦」,因為生產該block將得到一定的獎勵,該獎勵信息已經被包含在這個block裡面。 當一個網路節點生成一個新的block時,它將廣播給其它的網路節點。但這個網路block並不一定會被網路接受,因為有可能有別的網路節點更早生產出了block,只有最早產生的那個block或者後續block最多的那個block有效,其餘block不再作為下一個block的初始block。 對方如何確認支付成功? 當該筆支付信息分發到網路節點後,網路節點開始計算該交易是否有效(即賬戶余額是否足夠支付),並試圖生成包含該筆交易信息的blocks。當累計有6個blocks(1個直接blocks和5個後續blocks)包含該筆交易信息時,該交易信息被認為「驗證過」,從而該交易被正式確認,對方可確認支付成功。 一個可能的問題為,我將地址A裡面的余額都支付給地址B,同時又支付給地址C,如果只驗證單比交易都是有效的。此時,我的作弊的方式為在真相大白之前產生6個僅包括B的block發給B,以及產生6個僅包含C的block發給C。由於我產生block所需要的CPU時間非常長,與全網路相比,我這樣作弊成功的概率微乎其微。 網路節點生產block的動機是什麼? 從上面描述可以看出,為了讓交易信息有效,需要網路節點生成1個和5個後續block包含該交易信息,並且這樣的block生成非常耗費CPU。那怎麼樣讓其它網路節點盡快幫忙生產block呢?答案很簡單,協議規定對生產出block的地址獎勵BTC,以及交易雙方承諾的手續費。目前生產出一個block的獎勵為50BTC,未來每隔四年減半,比如2013年到2016年之間獎勵為25BTC。 交易是匿名的嗎? 是,也不是。所有BITCOIN的交易都是可見的,我們可以查到每個賬戶的所有交易記錄,比如我的。但與銀行貨幣體系不一樣的地方在於,每個人的賬戶本身是匿名的,並且每個人可以開很多個賬戶。總的說來,所謂的匿名性沒有宣稱的那麼好。 但bitcoin用來做黑市交易的還有一個好處,它無法凍結。即便警方追蹤到了某個bitcoin地址,除非根據網路地址追蹤到交易所使用的電腦,否則還是毫無辦法。 如何保證bitcoin不貶值? 一般來說,在交易活動相當的情況下,貨幣的價值反比於貨幣的發行量。不像傳統貨幣市場,央行可以決定貨幣發行量,bitcoin里沒有一個中央的發行機構。只有通過生產block,才能獲得一定數量的BTC貨幣。所以bitcoin貨幣新增量決定於: 1、生產block的速度:bitcoin的協議里規定了生產block的難度固定在平均2016個每兩個星期,大約10分鍾生產一個。CPU速度每18個月速度加倍的摩爾定律,並不會加快生產block的速度。 2、生產block的獎勵數量:目前每生產一個block獎勵50BTC,每四年減半,2013年開始獎勵25BTC,2017年開始獎勵額為12.5BTC。 綜合上面兩個因素,bitcoin貨幣發行速度並不由網路節點中任何單個節點所控制,其協議使得貨幣的存量是事先已知的,並且最高存量只有2100萬BTC
❽ 比特幣演算法原理
比特幣演算法主要有兩種,分別是橢圓曲線數字簽名演算法和SHA256哈希演算法。
橢圓曲線數字簽名演算法主要運用在比特幣公鑰和私鑰的生成過程中,該演算法是構成比特幣系統的基石。SHA-256哈希演算法主要是運用在比特幣的工作量證明機制中。
比特幣產生的原理是經過復雜的運演算法產生的特解,挖礦就是尋找特解的過程。不過比特幣的總數量只有2100萬個,而且隨著比特幣不斷被挖掘,越往後產生比特幣的難度會增加,可能獲得比特幣的成本要比比特幣本身的價格高。
比特幣的區塊由區塊頭及該區塊所包含的交易列表組成,區塊頭的大小為80位元組,由4位元組的版本號、32位元組的上一個區塊的散列值、32位元組的 Merkle Root Hash、4位元組的時間戳(當前時間)、4位元組的當前難度值、4位元組的隨機數組成。擁有80位元組固定長度的區塊頭,就是用於比特幣工作量證明的輸入字元串。不停的變更區塊頭中的隨機數即 nonce 的數值,並對每次變更後的的區塊頭做雙重 SHA256運算,將結果值與當前網路的目標值做對比,如果小於目標值,則解題成功,工作量證明完成。
比特幣的本質其實是一堆復雜演算法所生成的一組方程組的特解(該解具有唯一性)。比特幣是世界上第一種分布式的虛擬貨幣,其沒有特定的發行中心,比特幣的網路由所有用戶構成,因為沒有中心的存在能夠保證了數據的安全性。
❾ 比特幣礦機運算的是什麼
從用戶的角度來看,比特幣就是一個手機應用或電腦程序,可以提供一個個人比特幣錢包,用戶可以用它支付和接收比特幣。這就是比特幣對於大多數用戶的運作原理。
在幕後,整個比特幣網路共享一個稱作「塊鏈」的公共總帳。這份總帳包含了每一筆處理過的交易,使得用戶的電腦可以核實每一筆交易的有效性。每一筆交易的真實性由發送地址對應的電子簽名保護,這使得用戶能夠完全掌控從他們自己的比特幣地址轉出的比特幣。另外,任何人都可以利用專門硬體的計算能力來處理交易並為此獲得比特幣獎勵。這一服務經常被稱作「挖礦」。
比特幣挖礦經歷了三個發展階段,在比特幣剛剛誕生時,比特幣的價格很低,大家只是把比特幣當做一種游戲,使用自己普通的電腦進行挖礦,但在2012年隨著比特幣價格的上升,人們發現顯卡挖礦速度較快,因此,人們開始購買大量顯卡組裝到一起進行挖礦,俗稱「燒顯卡」;第三階段,就是大家熟知的ASIC礦機挖礦,自從阿瓦隆生產出世界上第一台ASIC比特幣礦機,比特幣挖礦就徹底的被顛覆了,挖礦成為了一個特別專業的事情。