为什么选择FC库

fc库是eosio中实现的C++反射机制的代码,通过这套机制,您可以极大的提高您的开发效率,他有如下优点:

  • 跨平台,支持linux和windows,可以轻松加入到您的开发工程
  • 代码简洁,便于修改移植,可以方便的编译成静态库,可执行程序,甚至wasm字节码
  • 和EOSIO合约代码天然融合,更方便移植进入eosio合约开发库
  • 合约参数可以使用json实现,极大扩展了合约参数的灵活性,也方便其他语言的对接

需要修改和移植的文件

fc  ----- fc库文件夹|-----include:头文件夹|-----reflect:反射定义文件|-----reflect.hpp|-----typename.hpp|-----variant.hpp|-----json_relaxed.hpp:json解析定义|-----json.hpp:json解析头文件|-----utf8.hpp:utf8编码|-----utility.hpp:通用方法定义|-----variant_object.hpp:变体类型定义I-----variant.hpp:编译类型定义|-----src|-----json.cpp:json解析实现|-----utf8.cpp:utf8编码|-----utility.cpp:通用方法实现|-----variant_object.cpp:变体定义实现|-----variant.cpp:变体对象实现
修改要点
  • 按照合约要求处理代码中出现的异常,断言
  • 移植文件,精心必要的头文件路径修改

使用举例

反射定义

namespace eosio{class token{struct [[forest::table("accounts")]] accounts_object {std::string       account;uint64_t          amount_int;uint64_t          amount_fract;};}
}
FC_REFLECT( eosio::token::accounts_object, (account)(amount_int)(amount_fract) );

发射使用

  • 将json字符串转化成variant对象
auto var = fc::json::from_string(json_str);
  • 将variant对象unpack成具体的定义对象
auto balance = var.as<eosio::token::accounts_object>();
  • 集合起来使用如下
auto var = fc::json::from_string(json_str);
check( var.get_object().contains("from"), "invalid params(from)");
check( var.get_object().contains("to"), "invalid params(to)");
check( var.get_object().contains("quantity"), "invalid params(quantity)");
check( var.get_object().contains("memo"), "invalid params(memo)");eosio::token::accounts_object balance;            // 定义一个accounts_object对象balance
balance.account = "demo001";
balance.amount_int = 100;
balance.amount_fract = 0;
auto packed_data = fc::raw::pack(balance); //将对象balance进行pack,得到压缩bytes类型的压缩数据
auto json_data = fc::json::to_string(balance);//将对象balance进行json编码,得到json字符串

总结

  • 关于fc库中json解析,pack,unpack的更多用法与实现可以学习eosio的源代码
  • 本例子中只移植了fc中json解析相关的代码,如果要移植其他功能,读者可以自行学习
  • 使用fc库后,编译出来的wasm体积要明显增大,会增加部署的成本

EOSIO源码分析 - 给CDT增加eosio的fc开发库相关推荐

  1. EOSIO源码分析 - EOSIO合约开发库

    EOSIO合约开发库 通过简单的源码分析,可以很清楚的看到EOSIO合约开发库在目录libraries下,各个库的功能如下: 注意:由于篇幅问题,只介绍最主要的,常用的 CDT: 总目录|----li ...

  2. android-smart-image-view源码分析

    SmartImageView源码分析 一.描述 目前Android应用开发涌出了各种各样出自大牛之手的成熟稳定的开源库,供开发者使用,虽然很明显的提高了App的开发效率,也同样凸显出部分问题: 我只知 ...

  3. Linux下USB suspend/resume源码分析【转】

    转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron ...

  4. 微软开源软件特征源码分析工具 Application Inspector

    微软近日开源了其内部使用的软件特征源码分析工具 Application Inspector. 现代软件开发实践通常需要基于数百个现有组件中构建应用,无论它们是由组织中的另一个团队.外部供应商还是开源社 ...

  5. 【SA8295P 源码分析】08 - XBL Loader 加载 SMSS、XBL Config、SHRM、CDT 、DDR、APDP、RamDump、OEM_MISC、AOP、QSEE过程分析

    [SA8295P 源码分析]08 - XBL Loader 加载 SMSS.XBL Config.SHRM.CDT .DDR.APDP.RamDump.OEM_MISC.AOP.QSEE Dev Co ...

  6. EOS智能合约:system系统合约源码分析

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. eosio.system 概览 笔者使用的IDE是VScode,首先来看eosio.system的源码结构.如下图所示. ...

  7. 【精】EOS智能合约:system系统合约源码分析

    系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...

  8. eos源码分析和应用(一)调试环境搭建

    转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...

  9. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

最新文章

  1. 参赛作品介绍 | IM体感游戏、校园管家...这些创意颠覆你的想象!
  2. sql中union和union all的区别
  3. Ubuntu : 未找到 ‘nm-tool‘ 命令
  4. Docker 部署 postgresql 与 pgadmin4
  5. (Windows和Linxu双系统)Alibaba套件sentinel1.7下载和nacos1.3和seate-server1.3下载
  6. AcWing 868. 筛质数(欧拉筛模板)
  7. Echarts在同一网页按顺序展示多图
  8. Powerpoint中VBA编程技巧
  9. stm32 RTC闹钟唤醒低功耗模式
  10. z8350cpu linux,跑分 Intel Z8350小有提升_平板电脑评测-中关村在线
  11. python入门(三) 实现QQ自动发送消息
  12. SparkSQL——各区域热门商品TOP3
  13. Pop!_OS安装与配置(三):系统美化
  14. 小米电视android刷机,小米电视刷机经历
  15. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
  16. Untiy AVpro
  17. 【div】 设置水平居中
  18. 2022年自考专业考试(英语)英语翻译练习题
  19. java 制作签名版电子合同pdf版本
  20. 20万台空气净化机生产线商业计划书

热门文章

  1. 树莓派学习笔记——wiringPi I2C设备使用详解
  2. hp580g10装linux,惠普hp) DL580G10/DL580Gen10 4U机架式服务器
  3. VUE+webrtc-streamer实现实时视频播放(监控设备-rtsp)
  4. Arduino程序设计(一) 流水灯+呼吸灯
  5. 【python爬虫】爬取网站数据,整理三句半语料数据集
  6. python判断输入的是空白_python判断是空的实例分享
  7. DirectX11 环境光
  8. java技术如何快速提升?
  9. 光伏并网pscad_国家电网公司分布式光伏发电接入系统典型设计
  10. Unity 实现简单的相机跟随和鼠标滚轮拉近拉远视野