# 【小白科普】数字货币如何应对双花攻击

By [狂想撸毛空投工作室](https://paragraph.com/@crazyweb3) · 2024-04-27

---

**一 . 中心化的数字货币**

首先我们来看一下一个非常简单的中心化的数字货币发行的模型。

中心化的数字货币发行在技术上是非常简单的，央行拥有发行电子货币的权力，并拥有一个数据库，这个数据库存储着所有的交易记录。

假设A有一张价值100元的电子货币，A将其支付给B。

B在接受这笔交易前可以申请查看央行的数据库，确认A是否有着 100元的电子货币，在确认之后，进行交易。

交易完成后。中央数据库中的数据会进行更新并且留下所有记录，这张100元的电子货币转移到B的名下，从A那边支付而来。

这样一种中心化的数字货币在**效率上是极高的**，可以轻而易举的**避免双花攻击**，而且可以**追踪发行的每一笔数字货币的交易踪迹**。

但是我们可以看到，这里的交易，每一笔都需要央行的确认。假如我们不想要这样一个中心化的数据储存中心，我们想构建一个去中心化的数据库，我们该怎么做呢？

**二. 去中心化的数字货币要解决的两个问题**

_1 谁有权力进行数字货币的发行？什么时候发行？该发行多少？_

这一步不同的币种有不同的方案，BitCoin限制了发行总量，并将币奖励给矿工。而有些山寨币的发币权实际上就掌握在某个人手中。

_2 谁来记账？怎么验证交易的有效性？防止双花攻击？（double-spending attack）_

和中心化的央行一样，去中心化的数字货币用一个大家共同维护的数据结构来进行记账，这个数据结构，就是**区块链**。

![图1：一个小型区块链示意](https://storage.googleapis.com/papyrus_images/b2df341f6524162e28529a31b07327b3e8aa36199fadbf7bedbf21faed6aa89e.png)

图1：一个小型区块链示意

一个小型区块链首先要发行货币，由图1可知，**A发行了10个货币**。

而后在交易1和交易2中他分别将这10个货币转给了B和C。

而后在交易3和交易4中，B又通过签名将5个货币转给了C和D。

在交易5中C又通过签名将7个货币转给了E。

在交易6中B通过签名将5个货币转给F。（这边交易B虽然签名了，但不会交易成功。）

每一次交易**首先是记录**，其次是要**验证币的来源**，从而避免double-spending。

在交易5中，C的7枚货币经过验证，了解到这7枚货币来自B和A的转账。而在交易6中，B的货币会验证失败，因为在先前的交易中B已经将货币转给了C和D。

如图1所示，在交易1中，A将5个币转给B，**A需要知道B的公钥哈希值（代表着B的公钥）**，B也需要知道A的公钥，从而确认A的币的来源。

---

*Originally published on [狂想撸毛空投工作室](https://paragraph.com/@crazyweb3/zuNVAcg17SdHiNCY0tHd)*
