web3入门2 | 人话说去中心化与比特币

  • netlogs
  • 更新于 2024-08-27 16:54
  • 阅读 802

由比特币区块链构成的去中心化的电子记账系统,实现了去中心化的功能,如何实现,且看下面:1.比特币和区块链详解比特币数字货币,基于区块链。区块链中本聪提出了一个概念:去中心化的电子记账系统去中心化:每个人的账本公开假设A,B,C,D四个人之间互相交易,每两个人之间的交易记录都会被其他人记

由比特币区块链构成的去中心化的电子记账系统,实现了去中心化的功能,如何实现,且看下面:

1.比特币和区块链详解

比特币

数字货币,基于区块链。

区块链

中本聪提出了一个概念:去中心化的电子记账系统

去中心化:每个人的账本公开

假设A,B,C,D四个人之间互相交易,每两个人之间的交易记录都会被其他人记录到。

把n(4k左右)个交易记录合成的账单称之为区块

账单多了之后,区块与区块链接起来,成为区块链

这种格局就形成了所谓的:电子记账

比特币从何而来?

记账:中本聪规定每10分钟打一个新的区块包,打包成功的人会获得手续费和比特币奖励,比特币奖励最初为50个比特币,每四年折半。

怎么界定成功打包的这个人?

工作量证明

中本聪规定,大约每10分钟打一个包。

每一个参与打包的都要做一个很难的数学题,谁先做出来谁就有权利打包(大白话一个一个数去尝试,尝试出来你就有权利)这也就是:挖矿

挖矿的具体原理

背景了解:

密码学有个东西叫做hash函数,他的特点为:

一个任意长度的字符串可以通过运算转换为一个叫做摘要的东西。

正向运算转换很容易,反向很难

举例: hash运算有个很著名的算法SHA256

字符串:SHA256("awegagasdf") = "0100110111"(一共256位的0和1)

挖矿原理:

每个区块除了具体信息还包含一个头部。

假设区块链此时长度为5,此时有n个人要准备打新包,每个人都有账单

每个人手里都有一个字符串,大致组成为:

字符串 = 区块链最后一个块的头部信息+手里账单信息+时间戳+随机数

每个人对此字符串做两次hash运算

hash=sha256(sha256(字符串))

最后得到一个256位包含0和1的数。

什么样的人可以获得最后打包权利呢?

答:谁计算出来的hash的前m位都为0,那么谁就获得打包权利。

如何才能计算出来符合要求的hash呢?通过不断改变字符串里面的随机数进行尝试

如何保证每10分钟打包一个块呢?

答:根据全世界的算力,调整m的难度。也就是说随着挖矿的人越来越多,m会越来越长。

2. 比特币交易

如何保证交易真实?

在中心化交易的世界里,由银行和背后的国家来确保交易双方的身份。比如人脸、签名、指纹

在去中心化的世界里,通过电子签名来实现。

电子签名

比特币用户在注册的时候,会生成一个随机数

随机数--> 私钥  --> 公钥 --> 地址

私钥必须保存好,它代表了你的资产,要保管好。

公钥和地址都是公开的。

如果你想别人给你钱,你把地址给他就可以了。

如果你要给别人钱,你把自己的地址和公钥给他。

特点:公钥反算不出来私钥。

使用:私钥可以对一串字符加密,公钥可以将私钥加密的数据解密。(非对称加密)

举例:A要付给B 10个比特币

  1. A先写一条记录:A---(10BTC)---> B
  2. A对记录进行hash运算出来摘要
  3. A使用私钥对摘要加密,产生一个密码
  4. 对全网广播,告诉别人我给了B10个比特币,同时广播公钥和密码
  5. 别人拿到广播之后,会对A这一条记录先hash运算,这个结果和A自己算出来的摘要是一样的。
  6. 使用A的公钥和密码进行解密,将上一步算出来的摘要和解密的摘要进行对比。
  7. 比对结果一致,代表你的电子签名ok。

交易隐患

存在两个问题:

  1. A要给10个BTC给B,那怎么检查A有没有10个BTC?
  2. 假设A有10个BTC,如果A同时说我分别给B和C10个BTC,如何避免这种现象?

我们知道区块链的概念,我们每个人都知道前面的所有区块的信息。当A说要支付10个BTC给B时,可以从前面的区块链检查,A所有的比特币交易记录,从而得知A的余额。

如果你余额足够,那么你广播的这条:你要支付B10个BTC的信息就会被打包,反之,大家会拒绝你这条消息。

第二个问题:

A同时广播:

消息1:A---(10BTC)---> B

消息2:A---(10BTC)---> C

当有人接收到第一条消息之后,会检查A的余额,不够的话会自然的拒绝第二条消息,同理其他先接收到第二条消息的也一样。

此时会有两部分人,分别将消息1和消息2打包到块里面,但是此时还没确认,大家都在打包挖矿做工作量证明。

假设一个幸运儿挖到了矿,那么他成功打包了一个新的区块,这个区块包含了消息1。

然后他将新区块链接到了最大的区块链上(公链)

此时在消息2上挖矿的人一看,上面有新块被打出来了,那么所以人都会放弃自己的块,站队到消息1的那个块。反之同理。

总结:我们接收到别人对我们的付款时,必须等到付款消息被打包,才是真的到账了。

最长链原则

是存在那么一种可能,同一时刻有两个幸运儿同时挖矿打包成功,此时会造成公链会分叉。

有两拨人会继续基于自己的分叉继续挖矿,总有一个时刻,某分叉:分叉1上会优先打出来一个包,分叉1为最长的区块链。此时分叉2的人会过来站队,放弃分叉2,区块链又回归到了一条链的状态。

下一篇:以太网那些事

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
netlogs
netlogs
0x2E35...566D
colorepistle@gmail.com