区块链——双花问题

什么是双花问题:

我们常说,区块链在金融领域,主要是提供了一个解决“双花问题”的方法,我们首先来了解一下,什么是双花问题。
“双花”也叫做双重支付,在数字货币系统中,由于数据的可复制性,因此可能导致交易系统中存在同一笔数字资产被重复使用。
为什么“双花问题”在数字货币系统中会存在,而在显示的货币中不会存在,我们可以举两个例子:

  • 假设小明拥有20元,他去咖啡店花费了20元购买了一杯咖啡,然后他此时身上是没钱的,然后他想去隔壁超市购买一件20元的商品,而他已经在咖啡店使用了这20元,那他有可能再去购买这20元的商品吗?由于他使用的是现金,显然是不可能的,当然他在买咖啡钱如果能完全复制那20元,就有可能
  • 现在假设小明使用的这20元不是现金,而是数字货币系统,例如他手持了一张20元的银行卡,假设他有能力复制了另一张银行卡,内容是完全一样的,然后,假设小明抓住了提交交易时候银行需要一定时间去处理,小明抓住了这个时间差,在短时间内使用这两张卡消费了,银行会同时收到同一个金额的两笔交易(当然我们要假设银行没有双花防范),这时候,小明使用同一笔钱成功的购买了两件不同的商品

以上的两种情况都是我们所说的双花,广义上,这两种情况都是双花,但是,具体来看,第一种情况是货币本身的问题,第二种情况是交易的问题。当然,实际上,要想在现金实现双花是在太难了,毕竟现金是事物,店员容易辨认现金金额,而数字货币只是数据,在数字交易系统,很容易因为数据的可复制性使得系统存在同一笔数字资产被重复使用的情况。我们可以知道,当一笔数字资产(也叫做token),一个序列号的字符串,被两次或者多次花掉,也就意味着能被更多次花掉,那么这个数字资产就没有任何价值的,因此数字资产更需要注重解决“双花问题”。

非区块链解决方法:

当今的银行和第三方中介机构(例如支付宝),都是从货币和交易两方面入手去解决的,以银行为例子,要是从货币的维度解决,假设小明自作聪明的去复制银行卡,他会发现,银行卡是无法复制的,卡的磁道、芯片信息是利用了信息安全加密的,因此无法复制银行卡;要是从交易的维度解决,假设小明实在太牛了,成功的复制了一张银行卡,然后他同时在两地同时消费了同样的金额,这样,在理想情况,银行能同时收到两笔交易请求,但是由于银行系统设定为原子性,因此银行自然会一笔一笔的去处理,理所当然,先处理哪一笔,小明都会标记为已经花费了那笔钱。

我们常用的支付宝/微信的解决方案:

我们日常使用比较多的数字货币算是微信支付里面的钱也或者是支付宝里面的钱,事实上支付宝和微信里面的电子现金,并不是数字货币世界的钱(银行的电子现金是),但是却是存在于真实银行的,其实微信和支付宝并不是银行,而是交易的中介机构,当你走进咖啡店想要购买咖啡的时候,若你选择了支付宝或者微信支付,实际上发生了一下几个步骤:

  1. 把钱先给支付宝或者微信
  2. 支付宝或者微信把钱存在他们账户
  3. 当确认这笔交易后,支付宝或者微信会把钱从银行账户取出并且交给商家
    当你要进行数字货币交易,首先你要把钱交给一个第三方机构,第三方机构去对钱和余额做中心化的管理,并修改用户的余额达到防范“双花”。

常用中介解决方案的漏洞:

由于进行“双花”防范是使用中心化的,也就是说,中心中介机构很明确,是微信/支付宝,要是如果这个中介机构被黑客攻陷(当然,这个工作量是非常大,也是非常不可能的);也有一种可能,由于我们信任一个中心化的中介机构,当然,我们也许信任的不一定是微信/支付宝这种高信誉度的公司,也可能是其他的第三方机构,如果有人恶意篡改数据呢?这样将会使得整个数字货币世界都非常不安全。
按照上面的情况看来,我们要转移数字资产,是需要第三方的机构做中介,但是我们是否能够不通过中心化的第三方机构就向别人转移数字资产呢?

迎刃而生的去中心化共识系统——区块链

要是从以上的两个维度,货币和交易本身来讲。从货币的维度来说,首先我们得知道,数字资产在区块链的账户只是一个序列化的hash地址,并且任何一个人都能看到,但是用户是加密的,每个用户都有自己的私钥和公钥(公钥能够通过私钥推出,并且能解码由私钥加密的数据,但是公钥不能反推私钥),因此这样保证了区块链的数字货币是安全的,并且是难以伪造的。其次,从交易的维度来说,区块链引入共识机制,我们常见的有pow,pos,这个也是区块链去中心化的核心思想,用奖励的方式让全网一起参与计算 ,在区块链的世界,要是用户之间要发生一笔交易,那么假设这双方是A和B,那么A要交易一个资产给B的话,需要这样做:

  1. 把数字资产p用A的私钥签名并且广播到全网
  2. 这时候,提交的资产被称为UTXO,此时的交易是未经过验证的
  3. 全网通过A的公钥去验算是否这个数字资产属于A的
  4. 当通过后,全网的机器都把数字资产A的具体交易信息记录进入账本(区块链)

由以上的步骤,区块链中全网每一台机器都参与共识过程,全网通过公钥对交易进行所有权验证,区块链从密码学的角度解决了货币本身所有权的问题以及交易的唯一性问题。
在使用区块链后,如果小明存在双花问题,那么两笔交易会同时向全网广播,所有的区块链节点会收到广播的请求,同时每个节点上会存在全网所有的区块信息也就是全网的账户信息,来验证小明该交易的合法性。两笔交易一前一后到达那肯定没啥好说的,全网任意一个节点都能验证出第二笔为重复支付;若两笔交易同时达到两个节点中,两个节点同时验证为成功的同时广播到全网,若整个全网一部分阶段收到的第一笔交易,一部分节点收到的是第二笔交易都对本地数据进行了更新,那全网就出现了分叉区块链账本分叉问题),好在区块链对交易的确认有两点:

  1. 存在与最长分支中的block
  2. 至少有5个验证过的block再其后面得到验证

所以出现分叉之后,全网的矿工会继续按照自己的区块更新,再之后的几次区块中自然会更新出最长的一条区块来,全网的所有矿工都以最长的区块信息为准。当然这样也不是绝对的,当小明控制了全网超过51%的算力,那么就能实现账本分叉,当然,要控制这么多算力的机器,小明显然也是得付出超过双花本身代价的努力

生活再忙,也不要忘记生活原本简单的样子
0%