主页 > 怎么注册imtoken钱包 > 浅谈区块链(一)——比特币的诞生

浅谈区块链(一)——比特币的诞生

怎么注册imtoken钱包 2023-12-25 05:09:52

从本文开始,将开始一个新的系列来谈论区块链。 和其他几个散文系列一样,我做了一个大概的提纲,讲了讲,希望能和大家一起探讨一下区块链这个很特别的东西。

需要强调的是,区块链不等于炒币。 不要因为一时的炒作,给自己和家人带来难以承受的后果!

区块链和比特币的关系_比特币系统接收区块链流程_sitebishijie.com 比特币区块链

比特币,就算没玩过,也或多或少上过热搜,从同事或朋友口中听说过。 (还是那句话,不要做超出自己承受能力的事情,指望发财的人多半是等着割的韭菜。)

遇到一个新的东西,我们首先应该想的是这个东西为什么存在,它解决了什么问题。

就像层出不穷的编程语言和前端框架一样,新事物诞生的重要初衷往往是现有的不够好。

对于比特币来说,这个“现有”的竞争对手就是法币,以及支持法币流通的银行。

(免责声明/救命声明:国家法定货币受法律保护,这里我们仅以美元为例讨论模型。)

虽然法定货币和银行制度总体上运行良好,深入人心,但也自然存在一些问题。

首当其冲的就是信用问题。 为什么一美元钞票可以买到等价物,却不能买到一张白纸? 因为美国政府背书美元,所以大家都愿意相信美元的价值。

因此,货币的价值是由国家的实力支撑的。 相比之下,美元的价值坚挺,津巴布韦货币上的0几乎绝版了。

法币如果有国家信用背书,还是可以算可信的。 银行作为流通媒介就没那么让人放心了。 央行印发的新钞需要各级银行通过各种方式向市场投放; 存款和贷款作为货币流通的重要方式,离不开银行。

但在遥远的2008年金融危机中,美国多家银行倒闭。 这让人们不得不担心自己的钱在银行里是否足够安全。 除了破产之外,如果银行系统遭到攻击,是否有可能系统数据库中识别出的钱会消失?

这个问题从简单的存款-借款交易流程来看,本质上是因为银行作为交易中介机构这个中心化的第三方机构不够可靠。

上面这句话的重点是“中心化”。

只要有这样一个中央协调角色,一旦这个角色出现信任危机或者被破坏,整个交易链条就得不到保障。

抛开电子货币与实物货币的转换,对于转账过程,中心化作用的核心意义在于验证和存储交易记录。 验证的目的是确保转账方确实有足够的钱; 存储交易的目的是检查细节并提供验证依据。

考虑到验证操作(余额>转账金额),可以从所有交易记录中计算出key余额,所以实际上只需要保存完整的记录即可。

所以,好像只需要一个非中心化的存储账本,存储大家所有的转账记录。 这个账本是公开的,每个人都可以查看,每一条新的转账记录都会广播给大家。

因此,我们有一个公共分布式账本。

sitebishijie.com 比特币区块链_区块链和比特币的关系_比特币系统接收区块链流程

不要太高兴,分布式账本虽然解决了中心化角色的问题,但是带来了新的问题——开放意味着每个人都可以查看所有的账本并计算每个账户的余额。 那你有什么隐私?

但是这个问题很容易解决。 您可以简单地创建一个新钱包,而无需提供任何可以识别您真实身份的信息。 在现实生活中没有人知道这个钱包属于谁。

紧接着,很容易想到分布式账本带来的第二个问题——身份确认问题。 每个人都可以将交易记录写入这个账本,那么如何判断谁是谁,又如何防止身份冒充呢?

中心化机构通过自己的信用卡和用户 ID 卡解决这个问题。 但是,我们现在的账本一方面缺少这样的信用仲裁机构,另一方面也无法匹配真实身份来保护隐私,只能另辟蹊径。

在互联网时代,自然而然会想到靠数学。 密码学中已经有了现成的做法——非对称加密。

对于非对称加密,这里不展开。 只要我们知道如何使用它,数学就会保证它不会出错,也不会被破解:

创建一对(公钥,私钥)作为秘钥

确保您的私钥安全并公开您的公钥

使用私钥对要发送的信息进行签名,发送原始信息和签名

接收方用发送方的公钥验证签名的正确性,如果正确则批准该消息

区块链和比特币的关系_sitebishijie.com 比特币区块链_比特币系统接收区块链流程

因此,在转账过程中,发送方只需要在账本上写入一条转账记录,然后用自己的私钥进行签名,而接收方只需要使用转账记录中携带的发送方公钥(例如,使用公钥作为钱包地址)查看,就可以知道这条转账记录是否是钱包主人发送的。

不过,虽然可以确定转账方的身份,但收款方只能从手中的账户中推算出自己钱包中是否有足够的余额来支付。 但是,分布式账本的原理决定了由于网络延迟、硬件故障等原因,很难保证接收方得到的账本始终是完整的。

于是就有了一种叫做“双花”(double-spend)的情况:钱包A先有10美元的余额,先支付10美元给B,B验证身份后给A等值的商品; 然后A又支付了10美元给C,C也通过了验证,给了A等值的商品。 所以 A 花费的 10 美元产生了 20 美元的效果。

解决双花问题并不麻烦。 只要确保C在收到A的转账之前必须先收到A->B的转账,你就知道这家伙余额不足了。

也就是说,需要保证交易的顺序。

首先想到的是用时间来标识顺序,但是我在另一系列《浅谈分布式系统》中已经提到计算机时间是不可靠的(unreliable clocks)。 这篇文章提到可以使用vector clock来解决,但是这种方法对于分布式账本来说有点重。

但是,全局递增ID等方法显然会回到中心化的方式。

增量ID类似于一个数组,数组元素通过下标来区分。 链表,经常和数组比较,通过记录前序和后序地址来识别顺序。

参考链表的思想,我们还可以在每条转账记录中加入上一次转账记录的标识,作为对上一次转账记录的识别。 这样就形成了一条链式转账记录。

这样,当A试图双花时,整个链就会分叉,类似于git中的代码分支。 链式结构的好处这时候就体现出来了。 不可能两个分支都是合法的,所以不存在双花的可能。

区块链和比特币的关系_sitebishijie.com 比特币区块链_比特币系统接收区块链流程

但是短时间窗口内无法判断1和2应该采用哪个分支,也无法判断A先转给谁,只好先保存。

并且由于新的交易记录将不断产生,这两个分支机构将继续增长。 背书多的树枝自然会长得更快,变长。 这里的认可常被称为所谓的共识(Consensus)。

既然是分布式账本,这里的选择策略就比较明确了,应该选择更广泛的共识,也就是更长的分支。 比较短的枝条还是要保留下来,以免以后长成长枝条。 但如果看久了,没有得到足够共识的短分支就会逐渐被淹没和丢弃。

但是A可以很快产生很多新的合法转账记录,让分行2排挤分行1成为合法分行。 这样还是可以达到双花的目的。

因此,有必要增加创建合法记录的难度,使A无法通过自己推动更广泛的共识。

如前所述,每条传输记录都通过指针指向前一条记录。 当然这里的指针不能使用内存地址,只能使用传输记录对应的一对一标识。 很容易想到哈希法。 哈希算法的特点决定了这种标识的唯一性和不可逆性。 因此,只要对哈希结果有限制,就可以增加生成合法代币的难度。

比如考虑引入一个幸运数字,要求转账记录+签名+幸运数字计算出的hash值的前10位全为0。这样,只需要重复“改变幸运数字-计算”的步骤哈希值”是否有可能“不小心”得到一个合法的标识。 通过调整0的个数,可以调整计算难度和耗时。

计算hash纯粹是对计算性能(或计算能力)的考验,没有捷径可走。 因此,如果A想要推广他的新共识,他必须拥有比其他人更多的算力。 当分布式账本网络足够大时,这是很难实现的比特币系统接收区块链流程,至少实现成本会很高。

甚至可以更进一步,不要在当前记录确认后立即完成交易,而是等待后续几笔交易完成后再进行确认操作。

这样,双花问题就基本解决了。

但是,增加难度虽然会阻止作弊比特币系统接收区块链流程,但也是有代价的。 计算机不断地计算哈希值,既需要CPU资源,又要消耗电费。 这个开销会让很多人望而却步。

所以需要一些补偿。 每成功计算出一个合法标识后,系统将向计算出该标识的人发放一定数量的虚拟货币。 系统发行的虚拟货币与大家钱包中的虚拟货币是一样的,可以自由流通。

算代币的,像煤矿的工人,挖完煤就会得到奖励,所以也叫矿工。 这种计算身份的动作也称为 PoW(Proof of Work)。

所以这里有两个转账记录,一个是用户之间的转账记录,一个是系统给矿工发放的奖励记录。 这两个记录需要打包在一起播放。 另一方面,考虑到性能问题,计算每条转账记录的哈希值并不划算。 优化基于账本页面批量计算hash值。 每个账本页面包含若干转账记录,其中第一条是系统发放给矿工的奖励。

我们称账本的一页为区块,许多区块链接在一起形成区块链。

sitebishijie.com 比特币区块链_比特币系统接收区块链流程_区块链和比特币的关系

源源不断的矿工奖励,加上控制全网 50% 以上算力的成本,使得通过双花作弊比老老实实做矿工更糟糕。 经济学和心理学都能搞定,不需要额外的技术支持。

然而,矿工奖励并非全是利而无害。 免费奖励的形式会带来通货膨胀,就像各国央行纷纷开设印钞机印法币一样。

为了解决这个问题,参考灵活调整挖矿难度的方法,调整挖矿奖励。 每产生一定数量的账本页,奖励就会减半,直到最后不发放奖励。 这样一来,虚拟货币的发行速度是递减的,最终的货币总量是固定的。

当系统不再发放矿工奖励时,为保证系统的持续运行,转账发起方需要为每笔交易支付手续费。 作为对矿工的奖励,矿工有权选择手续费较高的交易进行优先确认。

以上就是比特币的总体设计思路,从此开辟了区块链的新天地。

原创不易