From 3aa89a8d68dd51ef9de694da6ec5df6988e14659 Mon Sep 17 00:00:00 2001 From: xingyundapp <40055028+xingyundapp@users.noreply.github.com> Date: Fri, 28 Sep 2018 00:50:58 +0800 Subject: [PATCH] =?UTF-8?q?Create=20go=E8=AF=AD=E8=A8=80=E5=9C=A8=E5=8C=BA?= =?UTF-8?q?=E5=9D=97=E9=93=BE=E5=BC=80=E5=8F=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pull --- ...27\351\223\276\345\274\200\345\217\221.md" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "task_list/task_20180726/go\350\257\255\350\250\200\345\234\250\345\214\272\345\235\227\351\223\276\345\274\200\345\217\221.md" diff --git "a/task_list/task_20180726/go\350\257\255\350\250\200\345\234\250\345\214\272\345\235\227\351\223\276\345\274\200\345\217\221.md" "b/task_list/task_20180726/go\350\257\255\350\250\200\345\234\250\345\214\272\345\235\227\351\223\276\345\274\200\345\217\221.md" new file mode 100644 index 0000000..743ec5e --- /dev/null +++ "b/task_list/task_20180726/go\350\257\255\350\250\200\345\234\250\345\214\272\345\235\227\351\223\276\345\274\200\345\217\221.md" @@ -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 个节点,这对多线程要求就会比较高。另外一个特点是在区块链的项目当中会使用大量的数据结构和算法,还有密码学的东西,因为是一个强规则的网络,对于密码学,对于公钥、私钥和哈希大家运用的就会特别的多。