EOSIO源码分析 - 给CDT增加eosio的fc开发库
为什么选择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开发库相关推荐
- EOSIO源码分析 - EOSIO合约开发库
EOSIO合约开发库 通过简单的源码分析,可以很清楚的看到EOSIO合约开发库在目录libraries下,各个库的功能如下: 注意:由于篇幅问题,只介绍最主要的,常用的 CDT: 总目录|----li ...
- android-smart-image-view源码分析
SmartImageView源码分析 一.描述 目前Android应用开发涌出了各种各样出自大牛之手的成熟稳定的开源库,供开发者使用,虽然很明显的提高了App的开发效率,也同样凸显出部分问题: 我只知 ...
- Linux下USB suspend/resume源码分析【转】
转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron ...
- 微软开源软件特征源码分析工具 Application Inspector
微软近日开源了其内部使用的软件特征源码分析工具 Application Inspector. 现代软件开发实践通常需要基于数百个现有组件中构建应用,无论它们是由组织中的另一个团队.外部供应商还是开源社 ...
- 【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 ...
- EOS智能合约:system系统合约源码分析
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. eosio.system 概览 笔者使用的IDE是VScode,首先来看eosio.system的源码结构.如下图所示. ...
- 【精】EOS智能合约:system系统合约源码分析
系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...
- eos源码分析和应用(一)调试环境搭建
转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
最新文章
- 参赛作品介绍 | IM体感游戏、校园管家...这些创意颠覆你的想象!
- sql中union和union all的区别
- Ubuntu : 未找到 ‘nm-tool‘ 命令
- Docker 部署 postgresql 与 pgadmin4
- (Windows和Linxu双系统)Alibaba套件sentinel1.7下载和nacos1.3和seate-server1.3下载
- AcWing 868. 筛质数(欧拉筛模板)
- Echarts在同一网页按顺序展示多图
- Powerpoint中VBA编程技巧
- stm32 RTC闹钟唤醒低功耗模式
- z8350cpu linux,跑分 Intel Z8350小有提升_平板电脑评测-中关村在线
- python入门(三) 实现QQ自动发送消息
- SparkSQL——各区域热门商品TOP3
- Pop!_OS安装与配置(三):系统美化
- 小米电视android刷机,小米电视刷机经历
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
- Untiy AVpro
- 【div】 设置水平居中
- 2022年自考专业考试(英语)英语翻译练习题
- java 制作签名版电子合同pdf版本
- 20万台空气净化机生产线商业计划书
热门文章
- 树莓派学习笔记——wiringPi I2C设备使用详解
- hp580g10装linux,惠普hp) DL580G10/DL580Gen10 4U机架式服务器
- VUE+webrtc-streamer实现实时视频播放(监控设备-rtsp)
- Arduino程序设计(一) 流水灯+呼吸灯
- 【python爬虫】爬取网站数据,整理三句半语料数据集
- python判断输入的是空白_python判断是空的实例分享
- DirectX11 环境光
- java技术如何快速提升?
- 光伏并网pscad_国家电网公司分布式光伏发电接入系统典型设计
- Unity 实现简单的相机跟随和鼠标滚轮拉近拉远视野