1.概念了解 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的 新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 含义 比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络,其支持这一应用的底层技术叫做区块链(Blockchain)本质上是一个去中心化的数据库,区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账 本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数 据的一种全新的分布式基础架构与计算范式。 简介 区块链技术包含一下特征:去中心化、开放性、自治性、信息不可篡改、匿名性 区块链技术发展过程(目前处于2.0后文中所讲技术基于此版本,3.0为设想阶段):区块链1.0——数字货币 、区块链2.0——数字资产与智能合约、区块链3.0——DAO、DAC(区块链自洽组织、区块链自洽公司)? 区块链分类:公有区块链(PublicBlockChains)、联盟区块链(ConsortiumBlockChains)、私有区块链(privateBlockChains) 区块链主要解决的交易的信任和安全问题,因此它针对这个问题提出了四个技术创新:分布式账本、对称加密和授权技术、共识机制、智能合约 技术详情 区块的结构,区块头和内部交易数据组成,区块头包含:区块编号、上一区块哈希值、本区块哈希值、挖矿随机数、难度、时间戳。 区块链2.0技术架构分五层由上至下分别为:智能合约层(EVM和solidity脚本)、激励层(发行机制、分配机制)、共识层(POW、POS、DPOS、PBFT)、网络层(P2P网络、传播机制、验证机制)、数据层(区块数据、链式结构、数字签名、哈希函数、Merkle树、非对称加密)。 2.工具和技术的介绍 通过前面对区块链概念的大致了解,我们可以开始真正的学习区块链之旅。 要说区块链技术那么必须说以太坊,区块链技术通过上一篇的了解可以知道,它是支撑比特币的一个底层技术架构,随后被提取和抽象。以太坊将区块链技术带入到了2.0时代,所以我们现在学区块链技术就从以太坊开始就好了。 以太坊官方地址:https://ethereum.org/ 以太坊帮助文档地址:http://www.ethdocs.org/en/latest/index.html 客户端 以太坊有不同语言实现的客户端,分别为go、c++、java、python等,并实现夸平台使用(linux、windows、OSX)。这里推荐使用go语言实现的客户端,它是使用最广泛的以太坊客户端,大部分节点都是运行的该客户端,教程和例子也最多,推荐使用,可用于挖矿,组建私有链,管理账号,部署智能合约等常用功能。安装完之后在命令行进行操作管理,其命令行参数和方法也非常简洁 项目地址:https://github.com/ethereum/go-ethereum 钱包 如果你不是想做技术研究又或者觉得在命令行中进行账户管理、交易、部署智能合约比较麻烦,可使用以太坊钱包。mist项目下有两个图形界面的客户端分别为:Ethereum-Wallet和mist,Ethereum-Wallet是纯gui界面的客户端,mist是嵌了一个gui的壳,打开页面是html页面。另外一个钱包是parity推荐使用的,他在同步区块数据上有技术上的创新,比前面两个都快。将来钱包会逐步发展成智能合约的应用市场,类似现在移动客户端的APP市场,在这里可以搜索下载、发布以太坊的智能合约应用,目前处于初级阶段。 mist项目地址:https://github.com/ethereum/mist parity项目地址: https://github.com/ethcore/parity 开发语言 区块链技术2.0的最主要的特色就是智能合约,可针对各行各业根据自己的业务需求来编写智能合约。那么编写智能合约就会涉及到具体的开发语言,目前以太坊智能合约支持的开发语言有:solidity、serpent、lll。其中solidity为最主要的开发语言,强烈推荐。其类似javascript编写效率、可读性都比较高。 智能合约说明地址:http://www.ethdocs.org/en/latest/contracts-and-transactions/contracts.html 开发工具 如果你只是调试一段简单的智能合约,推荐使用browser-solidity项目该项目是智能合约浏览器版本的开发环境,可以支持在浏览器中直接开发、调试和编译,对于初学者来说,可以快速上手,不需要安装,非常方便。 项目地址:https://ethereum.github.io/browser-solidity/ Remix是以太坊官方推荐的智能合约开发IDE,项目地址:https://github.com/ethereum/remix 另外还有一个第三方的IDE,项目地址:https://live.ether.camp/ 顺便提一下微软visual studio 也集成了以太坊智能合约的编写功能,足矣证明以太坊在区块链技术上的影响力 本节介绍了推荐的客户端、编程语言、开发环境,下面我们就开始动手了。 3.客户端使用 通过学习本节,你可以在脑海中建立区块链大致的“模样”,加深理解。本文中所有的相关演示都是基于以太坊技术在OS X系统环境下进行操作。本节分两部分:一、安装geth客户端,通过命令行进行相关操作;二、安装parity钱包客户端,通过图形界面加深了解。 3.1 安装geth客户端 通过学习上一篇文章我们知道,以太坊项目中有几种语言实现的客户端,那么geth则是通过go语言实现的客户端,接下来我们需要安装并了解geth客户的使用了,特别注意:本文以OS X为例。 3.1.1 打开项目地址:https://github.com/ethereum/go-ethereum 3.1.2 选择wiki,并选择 Installation Instructions for Mac OS 3.1.3 安装(如果没有安装homebrew则自行安装): brew tap ethereum/ethereum brew install ethereum 3.1.4 使用 如果以上安装正常,则可进入命令行管理geth节点,在命令行输入geth -h 可以查看节点的使用方法, 如想要更详细的说明请参考:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options 下面将演示进入geth控制台进行,获取用户列表、新增用户、查询用户余额、查看节点信息等操作。 注意:通过geth console 默认进入的是公链的网络 3.2 安装parity钱包客户端 Parity钱包是由以太坊前CTO Gavin Wood组建的团队开发的,区块链技术是分布式的,所有数据都在本地有一份,目前公链上的数据大概有20多G,故我们使用时需要将区块数据同步到本地。此客户端最新版本中有几大创新的功能,最重要的功能则是加速了区块同步的速度。 项目地址:https://github.com/ethcore/parity/releases 其包含账户管理(币种转换)、地址便签、应用市场、合约部署和监控以及安全签安装完毕后会在浏览器自动打开parity,默认会提示创建一个新账户,如图: 3.2.1 默认主页打开账户管理,各个模块区域如图 3.2.2 选择用户账户名称进入账户,可对该账户进行交易、币种转换、编辑,注意交易需要花费gas。交易如图 3.2.3 地址薄可对常用地址进行保存,方便下次使用。地址即账户下面显示的一串字符串,例上图中的:0x0049e478d1df14F218c7f9579DD5224106a52873 3.2.4 应用市场,之前文章提到过钱包客户端不仅仅定位于“钱包”更趋向于应用市场,类似AppStore。 未来智能合约构建的基础模块都将发布在这个市场里面,方便面向业务的应用创建,这里不再细说。 默认打开也可以看到parity项目发布的应用。如图 3.2.5 智能合约,钱包中提供了智能合约的监控和部署的功能,智能合约监控是方便你保存智能合约的地址、abi,因为一个智能合约部署上区块链上去之后将无法修改,如果你忘记了智能合约的地址、abi将再也没法办法找到或者使用该合约。智能合约部署即将实现的智能合约发布到公链上,供其他人调用。监控和部署如下图 3.2.6 其他就是软件本身的一些设置、安全性的功能就不再叙述了。 通过以上客户端的使用,相信你已经对区块链技术有一个新的认识,作为分布式的系统,我们已经被纳入到区块链其中的一个节点。 …