一、以太坊简介

以太坊(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,内置调试器和测试环境

区块链快速入门(八)——以太坊相关推荐

  1. 区块链应用 - 博世的以太坊汽车充电站

    2019独角兽企业重金招聘Python工程师标准>>> 德国汽配巨头博世(Bosch)近日测试了基于以太坊区块链的汽车充电站项目,为电动汽车的充电提出了新的愿景. 根据博世CEO V ...

  2. 区块链开发之搭建以太坊私有链

    (一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...

  3. 区块链技术--Ethereum(以太坊)

    以太坊项目进一步扩展了区块链网络的能力,从交易延伸为智能合约(Smart Contract) 其官网首页为 ethereum.org. 简介 根据以太坊官方的宣称,以太坊(Ethereum)目标是打造 ...

  4. 视频教程-区块链项目:基于以太坊开发拍卖系统DApp教程(含资料)-区块链

    区块链项目:基于以太坊开发拍卖系统DApp教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动 ...

  5. 区块链2.0应用——以太坊

    以太坊 以太坊是采用区块链 2.0 技术实现的产品,它的出现是为了解决比特币系统的不足. 比特币的不足 比特币的出区块时间是 10 分钟,换算出来仅仅支持全球单秒 7-8 比交易,影响交易速度. 比特 ...

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

    一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵 ...

  7. 以太坊区块链快速入门

    一.基本概念 1.什么是以太坊? 以太坊是由社区驱动的技术,为加密货币以太币(ETH)和成千上万的去中心化应用程序提供动力. 属于所有人的银行服务 现实生活中不是每个人都能使用金融服务.但是只要您有网 ...

  8. 区块链开发教程 # 2 以太坊公链

    科普向介绍请参考 tutorial.技术开发教程请参考本文.本系列文章更偏向技术入门.参考网上资料根据个人理解整理而成.本文主要参考廖雪峰博客. 前一篇文章地址:区块链开发教程 # 1 比特币公链 本 ...

  9. 04.区块链的那些事儿-以太坊中的 Patricia Tree

    本节主要讨论以太坊中存储的 Patricia Tree 比特币只有1棵Merkle树,而以太坊的每一个区块头,并非只包含1棵Merkle Tree,而是包含了3棵Merkle Tree,分别对应了三种 ...

最新文章

  1. 女朋友还是游戏?一起来分析下游戏的开发与销售情况!
  2. 开发工程师的职场人生路(转)
  3. ubuntu 14.04 将窗体button移到右边
  4. 让人头皮发麻的KMP的next函数 困扰我三四天后终于解决了
  5. WP7游戏开发:TweeJump(cocos2d-xna)
  6. rsa加解密的内容超长的问题解决
  7. mysql ---- DDL(了解)
  8. 一个做运营的朋友过来抱怨,现在HR谈薪都这么强硬吗?
  9. Python之倒序切片
  10. 如何判定选择的日期与当前日期的前后关系
  11. Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收
  12. 深度强化学习-策略梯度算法推导
  13. 测试空间大数据软件(Hadoop + HBase + GeoWave + GeoServer)
  14. 仿小米商城SpringBoot+Vue全栈项目开发实战文档
  15. 大小写字母转换(java大小写字母转换)
  16. Android使用WebView打包网页成app
  17. python学习笔记项目_python第三方库之Django学习笔记一
  18. Vue教程-day05-2018年12月25日笔记
  19. 聚焦企业征信商业化,可信百科为何以“百科”为名?
  20. html图片平铺div,前端小知识——图片平铺问题

热门文章

  1. 迅雷CTO李金波的一篇文章,给自己 mark 下一个指引吧!
  2. TWINSNOW - Snowflakes 哈希
  3. DirectX11--使用DirectX Tool Kit帮助开发
  4. PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
  5. 50G-PON,继10G PON之后的新一代PON技术
  6. 海桂嘉积中学2021高考成绩查询,圆梦行动 “我想做记者,我想学计算机” 屯昌文武山村“高考姐妹花”的美好心愿...
  7. 算法之回溯算法-24点问题
  8. java理论_java入门——基础理论
  9. 修改 Git 已经提交记录的 用户名 和邮箱
  10. WebRTC技术详解