区块链余额怎么算出来的(区块链里的钱怎么提现)

兄弟姐妹有没有人讲详细点的,我想分析下,区块链余额怎么算出来的(区块链里的钱怎么提现)
最新回答
笨到忘不了

2024-10-15 14:51:20

说文解字第3课:区块链Blockchain

在几年前曾经吹起一阵比特币风潮,读者在当时可能就听过区块链,然而最近国内外的金融机构又开始研究、推出采用区块链为技术基础的金融服务,它到底有什么特别之处,能够吸引正规金融机构的青睐?

分散式记帐系统

区块链是比特币的核心技术之一,它最主要的特色是能够打造无法窜改、去中心化、高度透明、匿名的记帐系统,可以提供低成本、高安全性的转帐服务,而进一步能够做为金融管理的工具。

要了解区块链,要先从它的运作原理开始看起。以比特币的应用为例,在每次交易的时候,系统就会将交易内容与相关资讯封存为1组区块,而将所有区块按照时间排列起来,就会产生所谓的区块链。

由于区块链详细记录了世界上每笔交易的资料,因此只要从第一笔资料统计到最后一笔资料,就可以算出哪个「钱包」拥有多少「钱」。

需要注意的是,区块链并非直接储存每个「钱包」中的余额,而是每次交易中「钱」的流向,所以在查询余额的时候,只需验证区块链中每笔资料的真伪并进行统计,就能得到每个「钱包」的最终余额。

由于产生区块需要进行复杂的密码计算,如果以集中式的伺服器进行运算,就需准备许多效能很高的电脑来满足需求。然而比特币的做法是将运算分散到所有进行「挖矿」的电脑上,这些电脑称为节点,会在验证交易、封装区块之后得到一定金额的奖励,因此会有许多矿工为了赚取比特币,而投入电脑进行运算,如此一来就不需特定伺服器,而是将所有运算工作分散到比特币网路的各个节点。

▲区块链由许多区块串联而生,由于可以从第一笔至最后一笔转帐记录,并具有高度安全性,因此很适合金融应用。(图片来源:Bitcoin:APeer-to-PeerElectronicCashSystem)

理论上可破解,但实际上不可行

在区块链的运作过程中,所有节点都会共同验证每个新加入的区块,以确保交易的正确性,当某些节点记录的区块息与其他节点不符时,其他节点就不会承认该笔交易,因此交易记录就不会被写入区块链。

不过区块链的安全性,在理论上就不是牢不可破。只要有人能够支配整个网路过半的运算效能(即掌握51%的运算效能),它就能创造假冒的交易记录,并保证能抢先在其他节点完成运算、提出异议之前,完成区块运算并将资料写入区块链,如此一来它就能修改自己的交易记录,重复使用同一笔比特币进行支付行为。

用电玩游戏举个简单的例子,这种攻击就像是使用金手指,能将金钱修改为永远不会减少。

不过从实际面来看,比特币的使用者非常多,因此网路中有相当多的节点,其中还有许多使用特殊电脑进行运算的职业矿工,所以全部节点运算能力的总合值相当大,一般人或组织很难凭一己之力掌握51%的运算效能。

假设目前所有节点运算能力加总起来,相当于100台超级电脑,那么攻击者就需要准备101台超级电脑来取得过半运算效能,这在实现情况中不太可能达成。

退一步想,假设万一真的有人能够支配过半运算效能,那么他也同时也能垄断比特币的发行以及交易手续费,并从中赚取相当大的利益,反之如果他选择了窜改交易资料,那么比特币的使用者变会对这种货币失去信心,导致比特币的价值崩盘,甚至是一夕之间「钞票变壁纸」。

因此假设攻击者是以利益为出发点,那么他就算能发动51%攻击,他也不会这么做,如此一来便能确保比特币与区块链仍然是安全的。

▲比特币是区块链极具代表性的应用实例之一。

说文解字使用范例:区块链

O:区块链能将验证交易的负荷分散至网路中的每个节点。

X:脚踏车停好之后,记得要用区块链锁上。

UXTO与余额

区块链入门从使用钱包开始,我们最关注的是钱包的账户余额。可看过很多区块链资料以后,一直存在一个疑问,钱包的余额信息存在区块链的什么位置?一直没有找到,只有一个相近的概念叫UTXO(UnspentTransactionOutput),但看完以后还是对应不上。直到翻遍网上所有关于UXTO的资料,才知道在中本聪设计的比特币系统中,并没有余额这个概念,“比特币余额”是由比特币等钱包应用派生出来的产物。钱包的余额是通过与账户相关的多个UXTO算出来的。下面且听我详细道来。

了解过一点点会计学,我们现在的会计系统绝大部分采用的是一种叫做“借贷记账法”的方法,账目分成借方和贷方,每发生一笔业务都要登记两个以上的科目。

简单来说,Alice转账给Bob1美元,使用借贷记账法至少要产生两条账目,Alice账户减少1美元,Bob账户增加1美元。这种记账法在企业经营、企业审计中有无数的好处。但是这种记账法也有一个最大的缺点,就是容易产生记账错误和记账误差。一笔交易需要登记两条以上的账目,本质上记录的是“交易的结果”,而不是“交易本身”。

中本聪发明了UTXO(UnspentTransactionOutput)交易模型,并将其应用到比特币当中。UTXO是“未花费的交易输出”,简单来说就是,每一笔比特币交易实际上都是由若干个交易输入和输出组成的。交易输入是资金来源,交易输出是资金去向,每一笔交易都要从交易输入中花费出去一部分,这一部分就是未花费的交易输出(UTXO)。每一次的交易输入都可以追溯到之前的UTXO,直至最初的挖矿所得。

由挖矿所得创建的比特币交易,是每个区块中的首个交易,又称之为coinbase交易,它由矿工创建,没有上一笔交易输出。

在比特币交易中UTXO就是基本单位,一个UTXO一旦被创建就不可被继续分割,它只能当作是下一笔交易的输入被花费掉,花费后产生新的UTXO,这样周而复始地实现货币的价值转移。所以我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。

因此,当我们在说某人拥有1枚比特币的时候,我们实际上说的是,在当前的区块链记录中,有若干笔交易的UTXO收款地址写的是这个人的钱包地址,这些UTXO的总和是1个比特币。

比特币的UXTO系统遵守两个规则:

我们以以太账户为例,打开etherscan.io,选择BLOCKCHAIN-AllAccounts,这样可以看到所有地址与余额,可以选择其中一个查看详细信息。如果看不懂,没关系,把自己的以太地址输入到右上角的搜索框回车后,会显示地址的余额和详细交易记录,如下图。

至此,我能理解李笑来老师说为什么他的账户没有余额,只有UXTO了,O(∩_∩)O哈哈~,内行人不要说外行话嘛。

区块链记账原理

区块链是由一个个区块构成的有序列表,每一个区块都记录了一系列交易,并且每一个区块都指向前一个区块从而形成一个链条。

区块链有以下几个特征:

区块链具有不可篡改的特性,是由哈希算法保证的。

什么是哈希算法/Hash:

安全哈希算法的特点:

哈希算法的作用:

假设我们相信一个安全的哈希算法:如果H(x)=H(y),则x=y

常用的哈希算法:

比特币使用两种哈希算法:

假设这个区块有5笔交易,首先,对每一笔交易进行第一hash,也就是2次SHA-256的运算,得到5个哈希值,也就是a1、a2、a3、a4、a5,这五个哈希值也可以看做是数据,将a1和a2拼起来、a3和a4拼起来,再计算出2个哈希值b1和b2。那a5怎么办呢?答案是将a5复制一份在与a5拼起来进行哈希计算得到b3;继续将b1和b2拼起来进行哈希运算得到c1,同样的b3会被复制一份再与b3拼起来进行哈希运算得到c2;最后将c1和c2拼起来进行哈希运算得到最终的哈希值,这个哈希值就是MerkleHash。

从MerkleHash的计算方法可以得出结论:修改任意一笔交易,哪怕是一个字节,或者交换两个交易的顺序,都会导致MerkleHash验证失败,也就会导致这个区块本身是无效的。所以MerkleHash记录在头部,它的作用就是保证交易记录永远不能够被修改。

区块本身用BlockHash来标识:BlockHash是区块唯一标识。一个区块的hash并没有记录在区块头部,而是通过计算区块的hash得到的。

区块的PrevHash记录了上一个区块的Hash,这样就可以通过PrevHash追踪到上一个区块,由于下一个区块的PrevHash又会指向当前区块,这样每一个区块的PrevHash都指向上一个区块,这些区块串起来就形成了区块链。如果一个攻击者恶意攻击了某一个区块的交易记录,那么这个区块的MerkleHash验证就不会通过,所以攻击者只能重新计算MerkleHash,然后把区块头的MerkleHash也修改了,但是这个区块本身的Hash已经改变,那么下一个区块指向该区块的链接也断掉了。由于比特币区块的hash必须满足一定的难度值,所以攻击者只能把后面所以区块全部重新计算,并且伪造出来,才能修改整个区块链。

修改一个区块的成本已经非常高了,如果要修改整个区块链,那么其成本非常非常的高昂。在比特币网络中,伪造区块链需要拥有超过51%的全网算力。所以比特币网络运行了6年,从来没有被攻破过。