参考资料:《区块链技术指南》
DAPP(分布式应用),区块链新物种,程序员掘金新风口!
什么是以太坊?
比特币的区块链设计取得了巨大成功,但是,由于存在着非图灵完备性、缺少保存状态的账户概念,以及PoW挖矿机制所带来的资源浪费和效率问题,在很多区块链应用场景下并不适用。
以太坊的设计者期望,基于以太坊,开发者能够创建任意的基于共识的、可扩展的、标准化的、图灵完备的、易于开发和协同的应用。
以太坊既是平台又是编程语言,包括数字货币以太币(Ether),以及用来构建和发布分布式应用的以太脚本(EtherScript),它提供一个完整的编程语言环境。从最底层角度来看,以太坊是一个多层的、基于密码学的开源技术协议。
以太坊也是区块链与智能合约的完美结合,在以太坊上可以任意编写智能合约,并且运行在以太坊特有的虚拟机上,通过以太坊虚拟机和RPC接口与底层区块链进行交互。
以太坊的架构如下:
以太坊总体架构
一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。智能合约就像加密的包含价值的箱子。只有当特定条件被满足时它才被打开,它封装了一些逻辑、规则、处理步骤或者双方间的协议。
以太坊核心概念
--以太坊虚拟机
以太坊虚拟机(EVM)智能合约的运行环境。EVM不是基于寄存器的,而是基于栈的虚拟机。因此所有的计算都在一个称为栈的区域内执行。栈最大有1024个元素,每个元素有256位。
--以太坊账户
以太坊包括两种账户,外部账户和合约账户。外部账户,该类账户被公钥-私钥对控制,类似于比特币账户。合约账户,该类账户被存储在账户中的代码控制,按照合约规定,运行账户。
--消息
消息是不同账户之间交换的信息,以太坊消息可以包含数据,合约账户可以对消息进行回应。
--交易
以太坊中“交易”是指存储从外部账户发出的消息的签名数据包。交易包含消息的接收者、用于确认发送者的签名、以太币账户余额、要发送的数据和被称STARTGASGASPRICE的两个数值。为了防止代码出现指数型爆炸和无限循环,每笔易需要对执行代码所引发的计算步骤做出限制。STARTGAS就是通过需要支付的燃料来对计算步骤进行限制,GASPRICE是每一计算步骤需要支付矿工的燃料的价格。
--Gas(燃料)
Gas价格由交易创建者设置,发送账户需要预付的交易费用=GASPRICE*Gas amount如果执行结束还有Gas剩余,这些Gas将被返还给发送账户。无论执行到什么位置,一Gas被耗尽就会触发一个out-of-gas异常。同时,当前调用帧所做的所有状态修改都将被回滚。
--指令集
所有的指令都是针对256位这个基本的数据单位进行的操作,具备常用的算术、位、逻辑和比较操作,也可以进行条件和无条件跳转。
--消息调用
合约可以通过消息调用的方式来调用其他合约,或者发送以太币到非合约账户。。调用层数被限制为1024。因此对于更加复杂的操作,我们应该使用循环而不是递归。
--代码调用和库
以太坊中存在一种特殊类型的消息调用,被称为callcode,这意味着一个合约可以在运行时从另外一个地址动态加载代码。这使得Solidity可以实现“库”。
以太坊客户端
目前有四种语言编写的客户端:
Go语言-------------Geth(官方推荐)
C++-----------------Eth
Python-------------Pyethapp
Java----------------EthereumJ
以太坊包括一个专用的客户端浏览器Mist,使得用户可以运行各种各样的去中心化应用(DApp),发布智能合约。
DAPP是Decentralized Application的缩写,中文叫分布式应用/去中心化应用。DAPP就是底层区块链平台生态上衍生的各种分布式应用,也是区块链世界中的基础服务提供方。DAPP于区块链,就好比APP之于IOS和Android。传统的web应用,客户端js代码运行在自己的浏览器中,服务端代码运行在企业的后台服务器上。但是,DAPP应用的智能逻辑运行在区块链上,客户端代码运行在特殊浏览器中(比如Mist)。
一个DAPP应当具备以下条件:1、应用必须完全开源、自治,且没有一个实体控制着该应用超51%Token。2、应用的数据必须加密后存储在公开的区块链上;3、应用必须拥有Token机制(可用基于相同底层区块链平台的通用代币或自行发行新币),矿工或应用维护节点需要得到代币奖励;4、应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。
网友评论