教程网

您现在的位置是: 首页 > 知识

比特币挖矿算法具体是什么?比特币算法原理详解

比特币挖矿算法具体是什么?比特币算法原理详解
比特币挖矿算法具体是什么?比特币算法原理详解,比特币是区块链的前身实现,区块链是比特币的后期提炼;如果初次接触比特币,当你想和别人交流的时候,面对的第一个概念可能就是挖矿,

比特币挖矿算法具体是什么?比特币算法原理详解,比特币是区块链的前身实现,区块链是比特币的后期提炼;如果初次接触比特币,当你想和别人交流的时候,面对的第一个概念可能就是挖矿,比特币目前使用的共识机制是POW,使用的挖矿算法是SHA2-256,那么,比特币挖矿算法具体是什么?

1、block的版本version

2、上一个block的hash值: prev_hash

3、需要写入的交易记录的hash树的值: merkle_root

4、更新时间: ntime

5、当前难度: nbits

挖矿的过程就是找到x使得

SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) TARGET

上式的x的范围是0~2^32,TARGET可以根据当前难度求出的。除了x之外,你还可以尝试改动merkle_root和ntime。由于hash的特性,找这样一个x只能暴力搜索。

一旦你找到了x,你就可以广播一个新的block,其他客户端会验证你的block是否合法。如果你的block被接受,由于每个block中的第一笔交易必须是将新产生25个比特币发送到某个地址,当然你会把这个地址设为你所拥有的地址来得到这25个比特币。

比特币从开始到现在的每一笔交易记录都保存在网络上,整个比特币网络维护的一个巨大的交易记录文件(现在大约12G)。这个文件的更新周期平均是10分钟,新加入的交易记录叫做一个block,而这个硕大的文件由一串block组成,叫做block chain.

为什么是25个比特币?

这是规定。最初是50个比特币,每产生剩下比特币的一半,这个所得就会减半,这样最终能产生的比特币总量趋近于2100万。如果你现在仍然声称挖到了50个比特币,这是不会被其他客户端接受的,这个block就算白挖了。

怎么保证更新周期平均是10分钟?

TARGET越小,解出x的难度就越大,每产生2016个block(约14天),网络会根据这段时间产生新block的平均间隔调整之后的TARGET。

是不是计算速度最快的人总是先解出来?

不是。你总是想把挖矿所得据为己有,所以每个人在计算时,发送挖矿所得的地址是不一样的,这样merkle_root就不同,也就是说每个人是从不同的初始状态开始求解的。

同时解出来怎么办?

blockchain会出现分叉,部分客户端接受了A,部分接受了B,直到某个分支变得更长,所有人就会选择这个更长的分支。如果你挖出来的不幸没有被选中,你的挖矿所得就无效了。

既然选更长的分支,那我用很低的难度去求解怎么办?

客户端在众多分支中找到符合当前难度且最长的。

这些计算浪费了吗?

如果你要把一笔钱花两次,你需要这么做。挖到一个新的block,但是藏着不广播,并继续挖矿。找到商家A,支付比特币,让网络上的其他人挖到block并写入这笔交易记录。找到商家B,支付比特币,写入自己挖的block。如果你能抢先挖到两个block并广播出去,所有人会以你这个更长的分支为当前的blockchain,商家A收到的比特币就不被承认了。这样攻击成功的概率取决于你计算hash的速度。整个网络的计算力足够高的话,这样的攻击或者成功率极低,或者成本极大。

比特币的SHA-256算法是什么?SHA(Secure Hash Algorithm),中文名为安全散列算法,是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。而比特币开发使用椭圆曲线算法生成公钥和私钥,选择的是SHA-256.

安全散列算法生成的公钥是33字节的大数,私钥是32字节的大数,钱包文件wallet.dat中直接保存了公钥和私钥。我们在接收和发送比特币时用到的比特币地址是公钥经过算法处理后得到的,具体过程是公钥先经过安全散列算法算法处理得到32字节的哈希结果,再经过RIPEMED算法处理后得到20字节的摘要结果,再经过字符转换过程得到我们看到的地址。

这个字符转换过程与私钥的字符转换过程完成相同,步骤是先把输入的内容(对于公钥就是20字节的摘要结果,对于私钥就是32字节的大数)增加版本号,经过连续两次安全散列算法算法,取后一次哈希结果的前4字节作为校验码附在输入内容的后面,然后再经过Base58编码,得到字符串。

需要以下参数

1、block的版本version

2、上一个block的hash值: prev_hash

3、需要写入的交易记录的hash树的值: merkle_root

4、更新时间: ntime

5、当前难度: nbits

挖矿的过程就是找到x使得

SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET

上式的x的范围是0~2^32, TARGET可以根据当前难度求出的。除了x之外,你还可以尝试改动merkle_root和ntime。由于hash的特性,找这样一个x只能暴力搜索。

一旦你找到了x,你就可以广播一个新的block,其他客户端会验证你的block是否合法。如果你的block被接受,由于每个block中的第一笔交易必须是将新产生25个比特币发送到某个地址,当然你会把这个地址设为你所拥有的地址来得到这25个比特币。

比特币从开始到现在的每一笔交易记录都保存在网络上,整个比特币网络维护的一个巨大的交易记录文件(现在大约12G)。 这个文件的更新周期平均是10分钟,新加入的交易记录叫做一个block,而这个硕大的文件由一串block组成,叫做block chain.

为什么是25个比特币?

这是规定。最初是50个比特币,每产生剩下比特币的一半,这个所得就会减半,这样最终能产生的比特币总量趋近于2100万。如果你现在仍然声称挖到了50个比特币,这是不会被其他客户端接受的,这个block就算白挖了。

怎么保证更新周期平均是10分钟?

TARGET越小,解出x的难度就越大,每产生2016个block(约14天),网络会根据这段时间产生新block的平均间隔调整之后的TARGET。

是不是计算速度最快的人总是先解出来?

不是。你总是想把挖矿所得据为己有,所以每个人在计算时,发送挖矿所得的地址是不一样的,这样merkle_root就不同,也就是说每个人是从不同的初始状态开始求解的。

同时解出来怎么办?

block chain会出现分叉,部分客户端接受了A,部分接受了B,直到某个分支变得更长,所有人就会选择这个更长的分支。如果你挖出来的不幸没有被选中,你的挖矿所得就无效了。

既然选更长的分支,那我用很低的难度去求解怎么办?

客户端在众多分支中找到符合当前难度且最长的。

这些计算浪费了吗?

如果你要把一笔钱花两次,你需要这么做。挖到一个新的block,但是藏着不广播,并继续挖矿。找到商家A,支付比特币,让网络上的其他人挖到block并写入这笔交易记录。找到商家B,支付比特币,写入自己挖的block。如果你能抢先挖到两个block并广播出去,所有人会以你这个更长的分支为当前的block chain,商家A收到的比特币就不被承认了。这样攻击成功的概率取决于你计算hash的速度。整个网络的计算力足够高的话,这样的攻击或者成功率极低,或者成本极大。

什么是区块链哈希算法?哈希算法原理和用途,看到这个标题,相信很多朋友都会感到非常的疑惑,接触数字货币这么长时间以来,确实是听都没有听说过,小编也是偶然在浏览论坛的时候,从一位朋友的口中知道的。开始小编还没有放在心上,只是随意的查阅了一番,结果真的是不看不知道,一看吓一跳,这个东西对于我们的帮助真的是特别大,小编也是迫不及待的要分享给各位朋友了,连夜整理了资料,希望能够给大家带来帮助。简言之,哈希算法是将任意长度的字符串映射为较短的固定长度的字符串。比特币则是使用SHA-256摘要算法对任意长度的输入给出的是256bit的输出。那么,加密货币中哈希算法的应用有哪些?

加密哈希函数:

一个加密哈希函数有如下特性:

确定性 :无论在同一个哈希函数中解析多少次,输入同一个A总是能得到相同的输出h(A)。

高效运算 :计算哈希值的过程是高效的。

抗原像攻击(隐匿性) :对一个给定的输出结果h(A),想要逆推出输入A,在计算上是不可行的。

抗碰撞性(抗弱碰撞性) :对任何给定的A和B,找到满足B≠A且h(A)=h(B)的B,在计算上是不可行的。

细微变化影响 :任何输入端的细微变化都会对哈希函数的输出结果产生剧烈影响。

谜题友好性 :对任意给定的Hash码Y和输入值x而言,找到一个满足h(k|x)=Y的k值在计算上是不可行的。

加密哈希函数对区块链的安全性和挖矿有巨大的帮助。

数据结构:

有两种数据结构对于理解区块链非常重要:链表和哈希指针。

链表:链表是依次按顺序连接而成的数据区块,如下图所示:

在链表中的每个区块都通过一个指针指向另一个区块。

指针:指针是包含其他变量地址的变量。因此,正如其名,指针就是指向其他变量的变量。

哈希指针:哈希指针不仅有其他变量的地址,还有该变量中数据的哈希值。那么,这对区块链而言有何帮助呢?

区块链的构成:

区块链本质上是一个链表,其中的每个新区块都包含一个哈希指针。指针指向前一区块及其含有的所有数据的哈希值。借此特性,区块链拥有了不可更改性(immutability)的伟大特质。假设在上面的图表中,有人尝试篡改1号区块中的数据。请记住加密哈希函数的一个重要特质是任何输入端的细微变化都会对哈希函数的输出结果产生剧烈影响。

那么,即便有人尝试对1号区块里的数据进行细微的改写,也会使得存储在2号区块里的1号区块的哈希值产生巨大的变化。接下来,这将导致2号区块的哈希值发生变化,进而影响存储在3号区块的哈希值。以此类推,最终整条区块链上的数据都会发生变化。这种通过冻结整条链条来修改数据的方式几乎是不可能做到的。正因如此,区块链被认定为是不可篡改的。

每个区块都有自己的梅克尔根(Merkle Root)。现在,正如你已知道的,每个区块里都包含多笔交易。如果将这些交易按线性存储,那么在所有交易中寻找一笔特定交易的过程会变得无比冗长。

而这就是我们使用梅克尔树的原因。

在梅克尔树中,所有个体交易通过哈希算法都能向上追溯至同一个根。这就使得搜索变得非常容易。因此,如果想要在区块里获取某一特定的数据,我们可以直接通过梅克尔树里的哈希值来进行搜索,而不用进行线性访问。

好了,通过对以上的总结,大家对虚拟币的各个方面有没有了很深的了解呢?希望这篇文章会解答一下您的疑惑和让您对您的币种更加了解,会更加深入了解虚拟币。希望大家收获多多,钱包越来越鼓最后虚拟币也有一定的风险,希望大家量力而行,要谨慎客观的分析各方面的因素,综合自己的自身条件来考虑到底要不要选择一个币种。希望本篇文章会帮助到你。如果有其他需要,大家也可以继续多关注关注我们的文章,会不定时的推送,希望大家通过阅读我们的文章对您的虚拟币会有一个更加清晰的了解那么谢谢您的阅读。

近些年,在加密货币经历“混乱时期”后,区块链再次火爆起来,受到了各方的极大关注与重视,成为资本市场和各领域关注的焦点,就连朋友圈中的探讨和分享也让人目不暇接。那么,区块链核心算法有哪些?下面就来介绍下。

【一】:拜占庭协定

拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。

在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。

由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识。

【二】:非对称加密技术

在上述拜占庭协定中,如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。谁都可以发起进攻的信息,但由谁来发出呢?其实这只要加入一个成本就可以了,即:一段时间内只有一个节点可以传播信息。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。

 1/3    1 2 3 下一页 尾页