一段代码集合(类似与java)
java 通过 Java虚拟机将代码解释字节,进行执行
eth 则是通过 以太坊虚拟机运行
2.智能合约有自己的地址(账户)
3.在事件的驱使下,自动的完成一些早已经定义好的功能
在区块链上,用户通过运行部署在区块链上的合约,完成需要共识的操作。以太坊虚拟机,是智能合约代码的执行器。
1.当智能合约被编译成二进制文件后,被部署到区块链上。
2.用户通过调用智能合约的接口,来触发智能合约的执行操作。
3.EVM执行智能合约的代码,修改当前区块链上的数据(状态)。
4.被修改的数据,会被共识,确保一致性。
这里是先执行智能合约,然后对于结果进行共识,达成一致性
新版本的以太坊,EVM与节点的交互,抽象出EVMC接口标准
通过EVMC,节点可以对接多种虚拟机,而不仅限于传统的基于solidity的虚拟机。
优势:实现多种类的虚拟机连接
既然是接口标准,那么都有哪些标准?
定义的调用接口
Instance接口:节点调用EVM的接口
Callback接口:EVM回调节点的接口
EVM本身不保存状态数据,节点通过instance接口操作EVM,EVM反过来,调Callback接口,对节点的状态进行操作。

Instance 接口
定义了节点对虚拟机的操作,包括创建,销毁,设置等。
接口定义在evmc_instance(evmc.h)中
abi_version
name
version
destroy
execute
set_tracer
set_option
Callback接口
定义了EVM对节点的操作,主要是对state读写、区块信息的读写等。
接口定义在evmc_context_fn_table(evmc.h)中。
evmc_account_exists_fn account_exists
evmc_get_storage_fn get_storage
evmc_set_storage_fn set_storage
evmc_get_balance_fn get_balance
evmc_get_code_size_fn get_code_size
evmc_get_code_hash_fn get_code_hash
evmc_copy_code_fn copy_code
evmc_selfdestruct_fn selfdestruct
evmc_call_fn call
evmc_get_tx_context_fn get_tx_context
evmc_get_block_hash_fn get_block_hash
evmc_emit_log_fn emit_log
solidity 编译生成的二进制文件就是 EVM的指令集合

