主页 > imtoken靠谱吗 > 比特币简介

比特币简介

imtoken靠谱吗 2023-07-07 05:19:22

一、什么是比特币

比特币是一种电子货币,是一种基于密码学的货币。2008 年 11 月 1 日,中本聪发表了比特币白皮书,提出了去中心化的电子会计系统。电子现金是银行记账,因为银行的背后是国家信用。去中心化的电子记账系统是参与者的联合记账。比特币可以预防主权危机、信用风险。它的好处在此不再赘述。这个级别介绍的文章很多。本文主要从更深层次的技术原理角度进行介绍。

二、问题介绍

假设有 4 个人称他们为 ABCD,他们发起了 3 笔交易。A 向 B 转移 10 个比特币,B 向 C 转移 5 个比特币,C 向 D2 个比特币转移。如果是传统的记账方式,这些交易都会被记录在银行的系统中,信息也会被银行记录下来。我们相信银行不会随意增加、删除或修改交易记录,我们也不会关注其中有哪些交易。我们只关心我们的账户余额。比特币的记账方式在ABCD中为大家保存了这样一个账本,上面的交易内容都记录在账本上。如果每个人的账本实时一致,ABCD 就不再需要银行了。

这就是比特币的作用。每当有人发起一笔交易,他就会向全网广播一笔交易,全网的某个人将交易打包一段时间,并记录在一个区块中。,然后将这些区块一个一个的链接在一起,形成一条链,这就是所谓的区块链。

那么问题来了

1、我为什么要参与这个系统比特币付款到账时间要多久,为什么要使用我的计算机资源来存储这些信息?

2、那是谁的唱片?例如,在上面的账单顺序中,用户A可能是这个顺序,但B可能是不同的顺序,甚至B可能根本没有收到从C到D的转账消息。

3、如果比特币做支付功能,它保证谁有钱谁就有钱,只有它的主人才能花钱。

4、如何防止假冒、篡改和双重支付,防伪就是验证每一笔交易是否真的是某人发出的,比如B可能会编一个消息说某某转账了一笔钱给我,这是一个假新闻,或者B说我给别人转了多少钱,但他实际上没有那么多钱,那该怎么办。防篡改意味着 B 可能想从区块链中删除他向某人转账的记录,这样他的余额就会增加。双花是指B只有10个比特币,他同时将10个比特币转给C和D,造成双花。

三、为什么要记账?

因为记账有奖励,记账有手续费,打包出块有系统奖励。奖励方案是每十分钟产生一个区块,每产生一个区块将奖励一定数量的比特币。从 50 BTC 开始,4 年后奖励 25 BTC,然后 4 年后减半,以此类推。这样一来,比特币的产生就会越来越少,越来越接近一个最大值。计算公式为:50×6×24×365×4×(1+1/2+1/4+1/8+ ...) ≈ 2100万,其中50比特币初始奖励6个区块/小时,每天 24 小时,一年 365 天,前四年,之后每四年减半。

此外,记账奖励每笔交易也有少量手续费。每笔交易都是以一定的手续费发起的,这些手续费是给记账的矿工的。

四、谁会占上风?

每个节点通过工作量证明机制竞争记账权。他们计算一个非常复杂的数学问题,第一个计算的节点是下一个块的生产者。这个数学问题很难,很难用同一个大脑来解决。它是一种基于概率的方法。矿工必须遍历、猜测并尝试解决这个未知数。那么这个数学难题到底是什么?详情如下所述。

4.1 哈希函数

散列函数,也称为数字摘要或散列函数,其特点是输入一个字符串,生成另一个字符串,但如果输入不同,则输出字符串必然不同,不能使用输出字符串。反推输入。举个简单的例子,1-100内取模10的数可以认为是哈希方法,比如98=8, 66=6, 98和66是输入,模10是哈希函数,8和6是输出。在这个模型中,通过6和8不可能推断出输入是66和98,因为可能是56和88等。当然,因为这个例子比较简单,所以会出现hash冲突,即66 和 56 的结果都是 6,输出是一样的。一个优秀的哈希函数可以实现一定的输出差异,哈希冲突的概率几乎为0。常用的散列函数有很多,如MD系列和SHA系列等。比特币使用的SHA256算法,即输入一个字符串,输出一个256位的二进制数。下面是运行程序的结果。

从程序结果可以看出,输入的源信息不同,得到的结果也不同(为了方便,结果用64位十六进制表示)。即使橙色多出一个句号,也会产生完全不同的结果。同时,不能通过输出的十六进制字符串对输入进行反转。对于比特币来说,只要了解了SHA256的作用,感兴趣的可以详细了解一下SHA256的具体算法。需要SHA256的C++源码,留言邮箱或私信。

4.2挖矿原理

首先,我们来介绍一下比特币中各个区块的数据结构。每个块由块头和块体组成。

块体包含矿工收集的大量交易信息。图中,假设区块中包含 8 笔交易,所有交易都生成一棵 Merkle 树。Merkle 树是一种数据结构。叶节点经过两两哈希生成上层节点,再对上层节点进行哈希比特币付款到账时间要多久,生成上层,直到最终生成树根,称为默克尔根。区块头只保留根,这样可以节省区块头的空间,方便交易的验证。

区块头包含父区块的哈希、版本号、当前时间戳、难度值、随机数和上述 Merkle 根。

假设区块链已经链接到某个区块,前十分钟有四个 ABCD 节点在全网收集了一些交易信息。他们选择大约 4k 个交易,将它们打包,并生成 Merkle 树根。区块头中的信息,即区块哈希+版本号+时间戳+难度值+随机数+默克尔树根组成字符串str,通过两个哈希函数得到一个256的二进制数,即SHA256( SHA256(str)) = 10010011...一共256位,比特币要求,生成结果,前n位必须为0,n为难度值,如果现在生成的二进制数不符合要求,必须be changed 重新计算随机数的值,直到计算出满足条件的结果。假设现在 n 为 5,则生成的二进制数必须为 00000...(总共 256 位)。一旦挖矿成功,矿工可以将此消息广播到全网,其他矿工将根据该区块继续挖矿。下一个块头中的父块哈希值是前一个块生成的00000……这个数字。

解决这个数学问题取决于运气。理论上,最幸运的矿工可能能够在 1 个哈希中计算出结果,而不幸的矿工可能永远无法计算出结果。但一般来说,矿工的算力越大,单位时间内能进行的哈希值越多,就越有可能在短时间内成功挖矿。

那么 n 是如何确定的呢?比特币设计者希望平均每十分钟产生一个区块,总体而言,成功挖矿的概率为 1/2^n。现在假设全球有1W台矿机,每台矿机的算力为14T次/s = 1.4×1013次/s,单位时间/s称为算力,10分钟是 600s ,所以 8×1019 的哈希运算可以在 10 分钟内完成。从概率的角度来看,成功挖矿需要 2n 次操作。可以列出方程2n = 8×10^19,n约为66。。所以对于这种方法,我们没有办法让自己的运气更好,只能提高自己的算力,尽快计算出结果。

另外,需要模拟挖矿过程的C++代码可以回复邮箱。代码可以模拟比特币的挖矿算法,通过调整难度值来控制出块速度。

五、如何防止假冒、篡改、重复付款等问题

这部分是理解比特币的重要部分。

5.1电子签名技术

身份认证技术在生活中很常见,可以是人脸识别、签名、指纹等,但是这些方法在数字货币领域并不安全,因为一旦数字化,就可以通过复制来伪造。所以比特币采用了电子签名的方式。

注册为比特币用户时,系统会根据随机数生成私钥,私钥会生成公钥,公钥会生成地址。因为这个私钥是用来唯一标识对应地址上的比特币的,一旦丢失,所有的比特币都将无法使用。下面介绍具体的转换过程。如果你不感兴趣,你可以忽略它。只要知道随机数->私钥->公钥->钱包地址的过程,私钥可以加密一串字符,公钥可以加密。解密,这是非对称加密。这些算法的整体功能相同,但具体算法不同。因为这些算法比较复杂,它们不会像 SHA265 算法那样介绍。如果有兴趣,可以详细了解具体算法。但是,对于比特币系统,只需了解它的功能。典型的算法是 RSA,比特币使用椭圆曲线加密算法。

转换过程

1、首先使用随机数生成器生成一个私钥,它是一个256位的二进制数。私钥不能泄露,相当于银行卡的密码。

2、私钥通过SECP256K1算法生成公钥。SECP256K1 是一种椭圆曲线加密算法。钥匙。

3、与SHA256算法类似,RIPEMD160也是一种HASH算法。公钥的哈希值可以从公钥中得到,但公钥不能从哈希值中推导出来。

4、将一字节的版本号连接到公钥哈希头,然后对其进行两次SHA256操作,将结果的前4个字节作为公钥哈希的校验值,连接到公钥哈希。尾巴。

5、将上一步的结果用BASE58编码得到钱包地址(相当于银行账户)。

因此,通过上述过程,我们可以总结出私钥、公钥、钱包之间的关系如下图所示。可以看出,所有的值都可以从私钥推导出来,通过BASE58和BASE58解码算法,可以将公钥哈希和钱包地址相互转换。

了解了公钥、私钥、地址的概念后,防伪验证的过程就很容易理解了。当 A 发起交易时,它会对消息进行哈希处理以生成数字摘要,用私钥对数字摘要进行加密,并生成密码。然后 A 将广播交易消息、公钥和密码。收到消息的人先将交易信息哈希生成摘要1,然后用公钥解密密码生成摘要2。这样,如果两个摘要相同,则表示消息确实发送了by A. 所谓签名就是密文。

5.2余额检查

平衡的概念应该说是根深蒂固的。余额是通过所谓的借记和贷记簿记方法生成的。也是目前银行常用的一种方式。计算一个人的交易记录后,计算一个余额,但比特币没有余额。这个概念,因为它采用了UXTO模型的会计方法。比如A->B10个比特币,B->C5个比特币,对于第二笔交易,B在发起本次交易时应该注明第一笔交易的信息,这样我们就可以知道B已经从A收到了10个比特币那里,说明满足了发起第二笔交易的条件。因此,对比特币余额的检查是追溯性的。

上图描述了两个事务。在交易 10001 中,B 将 10 个比特币转给 C。验证此交易的过程是:首先通过 B 的公钥解密 B 的签名,然后结合交易的具体内容(B 的签名左侧)进行比较,如果相同,则表示该消息是B发送的,然后检查10000的交易是否真实存在以及其内容的真实性。如果满足这两点,则表示交易10001可以接受,否则拒绝。

其实真正的交易要比这复杂得多,因为有可能多个交易构成输入,比如B->C20比特币,就是由多个交易A->B10、D->B10组成的,那么之前的交易 ID 只是两个 ID,甚至更多。为描述简单起见,此处仅列出一项交易。

5.3 双花

A同时发送两条消息,同时将10个比特币转给B和C。如果他实际上只有 10 个呢?假设节点 D 先收到了 10 个比特币给 B,然后又收到了 10 个比特币给 C。通过上面的验证方式,它自然会拒绝后一个。同时,节点 E 可能先收到 10 个比特币给 C.,然后收到 10 个比特币转给 B,后者自然会拒绝后者。至于哪一笔交易最终会被上链,就看D和E哪一个先解决问题并成功挖矿。

5.4 防止篡改

假设A给B转了10个比特币,但是​​他想把这个信息从区块链中删除,这样大家都不知道这个东西的存在,可以默认。

首先,我们来谈谈最长链原理。假设两个矿工在某个区块后同时挖了矿,或者由于网络延迟等原因存在差异。这时候,每个节点都可以根据自己认为正确的区块进行挖矿。只有当下一个区块产生时,才会有两条链,但其中一条很长。比特币规定以最长链为准。如果一个节点仍然固执地基于较短的链,他正在与大部分计算能力作斗争。这样做的结果是,他挖的区块不被大家认可,会浪费时间和算力。

回到上面的场景,如果A想违约他的账户,他只能从记录A->B10比特币消息的区块之前的区块开始重新挖矿,创建一个分支链,但实际区块区块前进了很多,他只能不停的追,而在追的同时,主链也在前进,他的移动速度肯定比主链快,如果他的算力足够大,理论上可以通过很长时间。时间确实可以赶上成功,实现了交易信息的篡改。但是,实际上这几乎是不可能的,因为即使算力很大,平均出块速度也是 10 分钟。从非技术角度来说,如果一个人掌握了全网一半以上的算力,为什么他不在主链上?继续挖矿?一个有钱的人不应该愿意做小偷。

六、总结

区块链与比特币不同,比特币也不是区块链。区块链只是一种应用于比特币的技术。这项技术可以启发我们。比特币的伟大之处在于它使用了前所未有的应用程序。区块链技术。区块链技术还有哪些应用需要继续探索。

比特币是区块链技术最成功的应用,但比特币本身也存在很多问题。它想通过发行货币来挑战主权货币。这种动机值得怀疑。此外,由于比特币的匿名性,进行交易只需要一个公钥或地址,为黑色行业提供了一个很好的平台。此外,比特币不是一个成熟的支付系统,存在吞吐量低、扩展性差等缺点。