2008年8月,bitcoin.org域名被注册,两个月后比特币白皮书出现在网络上,次年1月比特币的第一个版本公开发布。从白皮书描述(只有12页,真的很简洁)来看,比特币的设计目的是用于解决电子货币的信任中心化、匿名问题,而在这之前,非对称加密、p2p网络技术均已经很成熟,电子货币领域的研究也有一定积累,中本聪在此基础上创造性地提出工作量证明算法,用计算机真实不可伪造的计算能力解决节点共识问题,并用blockchain这种特殊的数据结构保证交易不可篡改,使这一领域的研究前进一大步。08年是美国发生次贷危机的一年,比特币的出现,可以说让研究者们对于推动金融去中心化有了更多的辩护理由,比特币背后的技术也吸引了更多人对于不同领域去中心化的探索。
比特币在论坛发布的前几个月,吸引了一批对加密货币感兴趣的人常驻论坛讨论。2009年10月论坛成员NewLibertyStandard提出建立一个可以买卖比特币的网站的想法,并提供了根据电费账单得出的一个美元到比特币的汇率(1$=1309.03btc),首次将比特币价值与法币价值挂钩。2010年5月,程序员Laszlo Hanyecz用10000BTC买了一个价值25美元的披萨,比特币首次在现实生活中流通。2010年7月,比特币交易网站MT.GOX 于日本上线,开辟了比特币的黄金炒作时代,让更多的人了解到比特币。俄罗斯程序员Vitalik Buterin是比特币源码维护者之一,2013年,他认识到比特币的技术不仅仅可以用于电子货币,还可以应用到更广泛的领域。然而在当前的比特币源码基础上改造以满足可编程的需求,存在诸多技术上的限制,且想法在社区推行遇到不可抗拒的阻力。因此Buterin脱离了社区,于2015年推出了可编程的区块链平台Ethereum。Ethereum的出现,很大程度上释放了区块链技术的潜能。
区块链从一开始要解决的问题之一是信任中心化,那么中心化到底存在什么问题?我认为主要有以下几点:一是数据可篡改,这在多方合作运营模式下需要很高的信任成本;二是数据不透明,只属于中心化服务提供者,甚至都不属于个人(腾讯声明用户的昵称头像属于腾讯的);三是数据无隐私保护,一旦泄露任何人都可以利用。互联网缔造者伯纳斯.李认为互联网发展至今,存在三个致命问题:个人信息泄露、虚假信息泛滥、政治营销的透明度。这三个问题或多或少都与中心化有关系。区块链是如何解决这些问题的呢?从技术层面来看,区块链软件主要有三个模块:数据加密模块、数据传输模块、数据共识模块。
数据加密模块使用非对称加解密算法,实现匿名性。区块链里没有真实账号身份,有的仅仅是一个逻辑账户,由一串公钥字符串表示。公钥通过RSA算法生成并对外公布,私钥由所有者控制。数据可通过公钥加密存储在区块链系统里,只有私钥所有人本人能解密。
数据传输模块输基于P2P网络实现,每个节点既充当服务端的角色,又充当客户端的角色。节点会维护网络中的存活节点列表,生产数据时向这些节点广播,同时向任意节点提供数据查询服务。
数据共识模块,解决多个节点之间针对同一份数据的读写,即使存在冲突的情况下如何达成一致的共识的问题。由于分布式系统环境复杂,节点之间通过消息或者远程调用进行通信,存在网络延迟、节点宕机甚至故意作恶节点的情况,如何让每个节点维护一份相同的数据是一个非常棘手的问题。在比特币诞生之前,有很多研究此类问题的算法,其中比较有名的场景是拜占庭将军问题。总结这类算法的特点,基本上是根据网络中是否存在恶意节点分成两类:非拜占庭容错算法,认为所有节点都是诚实的,容忍部分节点宕机;拜占庭容错算法,在上面的基础上又强化了一步,即使网络中存在作恶节点,但只要网络中诚实节点足够多,那么最终系统能达成共识,排除作恶节点。去中心化系统里所有节点的地位都是平等的,比特币之前的这些共识算法正是基于此种原则设计。中本聪共识算法的设计逃离了这一思维框架,在平等中引入了稍许的不平等,让计算能力高的节点更有可能决定主导权。节点面临冲突时,通过判断经过特殊设计的存储结构的属性来解决。这个存储结构即链表,属性即链表的长度,链表出现冲突(分叉)时,节点保留链长度最长那条链的数据,其他的则经过一段时间确认后丢弃。为了提高篡改数据的难度,链表中的每个节点除了存储本身的数据,还存储了包含了父节点的部分数据,以及本身节点所有数据的哈希值。通过链表的形式,所有的节点数据形成了一个有因果关系、相互关联的整体,如果要对某个节点中的数据做修改,那么需要同时修改这个节点后的所有数据,除非数据篡改者的计算能力超过这个网络的50%,否则无法达成目的。
这三个基础模块是区块链1.0的主要支撑模块,Buterin的以太坊引入了可编程模块(所谓的智能合约),使区块链技术走向了2.0。智能合约是存储在区块链上带有特殊指令的账户,向这个账户进行指定的操作,可触发提前编写好的程序指令。这些指令是公开的,任何人都可以阅读以确定其真实性,由于区块链的不可篡改性,指令一旦部署,就会严格根据条件执行,不存在反悔的情况。这种通过机器合约的形式,替代了以往通过人的信用担保形式,真正解决了信任问题。
区块链3.0的技术发展方向,目前看主要集中于DAPP的开发。去中心化永不宕机的应用,确实很有吸引力,微信搜索”blockex“关注我,后续推送有意思的产品和技术探索!