主页 > imtoken钱包苹果 > 白话比特币和区块链

白话比特币和区块链

imtoken钱包苹果 2023-05-11 07:38:21

9102年了,甚至大部分人都表示要大力发展区块链技术。不如来学习一下区块链知识?本文主要是科普,建立对比特币和区块链的基本认识。

一、比特币诞生

2008年,在世界金融危机的背景下如何支付比特币交易,一位名叫中本聪的极客在网上发表了一篇名为《比特币:一种点对点的电子现金系统》的文章。在这篇文章中,他提出了设计去中心化电子会计系统的想法。

我们知道,在当今时代,与付款有关的最重要的事情之一就是簿记。所谓记账,就是让人把资金的变化记录在你的账本里,比如用银行卡支付,其实是银行记录的。银行的背后是代表国家信用的中央政府。我们都信任他。这里的银行是一个集中的电子会计系统。

如果这个节点出现问题,那么我们的资金安全就会受到威胁。还记得前几天微信支付崩溃了,有用户反映商家付款后没有收到货款,余额已经被扣。

中本聪提出的观点是,我们其实并不需要这个中心化节点,我们可以去中心化,每个人的账本都是公开的,其他人可以查看,这是一个去中心化的电子记账系统。

例如,假设有用户 A、B 和 C,他们相互付费。A支付B 10元,A支付后,A将A支付B 10元的账单记录在自己的账本上。为了让别人知道,A把这张账单记录给大家,然后告诉B,再告诉C。过了一会儿,B 必须付款,它付给 C 5 美元,同时他告诉 A 和 C 账单。

现在三个用户都收到了两条计费记录,我们将这两条计费记录打包,形成一个块,称为块。当区块被打包后,我们将区块与之前的交易记录链接起来,形成一条链,称为区块链。

区块链

以上大致是中本聪设计的系统,所以这个系统存在几个问题,比如:

二、为什么要记账?

之所以驱动用户记账,是因为记账有好处,好处包括两个方面:

比特币程序化交易_如何支付比特币交易_比特币交易

(1)汇票转让方支付的额外手续费

比如你做的包裹里面有一张账单A付B10元,那么A可能实际付了10.5元,多出来的0.5元就是给的收入打包者的手续费(通俗的讲就是支付宝提现到银行卡和银行卡跨行转账的手续费)。

(2)打包成功后的打包奖励

当中本聪提出这个系统时,他建立了一个打包的奖励计划。规定每十分钟生产一个包裹。第一个礼包奖励50比特币,礼包奖励每四年减半。

那么前四年的总奖励是 10,512,000 比特币。

50∗6∗24∗365∗4=1051200050 \ast 6 \ast 24 \ast 365 \ast 4 = 1051200050∗6∗24∗365∗4=10512000

由于每六个月减半,因此可以计算出比特币总数约为2100万枚,并且通过打包奖励的方式分散比特币。

10512000∗(1+12+(12)2+(12)3+…+(12)n)≈2100万 10512000 \ast (1 + \frac{1} {2} + {(\frac{1}{2})}^2 + {(\frac{1}{2})}^3 + … + {(\frac{1}{2})}^n ) \约2100万 10512000∗(1+21​+(21​)2+(21​)3+…+(21​)n)≈2100万

三、向谁收费?3.1 工作证明

包装只能基于一个人。该解决方案称为工作量证明。所有想要参与打包的用户(以下简称矿工)都要做一个非常复杂的数学运算,复杂到使用电脑非常复杂。时间长了,谁先算出来,谁就有打包的权利,也可以获得交易手续费奖励和打包奖励。计算这个数学问题的过程称为挖掘。

3.2 挖矿的具体原理

这个数学运算其实和计算机中的 SHA256 哈希函数有关。哈希算法的特点是前向计算容易,后向计算困难,因此被用户广泛应用于加密领域。SHA256的特点是任意大小的字符串参数的hash结果都是256位的二进制数,所以命名为SHA256。

SHA256 算法

区块链本质上是一种线性链表数据结构。通俗的讲,链上包含了所有的计费信息,这些信息以区块的形式分布,每个区块通过一个指针链接到它的前一个区块。

比特币交易_比特币程序化交易_如何支付比特币交易

下面开始详细说一下挖矿的原理。如果我想打包一个块,那么我需要准备以下信息:

然后我们将上面的信息拼接成一个字符串,对其进行两次SHA256运算,得到一个字符串结果y。系统会告诉我们,如果我们当前想要成功打包一个块,结果y需要满足前n位必须为0。如果我们得到的结果y完全符合这个要求,你将使用最后计算的x作为新块的头部并将其附加到区块链的末尾。然后我们打包成功。

当然,满足结果y的前n位必须为0的条件是极其苛刻的。在打包的区块信息中,可以改变随机字符串x。通过让计算机执行详尽的过程来尝试 x 的值,直到找到满足条件的值。

另外,每个人计算的难度其实是不一样的,因为每个人打包的账单不一样,开始打包的时间也不一样。所以,可能有的人运气好,很快就能算出结果,也有的人运气不好,想不出来。

抛开运气不谈,如果你想比别人更快地计算出结果,你只能提高计算机的计算能力(计算速度),这就是我们经常听到的购买矿机和矿卡的说法。

矿机

3.3 难度设置

继续上一节,计算成功的难度与n的值密切相关。n越小,难度越低,n越大,难度越大。如果 n 为 1,则挖掘的概率为 1/2,如果 n 为 2如何支付比特币交易,则挖掘的概率为 1/4,因此挖掘的概率为 (12)n{(\frac{1} {2})}^n (21​)n。

12∗12∗12∗…n2=(12)n\frac{1}{2} \ast \frac{1}{2} \ast \frac{1}{2} \ast ... \frac {n}{2} = {(\frac{1}{2})}^n21​∗21​∗21​∗…2n​=(21​)n

那么这个 n 是如何确定的呢?如前所述,包奖励计划规定每十分钟发放一个包,因此n会根据整个区块链当前的算力动态调整。

假设目前全网有10000台矿机,每台矿机的算力为14T/s(每秒14T哈希运算,1T=10121T={10}^{12}1T=1012) ,整个网络可以在十分钟内计算出 8.4∗10198.4 \ast {10}^{19}8.4∗1019 次。

1.4∗1013∗10000∗60∗10=8.4∗10191.4 \ast {10}^{13} \ast 10000 \ast 60 \ast 10 = 8.4 \ast {10}^{19}1.4∗1013∗10000∗60∗10=8.4∗1019

并且因为计算成功的概率是(12)n{(\frac{1}{2})}^n(21​)n,也就是说平均计算次数是2n2^n2n . 那么 8.4∗10198.4 \ast {10}^{19}8.4∗1019 相当于 2 的多少次方。

比特币交易_如何支付比特币交易_比特币程序化交易

8.4∗1019≈2668.4 \ast {10}^{19} \约 2 ^ {66}8.4∗1019≈266

计算结果大致为66,也就是说系统会将n的值设置为66。第一个计算出结果前66位全为0的矿工有资格打包,俗称挖矿成功。

如果你想更快地挖矿,不考虑运气,那只能继续购买矿机来增加你的算力。而其他矿工也是这么想的,这就导致了全网算力的提升,挖矿难度的增加,这是一个循环。AMD 和 Nvidia 表示他们很高兴。

四、如何防伪?

如何保证比特币的交易记录是真实的,比特币是如何进行身份认证的?传统的身份认证方式包括:刷脸、签名、指纹等。然而,这些方法都不能在电子支付系统中实现,因为计算机系统可以用于复制。例如,复制您的签名并将其添加到我的伪造记录中。

因此,必须改变传统的身份认证方式。比特币采用的身份认证方式称为电子签名。

当用户创建比特币钱包时,会生成一个随机数,根据这个随机数,会生成一个称为私钥的字符串。根据私钥字符串,可以生成一个叫做公钥的字符串,根据公钥可以生成你的比特币钱包地址。

私钥和公钥使用非对称加密,即可以从私钥计算出公钥,但不能从公钥计算出私钥。私钥的作用是对字符串进行加密,公钥的作用是对加密后的字符串进行解密。私钥是私有的,只有你可以加密它。公钥是公开的,每个人都可以解密你的加密信息。

私钥非常重要。如果私钥丢失或泄露,您钱包中的所有比特币都将丢失。公钥和地址都对公众开放。他人转账给您时,您需要提供地址;当您向他人转账时,您需要提供公钥和地址。

假设 A 支付 B 5 个比特币。首先,A 写一条记录“A 支付 B 5 个比特币”。写入这条记录后,A 使用 SHA256 算法对这条记录进行哈希处理,得到 A 字符串(称为数字摘要)。然后A用自己的私钥对该字符串进行加密,得到密文。

然后A广播全网,告诉全网记录“A支付B 5比特币”,然后将他的公钥和加密密文一起广播出去。

其他人收到这个广播后,需要验证这个消息的真实性。先对“A付B 5比特币”的记录进行SHA256哈希运算得到摘要1(这里的摘要1应该和A自己计算的摘要一致),然后用广播中的公钥解密密文广播以获取摘要 2。

如前所述,公钥的作用是对私钥加密的字符串进行解密。所以如果消息为真,那么 Digest 1 将等于 Digest 2。如果计算结果不相等,则认为该消息是伪造的,所有矿工将拒绝该记录。

比特币程序化交易_如何支付比特币交易_比特币交易

五、如何防止双花?5.1 余额检查

检查比特币余额的最简单方法是追溯。前面说过,所有用户的比特币支付信息都会被记录在区块链上,所以当我收到A转账5比特币的消息时,会在区块链的尽头,逐块去看看你有没有足够的余额支付。

例如,如果您发现您通过挖矿获得了 6 个比特币,则认为余额充足;如果条件不满足,则继续搜索,直到条件满足,或者仍然不满足开始。

事实上,这种方法不再用于余额检查,但这超出了本文的范围。

5.2 双花

如果用户A只有5个比特币,但是​​他同时向全网广播了“支付B 5比特币”和“支付C 5比特币”两条记录。那么转会给了谁呢?如何防止这种双花问题?

如前所述,由于网络原因,每个矿工收到的账单顺序不同。那么有的矿工可能先收到“支付B 5比特币”,有的矿工先收到“支付C 5比特币”,有的矿工可能同时收到两条记录。

如果同时收到这两条记录,余额检查步骤将不通过,该记录将被拒​​绝。

如果只收到一条记录,则先通过余额检查,然后开始挖包。注意,由于收货顺序不同,有的矿工打包内容为“支付B 5比特币”,有的矿工打包“支付C 5比特币”。没关系,因为只要没有人挖矿成功,这些区块只存在于本地,不会真正生效。

直到一个矿工打包成功,并且他命中的区块链接到了区块链上,然后其他打包者发现自己命中的包中的记录已经被区块链中的其他人命中,他就会主动放弃自己打包。

也就是说,在双重支付的情况下,先在区块链上命中哪条支付记录,哪条支付生效,另一条支付因余额不足而失效。

六、如何防止篡改?6.1 最长链原理

如上所述,矿工在将收到的票据打包成块后开始挖矿。谁先挖,谁就得到奖励,不需要别人再挖。但是有矿工说,我不管,我会继续我的挖矿,我不管你先挖,最后让他挖出来,然后矿工也把他自己挖的区块链接到区块. 在区块链上。那么此时的区块链已经分叉了,从一条链变成了两条链。其他矿工都惊呆了,我现在正在做的链条背后是谁?

为了解决这个问题,区块链给出的原则是哪条链最长,以哪条链为准,即最长链原则。

如何支付比特币交易_比特币交易_比特币程序化交易

继续上面的例子,此时两条分叉的链长度相同,所以矿工稍后会随机选择一条进行挖矿。直到分叉上的矿工先挖出矿井,分叉链的长度才会不一样。这时,另一个分叉的矿工都会跑到最长的分叉。

该短叉被丢弃,其上的所有区块交易均无效。

最长链原则

6.2 51% 攻击

上一篇讲“如何防伪”的时候,我说过所有对外广播的计费记录都会附上广播者的公钥和密文,以保证计费记录的真实性。因此,除非您拥有广播公司的私钥,否则您可以篡改其他广播公司的计费记录。如果私钥丢了,也没必要去篡改,毕竟整个钱包都可以由你来操作。

既然我不能篡改账单记录,我可以直接删除记录吗?根据最长链原理,理论上是可以的。

例如,如果我向某人支付 5 个比特币,则此记录被广播并正式链接到区块链,成为最后一个区块。现在想篡改一下,直接删除这条转账记录。如果它真的允许我成功删除它,我的余额将保持不变。

由于这条记录已经被打包成一个区块并记录在区块链上,其他矿工自然会在这个区块之后继续挖矿。既然要篡改这个转账记录,就必须在这个区块中删除自己的转账记录,重新打包这个区块,链接到上一个区块的前一个,构造一个分叉。.

并且在删除记录、重新打包、挖掘、链接到最后一个块的前一个块的过程中。全世界除了你以外的所有矿工都继续在原链上挖矿。

根据最长链原则,你必须让你构建的分叉比原链更长,这样其他矿工才能在你构建的分叉链上挖矿。如果你真的成功了,你也会篡改成功。

51% 攻击

区块链之所以这样设计,是因为它认为只有少数人有恶意。除非你的计算能力超过世界上所有人,否则你只能寄希望于让你构建的分叉链超过原链。

这也称为 51% 攻击,即激活全网 51% 的算力来构建分叉链,使原链分叉块后的所有交易无效。因此,如果你掌握了 51% 的算力,链就会被你掌握。

七、区块链发展历程 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019