你认识以太坊智能合约吗?
本文由币车HIT(biche.yaofache.com)大V养成计划支持!
以太坊智能合约是以太坊相关内容中最为重要的一块,以太坊的智能合约让区块链从比特币1.0步入到了区块链2.0从而让更多的应用可以在以太坊的平台上开发使用。
那么以太坊的智能合约究竟是什么呢?下面请听木木给大家简单介绍一番。
我们现实生活中的合约一般一式几份给与合约的签署方,然后再根据纸质合约执行合约条款。而智能合约需要首先明确代码即规则,基于这个原则智能合约就类似于一个代理人的角色,在区块链上智能合约就是合约代码+存储空间的虚拟账户。
智能合约中的行为由代码来控制,那么智能合约的账户就是存储合约的状态了。在以太坊平台上核心就是EVM(以太坊虚拟机)而合约代码的执行都是在EVM中进行的,当然每个节点都会有一个EVM而EVM则是一个图灵完备的虚拟机。
以太坊在合约执行过程中是通过创建消息的方式来调用其它的合约的,其调用过程如下:
第一步:智能合约A发送一条消息(内容:发送者、接收者、value、Gas等相关信息)给智能合约B,消息的格式和交易很类似,区别在于消息使用的call指令在区块链中不产生一个交易的记录。
第二步:智能合约B收到消息后访问消息的数据区去获取参数然后执行合约的代码。第三步智能合约B执行后结果返回给智能合约A。第四步智能合约A把智能合约B返回消息单独放在一块内存空间。
智能合约对区块链的发展有着革命性的作用,上链后的合约和传统合约对比有以下优点:
1.代码即规则:代码的逻辑比较的明确从而使合约内容规则更加的明确。
2.区块链网络中的节点是互相独立的因此需要形成共识后再写入,而整个过程中的记录是不可篡改的,因为区块链保存了合约的执行记录从而使整个过程明确可追溯且合约的执行力依赖区块链协议后可以得到强力的保证。
智能合约的语言是一种面向对象且接近于Javascript的Solidity语言,但作为一种真正意义上运行在去中心化网络上的合约又有很多的不同:
1. 以太坊底层是基于帐户而非UTXO的,所以有一个特殊的Address的类型可以用来定位用户、定位合约和定位合约的代码(合约本身也是一个帐户)。
2. 由于语言内嵌框架是支持支付的,所以提供了一些关键字如payable就可以在语言层面直接支持支付。
3.存储是使用网络上的区块链从而使数据的每一个状态都可以永久存储,所以需要提前确定变量是使用内存还是使用区块链。
4.去中心化的网络运行环境会比较强调合约或函数执行的调用方式,因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行。5.它的异常机制一旦出现异常所有的执行都将会被撤,而这样做主要也是为了保证合约执行的原子性以避免中间状态出现的数据不一致。
以上就是木木学习后对以太坊智能合约的简单介绍,希望可以帮助大家更好的理解。
大