1. 程式人生 > >比特幣原始碼閱讀筆記-創世塊的產生

比特幣原始碼閱讀筆記-創世塊的產生

const char*pszTimestamp = "2014/5/11 Write by Andy,Email:[email protected]";//我的創世區塊 CTransaction txNew; txNew.vin.resize(1);txNew.vout.resize(1); txNew.vin[0].scriptSig = CScript() <<486604799 << CBigNum(4) << vector((const unsignedchar*)pszTimestamp, (const unsigned char*)pszTimestamp +strlen(pszTimestamp)); txNew.vout[0].nValue = 50 * COIN;txNew.vout[0].scriptPubKey = CScript() <<ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f")<< OP_CHECKSIG; genesis.vtx.push_back(txNew);genesis.hashPrevBlock = 0; genesis.hashMerkleRoot =genesis.BuildMerkleTree(); genesis.nVersion = 1; genesis.nTime =1399744437; genesis.nBits = 0x1e00ffff; //我將難度設定的比較低.便於我快速的找出nNonce,當然,最後釋出的時候,我會重新生成難度比較高的區塊。 genesis.nNonce = 130387;//符合要求的nNonce值。這個值,我通過下面的程式碼來尋找。 //這段程式碼尋找我的nNonce值 unsigned int i;CBigNum bnTarget; for(i=0;i<0x7fffffff;i++){ //基本上是窮舉法 ,讓i不斷增加genesis.nNonce = i; //將i賦值給nNonce hashGenesisBlock =genesis.GetHash();//生成 hash值 bnTarget.SetCompact(genesis.nBits);//將nBits引數轉換成256位的最大hash值。挖礦就是要尋找比這個 hash值更小的值。 if(hashGenesisBlock < bnTarget.getuint256()){//判斷hash值是否小於最大hash值,如果小於,那就說明我找到了合適的nNonce值。挖礦成功。我這裡找到的值就是130387,當然,我不會每次都重新挖我的創世區塊,實際執行的時候,我會把130387直接寫入nNonce。printf("\nI=%i \n",i);cout<<"\nnNonce="<<genesis.nNonce<<"hash="<<hashGenesisBlock.GetHex(); break;//尋找到了這個值,自然就退出迴圈。實際上,符合條件的nNonce不會只有一個。但是,我們只要找到這個符合條件的值就可以了。 }}

相關推薦

原始碼閱讀筆記-創世產生

const char*pszTimestamp = "2014/5/11 Write by Andy,Email:[email protected]";//我的創世區塊 CTransaction txNew; txNew.vin.resize(1);txNew.vout.resize(1); txN

原始碼閱讀筆記【網路篇】

這篇文章總結下比特幣網路相關內容。 2008年中本聰創造比特幣時在白皮書中這樣定義比特幣:一個點對點的電子現金系統,那時還沒有“區塊鏈”這個說法。那段時間,點對點(P2P)網路已經有了廣泛的應用,例如Bittorrent和迅雷。P2P網路最大的特點就是網路中沒

原始碼閱讀(1)--雜記與加密部分(爽之小刀)

比特幣原始碼閱讀(1)–雜記與加密部分(爽之小刀) 歡迎轉載和引用 若有問題請聯絡請聯絡 Email : [email protected] QQ:2279557541 最近從成都來到了杭州拼一槍 由於老婆為了圓自己的一個大公司夢來到了杭州

原始碼學習筆記(二)

第二章 本章繼上一章交易建立之後介紹比特幣客戶端序列化資料的過程。 比特幣客戶端所有的序列化函式均在seriliaze.h中實現。其中,CDataStream類是資料序列化的核心結構。 CDataStream CDataStream擁有一個字元類容器用來存放序列化之後的資料

原始碼學習筆記

比特幣原始碼學習筆記   FROM http://www.8btc.com/author/17786?order=hot 前言 從事區塊鏈的開發,不瞭解其底層核心技術是不夠的。許多人在看了比特幣白皮書之後仍然不清楚比特幣是怎樣實現的,因為比特幣的原始碼設計精巧,有

原始碼學習筆記(一)

https://github.com/trottier/original-bitcoin 前言 從事區塊鏈的開發,不瞭解其底層核心技術是不夠的。許多人在看了比特幣白皮書之後仍然不清楚比特幣是怎樣實現的,因為比特幣的原始碼設計精巧,有許多設計白皮書未曾提及,加上本身

白皮書閱讀筆記+隨想

比特幣 幾個概念 拜占庭問題 也稱拜占庭將軍問題(Byzantine failures),是由萊斯利·蘭伯特提出的點對點通訊中的基本問題。含義是在存在訊息丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。因此對一致性的研究一般假

區塊鏈學習1.5-原始碼的學習-網路

本篇文章有部分內容直接出自《Mastering Bitcoin》 比特幣網路層主要是由 P2P網路,傳播機制,驗證機制三部分組成。 白皮書關於network的內容回顧一下: The steps to run the network are as follows:

區塊鏈學習1.4-原始碼的學習-基礎

1.3就已經提到區塊鏈的四大技術組合,我認為還是有必要了解背後的原理的。下面做一個簡要的介紹。 一. 區塊鏈資料結構和數字簽名演算法 1.資料結構Merkel樹 說到merkle樹就不得不談到交易,merkle樹就是用於存放交易的 資料結構。如下圖: 它是一個雜湊二叉樹,雜湊的

原始碼研讀--埠對映

在P2P網路中,一個節點既是客戶又是伺服器,它還要接受其他節點的連線,為網路中其他節點提供服務。這篇文章著重分析一下比特幣P2P網路中是如何通過upnp來實現埠對映的。 1 從騰訊的一道面試題說起     筆者所在團隊的總監在面試的時候必然要問面試者這

【區塊鏈】原始碼學習

比特幣原始碼學習 - 1 - 交易 參考部落格:here and here 一、交易概念 1、 交易形式 比特幣交易中的基礎構建單元是交易輸出。在比特幣的世界裡既沒有賬戶,也沒有餘額,只有分散到區塊鏈裡的UTXO[未花費的交易輸出]。 例如,你有20比特幣

【區塊鏈】原始碼

比特幣原始碼 - 2 - 金鑰和地址 一、基本概念 這裡摘抄一下《精通比特幣》裡面的描述: 比特幣的所有權是通過數字金鑰、比特幣地址和數字簽名來確立的。數字金鑰實際上並不是儲存在網路中,而是由使用者生成並存儲在一個檔案或簡單的資料庫中,稱為錢包。 每筆比特幣交

原始碼分析--深入理解交易

交易是比特幣最重要的一塊,比特幣系統的其他部分都是為交易服務的。前面的章節中已經學習了各種共識演算法以及比特幣PoW共識的實現,本文來分析比特幣中的交易相關的原始碼。 1 初識比特幣交易     通過比特幣核心客戶端的命令getrawtransaction和decoder

原始碼研讀(二)之搭環境遇到的那些坑

首先說一下度《精通比特幣》是一直不理解的一個地方: 上面兩處被圈起來的地方都提到了一個數字2256,特別是第一句話更是讓人費解,如果私鑰只能在1到2256間產生那豈不是太容易重複了。關於這點,我認為是在翻譯或者排版是出現了錯誤,2256應該是想表達2的256次方的意

原始碼研讀--交易細節

0x00 讀碼即挖礦 前兩天看到群裡還有人在討論ETH和EOS的DAPP開發,看來區塊鏈的落地還是一線希望,大家可以繼續給自己的信仰充值。充值方式眾多,比如加倉,Fomo,或是寫DAPP,讀程式碼。那我繼續前兩次的操作,繼續閱讀BTC的程式碼,版本0.8.2。上次粗讀了一番

原始碼分析--P2P網路初始化

     區塊鏈和AI無疑是近期業界當之無愧的兩大風口。AI就不說了,區塊鏈從17年各種數字貨幣被炒上了天,一下成為了人們街頭巷議的焦點,本文撇開數字貨幣的投資不說,僅僅從技術層面來剖析一下區塊鏈各個部分的原理。畢竟目前已經有包括BAT等巨頭在內的許多公司投入到了區塊鏈的研發

原始碼解析(7)

0x00 摘要 區塊是區塊鏈的組成基本結構,也是交易資訊的載體,礦工通過挖礦的形式來產生新的區塊並獲得獎勵,新塊產生的過程也是一個交易打包的過程,只有加入到區塊中的交易才會被系統所有其他節點所認可,才

原始碼解讀之整體框架

      本文主要描述了程序啟動時初始化(載入地址、區塊、錢包資訊,啟動節點執行緒以及礦工挖礦執行緒等)、比特幣客戶端交易的發起(交易初始化、提交交易請求、確認和廣播及交易)以及比特幣客戶端當前節點地址和收款方地址。下文將根據總體框架圖分別描述各個功能在原始碼中的函式實現(

原始碼linux下環境配置編譯執行bitcoin

github原始碼連結(https://github.com/bitcoin/bitcoin/) 由於近期學習區塊鏈,需要學習下比特幣原始碼,所以嘗試著在windows和linux環境下編譯執行,但是windows下的環境配置很繁瑣總是在裝qt的時候報錯,下面

原始碼情景分析之script指令碼驗證(1)

Bitcoin script是一種簡單的指令執行框架1)指令碼概述指令碼主要由兩部分構成:指令碼物件CScript和執行函式VerifyScript。指令碼物件分為兩類:scriptSig和scriptPublicKeyscriptSig位於交易中的txin中,而script