3月25日,BSN第二次开发者大赛正式启动,本次大赛以“编写基于多种底层框架的智能合约”为主题,开发者可基于FISCO BCOS等主流底层框架,结合业务场景设计、开发并部署智能合约。
为了让大家更好上手智能合约开发,区块链服务网络发展联盟与FISCO BCOS开源社区共同推出“7个课时速成智能合约全能型开发”系列教程,助力开发者学习并熟悉合约开发,轻松应对此次大赛并拔得头筹。
![6164e97904dff5e38a3409dafe993699.png](https://i-blog.csdnimg.cn/blog_migrate/6334fe7b92c81aab15615acf094a8d90.jpeg)
系列专题 | 超话区块链之智能合约专场
运行篇:智能合约编写之 Solidity 的运行原理
作者:储雨知
![aa383e7dc08484ad55880679c45237bc.png](https://i-blog.csdnimg.cn/blog_migrate/d1c464dbd46a24ec3e9a656524291257.jpeg)
引 言
作为一门面向智能合约的语言,Solidity与其他经典语言既有差异也有相似之处。
一方面,服务于区块链的属性使其与其他语言存在差异。例如,合约的部署与调用均要经过区块链网络确认;执行成本需要被严格控制,以防止恶意代码消耗节点资源。
另一方面,身为编程语言,Solidity的实现并未脱离经典语言,比如Solidity中包含类似栈、堆的设计,采用栈式虚拟机来进行字节码处理。
本系列前几篇文章介绍了如何开发Solidity程序,为了让读者知其然更知其所以然,本文将进一步介绍Solidity的内部运行原理,聚焦于Solidity程序的生命周期和EVM工作机制。
Solidity的生命周期
与其他语言一样,Solidity的代码生命周期离不开编译、部署、执行、销毁这四个阶段。下图整理展现了Solidity程序的完整生命周期:
![d5a5e0242678e6261254b6b0582758cb.png](https://i-blog.csdnimg.cn/blog_migrate/661c22410dff8afef0695ca3a16ca714.jpeg)
经编译后,Solidity文件会生成字节码。这是一种类似jvm字节码的代码。部署时,字节码与构造参数会被构建成交易,这笔交易会被打包到区块中,经由网络共识过程,最后在各区块链节点上构建合约,并将合约地址返还用户。
当用户准备调用该合约上的函数时,调用请求同样也会经历交易、区块、共识的过程,最终在各节点上由EVM虚拟机来执行。
下面是一个示例程序,我们通过remix探索它的生命周期。
![cfe881947da31a186136bc3daf65778d.png](https://i-blog.csdnimg.cn/blog_migrate/75e1b814f780c6d3e0bcc72aa6930029.jpeg)
编译
源代码编译完后,可以通过ByteCode按钮得到它的二进制: