区块链随想录——一种设想中的公链架构

一、区块链的本质是什么?

有人说是:分布式数据库;有人说是:分布式账本;还有人会进一步说明:就是一种以分布式方式记录账本的数据库,但是,这个数据库只能添加、读取,不能修改,删除。

在苦思冥想的过程中,我突然想到:什么“账本”呀,这完全就是一套版本控制系统。

  • 除了初始提交,每一个提交都会有父提交——全部的提交历史,也构成了一个链,每一个commit,也可以说是一个block。
  • 如果不经过特殊操作,所有的提交都不会消失,只会增加——区块链在这方面的限制更加严格。

所以:我们也许可以借助对版本管理系统的理解,来理解区块链。

二、联想:SVN与Git的区别

更远的版本管理系统,咱们不去提他,单说SVN与Git的区别:

SVN的版本号,是一个自增长的数字,因此,只能有一条链。

Git的版本号,是一串Hash值,不存在必须自增长的限制,因此Git的版本树形状会非常多样,通称DAG(有向无环图)。

如果每一个节点,记录世界上的一批交易的话,我们就会发现SVN与Git的两种模式,存在性能上的巨大差距。因为SVN记录的交易,必须是串行的,任凭世界上同时发生多少交易,都必须依次记录!相比之下,Git的版本,就不必严格依序发生,最后的版本合并,也容易得多,这就是使得Git的并发性能,会好很多!

如果我没有理解错误的话:IOTA的DAG Tangle,应该受到Git的很多启发。

三、继续完善我们的设想——基于Git的分布式记账系统

1. 创造一个初始账户

  1. 建一个空的git仓库
  2. 创建一个root account文件,内容是:100000000
  3. 创建一个初始提交:init root account, 100000000

2. 新增一个账户A,并且从root得到转账

  1. 新建一个文件A,内容是:+20 from root
  2. 修改root文件,添加一行:-20 to A
  3. 创建第二次提交:root to A, 20

3. 如上所述,再创建第二个账户B,也从root得到转账

  1. 新建一个文件B,内容是:+20 from root
  2. 修改root文件,添加一行:-20 to B
  3. 创建第三次提交:root to B, 20

4. 创建一个fork仓库,包含原来的全部账本

5. 原始仓库继续发生交易

  1. 新建一个文件C,内容是:+20 from root
  2. 修改root文件,添加一行:-20 to C
  3. 创建第四次提交:root to C, 20

6. 在fork仓库中,发生另一次交易

  1. 修改A文件,内容是:-10 to B
  2. 修改B文件,内容是:+10 to A
  3. 创建一次新的提交:A to B, 10

7. 原始仓库合入fork仓库的变更

  1. fork仓库发起一次pull request
  2. 原始仓库accept pull request
  3. 由于两边的文件变更不存在冲突,所以合入直接完成,A向B转账的交易,也被计入主线
  4. fork仓库同步原始仓库的版本(git pull),fork仓库的账本同步至最新版本

四、基于Git的分布式记账系统——要点

1. 每一台Git Server,就是一个账本库

因此,一笔交易的双方,可以选择任意一台服务器,记录他们的交易。前提是:

  • 这台服务器上的账本,是最新的(至少保存了交易双方账本的最新版本);
  • 交易双方都信任这台服务器的记录是准确,且及时的;
  • 理论上,这台服务器提供了转账与记账的服务,可以收取服务费。

2. 交易双方经过协商,可以选择任何一台服务器进行交易,并且支付费用

因此,账本服务器,存在竞争关系。理论上,以下优点将帮助交易服务器胜出:

  • 交易账本数据最新最全(这是核心竞争力,否则交易速度将会变慢)
  • 交易记录速度最快
  • 交易费用最低(这需要一个平衡)

3. 数据同步成功率与服务可信度

为了确保自己的服务器上,拥有最新最全的数据。各家服务器都会有动力,频繁的拉取其他服务器的账本数据(git pull)。

可能存在这样的现象:A拉取B服务器的数据,但是出现了版本冲突,因为有账户x,同时在A、B记录了两笔不同的交易。理论上,需要B先拉取A服务器的数据,然后A才能成功拉取B服务器的数据。类似于我们git push之前,需要先git pull.

当A服务器拉取失败时,他有义务通知B服务器:“你的版本太老”。于是B服务器会拉取A服务器的数据。当A服务器再次重试时,拉取成功了。

于是,长期来看,A服务器拉取B服务器的数据,就会有一个成功率的记录。我们也可以记录,某台服务器,针对其他所有服务器的拉取请求,其成功率的数据。这样的数据,就代表其服务可信度。

4. 可信度最高的服务器,通常为了确保其数据的及时与准确性,需要投入大量的成本,他们的交易服务费用,也将会比较高(好的服务,当然应该贵一些)

于是:我们得到了一个良性的,分布式多中心的,交易账本系统!

五、三种交易类型与应对策略

1. 最简单的交易,就是发生在两个账户之间的

参考复式记账法,一笔交易我们至少需要同时修改两个文件,因此我们需要确保在那台git server上,两个账户文件都已经是最新版本了:

账户A说:我的账户地址是XXXX1,我的最新版本是YYYY1,你可以去以下服务器查证。

账户B说:我的账户地址是XXXX2,我的最新版本是YYYY2,你可以去以下服务器查证。

Be the first to comment

Leave a Reply

Your email address will not be published.


*