# 智能合约如何在以太坊虚拟机中运行 **Published by:** [Fun](https://paragraph.com/@fun-6/) **Published on:** 2023-06-16 **URL:** https://paragraph.com/@fun-6/bool6FAxleQTnwhHzlGe ## Content 智能合约如何在以太坊虚拟机中运行 1.什么是智能合约 一段代码集合(类似与java) java 通过 Java虚拟机将代码解释字节,进行执行 eth 则是通过 以太坊虚拟机运行 2.智能合约有自己的地址(账户) 3.在事件的驱使下,自动的完成一些早已经定义好的功能 2.ETH虚拟机(EVM) 在区块链上,用户通过运行部署在区块链上的合约,完成需要共识的操作。以太坊虚拟机,是智能合约代码的执行器。 1.当智能合约被编译成二进制文件后,被部署到区块链上。 2.用户通过调用智能合约的接口,来触发智能合约的执行操作。 3.EVM执行智能合约的代码,修改当前区块链上的数据(状态)。 4.被修改的数据,会被共识,确保一致性。 这里是先执行智能合约,然后对于结果进行共识,达成一致性 EVMC:Ethereum Client-VM Connector API 新版本的以太坊,EVM与节点的交互,抽象出EVMC接口标准 通过EVMC,节点可以对接多种虚拟机,而不仅限于传统的基于solidity的虚拟机。 优势:实现多种类的虚拟机连接 既然是接口标准,那么都有哪些标准? 1.EVMC接口 定义的调用接口 Instance接口:节点调用EVM的接口 Callback接口:EVM回调节点的接口 EVM本身不保存状态数据,节点通过instance接口操作EVM,EVM反过来,调Callback接口,对节点的状态进行操作。 EVMC 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的指令集合 ## Publication Information - [Fun](https://paragraph.com/@fun-6/): Publication homepage - [All Posts](https://paragraph.com/@fun-6/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@fun-6): Subscribe to updates