从比特币挖坑到真金白银的过程

每个矿工都在奋力挖矿,尝试不断的数据组合,不断计算挖矿算法,达到挖矿协议认可的难度标准。如果有个矿工达到难度标准了,就意味着这个矿工计算出了一个合格的区块,并拿到挖矿奖励的数字货币,在得到其他节点的认可后,矿工就可以随意进行交易消费掉或者去交易所换成其他数字货币,或者法定货币,变成真金白银了。本文以最有名的Bitcoin(简称BTC)为例,解释如何挖矿,中间涉及哪些组件,以及如何演化的。最后介绍如何动手搭建自己的节点,接入测试网络,产生测试的数字货币,完成交易。

CPU挖矿

开始时,任何人可以用CPU进行挖矿,BTC节点程序就带挖矿功能。任何人运行节点程序连接到P2P网络,就可以挖矿。节点程序还附带钱包功能。所以从挖矿,交易都可以完成。当前的系统架构比较单纯节点程序组成的P2P网络。

挖矿程序分离

但人们发现GPU的挖矿能力远超CPU。一般CPU可以计算每秒2M次Hash算法,而GPU每秒可以计算2G次Hash算法,大概1000倍甚至更高。于是挖矿程序独立出节点程序。挖矿程序只负责快速挖矿,连接到节点程序,节点程序连接P2P网络,负责区块的管理,网络,存储,交易,钱包等所有其他功能。

集体挖矿

挖矿的赚钱效应推动业界继续研发更高计算能力的方法。使用FPGA,ASIC技术的专用的矿机被研发出来投放市场。比如当前流行的矿机有每秒8T以上的Hash算法运算能力,是常见GPU的4000倍,是CPU的4百万倍。

如上图所示,整个网络的算力迅速膨胀,当前hash率39425770662GH/s,相当于492.8万台8T计算能力的矿机一起在挖矿。而BTC的协议考虑到算力的变化,会动态调整全网的计算难度,维持约10分钟产生一个区块。这样一个8TH/s矿机要想挖出一个块,理论上需要93.76年能成功算出来一个块。这样矿工自己挖矿就风险太大,而且很多计算都是和其他矿工一样尝试探索同样的数据区域。于是矿池就诞生了,大家集体挖矿。矿池系统给矿机分配不同的数据探索空间,如果挖出矿,就按算力给大家分配挖出矿。下面是主要矿池的算力分布图。

而架构上矿机可以直接连接矿池,或通过一个本地代理服务连接矿池,甚至如果你的矿场有非常多的矿机,可以要求矿池在本地建立一个矿池系统的节点。

交易

拿到比特币,就可以去接受比特币的商家进行交易。下面是些商家列表。

交易所

当然如果想换成其他数字货币或者真金白银,通常会去交易所。交易所会连接不同的数字货币的节点,以及法定货币的银行系统,撮合买卖双方的交易。

DIY建立自己的节点

下载代码编译

从下面的网址下载代码https://github.com/bitcoin/bitcoin

按文档编译源代码,比如在linux下的编译命令是:

./autogen.sh

./configure

make

准备配置文件

下面是一个配置文件的示例:

server=1

daemon=1

#自己建立的测试网设置

regtest=1

#连接互联网的测试网络,需要下载已有的块testnet=1

testnet=0

#否则直接连接正式网络,下载所有的块根据网络需要1天时间,2T硬盘空间

#连接到指定的节点地址

connect=10.0.0.1

#是否别的节点能连进来

listen=1

rpctimeout=30

rpcuser=rpcusername

rpcpassword=rpcpassword

rpcallowip=0.0.0.0/0

启动服务器

$ ./bitcoind -datadir=path/to/config/

Bitcoin server starting

查看状态

#下面的命令列出所有server支持的rpc命令

$ ./bitcoin-cli -datadir=path/to/config/ help

#比如获得当前信息

$ ./bitcoin-cli -datadir=path/to/config/ getmininginfo

{

"blocks": 0,

"currentblockweight": 0,

"currentblocktx": 0,

"networkhashps": 0,

"pooledtx": 0,

"chain": "regtest",

"warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"

}

生成块

$ ./bitcoin-cli -datadir=path/to/config/ generate 1

$ ./bitcoin-cli -datadir=path/to/config/ generate 1

[

"11ec2dd01d76fc1da3391e93d5322c7cf5d2a973a93fd6448c123ad7040aa4fc"

]

但是这样产生的50个币还不能用,需要100个币确认后才能用。所以我们再生成100个块。

$ ./bitcoin-cli -datadir=path/to/config/ generate 100

这时候查看钱包状态就有50个币可以用了。

$ ./bitcoin-cli -datadir=path/to/config/ getwalletinfo

{

"walletname": "",

"walletversion": 169900,

"unconfirmed_balance": 0.00000000,

"immature_balance": 5000.00000000,

"txcount": 101,

"keypoolsize": 999,

"keypoolsize_hd_internal": 1000,

"hdmasterkeyid": "48f6c5483fabc892e44915f72f74b2f94a690d48"

}

生成一个新的钱包地址

$ ./bitcoin-cli -datadir=path/to/config/ getnewaddress

2NDbofMLC5JwguFno47KLmi5sZWWHXWWNGx

汇款

$ ./bitcoin-cli -datadir=path/to/config/ sendtoaddress 2NDbofMLC5JwguFno47KLmi5sZWWHXWWNGx 0.1

bc8ff56021ac445aa38ddef2423757b31f4d7051c5bc19eedf6e2b1f5569b136

风险提示

挖矿能否挣钱需要进行投资收益计算。有些数字货币价格波动幅度大的惊人。比如BTC去年峰值到过1个2万美金,最近跌倒6000美金以下。而现在算成本流行计算电力成本。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180625G1HMW700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区