1. 合约中关于资产的数据结构的定义

输入字符串: “10.0000 CUR”
输出:amount = 10, symbol(4,“CUR”)

/**asset includes amount and currency symbol*/
struct asset : fc::reflect_init
{ // 通过给定的符号名称以及资产数量构建一个新的资产对象。explicit asset(share_type a = 0, symbol id = symbol(CORE_SYMBOL)) :amount(a), sym(id) {eosio_assert( is_amount_within_range(), asset_type_exception, "magnitude of asset amount must be less than 2^62" );eosio_assert( sym.valid(), asset_type_exception, "invalid symbol" );share_type amount;                     // 资产数量symbol_type symbol;                // 资产符号名称,详见以下symbol_type源码分析。static constexpr int64_t max_amount = (1LL << 62) - 1; //资产数量最大值,取决于int64_t类型的取值范围。// 检查资产数量是否在范围以内,是否超过了最大限额。
bool is_amount_within_range() const { return -max_amount <= amount && amount <= max_amount; }// 检查资产对象是否有效,有效资产的数量应该小于等于最大限额同时它的符号名称也是有效的。
bool is_valid() const { return is_amount_within_range() && symbol.is_valid(); }// 设置资产的数量void set_amount(int64_t a)   {amount = a;eosio_assert(is_amount_within_range(), "magnitude of asset amount must be less than 2^62");}//资产对象的运算符重载 ...// 打印资产void print() const{int64_t p = (int64_t)symbol.precision();int64_t p10 = 1;while (p > 0){p10 *= 10;--p;}p = (int64_t)symbol.precision();char fraction[p + 1];fraction[p] = '\0';auto change = amount % p10;for (int64_t i = p - 1; i >= 0; --i){fraction[i] = (change % 10) + '0';change /= 10;}printi(amount / p10);prints(".");prints_l(fraction, uint32_t(p));prints(" ");symbol.print(false);} EOSLIB_SERIALIZE(asset, (amount)(symbol))}void reflector_init()const {eosio_assert( is_amount_within_range(), asset_type_exception, "magnitude of asset amount must be less than 2^62" );eosio_assert( sym.valid(), asset_type_exception, "invalid symbol" );}};//using share_type          = int64_t;struct extended_asset  {// 默认构造器,构造一个扩展资产对象extended_asset(){}// 通过给定的数量和扩展符号构造一个扩展资产对象。extended_asset( asset a, text_name n ):quantity(a),contract(n){}asset quantity;text_name contract;// 资产拥有者
};

EOS 智能合约源代码解读 (3)asset.hpp相关推荐

  1. EOS 智能合约源代码解读 (11)wrap合约“action_wrapper类”

    1. 功能 对于许多用例,需要从合同代码向另一个合同发送新操作.这是合同之间能够积极沟通的唯一途径.它为特定智能合约代码的特定操作创建"操作模板",然后可使用该模板来调用此操作. ...

  2. EOS 智能合约源代码解读 (7)合约开发示例

    官方提供了一个工具eosiocpp,它可以按照固定的模板创建一个新的智能合约.eosiocpp可以创建2个合约文件(曾经是三个文件),它们仅仅包含了合约的框架. 1. HelloWorld合约代码如下 ...

  3. EOS 智能合约源代码解读 (1)总体说明

    1. 基本定义 在eos私有节点操作中,我们通常是一个合约对应一个合约账户,并且一个账户中只能部署一个智能合约.如果在同一个账户部署多个合约,那么最后部署的合约会覆盖掉之前的合约.每个帐户都至少链接到 ...

  4. EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”

    1. 使用bancor数学创建一个在两种资产类型中的50/50的中继 namespace eosiosystem {using eosio::asset;using eosio::symbol;typ ...

  5. EOS 智能合约源代码解读 (4)symbol.hpp

    token的名称和数字精度 名称大写 /** class symbol represents a token and contains precision and name. When encoded ...

  6. EOS 智能合约源代码解读 (10)token合约“几种关键操作”

    1. create:负责创建资产 void token::create( const text_name& issuer, const asset& maximum_supply) { ...

  7. EOS 智能合约源代码解读 (6)合约之action

    1. 动作 ( action ) 是 EOS 合约的灵魂,是 EOS 的基础组成单位 1.1 一个动作就是一个公开的 ( pubic ) 的 C++ 类的成员方法 必须使用 [[eosio::acti ...

  8. EOS 智能合约源代码解读 (10)token合约“简介”

    1. 记录用户的token,比如有哪些代币 class [[eosio::contract("eosio.token")]] token : public contract {pu ...

  9. EOS 智能合约源代码解读 (5)class contract

    1. 所有合约的基类 #define CONTRACT class [[eosio::contract]] // 合约 #define ACTION [[eosio::action]] //动作 #d ...

最新文章

  1. 关于上传文件的跨域问题
  2. 【swift学习笔记】二.页面转跳数据回传
  3. 通过Visual Studio 2005的项目模板来加速开发过程
  4. 遍历json数组的常用方式
  5. Cocos2d 3.0继承自Sprite的类在addChild后出现故障
  6. 智能驾驶系统是怎样看懂交通标志的?3张流程图给你讲明白
  7. vuex使用模块的时候 获取state里的数据语法
  8. (135)FPGA面试题-介绍FPGA的速度等级与温度等级
  9. paip.python错误解决17
  10. python 缩放图片_Python实现图片尺寸缩放脚本
  11. mac空格代表图标_最糟糕的图标代表功能
  12. 网易微专业 前端工程师 学习笔记
  13. canvas 文字颜色_Canvas 超全教程
  14. 【python 时间戳】python获取13位时间戳以及时间戳转换
  15. 出走的门徒之七—驭势 吴甘沙:一步十年
  16. Paper intensive reading (十三):Removing batch effects in analysis of expression microarray data
  17. 2018-11-05-mqtt-mosquitto系列01之编译安装启动
  18. 为什么你学过Java却忘光了——记第一次助教同学见面会,java开发面试笔试题
  19. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION security.to_date does not exist
  20. Redis 水滴石穿之(六)哨兵

热门文章

  1. “adb”不是内部或外部命令,也不是可运行的程序或批处理文件(Win)与(Mac)——终极解决方案
  2. Android --- SharedPreferences的详细介绍
  3. python中如何定义颜色_Python图像处理之颜色的定义与使用分析
  4. 我们计划招收300名电力人,免费学习CAD。
  5. 混合云数据中心运维的管理
  6. 发改委最新《产业结构调整目录》公布!数据中心列入鼓励产业条目
  7. ML之FE:对人类性别相关属性数据集进行数据特征分布可视化分析与挖掘
  8. 成功解决TypeError: ‘str‘ object is not callable
  9. AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)
  10. CV:Win10下深度学习框架安装之Tensorflow/tensorflow_gpu+Cuda+Cudnn(最清楚/最快捷)之详细攻略(图文教程)