EOSIO源码分析 - CDT合约编译过程

这篇具有很好参考价值的文章主要介绍了EOSIO源码分析 - CDT合约编译过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

智能合约代码举例

EOSIO源码分析 - CDT合约编译过程
纵观整体代码有如下特点

  1. 符合C++代码语法,包含相应的头文件,命名空间
  2. 公有继承合约基类 contract
  3. 在语法中出现了新的标签代码如:[eosio::contract], [eosio::action]等
  4. 代码尾部出现新的宏EOSIO_DISPATCH

合约编译工具

  • 工具名称:eosio-cpp
  • 命令行:eosio-cpp -o hello.wasm hello.cpp –abigen
  • 编译结果:生成hello.wasm和hello.abi文件

合约编译过程

命令行的解析过程,不做过多解释,在编译过程中使用ClangTool完成代码的分析与合约信息提取,Clang-7完成合约文件的编译过程,将cpp文件编译成wasm文件

ClangTool提取信息过程
  1. 函数入口
    EOSIO源码分析 - CDT合约编译过程
    其中run函数最重要,前面准备好相关参数后,调用run进行代码分析
    在这里记住三个重要的初始化操作,后面做分析使用
    EOSIO源码分析 - CDT合约编译过程
    这三句话,相当于注册了代码分析结果的适配器,进入代码信息筛选使用
  2. 通过run的调用,最终调用代码分析类Parser
    EOSIO源码分析 - CDT合约编译过程
    在parser类中,完成了代码的分析,分析语法格式是否正确,标签是否合法,从而确定在合约类中,我们怎么知道这个函数是个action, 就是通过[eosio::action]指定的,代码具体路径如下
    EOSIO源码分析 - CDT合约编译过程
    分析函数,类名过程中同步解析标签
    EOSIO源码分析 - CDT合约编译过程
    分析对标签名称,将标签名称转换成枚举类型kind
    代码文件AttrParsedAttrKinds.inc
    如果以后我们要增加或者修改标签,一定要改动这里
    EOSIO源码分析 - CDT合约编译过程EOSIO源码分析 - CDT合约编译过程
    EOSIO源码分析 - CDT合约编译过程
    上面的代码清晰的展示了标签的分析处理过程,最终依据标签创建了EOSIO相关的标标签类
    EosioActionAttr:标记合约执行的的Action
    EosioContractAttr:标记这个类是合约文件
    同时我们也可以看到EOSIO对clang编译器进行了定制,让它能编译合约
ABI结构的生成

在完成代码分析之后,生成相应的结构信息,接下来使用分析的结果,翻译出对应的abi文件。

  1. ABI重要结构
    EOSIO源码分析 - CDT合约编译过程
    这个文件定义了abi相关的field,struct,action等重要结构
    EOSIO源码分析 - CDT合约编译过程
    Abi结构操作相关,如删除,添加action等
  2. ABI结构信息提取过程
    在abi提取过程中,会有一系列相关的 MatchFinder 来做代码特征匹配,在工具刚开始的初始化中,注册了三个匹配器,在在信息翻译中,会进行信息回调
    EOSIO源码分析 - CDT合约编译过程
    回调处理代码如下
    EOSIO源码分析 - CDT合约编译过程
    EOSIO源码分析 - CDT合约编译过程
    最后把结构abi,转换成json格式,保存成abi文件
合约代码编译过程

调用编译的代码如下
EOSIO源码分析 - CDT合约编译过程
使用编译出来的clang-7子程序,编译cpp合约代码,生成对应的wasm文件,这个文件供eosio工程进行合约调用文章来源地址https://www.toymoban.com/news/detail-410220.html

总结

  • EOSIO合约是使用C++编写的,所以编写时语法要符合C++的规范
  • EOSIO合约编写时使用的库是经过裁剪的,特别是boost库,系统类,文件类,线程类是无法使用的
  • EOSIO合约的编译实际上是使用clang来进行的,最终目的是把C++代码编译成wasm格式的字节码程序,供WASM虚拟机执行使用

到了这里,关于EOSIO源码分析 - CDT合约编译过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链 | 智能合约】Ethereum源代码(11)- 以太坊核心BlockChain源码分析

    前面几节都在分析以太坊的通信协议,怎么广播,怎么同步,怎么下载。这一节讲讲以太坊的核心模块BlockChain,也就是以太坊的区块链。 一,BlockChain的初始化 Ethereum服务初始化func init() 的时候会调用core.SetupGenesisBlock来加载创始区块。顾名思义,创始区块就是以太坊区块链中

    2024年02月08日
    浏览(32)
  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(44)
  • 使用Truffle编译智能合约及所遇到的问题

    1.下载安装nvm,首先安装目录不要有空格和中文,会出现乱码 2、解压之后安装,安装后自动配置环境变量 3、nvm -v 查看版本 4、通过如下指令进行node版本的安装、替换 我是通过VS code 打开项目,编辑truffle-config.js文件 配置本地以太坊网络和远程的以太坊测试网络方式有所差异

    2023年04月08日
    浏览(29)
  • 【智能合约】以太坊合约执行分析

    目录 1. 基本概念 1.2 合约字节码 1.3 合约构造函数 1.4 与合约交互 1.5 Call Data 1.6 程序计数器(Program Counter) 1.7 执行环境(Context) 1.8 OpCode(操作码/EVM指令/助记符) 1.9 Gas消耗 1.10 合约执行过程 2. 过程详解 2.1 关于部署代码 2.2 runtime代码 2.3 最终字节码 2.4 为EVM设计的指令集

    2024年02月02日
    浏览(42)
  • python 之 web3 与智能合约的交互、编译等使用

    一、背景 web3.py是一个用于与以太坊交互的 Python 库。 它常见于去中心化应用程序 (dapps)中,帮助发送交易、与智能合约交互、读取块数据以及各种其他用例。 最初的 API 源自Web3.js Javascript API,但后来不断发展以满足 Python 开发人员的需求和物质享受。 本人在合约审计于模糊

    2024年02月11日
    浏览(29)
  • 智能合约 -- 常规漏洞分析 + 实例

    漏洞分析 攻击者利用合约漏洞,通过 fallback()或者receive() 函数进行 函数递归 进行持续取钱。 刚才试了一下可以递归10次,貌似就结束了(version: 0.8.20)。 直接看代码: 银行合约:有存钱、取钱、查看账户余额等函数。 攻击合约: 攻击、以及合约接受以太币就触发的receive()函数

    2024年02月13日
    浏览(36)
  • 智能合约安全分析,针对 ERC777 任意调用合约 Hook 攻击

    Safful发现了一个有趣的错误,有可能成为一些 DeFi 项目的攻击媒介。这个错误尤其与著名的 ERC777 代币标准有关。此外,它不仅仅是众所周知的黑客中常见的简单的重入问题。 这篇文章对 ERC777 进行了全面的解释,涵盖了所有必要的细节。深入研究 ERC777 代币的具体细节的资源

    2024年02月04日
    浏览(29)
  • Uniswap V1——合约源码分析

            下面会对Uniswap V1版本的链上合约源码进行解读分析,主要是看Uniswap的各种功能是如何实现的。V1版本使用的不是Solidity而是Vyper语言编写,语言本身不关键,主要看实现逻辑和核心思路。         Uniswap V1版本比较简单,总共两份链上合约,分别是uniswap_exchang

    2024年02月03日
    浏览(24)
  • slither——区块链智能合约静态分析工具

    Slither是一个用Python 3编写的智能合约静态分析框架(源码),提供如下功能: 自动化漏洞检测。提供超30多项的漏洞检查模型,模型列表详见:https://github.com/crytic/slither#detectors 自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。 代码理解。Slither能够绘

    2024年01月16日
    浏览(31)
  • 智能合约安全分析,Vyper 重入锁漏洞全路径分析

    7 月 30 日 21:10 至 7 月 31 日 06:00 链上发生大规模攻击事件,导致多个 Curve 池的资金损失。漏洞的根源都是由于特定版本的 Vyper 中出现的重入锁故障。 通过对链上交易数据初步分析,我们对其攻击的交易进行整理归纳,并对攻击流程进一步的分析,由于攻击涉及多个交易池。

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包