公共币比特币挖矿机怎么赚钱挖矿

元宝币钱包使用、挖矿方法详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
元宝币钱包使用、挖矿方法详解
上传于||暂无简介
大小:103.45KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢【编者按:本文作者bensc2003,,原标题:开采比特币教程,。】比特币产生于2008年--一个幸运的时间,因为那刚好是金融危机的元年,传统的货币信誉受损。它由中本聪设计,这是个笔名,很可能还有一群其它的设计者。他们设计了一个复杂的算法,你用电脑去破解它就会产生比特币(也就是所谓的挖矿),当你的电脑完成了一定的任务后,一枚新比特币就会被创造出来。&
可能有很多朋友很好奇,我们如何才可以挖掘到比特币呢?这里为大家介绍一个比较常用的挖矿方法。随着现在比特币的流行,越来越多的人加入到了开采比特币的队伍中。也许我们可能并不能开采到比特币,但至少我们还是可以体验一下这个神奇的比特币到底是如何开采出来的。这篇经验原来是2013年5月份写的,由于现在介绍的网站上的挖矿工具有改动,所以重新编辑一下。还有就是这个 BTC Guild 网站对中国的 IP 进行了屏蔽,所以大家要打开的话,需要用一些代理。
带有独立显卡的PC 电脑
步骤一、注册账号以及账号设置
1首先,我们需要找一个操作方便产出稳定的比特币矿池,然后通过挖矿客户端软件连接到指定的服务器上挖矿。这里以&BTC Guild&网站为例,先打开这个网站,点击左边的用户注册。注册过程比较简单,输入英文用户名,密码和确认密码即可,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
2注册成功之后,我们会在网页上看到一条这样的信息&Your account has been successfully registered and logged in!&,意思是注册成功并已登录,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
3我们点击左上角的&Dashboard&按钮,可以看到账户的整个监控状态,如图所示 注:在这个监控仪表盘中我们最为关心的是&Total Earnings&,这就是我们当前账户所挣的比特币。以后只要我们打开网站,进入监控仪表盘就可以看到自己账户的相关信息了。
比特币挖矿开采教程:如何获得比特币【图文】
4接下来请点击页面导航栏中的&Settings&。在设置页面中,我们可以设置电子邮件地,比特钱包地址,更改密码等,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
5如果在帐户中设置电子邮件地址,日后要是忘记密码或者被盗的情况下,可以通过设置的电子邮件来恢复密码。首先在&Email Address&一栏输入我们的常用的电子邮件地,然后点击&Change&按钮,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
6接下来页面中会显示一封确认邮件已经发送到我们之前设置的邮件中,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
7然后我们打开自己的电子邮箱,找到 BTC Guild 发送的邮件。点击确认链接即可,之后会在页面中显示我们的邮箱已经成功设置,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
8如果我们在帐户设置中设置了电子邮件的话,我们还可以对开采矿工的行为设置邮件通知。在设置页面上找到&Idle Warnings&一栏,点击下拉列表,选择想要发送邮件的时间,然后点击右边的&Change&按钮即可。当我们设置10分钟以后,如果有矿工停止开采,系统会在10分钟后自动向我们的邮件发送一封通知邮件。收到邮件以后,我们就知道具体是那个矿工罢工了。
比特币挖矿开采教程:如何获得比特币【图文】
9另外在设置中,我们比较关心一个是&Bitcoin Wallet&即钱包地址。这个地址可以先不用设置,等我以后真正开采到了比特币是再填写也不迟。
比特币挖矿开采教程:如何获得比特币【图文】
10帐户设置完成以后,接下来我们要对&Worker&进行设置。什么是 Worker 呢?就是我们之后在比特币开采客户端上要用到的登录矿工帐户名。系统会默认为我们创建一个矿工名,矿工名是以我们注册帐户名加一个下划线和数字组成。比如我们注册的帐户是XXX,那第一个矿工名就叫&XXX_1&,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
11如果我们要设置多个矿工名的话,在&Create Worker&一栏中输入一个数字如&2&,再点击&Create&按钮即可添加一个新矿工的帐户名,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
12在 Worker 设置页面里,我们还可以分别对矿式帐户的开采支付模式进行设置。Payment method,即开采支付方法。这里有二种类型可供选择,PPS和PPLNS,区别在于开采模式和手续费上。PPS的手续费为7.5%,而PPLNS的手续为3%。系统默认为采用 PPLNS,如果要更改,请点击 Payment method 下方的&change&按钮。
比特币挖矿开采教程:如何获得比特币【图文】
13另外我们还可以对开采模式的难度进行选择,如果我们的电脑有多个显卡GPU,或者一些专用的机器的话,可以在 Minimum Difficulty 下对分别对矿工帐户名进行设置,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
步骤二、下载挖矿客户端软件
1当我们注册设置完成以后,接下来请点击页面导航菜单中的&Support&,我们会看到客户端的下载链接。 挖矿客户端软件有二种类型:
BFGMiner:命令行操作界面,可直接下载。
CGMiner: 也是命令行格式操作的,不过下载步骤过于复杂。
我们这里以下载 BFGMiner 为例,点击如图所示下载。
比特币挖矿开采教程:如何获得比特币【图文】
2随后会跳转到挖矿工具的下载页面,挖矿工具有二种格式,一种是32位系统,另一种是64位系统。根据自己的系统位数,下载相应的工具版本,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
3挖矿工具客户端大小不足5M,是一个 ZIP 压缩文件。下载完成之后,找到并打开文件。点击鼠标右键,选择&复制&选项,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
4这里我以粘贴提取到桌面为例,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
步骤三、挖矿客户端软件详细设置
1打开挖矿目录以后,双击点击打开目录下的&bfgminer&文件,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
2接下来来看到 BFG minier 的窗口,在 URL 处输入矿池的地址。矿池地址可以在 BTC GUILD 的 support 页面中看到,如 :3333 ,按回车键,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
3然后在 Username 后输入自己先前在 BTC GUILD 网站上设置的矿工名,按回车键,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
4随后在 password 密码处,可任意输入,发图所示
比特币挖矿开采教程:如何获得比特币【图文】
5最后就可以看到上面有很多数字在变化,表示正在挖矿了。值得注意的是如图标注的地方表示当前机器按钮的速率,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
6除了开采客户端软件上可以看当前开采的速度,我们还可以在 BTC Guild 网站上的 &Dashboard&页面中的&Active Worker Summary&列表中看到每上矿工开采的具体速度,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
7如果要关闭挖矿工具,直接 X 掉即可,也可以直接按 Q 键退出。如果想要多开几个的话,在 BFG miner 目录中再打开一个挖矿工具即可。
步骤四、CGminger命令行客户端软件
1如果真要想挖矿的话,官方是推荐我们用&CGMiner&,也就是在命令提示符下运行的。在 BTC Guild 页面上点击&Support&,再点击&CGMiner&下载链接页面,选择对应系统的版本,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
2随后会跳转到 CGminer 的下载页面,点击如图标注的链接。
比特币挖矿开采教程:如何获得比特币【图文】
3然后选择一个 CGminer 的版本,我这里下载一个 Windows 版本为例,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
4这里以 Windows 版的 CGMiner 为例,下载完成以后,解压到电脑中,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
5打开CGMiner的目录,找到&CGMiner &,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
6用鼠标双击&CGMiner&会弹出一个命令行窗口,提示我们输入连接服务器的 URL 地址。输入&:3333&,按键盘上的回车键,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
7然后提示我们输入&Username&即矿工帐户名,按键盘上的回车键,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
8接着输入&password&密码,按键盘上的回车键,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
9稍等片刻,当客户端与服务在建立连接之后就会看到机器开始开采了,如图所示
比特币挖矿开采教程:如何获得比特币【图文】
10若要退出开采,请在窗口上按键盘上的&Q&键。
带有独立显卡的PC 电脑
如果你是用 CGminer 的话,显卡一定要是支持通用计算标准的显示才行,否则会不能挖矿。
更多频道新闻
对 GoPro 来说,2015年是令人沮丧的一年。...
IBTimes 其他新闻比特币块链和挖矿原理 | 巴比特
比特币块链和挖矿原理
译者:申屠青春 深圳大学ATR国防科技重点实验室博士 新浪微博 @我看比特币
注意:本文可随意转发,请留下译者信息,如果觉得本文对你有用,请给译者捐赠,以便翻译更多比特币的核心资料。捐赠地址:1faVxBp2KmST98p3tJjx2MQP98JLLnF2Q
比特币在国内已经众所周知,但是技术研究并未有效开展,大部分人处于知道和了解程度,目前比特圈中许多人对比特币能做什么,同样了解不多。一个重要原因是大多数比特币核心资料都是英文,很少有人能静心看完如此繁杂的英文资料。本人博士论文的研究方向是比特币,在研究其英文技术的同时,拟对一些重要资料进行翻译,让更多的圈内人对比特币有更多的理解。
本文主题是比特币区块、创世块、挖矿原理、难度等的技术资料,综合了比特币官方威客上的众多资料翻译和编写而成。
1区块(Block)
比特币网络中,数据以文件的形式被永久记录,我们称之为区块。一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录。区块可以想像为一个城市记录者的记录本上的单独一页纸(对房地产产权的变更记录)或者是股票交易所的总帐本。在绝大多数情况下,新区块被加入到记录最后(在比特币中的名称为:),一旦写上,就再也不能改变或删除。每个区块记录了它被创建之前发生的所有事件。
1.1区块结构(Block Structure)
Magic no 魔术数
总是0xD9B4BEF9
Blocksize 块大小
到区块结束的字节长度
Blockheader 块头
Transaction counter 交易数量
1 – 9字节
交易列表(非空)
&Transaction counter&-许多交易
1.2详细说明(Explanation)
每个区块包括一些或所有近期交易、前一个区块的引用、以及其他数据。它还包括一个挖矿难度的答案-该答案对每个区块是唯一的。新区块如果没有正确答案,不能被发送到网络中-“”的过程本质上是在竞争中 “解决”当前区块。每个区块中的数学问题难以解决,但是一旦发现了一个有效解,其他网络节点很容易验证这个解的正确性,对于给定的区块可能有多个有效解-但对于要解决的区块来说只需一个解。
因为每解决一个区块,都会得到新产生的比特币奖励,每个区块包含一个记录,记录中的是有权获得比特币奖励的地址。这个纪录被称为生产交易、或者交易,它经常是每个区块的第一个交易。每个块区生产的比特币数量是50个,每产生21万个区块后减少一半(时间大约是4年)。
发送者在网络中广播比特币交易,所有试图解决区块的矿工节点,收集了这些交易记录,把它们加到矿工节点正在解决的区块中。
挖矿难度由比特币网络自动调整,使之实现平均每小时解决6个区块的目标。每2016个区块(大约两周)后,所有客户端把新区块的实际数目与目标数量相比较,并且按照差异的百分比调整目标HASH值,来增加(或降低)产生区块的难度。
因为所有区块包含前一个区块的引用,现存的所有区块的集合可以说是形成了一条链,然而,块链有可能产生暂时分叉-举个例子,如果两个矿工同时为一个区块产生不同的有效解,两者相互不知。P2P网络会在一段短时间内消除这些分叉,该链仅有一个分支存活。
客户端接受“最长”块链作为有效链,整条块链的“”是指具有最大难度的链,而不是指具有最多区块数量的块链,可防止某些人创建大量低难度区块,故意使块链分叉,并且让网络接受它成为“最长”的块链。
(译者按:以下非标准区块内容来自 ,略有改动)
非标准区块:是指包括非标准交易的区块,交易的标准与否,要参考比特币客户端源代码中的IsStandard()函数。客户端不会传播非标准交易,但是某些矿池的矿工会把合法的非标准交易加入到区块中,形成非标准区块,客户端在计算难度最长的块链时,会考虑非标准区块。
区块的一般问题
(1)目前有多少个区块?
(2)区块的最大数量是多少?
没有最大数量,区块以平均每10分钟一个的速度,源源不断地加到块链结尾。
(3)甚至当所有的2100万个比特币全部被挖完,还是没有最大数量吗?
对的,区块用来确认交易在某一特定时间存在,即使比特币全部被挖完,交易还是会发生,所以只要人们还在交易比特币,区块还会被创建。
(4)我要花多少时间生成一个区块?
没有人能够准确回答,这里有个 ,可以告诉你可能要花多少时间。
(5)如果我完成计算一个区块的1%进度…
没有解决一个区块的1%的说法,你不会在解决区块上有任何进展,在工作24小时后,你解决一个区块的机率和24小时前一样,若非信仰比特币就是众所周知的赌徒谬误。
这就像同时抛53枚硬币,使得它们人头向上,每次你试验,你的成功机率都是一样的。
(6)我还能找到更多的技术细节吗?
在下面的中,有更多的技术细节。
2创世块(Genesis Block)
创世块是指块链的第一个块,现在的比特币客户端版本把块号定为0,以前的版本把该块块号定为1。
以下是创世块的一种表示,它出现在以前的比特币代码的注释中(),第一个代码段定义了创建该块所需的所有变量,第二个代码段是标准的区块类格式,还包含了第一个代码段中缩短版本的数据。
GetHash()= 0xd3ae46a2a6c172b3f1b60a8ce26f
hashMerkleRoot = 0x4a5e1e4baab89f3abc87f618fab2127b7afdeda33b
txNew.vin[0].scriptSig
0x736B6ECE6FF206B6EFCF6E614A2FD
txNew.vout[0].nValue
txNew.vout[0].scriptPubKey =
0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EEEF4C3FBCF649B6DE611FEAEE028A8D65C10BFEB0FD8A6704 OP_CHECKSIG
block.nVersion = 1
block.nTime
block.nBits
= 0x1d00ffff
block.nNonce
CBlock(hash=d6, ver=1, hashPrevBlock=00, hashMerkleRoot=4a5e1e, nTime=, nBits=1d00ffff, nNonce=, vtx=1)
CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
CTxIn(COutPoint(000000, -1), coinbase 04ffff001da616e2fc6c6fb206ff6ec6fb73)
CTxOut(nValue=50., scriptPubKey=0x5F1DF16B2B704C8A578D0B)
vMerkleTree: 4a5e1e
coinbase参数(看上面的十六进制)包含了以下一段话:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
“日,首相第二次对处于崩溃边缘的银行进行紧急救助”,这句话正是当天的头版文章标题。这应该是一个该区块在日或之后创建的一个证据,同时也是对银行系统采用部分准备金制度导致不稳定性的一个说明。
创世块的收益不可能被花掉,因为创世块是用代码表示的(这个巧合可能是故意的),尽管如此,其50BTC收益还是被发送到地址:。
(译者按:创世块的收益花不掉,原因如下:比特币客户端把区块和交易分开存贮在两个数据库中,当客户端发现区块数据库为空时,用代码直接生成一个创世块,但是没有生成这个交易,所以客户端中的交易数据库中是没有发送到上述地址这个交易的,因而一旦收到要花掉该收益的交易时,都会拒绝,所以无法得到任何确认,就花不掉这50个币。出现这种情况很可能是中本聪故意的。)
原始区块数据
创世块的原始十六进制如下所示:
01 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
…………….
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
…………….
00 00 00 00 3B A3 ED FD
7A 7B 12 B2 7A C7 2C 3E
….;?í?z{.?z?,&
67 76 8F 61 7F C8 1B C3
88 8A 51 32 3A9F B8 AA
gv.a.?.?^?Q2:?,?
4B 1E 5E 4A 29 AB 5F 49
FF FF 00 1D 1D AC 2B 7C
K.^J)<<_I??&#8230;?+|
01 01 00 00 00 01 00 00
00 00 00 00 00 00 00 00
&#8230;&#8230;&#8230;&#8230;&#8230;.
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
&#8230;&#8230;&#8230;&#8230;&#8230;.
00 00 00 00 00 00 FF FF
FF FF 4D 04 FF FF 00 1D
&#8230;&#8230;????M.??..
01 04 45 54 68 65 20 54
69 6D 65 73 20 30 33 2F
..EThe Times 03/
4A 61 6E 2F 32 30 30 39
20 43 68 61 6E 63 65 6C
Jan/2009 Chancel
6C6F 72 20 6F 6E 20 62
72 69 6E 6B 20 6F 66 20
lor on brink of
73 65 63 6F 6E 64 20 62
61 69 6C6F 75 74 20 66
second bailout f
6F 72 20 62 61 6E 6B 73
FF FF FF FF 01 00 F2 05
or banks????..ò.
2A 01 00 00 00 43 41 04
67 8A FD B0 FE 55 48 27
*&#8230;.CA.g??°?UH&#8217;
19 67 F1 A6 71 30 B7 10
5C D6 A8 28 E0 39 09 A6
.g??q0·.\?¨(à9.?
79 62 E0 EA 1F 61 DE B6
49 F6 BC 3F4C EF 38 C4
ybàê.a??I? 1/4 ?L?8?
F3 55 04 E5 1E C1 12 DE
5C 38 4D F7 BA 0B 8D 57
óU.?.?.?\8M÷?..W
8A4C 70 2B 6B F1 1D 5F
AC 00 00 00 00
?Lp+k?._?&#8230;.
分开来看,如下所示:
0000 &#8211; prev block
3BA3EDFD7A7B12B27AC72C3EFC81BCA9FB8AA4B1E5E4A &#8211; merkle root
29AB5F49 – 时间戳
FFFF001D – 目标HASH值
1DAC2B7C – 随机数
01 – 交易个数
01 – 输入
0000FFFFFFFF – 前一个输出
4D – 脚本长度
04FFFF001DA616E2FC6C6FB206FF6EC6FB73 – scriptsig脚本
FFFFFFFF – 序列号
01 – 输出
00F0 &#8211; 50 BTC的收益
43 – 脚本scriptPubKey的长度
4104678AFDB0FEF1ACD6A828EE0EA1F61DEB649F6BC3F4CEF38C4F2DE5C384DF7BA0B8D578A4C702B6BF11D5FAC &#8211; 脚本scriptPubKey
–锁定时间
JSON版本的创世块如下所示(译者按:JSON表示方式是译者加的,方便读者对照研究):
&#8220;hash&#8221;:&#c085aeff763ae46a2a6c172b3f1b60a8ce26f&#8221;,
&#8220;ver&#8221;:1,
&#8220;prev_block&#8221;:&#&#8243;,
&#8220;mrkl_root&#8221;:&#e1e4baab89f3abc87f618fab2127b7afdeda33b&#8221;,
&#8220;time&#6505,
&#8220;bits&#799,
&#8220;nonce&#6893,
&#8220;n_tx&#8221;:1,
&#8220;size&#,
&#8220;tx&#8221;:[
"hash":"4a5e1e4baab89f3abc87f618fab2127b7afdeda33b",
"vin_sz":1,
"vout_sz":1,
"lock_time":0,
"size":204,
"prev_out":{
"hash":"0000",
"coinbase":"04ffff001da616e2fc6c6fb206ff6ec6fb73"
&#8220;out&#8221;:[
"value":"50.",
"scriptPubKey":"04678afdb0fef1acd6a828ee0ea1f61deb649f6bc3f4cef38c4f2de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG"
&#8220;mrkl_tree&#8221;:[
"4a5e1e4baab89f3abc87f618fab2127b7afdeda33b"
3块链(Block Chain)
块链是所有共享的交易数据库,这些节点基于比特币协议参与到比特币网络中来。块链包含每一个曾在比特币系统执行过的。根据这个信息,人们可以找到任何时候任一个中的币数量,
每个区块包含前一个区块的值,这就使得从到当前块形成了一条块链,每个区块必定按时间顺序跟随在前一个区块之后,因为如果不知道前一块区块的HASH值就没法生成当前区块。要改变一个已经在块链中存在一段时间的区块,从计算上来说是不可行的,因为如果它被改变,它之后的每个区块必须随之改变。这些特性使得比特币非常困难,块链是比特币的最大创新。
如果一个区块是最长块链的最后一个区块,诚实的矿工只会在这个区块基础生成后续块(创建新块时通过引用该块来实现)。“长度”是被计算成块链的所有联合难度,而不是区块数目,尽管这个区别仅仅在防御几个潜在攻击时有用。如果一个块链中的所有区块和交易有效,则该块链有效,并且要以创世块开头。
对于块链中的任何区块来说,只有一条通向创世块的路径。然而,从创世块出发,却可能有分叉。当两个区块产生的时间仅相差几秒时,可能会产生包含一个区块的分叉。当以上现象出现时,矿工节点会根据收到区块的时间,在先收到的区块基础上继续挖矿。哪个区块的后续区块先出现,这个区块就被包括进主链,因为这条块链更长。在修正需要向后兼容的程序BUG后,出现过更严重的分叉。
短块链(或有效块链)中的区块没有作用,当比特币客户端转向另一个长块链时,短块链中所有有效的交易将被重新加入到交易队列池中,将被包括中另一个块中。短块链中的区块收益不会在长链中出现,因而这些收益实际上是丢失了,这就是比特币网络强化的100个区块成熟时间的存在原因。
在短块链中的区块经常被称为“孤立”区块,这是因为在长块链中的生产交易没有父区块,因而这些生产交易在交易列表的RPC调用中表现为孤立。几个矿池误解了这些信息并且把这些区块叫作“孤儿”,事实上这些区块都有父区块,可能还有子区块。
因为一个区块只能引用一个父区块,因而不可能把两个已经分叉的块链合并。
可以把块链算法用于非金融目的,请看:
块链以洪水协议被广播到网络上的所有节点,请看:
译者按:区块成熟时间(Maturation Time),是指矿工产生一个新区块得到25BTC收益后,要等过了100个块后,才能使用这些币;这个100区块时间,即收到100个确认的时间,就是区块成熟时间。为什么要设这个时间?如果这个区块在分叉时变成了孤立区块,25个BTC的收益将消失,如果矿工挖到比特币后可以马上花掉,就会造成后续的一系列接收者损失比特币,因而设定了100个确认的限制,在这之后产生分叉的可能性非常小,即使产生分叉,也只会影响矿工收益,不会影响到其他人。
4区块HASH算法(Block hashing Algorithm)
当挖矿时,你会经常对区块头进行HASH,你正在挖的区块也会时常更新,一个区域头包含以下数据项:
Version 版本
区域版本号
更新软件后,它指定了一个新版本号
hashPrevBlock 前一区块的HASH
前一区块的256位HASH值
新的区块进来时
hashMerkleRootHASH值
基于一个区块中所有交易的256位HASH值。
接受一个交易时
Time 时间戳
从 00:00 UTC开始到现在,以秒为单位的当前时间戳
每几秒就更新
Bits 当前目标HASH值
压缩格式的当前
Nonce 随机数
从0开始的32位随机
产生HASH时A (每次产生HASH随机数要增长)
区块内包含许多交易,它们通过Merkle根节点间接被HASH,因为所有交易不可能直接被HASH,HASH包含一个交易的区块所花的时间,和HASH包含1万个交易的区块一样。
目标HASH值的压缩格式是一个特殊的浮点编码类型,首字节是指数(仅使用了5个最低位),后3个字节是尾数,它能表示256位的数值。一个区块头的SHA256值必定要小于或等于目标HASH值,该区块才能被网络所接受,目标HASH越低,产生一个新区块的难度越大。
上述大部分数据项对所有用户是一致的,可能在时间戳上有些区别。(译者按:该段的以下内容来自:)如果当前区块的时间戳大于前11个区块的的平均时间戳,并且小于“网络调整时间(Network-Adjusted Time)”+2小时,则认为该时间戳是有效的。其中的“网络调整时间”是指与你相连接的所有节点的平均时间。当节点A连接到节点B时,A从B处得到一个UTC标准的时间戳,A先转换成本地UTC标准时间保存起来,网络调整时间等于所有节点的本地UTC时间+所有相连节点的偏移量平均值,然而,该网络时间永远不会调整到超过本地系统时间70分钟以上。
Nonce随机数通常不同,但是它以严格的线性方式增长,从0开始,每次HASH时都会增长,当Nonce溢出时(此事经常发生),生产交易的extraNonce项会增长,将改变Merkle树的根节点。
假定针对这些数据项,人们经常会独自产生同样序列号的HASH值,最快的CPU通常会赢。然而,两人产生同样的Merkle根节点基本是(或近似)不可能的,因为区块中的第一个交易是生产交易并且“发送”到你的独一无二的比特币地址。因为你的区块与其他人的区块不同,产生的HASH也肯定(近似肯定)不同,你计算的每个HASH和网络中的其他人一样,都有同样的获胜机会。
比特币使用:SHA256(SHA256(区块头))计算HASH,但你要注意字节序。
例如:以下python代码用于计算某一区块的HASH值,使用2011年6月的区块号125552的最小HASH值。该区块头建立上述6个数据项之上,并且以十六进制的小端结尾方式连接在一起。
&&& import hashlib
&&& header_hex = (&#0&#8243; +
&#ab7e569e8bcdf2de44d49ab2b&#8243; +
&#c2fffc8db1eb942ae710e951ed797f7affcfc122b&#8221; +
&#d74d&#8221; +
&#1a&#8221; +
&#95&#8243;)
&&& header_bin = header_hex.decode(&#8216;hex&#8217;)
&&& hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
&&& hash.encode(&#8216;hex_codec&#8217;)
&#8217;1dbd981feb173a4d0385ddc1aa2ae;
&&& hash[::-1].encode(&#8216;hex_codec&#8217;)
&#e8dadc5d38d0a473b144bf98bd1d&#8217;
注意:实际的HASH值是一串256位的数值,首部有许多零。当以大头端十六进制常数方式打印或存贮时,它的首部有许多零;如果它以小头端打印或存贮,零就会变换到尾部。例如:如果表示成字节串-最低(或者开头)的字节串地址显示最小位的数,这样就是小头端表示。的输出把HASH值显示为大头端表示的数值,因为数字的表示通常是-首部数字是最大数字,从左向右读。
举另外一个例子:是纯C版本,未进行任何优化、线程化和错误检查。
以下是同样的例子,用PHP写,没有任何优化。
//This reverses and then swaps every other char
function SwapOrder($in){
$Split = str_split(strrev($in));
for ($i = 0; $i & count($Split); $i+=2) {
$x .= $Split[$i+1].$Split[$i];
return $x;
//makes the littleEndian
function littleEndian($value){
return implode (unpack(&#8216;H*&#8217;,pack(&#8220;V*&#8221;,$value)));
$version = littleEndian(1);
$prevBlockHash = SwapOrder(&#a41b85b8b29ad444def299fee2e567eab02cd81&#8242;);
$rootHash = SwapOrder(&#fcf1b09288fcaff797d71e950e71ae42b91e8bdb2304758dfcffc2b620e3&#8242;);
$time = littleEndian();
$bits =littleEndian( );
$nonce = littleEndian();
//concat it all
$header_hex = $version . $prevBlockHash . $rootHash . $time . $bits . $
//convert from hex to binary
$header_bin
= hex2bin($header_hex);
//hash it then convert from hex to binary
$pass1 = hex2bin(
hash(&#8216;sha256&#8242;, $header_bin )
//Hash it for the seconded time
$pass2 = hash(&#8216;sha256&#8242;, $pass1);
//fix the order
$FinalHash = SwapOrder($pass2);
5难度(Difficulty)
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度。比特币网络有一个全局的区块难度,有效的区域必须有一个HASH值,该HASH值必须小于给定的目标HASH。矿池也会有一个自定义的共享难度用来设定产生股份的最低难度限制。
难度每过2016块改变一次,计算公式:difficulty = difficulty_1_target / current_target。目标(target)是一个256位长的数值。
有许多不同测量难度的方法,得到的difficulty_1_target可能不同。传统地,它表示一个HASH值,前32位为0,后续部分为1(称之为:矿池难度或pdiff),比特币协议把目标HASH表示成一个固定精度的自定义浮点类型,因而,比特币客户端用该值来估计难度(称之为:bdiff)。
难度经常被存贮在区块中,每个块存贮一个十六制的目标HASH的压缩表达式(称之为:Bits),目标HASH可以以预先定义的公式计算出来。例如:如果区块中压缩的目标HASH为0x1b0404cb,那十六进制的目标HASH如下所示:
0x0404cb * 2^(8*(0x1b - 3)) = 0x04CB
因而目标HASH为0x1b0404cb时,难度为:
0xFFFF0000 /
= 523983 (bdiff)
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /
= 817162 (pdiff)
其中:0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 是挖矿机使用的最大目标HASH值。
而0xFFFF0000则是比特币网络使用的浮点编码类型,后面的位数被缩短。
下面是一个快速计算比特币难度的方法,它的算法使用修改的泰勒序列(你可以看wikipedia上的教程),并且依赖记录来转换难度计算。
#include &iostream&
#include &cmath&
inline float fast_log(float val)
int * const exp_ptr = reinterpret_cast &int *&(&val);
int x = *exp_
const int log_2 = ((x && 23) & 255) &#;
x &= ~(255 && 23);
x += 127 && 23;
*exp_ptr =
val = ((-1.0f/3) * val + 2) * val &#f/3;
return ((val + log_2) * 0.f);
float difficulty(unsigned int bits)
static double max_body = fast_log(0x00ffff), scaland = fast_log(256);
return exp(max_body &#8211; fast_log(bits & 0x00ffffff) + scaland * (0x1d &#8211; ((bits & 0xff000000) && 24)));
int main()
std::cout && difficulty(0x1b0404cb) && std::
如果要看以上一般难度计算的数字原理,以下是python代码:
import decimal, math
l = math.log
e = math.e
print 0x00ffff * 2**(8*(0x1d &#8211; 3)) / float(0x0404cb * 2**(8*(0x1b &#8211; 3)))
print l(0x00ffff * 2**(8*(0x1d &#8211; 3)) / float(0x0404cb * 2**(8*(0x1b &#8211; 3))))
print l(0x00ffff * 2**(8*(0x1d &#8211; 3))) &#8211; l(0x0404cb * 2**(8*(0x1b &#8211; 3)))
print l(0x00ffff) + l(2**(8*(0x1d &#8211; 3))) &#8211; l(0x0404cb) &#8211; l(2**(8*(0x1b &#8211; 3)))
print l(0x00ffff) + (8*(0x1d &#8211; 3))*l(2) &#8211; l(0x0404cb) &#8211; (8*(0x1b &#8211; 3))*l(2)
print l(0x00ffff / float(0x0404cb)) + (8*(0x1d &#8211; 3))*l(2) &#8211; (8*(0x1b &#8211; 3))*l(2)
print l(0x00ffff / float(0x0404cb)) + (0x1d &#b)*l(2**8)
目前难度可以通过来得到,下一个难度可以通过 来获得。难度的变化情况可以查看。
最大难度大约=maximum_target / 1 (因为0会导致无穷大),这是一个非常大的数值,大约2^224;当maximum_target为最小1时,最小难度值为1。
难度根据以前2016个区块的产生时间,每2016块改变一次。预计每隔10分钟产生一个区块,因而产生2016个区块要花费2周时间。如果前2016个区块的产生时间多于两周,则难度会降低;否则难度就会增加。
为了找到新区块,该区块的HASH值必须小于目标HASH傎,实际上是一个在0到2^256-1之间的随机数,难度1的偏移量是:
0xffff * 2^208
难度D的偏移量是
(0xffff * 2^208)/D
在难度D下,为了找到新区块,我们预期要计算的HASH数量是
D * 2^256 / (0xffff * 2^208)
D * 2^48 / 0xffff
难度的设定,是为了以每10分钟一个区块的产生速度产生2016个区块,因而我们在600秒内计算 (D * 2^48 / 0xffff) 个HASH,这就意味着产生2016个区块的网络HASH速率(算力)是
D * 2^48 / 0xffff / 600
可以进一步简化为:
D * 2^32 / 600
以上公式有较好的精度。
在难度1下,算力是7Mhashes/秒,译者在翻译这篇文章时难度是5,006,860,589,这就意味着以前2016个区块被找到,其平均算力是:35.840PHash/s。
5,006,860,589 * 2^32 / 600 = 大约在35.840 PHash/s
发现一个区块的平均时间,可以用以下公式估计:
时间 = 难度 * 2^32 / 算力
其中,难度是当前的难度,算力你的矿机的计算能力,是hashes/s为单位,时间是你找到的两个区块之间的平均时间。举例:使用Python计算,算力为1Ghashes/s的矿机,难度在20000时,产生一个新区块的时间,(其中**表示指数):
$ python -c "print 20000 * 2**32 / 10**9 / 60 / 60.0"
意思就是:找到一个新区块要花费近1小时。
,这里有一些统计,可以帮助你预测收入。
,,能帮你计算收支。
记住:这只是可能性,并不能保证你每天都能找到新区块。建议加入矿池挖矿,通过共享区块收益的方式,能得到稳定长期的回报。
本文译自比特币WIKI:, ,,,
版权声明:
作者保留权利。文章为作者独立观点,不代表巴比特立场。
您需要登录后才可以回复
这篇科普文章不错!!!谢谢分享!
非常清晰的科普文章:比特币块链和挖矿原理 | 巴比特
比特币块链和挖矿原理
中国 区烤 猫 股 东交 流 : 大家可以在群 里 互相 沟 通 烤猫 最新 消 息!也方 便新人了解 烤猫
资助0.03btc
5b2dc3efe25f81abb1db50e39cb
//@宋欢平: 好干的干货。大赞
//@真聊比特币: 转发微博
//@瑞波支付: 转发微博
回复@我看比特币:那个,搞什么方面的研发?计算机研发?
回复@如意20寸:只要干掉曼城,切尔西就不是问题
『比特币块链和挖矿原理 | 巴比特』http://t.cn/8sIlh7Z
BTC-E 上线 BTC/CHN了 哈哈哈
//@BTS_Newsroom:怒转!
学习了『比特币块链和挖矿原理 | 巴比特』http://t.cn/8sIlh7Z
//@宋欢平:好干的干货。大赞
//@瑞波支付:转发微博
Yes,you are the man.
回复@本名朱立-青:最好是搞研发的
请问,我要有什么知识背景,才能看懂那么多专业术语和代码
好干的干货。大赞
//@王立仁是光头汉:必须要看的文章
必须要看的文章
这个干货,必须支持传播[给力]
这个干货,必须支持传播[给力]
//@胡翌霖://@第一比特币: 怒赞[good]
写的不详细。
//@真聊比特币:转发微博
//@胡翌霖://@第一比特币: 怒赞[good]
//@第一比特币: 怒赞[good]
TCL液晶电视等你来赢期待好运降临,支持好活动~!~!
怒赞[good]
比特币核心技术的第五个翻译和编写稿来了-《比特币块链和挖矿原理》,http://t.cn/8sIlh7Z,综合了比特币区块、创世块、块链技术、挖矿原理、难度、目标HASH等众多技术资料,翻译和编写而成。比特币块链是比特币的最大创新所在,值得一看。

我要回帖

更多关于 点点币怎么挖矿 的文章

 

随机推荐