想知道更多学习区块链的方法或者区块链知识,请百度【链客区块链技术问答社区】
不少人都说比特币是区块链1.0,以太坊是区块链2.0。在以太坊平台上,能够开发各类各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊是区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领你们轻松入门。
以太坊
以太坊(Ethereum)是一个创建在区块链技术之上的、图灵完备的去中心化应用平台。它容许任何人在平台中经过智能合约技术开发、部署和使用去中心化应用。ios
有没有感到和ios、Android平台有点相似?
在以太坊未问世以前,写区块链的应用是这样的:拷贝一份比特币代码,而后去改底层代码如加密算法、共识机制、网络协议等等。201三、2014年那时候的不少山寨币就是这样,改改比特币代码就造出来一个新币。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者能够直接基于以太坊平台进行开发,开发者只要专一于应用自己的开发,从而大大下降了难度。
目前围绕以太坊已经造成了一个较为完善的开发生态圈:社区支持、开发框架、开发工具等等。
智能合约
网络上关于智能合约的解释都很晦涩。咱们能够简单的理解为在区块链上,由事件驱动、以代码形式存在、可执行的特殊交易合同。它是代码、数据的集合。
智能合约很是适合对信任、安全和持久性要求较高的应用场景,好比:数字货币、数字资产、投票、保险、金融应用、预测市场、产权全部权管理、物联网、点对点交易等等。
目前除数字货币以外,真正落地的应用还很少。和移动互联网刚兴起之时各类各样、各行各业的APP推陈出新同样,去中心化应用的市场在初期确定有一个红利期。对此有兴趣的开发者,可抓住机会。
Solidity
Solidity是一门和JavaScript相似的编程语言,文件扩展名以 .sol 结尾。它用于智能合约的开发,并能编译成以太坊虚拟机字节码,部署到以太坊底层区块链网络上。
EVM
EVM即以太坊虚拟机,全称是Ethereum Virtual Machine。它是以太坊智能合约的运行环境。
EVM是由以太坊节点提供。每一个以太坊节点中都包含EVM
Solidity之于EVM,就像Java跟JVM的关系同样
以太坊虚拟机是一个隔离的环境,在EVM内部运行的代码不能跟外部有联系
EVM运行在以太坊节点上,当咱们把合约部署到以太坊区块链网络上以后,合约就能够在以太坊网络中运行了。
合约编译
以太坊虚拟机上运行的是合约的字节码。这就须要咱们在部署以前先对合约进行编译。
推荐使用solc编译器。
以太坊客户端(节点)
一个以太坊客户端就是一个以太坊节点。它提供帐户管理、数字资产管理、挖矿、转帐、智能合约的部署和执行等等功能。对于咱们开发者来讲,它就是一个开发者工具。
Geth是典型的以太坊客户端。Geth这个名字是Go Ethereum开源项目的简称。它是基于Go语言开发且实现了Ethereum协议的客户端软件。 Geth提供了一个交互式命令控制台,经过命令来操做以太坊的各类功能(API)。
Geth是全节点客户端,会一直同步以太坊区块链上的全部数据。目前数据量已经几十G,不久就会上百G。
在开发过程当中,咱们推荐使用以太坊区块链的私有链Ganache,免去同步以太坊所有区块数据的麻烦。在后续的文章中会介绍Ganache。
帐户
以太坊中帐户分为两类:
该类帐户被公钥-私钥对控制(用户),没有关联任何代码
外部帐户的地址由公钥衍生而来 算法
该类帐户为智能合约分配的帐户,被合约代码控制且有代码与之关联
智能合约的部署会把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址就是为合约帐户
合约帐户存储了代码,外部帐户则没有。除了这点以外,这两类帐户对于EVM来讲都是同样的。
合约部署就是将编译好的合约字节码,经过外部帐号以发送交易的形式部署到以太坊区块链网络上(由实际矿工出块以后,才会真正部署成功)。数据库
外部帐户与外部帐户之间交易仅仅是转帐。可是外部帐户到合约帐户,是能够激活各类操做的。
运行
合约部署后,当须要调用这个智能合约的方法时,只须要向这个合约帐户发送消息(交易)便可,经过消息触发后智能合约的代码就会在EVM中执行了。
Gas
Gas即矿工费。以太坊上每笔交易的执行(被矿工打包)都会被收取必定数量的gas。gas的目的是限制执行交易所需的工做量,同时为执行支付费用。当EVM执行交易时,gas将按照特定规则被逐渐消耗,不管执行到什么位置,一旦gas被耗尽,将会触发一个 out of gas 异常。当前调用帧所作的全部状态修改都将被回滚。若是执行结束,还有gas剩余,这些gas将会返还给发送帐户。所以,咱们须要一个有以太币余额的外部帐户,来为发起的交易支付gas。
若是没有这个限制,就会出现没法中止(如:死循环)的合约来阻塞以太坊区块链网络
gas能够认为是一个工做量单位,智能合约越复杂(计算步骤的数量、类型、占用的内存等等),所需的gas就越多。gas的最小单位是wei,1eth=10^18wei=10^9gwei
GasLimit: 愿意支付矿工费的上限
GasPrice: 矿工费单价
gas = GasLimit * GasPrice编程
去中心化应用(Dapp)
Dapp全称是Decentralized App。以太坊社区把基于智能合约的应用称为去中心化的应用。若是咱们把区块链理解为一个不可篡改的分布式帐本数据库,智能合约理解为和数据库打交道的程序,那就很容易理解Dapp了。一个Dapp不仅仅有智能合约,还须要有一个友好的用户界面和其余的业务程序。
Truffle
Truffle是目前最流行的Dapp开发框架,它能够帮咱们处理掉不少繁琐的事情,让咱们更专一于智能合约的开发,迅速开始编码-编译-部署-测试-打包Dapp的流程。
总结
咱们如今来总结一下。以太坊是平台,它让咱们方便的使用区块链技术开发去中心化的应用。应用中,咱们可使用Solidity来编写和区块链交互的智能合约,合约编写好后以后,咱们经过一个有余额的帐户将合约部署到以太坊节点上,并运行合约(使用Truffle框架能够更好的帮助咱们作这些事情)。为了开发方便,咱们能够用以太坊私有链Ganache来搭建一个测试网络。
注:本文中为了方便你们理解,对一些概念作了类比,有些严格来讲不是准确。不过我认为对于初学者,也没有必要把每个概念掌握的很细致和准确。学习是一个逐步深刻的过程,不少时候咱们会发现,过一段后,咱们会对同一个东西有不同的理解。安全