区块链挖矿是什么意思?区块链如何挖矿?

《网易星球》是一款创新型数字理财软件,这款软件不仅能为你提供独特的区块链生态价值共享服务,还可以让你在这款软

小编今天要为大家带来一款基于区块链设计开发的生态链价值增值应用《矿世太空》app,用户可以通过软件获得收益,

《链克口袋》是一款利用区块链接进行挣钱的软件。用户在这里可以进行智能硬件的分享,帮助用户更好的共享计算机的资

《蜂巢星球》是一款为用户带来全新虚拟货币玩法的软件。本软件可以帮助用户更好的记录自己的虚拟货币,并且让自己的

《换币网》是一款为用户带来区块连接资产流动的软件。本软件可以让用户购买多国的法币,并且支持微信、支付宝付款,

《one区块链》是一款为用户带来线上的虚拟货币金融服务的软件。本软件可以为用户带来集交易、挖矿以及社交为一体

《链克狐》是一款基于区块链接开发的虚拟货币理财软件。本软件可以为用户带来类似区块链接的玩法,让用户在这里更好

《链养鸡》是一款区块链接技术与实际经营相结合的软件。本软件将将区块链接技术与农业相结合,帮助用户饲养标准化的

《火链财经》是一款为用户带来专业的区块数字链资讯服务的软件。本软件可以为用户带来便捷的全球性的区块链接新闻资

《币世界》是款非常非常好用的理财神器。说起区块链可能大家第一印象就是比特币了。该软件发布信息的速度比官网还快

《满币网》是款非常非常流行的虚拟货币。该软件类似火爆的比特币,在这里用户已进行专业的投资。例比特币、莱特币、

《链世界》是一款为用户带来关于区块链接的最新资讯软件。本软件可以为用户提供内容丰富、数据准确的最新数据,帮助

《金块链》是款非常值得信赖的数字货币区块链挖矿平台。该软件界面简约清爽无广告,使用安全无插件无病毒。这里拥有

《宝石星球》是一款能让你轻松赚取收益的区块链理财app,这款软件不仅能为你提供全新的掌上赚钱方式,还可以让你

《凯撒钱包》是款专业数字资产交易平台打造的区块链钱包App,该软件界面简约清爽无广告,操作使用简单。该软件支

《爱得钻》是款类似网易的星球的区块链软件。用户可以通过邀请码领取丰富的奖励,但是仅能使用10次,次数有限,你

《度宇宙》是款百度官方打造的全新的区块链产品App。该软件类似于网易的网易星球,用户通过收集“元素”组成

最新最前沿的区块链接信息尽在《火讯财经》,本软件可以为用户带来权威有深度的关于区块链接的细心,为用户实时紧跟

《Vpay》是款非常受大家青睐的理财神器。该软件界面简约清爽无广告,使用简单易上手。该软件能够让用户在跨国消

《星际家园》是款非常受大家青睐的区块链应用产品。该软件由苏宁易购倾情打造,让你在这里感受到与众不同的商业生态

《币友》是款非常受大家青睐的区块链应用软件。有了它你可以随时随地的了解最新区块链动态,让你对区块链资讯一手掌

科技重点实验室博士 



       比特币在国内已经众所周知,但是技术研究并未有效开展,大部分人处于知道和了解程度,目前比特圈中许多人对比特币能做什么,同样了解不多。一个重要原因是大多数比特币核心资料都是英文,很少有人能静心看完如此繁杂的英文资料。本人博士论文的研究方向是比特币,在研究其英文技术的同时,拟对一些重要资料进行翻译,让更多的圈内人对比特币有更多的理解。


       本文主题是比特币区块、创世块、挖矿原理、难度等的技术资料,综合了比特币官方威客上的众多资料翻译和编写而成。



       每个区块包括一些或所有近期交易、前一个区块的引用、以及其他数据。它还包括一个挖矿难度的答案-该答案对每个区块是唯一的。新区块如果没有正确答案,不能被发送到网络中-“挖矿”的过程本质上是在竞争中 “解决”当前区块。每个区块中的数学问题难以解决,但是一旦发现了一个有效解,其他网络节点很容易验证这个解的正确性,对于给定的区块可能有多个有效解-但对于要解决的区块来说只需一个解。


       因为每解决一个区块,都会得到新产生的比特币奖励,每个区块包含一个记录,记录中的比特币地址是有权获得比特币奖励的地址。这个纪录被称为生产交易、或者coinbase交易,它经常是每个区块的第一个交易。每个块区生产的比特币数量是50个,每产生21万个区块后减少一半(时间大约是4年)。


       发送者在网络中广播比特币交易,所有试图解决区块的矿工节点,收集了这些交易记录,把它们加到矿工节点正在解决的区块中。


       挖矿难度由比特币网络自动调整,使之实现平均每小时解决6个区块的目标。每2016个区块(大约两周)后,所有客户端把新区块的实际数目与目标数量相比较,并且按照差异的百分比调整目标HASH值,来增加(或降低)产生区块的难度。


       因为所有区块包含前一个区块的引用,现存的所有区块的集合可以说是形成了一条链,然而,块链有可能产生暂时分叉-举个例子,如果两个矿工同时为一个区块产生不同的有效解,两者相互不知。

网络会在一段短时间内消除这些分叉,该链仅有一个分支存活。


       客户端接受“最长”块链作为有效链,整条块链的“长度”是指具有最大难度的链,而不是指具有最多区块数量的块链,可防止某些人创建大量低难度区块,故意使块链分叉,并且让网络接受它成为“最长”的块链。


       非标准区块:是指包括非标准交易的区块,交易的标准与否,要参考比特币客户端源代码中的IsStandard()函数。客户端不会传播非标准交易,但是某些矿池的矿工会把合法的非标准交易加入到区块中,形成非标准区块,客户端在计算难度最长的块链时,会考虑非标准区块。






       对的,区块用来确认交易在某一特定时间存在,即使比特币全部被挖完,交易还是会发生,所以只要人们还在交易比特币,区块还会被创建。





       没有解决一个区块的1%的说法,你不会在解决区块上有任何进展,在工作24小时后,你解决一个区块的机率和24小时前一样,若非信仰比特币就是众所周知的赌徒谬误。







       块链是所有比特币节点共享的交易数据库,这些节点基于比特币协议参与到比特币网络中来。块链包含每一个曾在比特币系统执行过的交易。根据这个信息,人们可以找到任何时候任一个地址中的币数量,


       每个区块包含前一个区块的HASH值,这就使得从创世块到当前块形成了一条块链,每个区块必定按时间顺序跟随在前一个区块之后,因为如果不知道前一块区块的HASH值就没法生成当前区块。要改变一个已经在块链中存在一段时间的区块,从计算上来说是不可行的,因为如果它被改变,它之后的每个区块必须随之改变。这些特性使得双花比特币非常困难,块链是比特币的最大创新。


       如果一个区块是最长块链的最后一个区块,诚实的矿工只会在这个区块基础生成后续块(创建新块时通过引用该块来实现)。“长度”是被计算成块链的所有联合难度,而不是区块数目,尽管这个区别仅仅在

几个潜在攻击时有用。如果一个块链中的所有区块和交易有效,则该块链有效,并且要以创世块开头。


       对于块链中的任何区块来说,只有一条通向创世块的路径。然而,从创世块出发,却可能有分叉。当两个区块产生的时间仅相差几秒时,可能会产生包含一个区块的分叉。当以上现象出现时,矿工节点会根据收到区块的时间,在先收到的区块基础上继续挖矿。哪个区块的后续区块先出现,这个区块就被包括进主链,因为这条块链更长。在修正需要向后兼容的程序BUG后,出现过更严重的分叉。


       短块链(或有效块链)中的区块没有作用,当比特币客户端转向另一个长块链时,短块链中所有有效的交易将被重新加入到交易队列池中,将被包括中另一个块中。短块链中的区块收益不会在长链中出现,因而这些收益实际上是丢失了,这就是比特币网络强化的100个区块成熟时间的存在原因。


       在短块链中的区块经常被称为“孤立”区块,这是因为在长块链中的生产交易没有父区块,因而这些生产交易在交易列表的RPC调用中表现为孤立。几个矿池误解了这些信息并且把这些区块叫作“孤儿”,事实上这些区块都有父区块,可能还有子区块。



       区块成熟时间(Maturation Time),是指矿工产生一个新区块得到25BTC收益后,要等过了100个块后,才能使用这些币;这个100区块时间,即收到100个确认的时间,就是区块成熟时间。为什么要设这个时间?如果这个区块在分叉时变成了孤立区块,25个BTC的收益将消失,如果矿工挖到比特币后可以马上花掉,就会造成后续的一系列接收者损失比特币,因而设定了100个确认的限制,在这之后产生分叉的可能性非常小,即使产生分叉,也只会影响矿工收益,不会影响到其他人。








       目标HASH值的压缩格式是一个特殊的浮点编码类型,首字节是指数(仅使用了5个最低位),后3个字节是尾数,它能表示256位的数值。一个区块头的SHA256值必定要小于或等于目标HASH值,该区块才能被网络所接受,目标HASH越低,产生一个新区块的难度越大。


       上述大部分数据项对所有用户是一致的,可能在时间戳上有些区别。(译者按:该段的以下内容来自:)如果当前区块的时间戳大于前11个区块的的平均时间戳,并且小于“网络调整时间(Network-Adjusted Time)”+2小时,则认为该时间戳是有效的。其中的“网络调整时间”是指与你相连接的所有节点的平均时间。当节点A连接到节点B时,A从B处得到一个UTC标准的时间戳,A先转换成本地UTC标准时间保存起来,网络调整时间等于所有节点的本地UTC时间+所有相连节点的偏移量平均值,然而,该网络时间永远不会调整到超过本地系统时间70分钟以上。



       假定针对这些数据项,人们经常会独自产生同样序列号的HASH值,最快的CPU通常会赢。然而,两人产生同样的Merkle根节点基本是(或近似)不可能的,因为区块中的第一个交易是生产交易并且“发送”到你的独一无二的比特币地址。因为你的区块与其他人的区块不同,产生的HASH也肯定(近似肯定)不同,你计算的每个HASH和网络中的其他人一样,都有同样的获胜机会。




       难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度。比特币网络有一个全局的区块难度,有效的区域必须有一个HASH值,该HASH值必须小于给定的目标HASH。矿池也会有一个自定义的共享难度用来设定产生股份的最低难度限制。



       有许多不同测量难度的方法,得到的difficulty_1_target可能不同。传统地,它表示一个HASH值,前32位为0,后续部分为1(称之为:矿池难度或pdiff),比特币协议把目标HASH表示成一个固定精度的自定义浮点类型,因而,比特币客户端用该值来估计难度(称之为:bdiff)。




       其中,难度是当前的难度,算力你的矿机的计算能力,是hashes/s为单位,时间是你找到的两个区块之间的平均时间。举例:使用Python计算,算力为1Ghashes/s的矿机,难度在20000时,产生一个新区块的时间,(其中**表示指数):要花费近1小时.

随着近期比特币以及以太坊挖矿热潮的兴起,人们很容易对此浮想联翩。对于刚进入该领域的新手而言,他们会听到各种故事,比如许多人将GPU堆满仓库来疯狂挖矿,每月能挖到价值数百万美元的加密货币。

随着近期比特币(Bitcoin)以及以太坊(Ethereum)挖矿热潮的兴起,人们很容易对此浮想联翩。对于刚进入该领域的新手而言,他们会听到各种故事,比如许多人将GPU堆满仓库来疯狂挖矿,每月能挖到价值数百万美元的加密货币(cryptocurrency)。那么就是什么是密币挖矿?挖矿的原理是什么?怎么样才能编写自己的挖矿算法?

在本文中,我们会给大家一一解答这些问题,然后介绍如何编写自己的挖矿算法。我们将这种算法称为Proof of Work(工作量证明)算法,该算法是比特币及以太坊这两种最流行的加密货币的基础。无需担忧,我们会给大家介绍得明明白白。

物以稀为贵,对加密货币来说也是如此。如果任何人在任何时间都可以随意生产任意多的比特币,那么比特币作为一种货币则毫无价值可言(稍等,这不正是美联储常干的事吗……)。比特币算法每隔10分钟就会向比特币网络中的获胜成员颁发一次比特币,总量大约在122年内会达到最大值。这种颁发机制可以将通货膨胀率控制在一定范围内,因为算法并没有在一开始就给出所有密币,而是随着时间推移逐步产出。

在这种算法下,为了获取比特币奖励,矿工们需要付出“劳动”,与其他矿工竞争。这个过程也称为“挖矿”,因为该??程类似于黄金矿工的采矿过程,为了找到一点黄金,工人们也需要付出时间及精力最终才能获取胜利果实(有时候也会竹篮打水一场空)。

比特币算法会强制参与者(或节点)进行挖矿,同时相互竞争,确保比特币产出速度不至于太快。

如果在Google上搜索“如何挖比特币?”,我们会看到大量结果,纷纷解释挖掘比特币需要节点(用户或者主机)来解决复杂的。虽然这种说法从技术角度来看没有问题,但简单称之为“数学”问题显然有点太过于僵硬,挖矿的过程其实非常有趣。我们要了解一些密码学知识以及哈希算法,才能理解挖矿的原理。

单向加密以人眼可读的数据作为输入(如“Hello world”),然后通过某个函数生成难以辨认的输出。这些函数(或者算法)在性质及复杂度上各不相同。算法越复杂,想逆向分析就越难。因此,加密算法在保护数据(如用户密码以及军事代码)方面至关重要。

以非常流行的SHA-256算法为例,我们可以使用来生成SHA-256哈希值。比如,我们可以输入“Hello world”,观察对应的哈希结果:

我们可以重复计算“Hello world”的哈希值,每次都能得到相同的结果。在编程中,输入相同的情况下,如果每次都得到同??的输出,这个过程称之为“幂等性(idempotency)”。

对于加密算法而言,我们很难通过逆向分析来推导原始输入,但很容易验证输出结果是否正确,这是加密算法的一个基本特性。比如前面那个例子,我们很容易就能验证“Hello world”的SHA-256哈希值是否正确,但很难通过给定的哈希值来推导原始输入为“Hello world”。这也是我们为何将这类加密方法称为单向加密的原因所在。

比特币使用的是双重SHA-256算法(Double SHA-256),也就是说它会将“Hello world”的SHA-256哈希值作为输入,再计算一次SHA-256哈希。在本文中,为了方便起见,我们只计算一次SHA-256哈希。

理解加密算法后,??们可以回到密币挖矿这个主题上。比特币需要找到一些方法,让希望获得比特币的参与者能通过加密算法来“挖矿”,以便控制比特币的产出速度。具体说来,比特币会让参与者计算一堆字母和数字的哈希值,直到他们算出的哈希值中“前导0”的位数超过一定长度为止。

比如,回到前面那个,输入“886”后我们可以得到前缀为3个0的哈希值。

问题是我们如何才能知道“886”的哈希值开头包含3个零呢?这才是重点。在撰写本文之前,我们没有办法知道这一点。从理论上讲,我们必须尝试字母和数字的各种组合,对结果进行测试,直到获得满足要求的结果为止。这里我们事先给出了“886”的哈希结果以便大家理解。

任何人都能很容易验证出“886”是否会生成3位前导零的哈希结果,这样就能证明我们的确做了大量测试、检查了大量字母和数字的组合,最终得到了这一结果。因此,如果我们是???一个获得这个结果的人,其他人可以快速验证“886”的正确性,这个工作量的证明过程可以让我赢得比特币。这也是为什么人们把比特币的一致性算法称之为Proof-of-Work(工作量证明)算法。

但如果我的运气爆表,第一次尝试就生成了3个前导零结果呢?这种事情基本不可能发生,偶然的节点在首次尝试时就成功挖掘新块(向大家证明他们的确做了这项工作)的可能性微乎其微,相反其他数百万个节点需要付出大量工作才能找到所需的散列。你可以继续尝试一下,随便输入一些字母和数字的组合,我打赌你得不到3个前导零的结果。

比特币的约束条件比这个例子更加复杂(要求得到更多位前导零!),并且它能动态调整难度,以确保工作量不会太轻或者太重。请记住,比特币算法的目标是每隔10分钟产出一枚比特币。因此,如果太多人参与挖矿,比特币需要加大工作量证明难度,实现难度的动态调整。从我们的角度来看,调整难度等同于增加更多位前导零。

因此,大家可以明白比特币的一致性算法比单纯“解决数学难题”要有趣得多。

背景知识已经介绍完毕,现在我们可以使用Proof-of-Work算法来构建自己的区块链(Blockchain)程序。我选择使用Go语言来实现,这是一门的语言。

在继续之前,我建议你阅读我们之前的一篇博客:<a href=”/davecgh/go-spew/spew:帮助我们在终端中直接查看结构规整的区块链信息。

2、/joho/godotenv:可以从根目录中的.env文件中读取环境变量。

首先我们可以在根目录中创建一个.env文件,用来存放后面需要的一个环境变量。.env文件只有一行:ADDR=8080

现在编写POST处理函数???这个函数可以实现新区块的添加过程。我们使用Postman来发起POST请求,向http://localhost:8080发送JSON数据(如{“BPM”:60}),其中包含前面你记录下的那个脉搏次数。

如果你还想继续深入学习,可以考虑了解一下Proof of Stake(权益证明)。尽管目前大多数区块链使用Proof of Work作为一致性算法,但公众越来越关注Proof of Stake。人们普遍认为,未来以太坊将从Proof of Work迁移至Proof of Stake。

本文来源于360安全客,原文地址:

我要回帖

更多关于 区块链挖矿是什么意思 的文章

 

随机推荐