比特币原理

比特币原理

比特币是一种数字货币,是一种分散的系统,它将交易记录在称为区块链的分布式账本中。 比特币矿工运行复杂的计算机设备来解决复杂的谜题,以确认称为区块的交易组;成功后,这些区块将被添加到区块链记录中,矿工将获得少量比特币的奖励。 比特币市场的其他参与者可以通过加密货币交易所或点对点买卖代币。

比特币:数字货币

比特币起源于2008年11月1日,中本聪在《白皮书》提出的一种去中心化的电子记账系统。

例如:在系统中有A、B、C和D 一共4人,A转给B账户10BTC,B转给C账户5BTC,C转给D账户2BTC,

  • 每次转账都需要把记录广播给其他
  • 我们会对转账记录进行打包成区块(大小为1M,大概可以存4000多条交易记录),在区块连接成链
   +----------+    +----------+    +----------+
| X ---> X | | A ---> B | | X ---> X |
-- | X ---> X | -- | B ---> C | -- | X ---> X | --
| X ---> X | | C ---> D | | X ---> X |
+----------+ +----------+ +----------+

我们需要解决以下问题:

  • 以谁的为准?因为我们广播的时候会有延迟,不同的人收到的交易顺序不太一样。
  • 为什么要记账,为什么别人广播给我,我就花我自己电脑资源把帮他记账?
  • 如何防止伪造,A广播了一条支付B的记录,我们如何确定A真的支付给B?

其实记账是有奖励的,每次转账需要支付一点手续费的,并且打包的人有奖励,每10分钟打包一次,每次打包有50个,每经过4年打包奖励减半,我们可以算出一共有多少个BTC。

50(每10分钟) * 6(每小时6个10分钟) * 24(每天24小时) * 365 * 4(前4年) * (1 + 1/2 + 1/4 + 1/8 + ...) = 2100万个

以谁的打包为准:工作量证明,做一个很难的计算我们俗称挖矿。

挖矿原理

1、哈希函数:sha256

  • sha256(“apple”) = 1010…..1(256位二进制)
  • 正向算很容易,反算特别困难

2、具体原理

每个区块包含区块头和交易信息

   +----------+    +----------+    +----------------+
| |   | |   | Block Header |
|----------|   | ---------|   | ---------------|
| X ---> X | | A ---> B | | |
-- | X ---> X | -- | B ---> C | -- | Transaction | ----
| X ---> X | | C ---> D | | |
+----------+ +----------+ +----------------+

生成新区块的过程:

  • 需要计算一个字符串:前块的头部+张贴信息+时间戳+随机数
  • 对这个字符串做两次Hash计算:Hash = sha256(sha256(字符串))
  • 要求计算出来的结果前n为都为 0(通过改变随机数来使计算结果前n位为0)。

3、难度的确定:保证每10分钟出现一个块,通过改变 n 的大小

比如有10000台矿机,每台矿机的计算能量为 14T/s,总共计算能力为

10000 * 14T/s = 1.4 * 10^13 次/s
10分钟计算的次数 = (1.4 * 10^13 次/s) * (600s) = 8 * 10^19

通过概率,我们这知道一共需要计算 2^n 次

1/2 * 1/2 * ... * 1/2 = (1/2)^n --> 2^n

从而可以计算出 n = 66

2^n = 8 * 10^19

身份认证

1、传统的认证方式有:人脸、签名、指纹等,在计算机系统这些都可以进行拷贝伪造。

2、电子签名

随机数 ---> 私钥 ---> 公钥 ---> 地址
  • 首先通过一个随机数可以得出一个私钥,私钥可以计算出公钥
  • 私钥是保密的,公钥和地址可以公开
  • 非对称密钥中, 一般是(对方的)公钥加密,(自己的)私钥解密,或者(自己的)私钥签名,(对方的)公钥验签名

例子:比如 A 需要付给 B 账户 10 个 BTC,具体过程如下:

  • 对“A付给B账户10个BTC” 进行Hash(sha256)计算得到“摘要”,接着“摘要”进行私钥生成一个“签名”
  • A进行广播,把“A付给B账户10个BTC”记录和“公钥”和“签名”这3个广播出去
  • 其他接受到这条消息的人会对“A付给B账户10个BTC”进行Hash计算得到“摘要1”,然后用公钥验证签名到“摘要2”,然后确认这两个“摘要”是否相等。

双重支付问题

1、余额检查:追溯

比如 A 需要转给 D 账号10个 BTC:

会查看以前链的所有记录,发现A获得50个,有支付20个,就知道还剩30个,够支付给D账号10个。

那么这条消息就会被网络所接受。

如果现在A 需要转给 D 账号60个 BTC,发现不余额不够,这条消广播出去就不会被接受。

     +----------+    +----------+    +----------+
---- | X ---> X | -- | B ---> A | -- | A ---> C | ----
+----------+ +----------+ +----------+
A获得50BTC A支付20

2、双重支付

比如“A支付给B账号10个BTC”,同时”A支付给C账号10个BTC”。

当广播出去之后,有的人会先接受到“A支付给B账号10个BTC“这条消息,然后拒绝”A支付给C账号10个BTC”这条消息,有的人刚好相反。

然后这写人同时在打包新的区块。

   +----------+    +----------+    +----------+
-- | X ---> X | -- | X ---> Y | -- | A ---> B | ----
+----------+ +----------+ +----------+

如果刚好有人计算出新的区块的人,是接受“A支付给B账号10个BTC”这条消息,就会被打包好链接到主链上,然后发现已经有了新块了,其他人就会放弃当前块,那么”A支付给C账号10个BTC”不会被确认。

所有当有人给我们转账的时候,我们不能以为就打款成功了,需要等到这新块的形成,并且接到主链才才算成功。

防止篡改

1、最长链原则

                                     +----------+    
| |
+----------+ +----------+ +----------+
---- | X ---> X | -- | X ---> Y | --
+----------+ +----------+ +----------+
| |
+----------+

当同时产生两个区块,不同的人会接到不同的广播,这个时候接到的链可能不一样。

但他们先不管,等计算到下一个区块产生时候,这个时候,此时上面的链比下面更长,广播出去之后,下面的人就会重新站队,会到上面的链。

                                     +----------+    +----------+
| | -- | |
+----------+ +----------+ +----------+ +----------+
---- | X ---> X | -- | X ---> Y | --
+----------+ +----------+ +----------+
| |
+----------+

2、防改

如果你需要篡改某天链的信息的,你需要把 A 支付给 B 的信息,篡改为 A 支付给 C,你需要计算出一条比主链更长的篡改链才能成功,这个时候你一个人的算力要大于其它所有的算力才能篡改成功。

     +----------+    +----------+    +----------+
---- | X ---> X | -- | A ---> B | -- | X ---> X | ---> 原来的主链
+----------+ +----------+ +----------+
+----------+ +----------+ +----------+
| A ---> C | -- | X ---> X | -- | X ---> X | ---> 篡改链
+----------+ +----------+ +----------+

总结

1、比特币是怎么发行的

  • 新比特币作为对矿工的奖励进入比特币网络进行流通
  • 没生成21万个区块,奖励金额减半
  • 从第0个区块开始的21万个区块,每生成一个区块矿工获得50比特币作为奖励
  • 从第693万个区块开始,对矿工的奖励为0,也就是不再有新的比特币流入比特币
    网络,
  • 到时,累计有2100万比特币流入到了比特币网络,矿工的收入将完全来自每笔比特币转账交易的交易费,交易费只是比特币在账户之间转移,不是新产生的比特币

2、比特币存在什么地方

  • 比特币一般存在比特币客户端软件的数据文件里
  • 如果把数据文件弄丢了,比如计算机硬盘坏了,就永远地失去了里面的比特币

3、比特币转账和支付宝转账有啥区别

  • 比特币不是任何银行或金融机构发行的,使用比特币不需要绑定银行卡,不需雯
    任何身份证明,不需要手机短信认证。
  • 只要能上网,只要安装了比特币客户端软件,就可以转账或收款。所有的转账不受任何机构监督和管理。较错了人,没有后悔药,完全没有挽回的余地。

4、比特币所使用的主要技术和特点:

  • 利用SHA-256算法和非对称加密法制作数字签名
  • 利用区块链中的区块存储比特币交易记录
  • 设置额外的工作从而控制单位时间內生成区块的个数,同时保护比特币网络
  • 将一定数额的比特币和区块内的所有交易费奖励给成功生成该区块的矿工,激励更多矿工加入比特币网络,促进比特币网络的茁壮成长
  • 比特币转账不依赖银行或其他金融机构

参考

Comments