EOS契約開発第13章-シーケンス化


EOSオブジェクトのシーケンス化
一、オブジェクトのシーケンス化サポート
EOSは外部アクセス可能なオブジェクトをシーケンス化および逆シーケンス化する必要があり、契約呼び出し開始時にはabiに従ってactionを要求するパラメータ(json形式記述)をシーケンス化する必要があり、eosに送信されるaction要求のパラメータはシーケンス化されたオブジェクトであり、eosが要求を受信した後に逆シーケンス化する必要がある.eosがテーブルデータを要求する場合、テーブルデータを逆シーケンス化して要求の応答に出力する必要がある.
オブジェクトのシーケンス化と逆シーケンス化は主に要求の解析と要求応答のフォーマットに適用され,前後のインタラクション過程で用いられる.
eosの外部アクセス可能なオブジェクトはすべてシーケンス化と逆シーケンス化が必要であり、eos標準ライブラリはマクロEOSLIB_を定義している.SERIALIZEは、1つのオブジェクトに対するシーケンス化と逆シーケンス化のサポートを実現します.以下は、1つの外部アクセス可能なオブジェクトに対するシーケンス化のサポートです.
   /**
    * @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
const T unpack_action_data();

三、シーケンス化の使用
次に、オブジェクトのシーケンス化の使用例を示す.まず、オブジェクトのシーケンス化サポートを定義し、ABI記述ファイルを生成して外部(フロントエンド)で使用し、契約actionの実行エントリで逆シーケンス化してaction呼び出しパラメータを取得する.