EVM原理及其功能扩展

EVM原理及其功能扩展

EVM运行机制概述

EVM即以太坊虚拟机,用于执行智能合约。智能合约可用高级开发语言Solidity进行开发,合约源代码经过编译得到可在EVM中运行的字节码。在部署合约、与合约交互的时候,字节码都是以16进制字符串形式传递和展现。

EVM运行过程中,其本身并不是一个独立的协程、线程更不是进程,它只是交易处理的一部分,在交易处理过程中以函数方式被调用。

调用路径为:StateProcessor.Process --> core.ApplyTransaction(初始化evm对象) --> StateTransition.TransitionDb() --> 根据交易类型执行 evm.Create 或 evm.Call。

在evm.Create中会执行相关验证、转账、初始化Contract对象并调用 run 函数开始执行合约代码,执行成功后获得返回值也就是要存储到链上的合约代码,将返回值存储到链上。

而evm.Call既是调用入口,同时它本身也是一个可递归的函数,在合约字节码中指令 0xf1 即代表CALL操作,在CALL操作中会递归调用evm.Call。在evm.Call中会执行验证及转账、从数据库获取合约代码初始化Contract对象、并调用 run 函数开始执行合约代码这些处理。

重要:上述"从数据库获取合约代码初始化Contract对象"意味着,给合约账户进行转账时,合约账户所关联的合约代码将会被执行。
在合约代码中,会固定包含检查转账金额的逻辑,如果金额大于0,则会执行合约的fallback函数。
如果合约没有fallback函数,或者fallback函数没有payable修饰符,则代码执行会抛异常,从而交易失败。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值