3

区块链开发入门 - Go语言中文网 - Golang中文社区

 1 year ago
source link: https://studygolang.com/articles/23669?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

区块链开发入门

链客 · 2019-09-29 14:02:39 · 1865 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-09-29 14:02:39 的文章,其中的信息可能已经有所发展或是发生改变。

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

区块链这么火,可是你很快就会发现,想要入门区块链开发,尤其是想要从零开始学习区块链编程,根本都找不到突破口!

那么,要掌握区块链开发技术,应该学习哪些知识,应该学习哪些编程语言,才能快速入门区块链开发?

如果你希望马上开始学习以太坊区块链应用开发,可以访问汇智网提供的出色的在线互动教程:

以太坊应用开发入门教程
以太坊去中心化电商应用开发实战
区块链是什么
区块链是什么?一句话,它是一种特殊的分布式数据库技术的实现。

首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。

其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。

分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。

区块链没有管理员,它是彻底无中心的。其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。

正是因为无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。

但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。

那么,什么是区块?

区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。

每个区块包含两个部分。

区块头(Head):记录当前区块的特征值
区块体(Body):实际数据
区块头包含了当前区块的多项特征值。

生成时间
实际数据(即区块体)的哈希
上一个区块的哈希
...
这里,你需要理解什么叫哈希(hash),这是理解区块链必需的。

什么是哈希?

所谓"哈希"就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。

举例来说,字符串123的哈希是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。(理论上,其他字符串也有可能得到这个哈希,但是概率极低,可以近似认为不可能发生。)

因此,就有两个重要的推论。

推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。
推论2:如果区块的内容变了,它的哈希一定会改变。
为什么叫区块链?

区块与哈希是一一对应的,每个区块的哈希都是针对"区块头"(Head)计算的。也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。

Hash = SHA256( 区块头 )
上面就是区块哈希的计算公式,SHA256是区块链的哈希算法。注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定,

前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。

这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。

正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。

每个区块都连着上一个区块,这也是"区块链"这个名字的由来。

区块链适合的应用场景
我们都知道,在技术上不存在银弹,区块链也不是。

区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明它是可行的。

但是,为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。

因此,区块链有它自己的适用场景:

不存在所有成员都信任的管理当局
写入的数据不要求实时使用
挖矿的收益能够弥补本身的成本
如果无法满足上述的条件,那么传统的数据库是更好的解决方案。

区块链平台选择
如果你要学习区块链的开发,首先需要选择合适的区块链平台。目前区块链有1.0和2.0之说。

区块链 1.0

主要由数字货币和支付行为组成。特征包括:

以区块为单位的链状数据块结构;
共享账本;
非对称加密;
源代码开源
区块链1.0主要具备的是去中心化的数字货币和支付平台的功能 ; 目标是为了去中心化,典型代表就是比特币(Bitcoin)。区块链1.0对开发者并不是很友好。

区块链 2.0

主要特点是支持智能合约和去中心化应用开发。

智能合约:区块链系统中的应用,是已编码的可自动运行的业务逻辑,通常有自己的代币和专用开发语言;
去中心化应用:即DApp,包含用户界面 的应用,包括但不限于各种加密货币,如以太钱包;虚拟机,用于执行智能合约编译后 的代码,虚拟机是图灵完备的。智能合约开始在区块链上应用,用机器合约指令代替 人工操作,让一切变得更加透明,没人有人为操作,干扰。比如以太坊上的ICO,就大大降低了融资成本。
因此,区块链2.0是对开发者友好的区块链平台。以太坊是区块链2.0的典型代表。

区块链开发语言选择
开发语言的选择取决于你要做什么事情。

如果你要自己实现一个区块链平台,那选择什么开发语言都可以,比如:java、c/c++、python、nodejs、go...

如果你要对已有的区块链平台进行底层改造,那就看这个平台的主流开发语言是什么。例如以太坊的底层协议实现最流行的版本是采用go语言,那么你可以学习go。

如果你要基于已有的区块链进行应用开发,那么就要看这个平台的约束。例如以太坊上智能合约的主流开发语言是solidity,去中心化应用的开发语言是nodejs和html/javascript/css。以太坊开发入门免费教程可以让你对这些内容有一个初步了解。

因此,对于希望学习区块链开发技术的工程师而言,从以太坊应用开发入手是最佳的区块链开发入门方式,如果你已经有web开发基础,只需要先理解智能合约的概念和作用,然后学习solidity来开发以太坊区块链的智能合约,结合web前端,就可以快速开发出一个基于区块链的去中心化应用了!


有疑问加站长微信联系(非本文作者)

280

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK