区块链技术-以太坊概述
以太坊是什么
以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
以太坊技术
以太坊核心概念
以太坊虚拟机
EVM是以太坊中智能合约的运行环境,是由许多互相连接的计算机组成。任何人都可以上传程序,并让这些程序自动执行,同时保证现在和所有以前的每个程序的状态都是公开可见的。
账户
以太坊中有两类账户,他们共用同一个地址空间:
- 外部账户:被公钥-私钥对控制。地址由公钥决定
- 合约账户:由存储在账户中的代码控制。地址由创建合约时由合约创建者的地址和改地址发出过的交易数量的到。
区别:外部账户没有代码,可以通过创建和签名一笔交易从一个外部账户发送消息。合约账户收到一条消息,合约内部的代码就会被激活,来对其内部存储进行操作。
消息
类似于比特币的交易,但存在了三点重要的不同。
- 以太坊的消息可以由外部实体或者合约创建,比特币只能由外部实体创建。
- 以太坊消息可以选择包含数据。
- 如果以太坊消息的接受者是合约账户,可以选择回应,类似于函数概念。
交易
以太坊中“交易”是指存储从外部账户发出的消息的签名数据包。交易包含消息的接受者,用于确认发送真的签名,以太币账户余额,要发送的数据和被称为STARTGAS和GASPRICE的两个数值。为了防止代码出现指数型爆炸和无限循环。
Gas
以太坊上的每笔交易都会被收取一定数量的Gas,设置Gas的目的是限制交易执行所需的工作量,同时为交易的执行支付费用。Gas价格由交易创建者设置,发送账户需要预付费用。当Gas剩余时,会被返回给发送账户。当Gas耗尽时,触发一个out-of-gas异常。
存储,主存和栈
存储:每个账户都有一块永久的内存区域,其形式为Key-Value,key和value的长度均为256位。在合约里,不能遍历账户的存储。一个合约只能读写自己的存储。
主存:合约执行每次消息调用时,都有一块新的被清除过得主存。主存可以按字节寻址,但是读写的最小单位为32字节。
栈:EVM不是基于寄存器的,而是基于栈。栈最大有1024个元素,每个元素有256位。对栈的访问只限于其顶端,不能只访问栈里制定深度的那个元素。
指令集
EVM的指令集被刻意保持在最小规模,以尽可能避免可能导致共识问题的错误。所有的指令都是针对256位这个基本的数据单位进行的操作,具备常用的算数操作和条件无条件跳转。
消息调用
合约可以通过消息调用的方式来调用其他合约,或者发送以太币到非合约账户。消息调用和交易非常类似,事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会一次产生更多的消息调用。
智能合约
以太坊上的程序称之为智能合约, 它是代码和数据(状态)的集合。
智能合约可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。
以太坊对比比特币而言,是图灵完备的,能够像任何高级语言一样编写所有的程序。
智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。
目前除数字货币之外,真正落地的应用还不多(就像移动平台刚开始出来一样),因此这是个蓝海,如何将区块链的优势落实下来,将会有非常大的市场空间。
编程语言:Solidity
智能合约的默认的编程语言是Solidity,文件扩展名以.sol结尾。
Solidity是和JavaScript相似的语言,用它来开发合约并编译成以太坊虚拟机字节代码。
还有长得像Python的智能合约开发语言:Serpent,不过建议大家还是使用Solidity。
Browser-Solidity是一个浏览器的Solidity IDE, 大家可以点进去看看,以后我们更多文章介绍Solidity这个语言。