区块链快速入门(八)——以太坊

区块链快速入门(八)——以太坊

一、以太坊简介

以太坊(Ethereum)项目的最初目标是打造一个运行智能合约的平台(Platform for Smart Contract),支持图灵完备的应用,按照智能合约的约定逻辑自动执行,理想情况下将不存在故障停机、审查、欺诈以及第三方干预等问题。
以太坊平台目前支持Golang、C++、Python等多种语言实现的客户端。由于核心实现上基于比特币网络的核心思想进行了拓展,因此在很多设计特性上都与比特币网络十分类似。
基于以太坊项目,以太坊团队目前运营了一条公开的区块链平台——以太坊网络。智能合约开发者使用官方提供的工具和以太坊专用应用开发语言Solidity,可以很容易开发出运行在以太坊网络上的去中心化应用(Decentralized Application,DAPP)。DAPP应用将运行在以太坊的虚拟机(Ethereum Virtual Machine,EVM)里。用户通过以太币(Ether)来购买燃料
(Gas),维持所部署应用的运行。
以太坊项目官网:www.ethereum.org
以太坊项目代码托管:www.github.com/ethereum
以太坊区块链底层也是一个P2P网络平台,智能合约运行在网络中的以太
坊虚拟机里。网络自身是公开可接入的,任何人都可以接入并参与网络中数据的维护,提供运行以太坊虚拟机的资源。
以太坊区块链的技术特点主要包括:
A、支持图灵完备的智能合约,设计了编程语言Solidity和虚拟机EVM
B、选用内存需求较高的哈希函数,避免出现强算力矿机、矿池***
C、叔块(Uncle Block)激励机制,降低矿池的优势,并减少区块产生间隔
D、采用账户系统和世界状态,而不是UTXO,容易支持更复杂的逻辑
E、通过Gas限制代码执行指令数,避免循环执行***
F、支持POW共识算法,并计划支持效率更高的POS算法
此外,开发团队还计划通过分片(Sharding)方式来解决网络可扩展性问题。

二、以太坊核心概念

1、智能合约

智能合约(Smart Contract)是以太坊中最为重要的一个概念,即以计算机程序的方式来缔结和运行各种合约。以太坊支持通过图灵完备的高级语言(包括Solidity、Serpent、Viper)等来开发智能合约。
智能合约作为运行在以太坊虚拟机(Ethereum Virual Machine,EVM)中的应用,可以接受来自外部的交易请求和事件,通过触发运行提前编写好的代码逻辑,进一步生成新的交易和事件,可以进一步调用其它智能合约。
智能合约的执行结果可能对以太坊网络上的账本状态进行更新。对账本状态的修改由于经过了以太坊网络中的共识,一旦确认后无法被伪造和篡改。

2、账户

以太坊直接用账户来记录系统状态。每个账户存储余额信息、智能合约代码和内部数据存储等。以太坊支持在不同的账户之间转移数据,以实现更为复杂的逻辑。
以太坊账户分为两种类型:合约账户(Contracts Accounts)和外部账户(Externally Owned Accounts,EOA)。
合约账户:存储执行的智能合约代码,只能被外部账户来调用激活。
外部账户:以太币拥有者账户,对应到某公钥。账户包括nonce、balance、
storageRoot、codeHash等字段,由个人来控制。
当合约账户被调用时,存储其中的智能合约会在矿工处的虚拟机中自动执行,并消耗一定的燃料。燃料通过外部账户中的以太币进行购买。

3、交易

交易(Transaction),在以太坊中是指从一个账户到另一个账户的消息数据。消息数据可以是以太币或者合约执行参数。
以太坊采用交易作为执行操作的最小单位。每个交易包括如下字段:
To:目标账户地址。
Value:可以指定转移的以太币数量。
Nonce:交易相关的字串,用于防止交易被重放。
gasPrice:执行交易需要消耗的Gas价格。
Startgas:交易消耗的最大Gas值。
Signature:签名信息。
在发送交易时,用户需要缴纳一定的交易费用,通过以太币方式进行支付
和消耗。目前,以太坊网络可以支持超过比特币网络的交易速率(可以达到每秒几十笔)。

4、以太币

以太币(Ether)是以太坊网络中的货币。
以太币主要用于购买燃料,支付给矿工,以维护以太坊网络运行智能合约的费用。以太币最小单位是wei,一个以太币等于 10^18个wei。
以太币可以通过挖矿来生成,成功生成新区块的以太坊矿工可以获得5个以太币的奖励以及包含在区块内交易的燃料费用。用户也可以通过交易市场来直接购买以太币。
目前每年大约可以通过挖矿生成超过一千万个以太币,单个以太币的市场价格目前超过200美金。

5、燃料

燃料(Gas),控制某次交易执行指令的上限。每执行一条合约指令会消耗固定的燃料。当某个交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态。
Gas可以跟以太币进行兑换。以太币的价格是波动的,但运行某段智能合约
的燃料费用可以是固定的,通过设定Gas价格等进行调节。

三、以太坊主要设计

1、智能合约

以太坊采用以太坊虚拟机(EVM)作为智能合约的运行环境。以太坊虚拟机是一个隔离的轻量级虚拟机环境,运行在其中的智能合约代码无法访问本地网络、文件系统或其它进程。
对同一个智能合约来说,通常需要在多个以太坊虚拟机中同时运行多份,以确保整个区块链数据的一致性和高度的容错性,但也限制了整个网络的容量。
以太坊为编写智能合约设计了图灵完备的高级编程语言,降低了智能合约开发的难度。目前Solidity是最常用的以太坊合约编写语言之一。智能合约编写完毕后,用编译器编译为以太坊虚拟机专用的二进制格式(EVM bytecode),由客户端上传到区块链当中,在矿工的以太坊虚拟机中执行。

2、交易模型

以太坊采用了账户的模型,状态可以实时的保存到账户里,而无需像比特币的UXTO模型去回溯整个交易历史。

3、共识

以太坊目前采用基于成熟的POW共识的变种算法Ethash协议作为共识机制。
为了防止ASIC矿机矿池的算力***,跟原始POW 的计算密集型Hash 运算不同,Ethash 在执行时候需要消耗大量内存,反而跟计算效率关系不大。因此,很难制造出专门针对Ethash的芯片,反而通用机器可能更加有效。
虽然,Ethash相对原始的POW进行了改进,但仍然需要进行大量无效的运算,以太坊网络社区已经有计划在未来采用更高效的Proof-of-Stake(POS)作为共识机制。

4、降低***

以太坊网络中的交易更加多样化,也就更容易受到***。
以太坊网络在降低***方面的核心设计思想仍然是通过经济激励机制防止少数人作恶:
A、所有交易都要提供交易费用,避免DDoS***
B、程序运行指令数通过Gas来限制,所消耗的费用超过设定上限时就会被取消,避免出现恶意合约。
确保***者试图消耗网络中虚拟机的计算资源时,需要付出经济代价(支付大量的以太币);同时难以通过构造恶意的循环或不稳定合约代码来对网络造成破坏。

5、提高扩展性

可扩展性是以太坊网络承接更多业务量的最大制约。
以太坊项目未来希望通过分片(sharding)机制来提高整个网络的扩展性。分片是一组维护和执行同一批智能合约的节点组成的子网络,是整个网络的子集。
支持分片功能前,以太坊整个网络中的每个节点都需要处理所有的智能合约,造成了网络的最大处理能力会受限于单个节点的处理能力。分片后,同一片内的合约处理是同步的,彼此达成共识,不同分片之间则可以是异步的,可以提高网络整体的可扩展性。

四、以太坊相关工具

1、客户端与开发库

以太坊客户端可用于接入以太坊网络,进行账户管理、交易、挖矿、智能合约等各方面操作。
以太坊社区现在提供了多种语言实现的客户端和开发库,支持标准的JSON-RPC协议。用户可根据自己熟悉的开发语言进行选择。
go-ethereum:Go语言实现
parity:Rust语言实现
cpp-ethereum:C++语言实现
ethereumjs-lib:javascript语言实现
ethereum(J):Java语言实现
ethereumH:Haskell语言实现
pyethapp:Python语言实现
ruby-ethereum:Ruby语言实现
go-ethereum的独立客户端Geth是最常用的以太坊客户端之一。用户可通过安装Geth来接入以太坊网络并成为一个完整节点。Geth也可作为一个HTTP-RPC服务器,对外暴露JSON-RPC接口,供用户与以太坊网络交互。
Geth的使用需要基本的命令行基础,其功能相对完整,源码托管于github.com/ethereum/go-ethereum

2、以太坊钱包

对于只需进行账户管理、以太坊转账、DAPP使用等基本操作的用户,则可选择直观易用的钱包客户端。
Mist是官方提供的一套包含图形界面的钱包客户端,除了可用于进行交易,也支持直接编写和部署智能合约。
所编写的代码编译发布后,可以部署到区块链上。使用者可通过发送调用相应合约方法的交易,来执行智能合约。

3、以太坊开发IDE

对于开发者,以太坊社区涌现出许多服务于编写智能合约和DAPP的IDE,例如:
Truffle:一个功能丰富的以太坊应用开发环境
Embark:一个DAPP开发框架,支持集成以太坊、IPFS等
Remix:一个用于编写Solidity的IDE,内置调试器和测试环境

原文地址:http://blog.51cto.com/9291927/2306726

时间: 2024-10-08 05:22:15

区块链快速入门(八)——以太坊的相关文章

区块链快速入门(七)——比特币

区块链快速入门(七)--比特币 一.比特币简介 比特币(BitCoin,BTC)是基于区块链技术的一种数字货币实现,比特币网络是历史上首个经过大规模长时间检验的数字货币系统.自2009 年正式上线以来,比特币价格经历了数次的震荡,目前每枚比特币市场价格超过6000 美金,并曾经一度接近20000美金.比特币网络在功能上具有如下特点:A.去中心化没有任何独立个体可以对网络中交易进行破坏,任何交易请求都需要大多数参与者的共识.B.匿名性比特币网络中账户地址是匿名的,无法从交易信息关联到具体的个体,但

如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术.从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币.而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓.价值知晓.图灵完备,并进行了细节优化,从而形成了以

区块链快速入门(五)——区块链技术的演化

区块链快速入门(五)--区块链技术的演化 一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作.引入智能合约的区块链,已经超越了单纯数据记录功能:可以为区块链加入权限管理,高级编程语言支持等,实现更强大的.支持更多商用场景的分布式账本系统.区块链技术的三种典型演化场景如下: 二.区块链技术的分类 根据参与者的不同,区块

区块链快速入门(六)——区块链密码学与安全相关技术

区块链快速入门(六)--区块链密码学与安全相关技术 一.区块链密码安全技术简介 区块链和分布式账本中大量使用了密码学和安全技术的最新成果,特别是身份认证和隐私保护相关技术.区块链使用了包括Hash 算法与摘要.加密算法.数字签名和证书.PKI体系.Merkle 树.布隆过滤器.同态加密等密码安全相关技术,用于设计实现区块链的机密性.完整性.可认证性和不可抵赖性. 二.Hash算法与数字摘要 1.Hash算法简介 Hash(哈希或散列)算法,常被称为指纹(fingerprint)或摘要(diges

区块链,使用 Go-Ethereum 搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe

区块链快速入门(二)——分布式系统核心技术

区块链快速入门(二)--分布式系统核心技术 一.分布式系统的一致性问题 1.分布式系统的一致性问题 随着摩尔定律碰到瓶颈,越来越多情况下要依靠可扩展的分布式架构来实现海量处理能力.单点结构演变到分布式结构,首要解决的问题就是数据的一致性.如果分布式集群中多个节点不能保证处理结果的一致性,建立在其上的业务系统将无法正常工作.区块链系统是一个典型的分布式系统,在设计上必然也要考虑一致性问题.在面向大规模复杂任务场景时,单点的服务往往难以解决可扩展(Scalability)和容错(Fault-tole

区块链快速入门(三)——CFT(非拜占庭容错)共识算法

区块链快速入门(三)--CFT(非拜占庭容错)共识算法 一.CFT简介 CFT(Crash Fault Tolerance),即故障容错,是非拜占庭问题的容错技术.Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题,是分布式共识领域最为常见的问题.最早由Leslie Lamport用 Paxon 岛的故事模型来进行描述而得以命名.解决Paxos问题的算法主要有Paxos系列算法和Ra

区块链快速入门(四)——BFT(拜占庭容错)共识算法

区块链快速入门(四)--BFT(拜占庭容错)共识算法 一.BFT简介 1.拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子.拜占庭将军问题简易的非正式描述如下:拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人.这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击

区块链 Hello World -- 基于以太坊的投票Dapp

指路牌 以太坊 区块链 Dapp 以太坊hello world 环境 windows 10 64bit 参考博客 youclavier -- 以太坊投票Dapp教程 背景 准备接手一个IPFS+Ethereum的项目,先学习一下Ethereum,并尝试完成一个Hello World. 步骤 参考我另一片blog, 安装nvm 安装node 9.11.1 并切换环境 nvm install 9.11.1 nvm use 9.11.1 创建一个新的工作目录,并在命令行索引到该路径 安装ganche-