Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions task_list/task_20180726/go语言在区块链开发.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
Golang 以其在高并发场景下的天然优势等特性,已经成为今天开发分布式系统的首选语言,在云计算领域占据了无法替代的位置。如今,越来越多的项目组织都选择了 Golang 来编写核心处理模块。在当下最热门的技术领域——区块链上,我们所熟知的包括以太坊、SiaCoin 、IPFS 等都在使用 Go 语言开发,甚至可以大胆预测:继云计算之后,未来整个区块链行业也将会是 Go 语言的天下。

区块链

区块链的定义是一个很复杂的事情,因为不同的人对于区块链的理解不同,而且区块链也在不断的发展中,以下列出一些大家对区块链了解的基本定义:
1.去中心化 。其实现在很多的区块链的项目,因为要求高 TPS,已经在牺牲中心化的特性实现高 TPS 了,比如说典型 EOS,它其实更相当于弱中心化。
2.数字化帐本。这些很清晰,所以的区块链都是在互联网上进行的。
3.不可篡改。在以太坊中通过交易的方式可以改变合约的状态的,但是这种改变在合约上也是已知的。
4.确定性的可复制状态机。这个是用来解决整个系统的容错性问题。

2.区块链的特点

1.去中心化(弱中心化)
弱中心化是为了解决信任问题,不会出现一个单一组织或者个人能够控制整个协议。
2.弱信任,对等的写入权限的数据库
在区块链的每个矿工,或者是超级节点以及其他的 POS 见证人等,都有对等的写入权限,这个根据各个协议的不同,虽然说有对等的写入权限,但是什么时候能写入就是共识要解决的问题。
3.共识信任的机制来自于规则,非第三方
这些代码中定义的规则,不是来自于任何的第三方,这里的第三方比较广泛,比如说任何公司、个人甚至一个政府。
4.不可篡改性
在智能合约中有可能改一些智能合约的状态,其他的数据和交易都是不可篡改的。
5.加密安全性,强规则
区块链世界中都是一些非常强的规则,比如说我们常常听到交易,确认。强一致性的规则是各个节点都必须要遵守,如果发生了和规则不一致的交易,或者是区块,会被其他的节点拒绝。
6.可编程
比特币协议本身就是可编程的,体现在脚本语言上,如果是简单的私钥之间只是转帐,硬编码就能实现,不需要使用脚本语言的,脚本语言也能实现一些简单的合约。
7.匿名性
比特币和以太坊是比较弱的匿名性,他们是一个分布式帐本,所有人都有完整的数据,就有能力追查到这个交易从哪里来的。强匿名性没有办法被追踪的。而 zcash 是通过零知识证明实现了强匿名性。
8.跨平台
现在的项目都会跨平台,我对比特币的理解其实是一个协议,整个协议必须类似于互联网当中的 TCP 协议,整个协议要有跨平台性,还要有跨编程语言的特性。
3.区块链使用的编程语言

最开始的时候,世界上还没有区块链这个名词,2008 年的时候,中本聪发布比特币的白皮书,定义了:比特币是点对点的电子现金系统。2009 年创世块诞生,从我们早期观察比特币的源代码中可以看到,中本聪有可能不是专业的程序员,早期的时候他是现学 C++。
从这个时候开始,一直到 2014 年的左右,在区块链行业里一直都是 C++ 的天下,所有的区块链项目,包括以太坊,包括莱特币等,都是使用 C++ 的。2009 年 Go 也是刚刚发布,也不可能使用 Go 语言。

4.为什么选择 GO 语言?

区块链开发的特点

为什么大家会选择 Go 语言?首先要看下区块链的开发特点是什么?第一就是很分布式系统,区块链是 P2P 节点的架构,每个节点在本质上来说都是对点的,每个节点都有对等的权利,因此就会有大量的网络编程,比如比特币客户端,他大概需要连接 2000-3000 个节点,这对多线程要求就会比较高。另外一个特点是在区块链的项目当中会使用大量的数据结构和算法,还有密码学的东西,因为是一个强规则的网络,对于密码学,对于公钥、私钥和哈希大家运用的就会特别的多。