硬分叉/软分叉
硬分叉
硬分叉:在原有的区块链技术上,重新做一个新的区块链,新的链会保留一定原有链的技术基础,但是两条链是完全不同的链。
硬分叉案例
以太坊当年因为智能合约的漏洞,当时黑客盗取了价值约5000万美元的以太币(此时的以太币还不是现在的以太坊),当时V神为了挽回大部分的人的损失,采取了硬分叉的策略,用新的长的链来代替被攻击的链,这样黑客盗取的就没有价值。但是当时社区的部分支持者认为这是一个去中心化的社区,不应该由一个人决定未来。所以坚定愿意抗下被黑客攻击后的损失,以保证社区的去中心化。因此社区之间产生了矛盾,就出现了硬分叉之后的两条链:以太经典(ETC)和现在的以太坊(ETH),每个链都有算力的维持,所以两条链现在都活的很好。不过随着时间的流逝,现在以太坊网络的算力已经远远大于以太经典的算力了。所以现在的以太坊网络要比以太经典网络安全的多。
想进行硬分叉,背后要有算力的支持,否则缺少支持的话,分叉出的区块链是非常容易被攻击的。
软分叉
软分叉就是区块链的临时性分叉。区块链有且仅有一条最长合法链,但是由于某些原因,比如网络延迟,信息传输速率等问题,矿工收到交易的时间可能会有所不同,所以在一个很短的时间内,有可能两个矿工同时产生了不同的合法区块,而这两个区块都被相当多的一部分节点所认可,并且添加到自己的区块链上,这样就造成了区块链的分叉。但是不用担心,区块链有最长合法链和最重合法链标准,所以这种分叉在以后会消失的,是临时性分叉。
重放攻击
以太坊硬分叉以后产生了两条链,分别是ETC(Ethereum Classic Chain,以太坊经典)和ETH(通常指的以太坊公有链)。两条链上的地址和私钥生成算法、交易形式均相同,这使得一条链上的合法交易在另一条链上很有可能也是合法的。
所谓的重放攻击就是:若在一条链上合法的转账交易被广播到另一条链上也是合法的,从而导致转账两次的情形。
UTXO
在比特币钱包当中,我们通常能够看到账户余额,然而在中本聪设计的比特币系统中,并没有余额这个概念。“比特币余额”是由比特币钱包应用派生出来的产物。
UTXO 是 Unspent Transaction Output 的缩写。UTXO的意思是“未花费的交易输出”,简单来说就是,每一笔比特币交易实际上都是由若干个交易输入和输出组成的。交易输入是资金来源,交易输出是资金去向,每一笔交易都要从交易输入中花费出去一部分,这一部分就是未花费的交易输出(UTXO)。每一次的交易输入都可以追溯到之前的UTXO,直至最初的挖矿所得。
由挖矿所得创建的比特币交易,是每个区块中的首个交易,又称之为coinbase交易,它由矿工创建,没有上一笔交易输出。
在比特币交易中 UTXO 就是基本单位,一个UTXO一旦被创建就不可被继续分割,它只能当作是下一笔交易的输入被花费掉,花费后产生新的UTXO,这样周而复始地实现货币的价值转移。所以我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。
因此,当我们在说某人拥有1枚比特币的时候,我们实际上说的是,在当前的区块链记录中,有若干笔交易的 UTXO 收款地址写的是这个人的钱包地址,这些UTXO的总和是1个比特币。
找零
当用户A给用户B转账时,一定会碰到想转的数额和自己的UTXO数值不匹配的问题,所以有必要找零。采用的方法是,用多个输出,有一些输出还给自己。其实并不只是找零,如果用兜里一把零碎UTXO去转账,反而是找回一个整的。