讲讲我对比特币和区块链的认知,挖矿不难,挖到难

比特币的概念

众所周知,比特币是数字货币
比特币相比我们的纸质货币,有以下优点:
1、财产可控,不像银行可以冻结你的账户,比特币不受他人控制
2、无通胀烦恼。银行可以根据经济情况,去印刷更多的钱,但比特币的总量是不变的(2100万个)。
3、比特币无假钞。这是比特币的一个明显优势
4、比特币的交易,不受国家地域限制。

区块链概念

密码朋克中的一个重要的人:中本村,2008年《比特币:一个点对点的电子现金系统》。把区块链中的技术提炼出来,慢慢就有了区块链的概念。

区块链是一系列技术的集合。
比特币系统中的数据是由一个个的区块存储的,并且通过hash的方式把一个个区块连接起来,就形成了一个区块的链条,所以把它称之为区块链。

区块链应用场景:

1、记账方面
股权交易等
2、资产方面
交易,结算,支付
3、不可篡改
各种证明,众筹等
4、点对点
共享经济等,解决互相不信任的问题
5、隐私
匿名交易,没有人知道我有多少比特币,只有当我交易的时候去验证能不能交易

比特币的去中心化

中心化就是所有数据都记录在一个地方,包括新增删除验证查询等‘
去中心化就是数据保存在每个地方,那直接就会引出两个问题:
如何验证和所有权问题
简单点就说,如何证明你的就是你的,以及如何证明你说的就是对的

验证:使用hash函数

这里的hash函数,可以理解为md5加密的那个hash,最显著的一个特点就是不可逆。
举例,Hash(a)得到b,那只要a发生变化,比如Hash(a1)就得不到b了,同时我们也不能通过b来反向得到a。
有了这个基础,那我们可以把序号+时间戳+hash值当成区块的头,
每次用hash值和交集记录,得到新的hash值,即形成新的区块头。
如下图,每个区块就是一个交易记录的打包,每个人最终只需要比对最后一个hash值是否和自己的一致,即可知道是否正确。

在这里插入图片描述

所有权:非对称加密技术

先类比银行,银行是通过我们在开户的时候,输入自己的信息,设置密码等一系列操作,从而让银行把这个账号的所有权给予我们自己。
而比特币的转账,是没有类似银行这样的第三方的。
比特币支付,主要有三个参数记录:出账地址,收账地址,和交易金额。
地址是公开的,而我们本地就会有一个私钥,私钥是生成这个地址的唯一来源,只有这个私钥,才能生成地址,而地址并不能反推出私钥。
所以说,私钥是绝对保密的,而且忘记后不能找回,谁有私钥,谁就可以交易

那又有一个问题:如何在不泄露私钥的前提下,证明我们有这个地址的私钥
那就是使用签名。
学习过https的同学,对这块应该很熟悉了。
签名过程:
1、先对原始交易记录hash运算,得到摘要信息7a7b34c5d
2、用摘要信息7a7b34c5d和私钥a6d77a88e0进行签名运算,得到签名信息5c3c5d2d6a

在这里插入图片描述

得到签名信息后,就会对所有账户进行循环广播通知,广播通知的信息包括:
交易原始信息:出款地址,收款地址,交易金额
签名信息:5c3c5d2d6a
这个广播操作,相当于说对所有人说,我是出款地址,我向收款地址交易了多少多少,签名信息是5c3c5d2d6a,,大家帮我验证一下
收到广播的节点,开始验证过程:
在这里插入图片描述

扫描二维码关注公众号,回复: 10944666 查看本文章

很容易理解:
签名就是非对称加密过程,即用付款信息的hash值和私钥进行加密,得到签名信息
而验证就是非对称解密过程,即用签名信息和付款地址进行解密,得到付款信息的hash值
这样问题就解决了,账户交易所有权由私钥控制,并且私钥也没有泄露出去。

什么是挖矿

听过挖矿的人,大概都知道挖矿很耗电,就是不断计算。那为什么要不断计算呢?

上面说的验证,也就是记账,其实是很消耗资源的,因为每天不知道多少比交易,没有节点会甘愿免费验证。
所以比特币系统提供了一种奖励机制:记账就有奖励。
有了这种奖励机制,大家又会争着记账,于是有了以下规则:
规则1:一段时间内(一般是10分钟)只有一个人可以记账成功。
规则2:可以通过解决密码学难题,即提高工作量来竞争获得唯一记账权。
规则3:其他节点只是复制记账结果。
所以说,谁能解决密码学难题,谁就更有可能记账,从而得到奖励
那什么是这个密码学难题呢?
我们之前说到,一次验证就是hash(上一个hash值,交易记录)得到新的hash值
这样有点简单了,几乎所有人都可以快速完成。
那为了保证一段时间内,比较容易的选出一个人,就必须要提高记账的难度。
于是,hash方式就变了,加入一个随机数,变成以下:

hash(上一个hash值,交易记录,随机数)得到新的hash值
而这样就会对新的hash值有要求了,需要新的hash值满足若干个0开头,比如0000a6h7jj85。
我们知道hash的数字,只要稍微修改一点,就会引起值的大范围变化,所以在hash的时候,就可以不断修改随机数,从而得到全新的hash值。
理论上只要我们不停的用随机数hash,总会得到满足条件的hash值。
现在基本上普通电脑,如果要得到四个0开头的hash值,基本在1~2分钟左右。
而现在比特币由于参与竞争的人太多,所以难度就会提升,已经到了需要18个0开头的hash值,谁率先找到这个hash值,就可以获得一个唯一记账权

那找这个hash值的过程,很有随机性,也就叫挖矿,拿到唯一记账权,就可以说是挖到矿了。

挖矿步骤

1、收集广播中还没有被记录账本的交易
2、交易的有效性验证
3、添加一笔给自己转账的交易(就是挖矿奖励)

估算一下拿到记账权的难度

好比如,现在需要得到新的hash值,需要以18个0开头。
hash是16进制的,
那如果第一位要得到0,平均需要16次计算。
如果前两位都要得到0,平均就需要16*16次计算,即16的2次方。
以此类推,如果要得到前18个0,就需要16的18次方次计算
所以现在都是多人联合挖矿,挖到后再分成,很少有独狼。
简单分析下,比如挖到矿能得到10万人民币,那只要挖矿成本小于10万,就有人去挖矿,挖矿的人越多,计算难度就会变大,挖矿成本也会变大,所以最终会达到一个平衡的状态,即平均差不多花10万的成本,挖出10万的矿。

共识机制

虽然计算难度增大,那也可能会出现有多个节点同时完成工作量的情况,那这种情况,要使用谁的区块呢?
首先,每个计算节点都要遵守规则,即节点的工作量只有在其他节点认同时才是有效的。那这个规则,就是共识机制。

共识机制:每个节点,只认可累计工作量最大的区块链,即大家都去找最长的链

举个例子:
现在已有链#1213<–#1214
大家开始挖矿,挖#1215,某个时刻,甲乙二人同时挖到了,
甲延长区块链#1215A,乙延长区块链#1215B,然后甲乙分别将自己的结果广播出去。
这个时候就出现的分支,那到底用哪个呢?
这时丙收到甲的广播信息,对丙来说,此时最长的区块链是到#1215A,于是丙又开始算,去竞争下一个区块。
和丙类似,丁此时收到了乙的广播信息,丁认为此时最长的区块链是#1215B,于是丁开始以#1215B开始竞争下一个区块。
又在某个时刻,丙先算出来了,于是他将区块链延长至:
#1213<–#1214<–#1215A<–#1216丙,并广播出去
至此,网络中其他节点收到这个#1216丙,和#1215B,就知道丙的这个是最长的。
那么最终就会选用#1213<–#1214<–#1215A<–#1216丙作为最终的链,原来乙的那条链,也就废掉了。

交易确认时间

比特币将出块时间设计成10分钟,其实是在更快的交易确认和更低的分叉直接做了妥协。
确认时间如果很短,那么交易确认就会频繁,分叉就会很多
确认时间如果很长,分叉减少,但交易确认就很慢
所以既要保证交易确认快,由不能有太多分叉,才选了10分钟。

后续

以上只是比特币和区块链的一些简单概念理解,更深层次的知识,还要继续挖掘
1、比特币的P2P网络
比特币的节点,都是点对点通信的,没办法知道其他服务的ip,每个服务器都是随时可能上线,随时可能下线的,那一个节点是怎么连接到其他节点的呢
2、区块结构:Merkle数]
比特币的存储信息想细节
3、比特币白皮书
4、比特币交易脚本
5、如何将区块链技术运用到项目实战中

发布了203 篇原创文章 · 获赞 186 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/java_zhangshuai/article/details/104979848
今日推荐