EOS对象序列化
一、对象的序列化支持
EOS需要对外部可访问对象进行序列化和反序列化,在合约调用发起时,需要将请求action的参数(json格式描述)根据abi进行序列化,发送到eos的action请求的参数是序列化的对象,eos收到请求后需要将其反序列化。在eos请求表数据时,需要对表数据进行反序列化并输出到请求的应答中。
对象的序列化和反序列化主要应用在请求的解析和请求应答的格式化中,在前后端的交互过程中被使用。
eos外部可访问对象都需要能进行序列化和反序列化,eos标准库定义了宏EOSLIB_SERIALIZE来实现对一个对象的序列化和反序列化支持,以下是对一个外部可访问对象的序列化支持:
/**
* @brief Data structure for movement
*/
struct movement {
uint32_t row;
uint32_t column;
EOSLIB_SERIALIZE( movement, (row)(column) )
};
/**
* @brief Action to make movement
*/
struct move {
account_name challenger;
account_name host;
account_name by; // the account who wants to make the move
movement mvt;
EOSLIB_SERIALIZE( move, (challenger)(host)(by)(mvt) )
};
二、对象反序列化
在执行action时,需要使用调用action的参数,请求中action的参数是位于当前请求的上下文中,是序列化的对象,需要进行反序列化为一个对象才能被访问。eos标准库定义了action参数的反序列化接口:
template<class T>
const T unpack_action_data<T>();
三、序列化的使用
以下以一个例子来演示对象序列化的使用,首先定义了对象的序列化支持,然后生成ABI描述文件用于外部(前端)使用,在合约action的执行入口进行反序列化从而获取action调用参数。
版权声明:本文为bedrock_stable原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。