bitcoin源碼分析
⑴ 有了源碼,怎麼運作一個比特幣私服請高人指點
易語言靜態編譯!
⑵ 比特幣有那些特點
比特幣(Bitcoin)是一種基於去中心化,採用點對點網路與共識主動性,開放源代碼,以區塊鏈作為底層技術的虛擬加密貨幣,由中本聰在2008年提出,2009年誕生。
比特幣沒有一個集中的發行方,由網路節點的計算生成,可以在任意一台接入互聯網的電腦上買賣,並且具有極強的稀缺性。
去中心化:比特幣是第一種分布式的虛擬貨幣,整個網路由用戶構成,沒有中央銀行。去中心化是比特幣安全與自由的保證。
全世界流通:比特幣可以在任意一台接入互聯網的電腦上管理。不管身處何方,任何人都可以挖掘、購買、出售或收取比特幣。
專屬所有權:操控比特幣需要私鑰,它可以被隔離保存在任何存儲介質。除了用戶自己之外無人可以獲取。
低交易費用:可以免費匯出比特幣,但最終對每筆交易將收取約1比特分的交易費以確保交易更快執行。
無隱藏成本:作為由A到B的支付手段,比特幣沒有繁瑣的額度與手續限制。知道對方比特幣地址就可以進行支付。
跨平台挖掘:用戶可以在眾多平台上發掘不同硬體的計算能力。
本條內容來源於:中國法律出版社《中華人民共和國金融法典:應用版》
⑶ bitcoin: dns seed
當bitcoin客戶端第一次啟動的時候, 程序不知道任何活躍的bitcoin全節點。
為了發現一些IP地址, 需要把一些DNS地址(也叫dns種子)硬編碼到比特幣源碼中。如果沒有dns seed, 客戶端不能自動聯上節點。
Dns Seed 由比特幣的社區成員維護, 其中一些提供動態的dns seed服務,通過掃描網路自動獲取活躍的節點IP地址,其中一些提供靜態dns seed, 這些種子是手動添加的。
我們看下sipa維護的 dns seed
83.162.254.34 176.115.25.48 ... 158.69.251.126 都是節點地址,當客戶端啟動的時候, 會自動鏈接這些地址。
dns seed 硬編碼在什麼地方了?
1 需要爬蟲一類的服務,通過bitcoin protocol 嗅探到一些節點
2 可以模仿dns請求, dns通過UDP協議的53埠進行通訊, 把嗅探到節點發送出去
這些工作,敬愛的sipa在 bitcoin-seeder 都幫我們做了。
從 seed.bitcoin.sipa.be. 14852 IN NS xps.sipa.be. 了解到seed域名的ns服務(即 nameserver)
是由 xps提供的. 我們在 dnspod 做如下配置.
需要在xps伺服器啟動bitocin-seeder
1 先編譯 make , 得到 dnsseed 執行文件
2 啟動爬蟲
等一段時間, dig seed.liushooter.cc 就會看到結果.
參考:
https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery#DNS_Addresses
https://bitcoin.org/en/developer-guide#p2p-network
⑷ 如何學習區塊鏈
如果想學習比特幣及區塊鏈方面的知識,還是要系統性地學習。網上這方面討論、資料都很多,但水平參差不齊。建議看一下區塊鏈老師的線上課程。
線上區塊鏈視頻教程是由Steven老師進行直播教學。Steven老師,西交大學學士,北航軟體學院工程碩士。從事IT行業15年,7年編程開發經驗,8年計算機培訓經驗。分別從事過Asp、Asp.net、PHP、Java、Android、HTML5等開發和教學工作。曾出版發行《變身程序猿——Android應用開發》(電子工業出版社),《Steven陪你學Android》、《零基礎學編程》、《解密區塊鏈》系列視頻。
想要學習區塊鏈技術的同學通過三個月線上直播學習,畢業後能夠掌握區塊鏈基本概念、精通智能合約開發與架構設計、掌握代幣開發與ICO發幣、掌握全棧dapp開發。
其區塊鏈技術課程大綱如下:
1.1區塊鏈基本理論 0.5周
1.1.1初識區塊鏈
1.1.2認識區塊鏈家族
1.1.3區塊鏈與比特幣常見問題及基本概念
1.1.4區塊鏈應用場景
1.1.5比特幣錢包BitcoinCore
1.1.6testnet環境實現比特幣交易
1.2編程基礎入門 3.5周
1.2.1計算機軟硬體基礎
1.2.2字元集及字元編碼
1.2.3HTML+CSS(含HTML5+CSS3)
1.2.4ECMAScript + BOM + DOM
1.2.5jQuery
1.2.6node.js
1.2.7Ajax及Express
1.3Go編程語言 6周
1.3.1Go基本語法
1.3.2流程式控制制
1.3.3函數及數據
1.3.4錯誤處理
1.3.5Go面向對象編程
1.3.6Go並發編程
1.3.7Go網路編程
1.3.8Go安全編程
1.3.9Go進階編程(goroutine、channel)
1.3.10資料庫Mysql、LevelDB
1.4區塊鏈1.0——比特幣Bitcoin 1周
1.4.1比特幣原理
1.4.2比特幣系統架構
1.4.3密碼演算法(Go語言實現)
1.4.4共識演算法(Go語言實現)
1.4.5比特幣交易原理及交易腳本
1.4.6比特幣RPC編程(node.js實現)
1.4.7比特幣源碼解析
1.5區塊鏈2.0——以太坊Ethereum 3周
1.5.1以太坊工作原理及基礎架構
1.5.2以太坊基本概念(賬戶、交易、Gas)
1.5.3以太坊錢包Mist及Metamask
1.5.4以太坊交易
1.5.5ERC20標准Token開發部署
1.5.6以太坊開發IDE——remix-ide
1.5.7智能合約與Solidity
1.5.8Solidity部署、備份及調用
1.5.9框架技術:truffle及web3
1.5.10DApp開發實戰
1.5.11Geth
1.6EOS及星雲鏈開發實戰 3周
1.6.1EOS介紹及石墨烯生態系
1.6.2EOS主要特點及發展前景
1.6.3EOS開發智能合約
1.6.4cleos及RPC介面
1.6.5EOS應用開發實戰
1.6.6星雲鏈介紹
1.6.7星雲鏈開發DApp實戰
1.7區塊鏈3.0——超級賬本之Fabric 3周
1.7.1超級賬本項目介紹
1.7.2Fabric部署和使用
1.7.3Fabric配置管理
1.7.4Fabric架構設計
1.7.5Fabric CA應用與配置
1.7.6應用開發實戰
區塊鏈市場已經開始向大眾打開,迅速抓住學習機遇,掌握區塊鏈技術,站在互聯網時代風口,未來發展必定會勢如破竹!
⑸ 比特幣bitcoin是什麼
Bitcoin是點對點(peer-to-peer)基於網路的匿名數字貨幣。點對點(peer-to-peer)的意思是指沒有中央權威控制貨幣 的匯款通道。相反,這些貨幣轉帳的任務是由網路節點進行的集體管理。匿名意味交易各方可以隱藏自己的真實身份。優勢:無需信託中間人,能夠方便的進行互聯網上的匯款。第三方不能夠控制或者阻止您的交易。避免了中央儲備銀行的不良政策和不穩定性所造成的安全隱患。 Bitcoin系統的有限貨幣通脹是均勻分布(由CPU決定)於整個網路, 而不是由銀行壟斷。 Bitcoin 是一個由Satoshi Nakamoto 製作的開源項目, 研發網址位於SourceForge。
⑹ bitcoin計算Block Hash
bitcoin的創世塊的數據是已 hard code的形式寫在源碼里,
之後的block hash都是通過固定的方式計算出來的. 怎麼計算出來呢?
每一個block都有:
version 即網路節點的版本號
prev_block 前一個塊的hash,創世塊沒有,以後的塊都有
mrkl_root , 是 Merkle tree , 即默克爾樹
time 即時間戳,當前時間
bits 網路的難度
nonce 隨機數
這個 nonce 就是 Pow 要計算的隨機量 , 區別是要計算2次hash.
先把 version prev_block mrkl_root time bits nonce 當做字元串合並到一起, 得到結果 result . 得到 result 後, 做2次 sha256運算, 得到 hash , 再然後 hash 做大小端轉換, 最後的結果就是這個block的hash.
不過 version time bits nonce 要轉換為 unsigned long型小字端,
prev_block mrkl_root 要轉換為16進制並大小端轉換, 這一步確實很麻煩.
測試下 height=1 的 block hash值
挖礦做的工作
在一個block的結構中, version prev_block mrkl_root time bits 都是很容易計算的. 只有 nonce 這個隨機數不確定.
bitcoin的 pow 就是 找到一個合適的 nonce , 使得 version prev_block mrkl_root time bits nonce 合並的結果 reuslt ,再經過2次sha256計算, 達到一個符合bitcoin網路難度的數值. bitcoin的網路難度通過 bits計算, 難度即最後計算的hash的前n位是零.
每一個block hash的計算, 都包含了prev_block_hash,這也是鏈的體現, 增加了攻擊bitcoin的難度. 如果有人改了一個block的hash, 這個塊之後的所有的塊hash都要重新計算.
python處理位元組序
參考:
https://en.bitcoin.it/wiki/Block_hashing_algorithm
http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html
https://en.bitcoin.it/wiki/Difficulty
https://bitcoin.org/en/developer-guide#term-merkle-tree
⑺ 以太坊源碼分析(一 簡介)
以太坊作為目前區塊鏈技術2.0的代表作品,無論是它獨創的智能合約以及它本身交易的速度都優於bitcoin,通過看它的白皮書以及一些文章也略微了解了它的一些原理,但是總體還是對它的實現半知半解。
因此就想分析下它的實現源碼,再結合白皮書也許可以深入的理解它的實現。
每個包的作用大致為:
以上為個人初步理解,如有不當之處望指正
註:資料查詢主要位置 wiki eip
⑻ 請問哪裡有windows平台C++的bitcoin源代碼下載,我想用VC來編譯。
很多朋友都知道如何在linux平台如何編譯比特幣程序,但是,到了windows平台,
就會感覺到無從下手. 其實, 比特幣程序是跨平台的.
你要編譯windows版的比特幣程序,基本上有兩種方法,一種是在linux平台
(推薦ubuntu 13.10)通過交叉編譯的方法來編譯.另外一種,就是直接在windows平台編譯.
我想,你既然要在windows平台使用,我就詳細介紹一下如何在windwows平台編譯比特幣程序.
我的平台:windows7
第一步:安裝變編譯環境QT和MINGW,msys
1、msys是一個在windows平台模擬shell的程序。
下載安裝程序之後,通過安裝管理程序,按安裝以下內容:
From MinGW installation manager -> All packages -> MSYS
選中以下安裝包
msys-base-bin
msys-autoconf-bin
msys-automake-bin
msys-libtool-bin
點 apply changes開始安裝。他會自動下載安裝好。
需要注意的是,確保不要安裝msys-gcc和msys-w32api ,因為這兩個包和我們的編譯系統發生沖突。
很多人出現一些莫名其妙的問題,就是因為這兩個包。
2、安裝 MinGW-builds
下載並解壓縮 i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z 到C盤根目錄 C:\
注意我的目錄結構。你盡量和我一樣。
3、設置PATH環境變數,將C:\mingw32\bin;添加到第一個。
4、在命令行模式下輸入 gc -v 會得到以下內容
c:\gcc -v
Using built-in specs.
COLLECT_GCC=c:\mingw32\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw32/bin/../libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.8.2/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-cloog=/c/mingw482/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl --with-pkgversion='i686-posix-dwarf-rev3, Built by MinGW-W64 project' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/lib -L/c/mingw482/prerequisites/i686-zlib-static/lib -L/c/mingw482/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware'
Thread model: posix
gcc version 4.8.2 (i686-posix-dwarf-rev3, Built by MinGW-W64 project)
至此,你的開發環境已經搭建好了,很簡單吧
第二部分:下載bitcoin引用的外部庫
我們把它們全部放在 C:\deps目錄下
2.1 安裝OpenSSL
進入啟動 MinGw shell 比如目錄:(C:\MinGW\msys\1.0\msys.bat)運行這個msys.bat,就會啟動一個shell環境,提示符是$
輸入命令
cd /c/deps/
tar xvfz openssl-1.0.1g.tar.gz
cd openssl-1.0.1g
Configure no-shared no-dso mingw
make
等待幾分鍾後,就把openssl編譯好了。
2.2 下載Berkeley DB
我們推薦使用 4.8版本
同樣在msys shell環境下輸入以下命令
cd /c/deps/
tar xvfz db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix
../dist/configure --enable-mingw --enable-cxx --disable-shared --disable-replication
make
等待編譯
2.3 安裝Boost
msys命令:
cd C:\deps\boost_1_55_0\
bootstrap.bat mingw
b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi runtime-link=static stage
2.4 安裝Miniupnpc
cd C:\deps\miniupnpc
mingw32-make -f Makefile.mingw init upnpc-static
msys shell命令
cd /c/deps/protobuf-2.5.0
configure --disable-shared
make
2.6 qrencode:
命令
cd /c/deps/libpng-1.6.10
configure --disable-shared
make
LIBS="../libpng-1.6.10/.libs/libpng16.a ../../mingw32/i686-w64-mingw32/lib/libz.a" \
png_CFLAGS="-I../libpng-1.6.10" \
png_LIBS="-L../libpng-1.6.10/.libs" \
configure --enable-static --disable-shared --without-tools
make
2.7 安裝 Qt 5 庫
下載和解壓縮
在 windows命令行輸入:
set INCLUDE=C:\deps\libpng-1.6.10;C:\deps\openssl-1.0.1g\include
set LIB=C:\deps\libpng-1.6.10\.libs;C:\deps\openssl-1.0.1g
cd C:\Qt\5.2.1
configure.bat -release -opensource -confirm-license -static -make libs -no-sql-sqlite -no-opengl -system-zlib -qt-pcre -no-icu -no-gif -system-libpng -no-libjpeg -no-freetype -no-angle -no-vcproj -openssl-linked -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug
mingw32-make
set PATH=%PATH%;C:\Qt\5.2.1\bin
cd C:\Qt\qttools-opensource-src-5.2.1
qmake qttools.pro
mingw32-make
3. 下載Bitcoin 0.9.1
在msys shell下輸入以下命令行:
cp /c/deps/libpng-1.6.10/.libs/libpng16.a /c/deps/libpng-1.6.10/.libs/libpng.a
cd /c/bitcoin-0.9.1
./autogen.sh
CPPFLAGS="-I/c/deps/boost_1_55_0 \
-I/c/deps/db-4.8.30.NC/build_unix \
-I/c/deps/openssl-1.0.1g/include \
-I/c/deps \
-I/c/deps/protobuf-2.5.0/src \
-I/c/deps/libpng-1.6.10 \
-I/c/deps/qrencode-3.4.3" \
LDFLAGS="-L/c/deps/boost_1_55_0/stage/lib \
-L/c/deps/db-4.8.30.NC/build_unix \
-L/c/deps/openssl-1.0.1g \
-L/c/deps/miniupnpc \
-L/c/deps/protobuf-2.5.0/src/.libs \
-L/c/deps/libpng-1.6.10/.libs \
-L/c/deps/qrencode-3.4.3/.libs" \
./configure \
--disable-upnp-default \
--disable-tests \
--with-qt-incdir=/c/Qt/5.2.1/include \
--with-qt-libdir=/c/Qt/5.2.1/lib \
--with-qt-bindir=/c/Qt/5.2.1/bin \
--with-qt-plugindir=/c/Qt/5.2.1/plugins \
--with-boost-system=mgw48-mt-s-1_55 \
--with-boost-filesystem=mgw48-mt-s-1_55 \
--with-boost-program-options=mgw48-mt-s-1_55 \
--with-boost-thread=mgw48-mt-s-1_55 \
--with-boost-chrono=mgw48-mt-s-1_55 \
--with-protoc-bindir=/c/deps/protobuf-2.5.0/src
make
strip src/bitcoin-cli.exe
strip src/bitcoind.exe
strip src/qt/bitcoin-qt.exe
這樣,你就得到了變異好的 bitcoin-cli.exe和bitcoind.exe ,bitcoin-qt.exe(windows QT圖形界面的錢包軟體)
⑼ 比特幣的原理
比特幣系統是一個基於P2P網路的、開源的、去中心化的貨幣交易系統。比特幣的核心演算法和協議都是公開的,具體在其官網及GitHub上可以查看到源碼信息系統的每一個節點都可以參與交易、確認其他的交易合法性並將其加入到分布式賬本中。基於密碼學的基本原理,比特幣的交易安全性和用戶身份的匿名性可以得到保證。歷史上第一個產生的比特幣叫做「創始幣」於2009年1月3日誕生。
拓展資料:
1、根據中本聰的思路設計發布的開源軟體以及建構其上的P2P網路。比特幣是一種P2P形式的數字貨幣。比特幣的交易記錄公開透明。點對點的傳輸意味著一個去中心化的支付系統。
2、與大多數貨幣不同,比特幣不依靠特定貨幣機構發行,它依據特定演算法,通過大量的計算產生,比特幣經濟使用整個P2P網路中眾多節點構成的分布式資料庫來確認並記錄所有的交易行為,並使用密碼學的設計來確保貨幣流通各個環節安全性。
3、和法定貨幣相比,比特幣沒有一個集中的發行方,而是由網路節點的計算生成,誰都有可能參與製造比特幣,而且可以全世界流通,可以在任意一台接入互聯網的電腦上買賣,不管身處何方,任何人都可以挖掘、購買、出售或收取比特幣,並且在交易過程中外人無法辨認用戶身份信息。2009年1月5日,不受央行和任何金融機構控制的比特幣誕生。比特幣是一種數字貨幣,由計算機生成的一串串復雜代碼組成,新比特幣通過預設的程序製造。
4、每當比特幣進入主流媒體的視野時,主流媒體總會請一些主流經濟學家分析一下比特幣。早先,這些分析總是集中在比特幣是不是騙局。而現如今的分析總是集中在比特幣能否成為未來的主流貨幣。而這其中爭論的焦點又往往集中在比特幣的通縮特性上。
5、用戶可以買到比特幣,同時還可以使用計算機依照演算法進行大量的運算來「開采」比特幣。在用戶「開采」比特幣時,需要用電腦搜尋64位的數字就行,然後通過反復解謎密與其他淘金者相互競爭,為比特幣網路提供所需的數字,如果用戶的電腦成功地創造出一組數字,那麼就將會獲得25個比特幣