Category Archives: 区块链CAT1——背景和应用

什么是Gas

智能合约由区块链网络中的每个完整节点重复执行,使得合约执行的消耗变得昂贵,所以这也促使大家将能在链下进行的运算都不放到区块链上进行。对于每个被执行的命令都会有一个特定的消耗,用单位gas计数。每个合约可以利用的命令都会有一个相应的gas值。gas值的存在避免智能合约进入死循环,你不能编写永不结束的程序,因为你用尽了gas,计算将被节点拒绝。

在以太坊中,每笔交易都被要求包括一个gas limit和一个交易愿为单位gas支付的费用。矿工可以有选择的打包这些交易并收取这些费用。在现实中,由于矿工会优先选择打包费用高的交易,所以用户所选择支付的交易费用多少会影响到该交易被打包所需等待的时长。

如果该交易由于计算,包括原始消息和一些触发的其他消息,需要使用的gas数量小于或等于所设置的gas limit,那么这个交易会被处理。

如果gas总消耗超过gas limit,那么所有的操作都会被复原,但交易是成立的并且交易费任会被矿工收取。区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原(out-of-gas)。

所有交易里没有被使用的超量gas都会以以太币的形式打回给交易发起者。因为gas消耗一般只是一个大致估算,所以许多用户会超额支付gas来保证他们的交易会被接受。


什么是以太坊虚拟机EVM

以太坊虚拟机(Ethereum Virtual Machine,EVM)是建立在以太坊区块链上的代码运行环境,其主要作用是处理以太坊系统内的智能合约。

简单来说,以太坊虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在EVM内部运行。由于EVM分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似JavaScript和Python等编程语言创建运行于EVM的应用程序;同时以太坊虚拟机又能与主网的其余部分隔离,运行时不影响主区块链的操作。出于这个原因,以太坊有时被形容为“世界电脑”。

为了减少资源耗费及保证系统性能,以太坊虚拟机并没有采用模拟完整计算机的模式,而是使用更为轻量级的虚拟机构架。以太坊开发者还推出了基于以太坊电子分布式代码合约的高级程序语言Solidity,但Solidity语言缺乏标准库、基于栈的架构易于优化但所需opcode更多等。