老鱼 avatar

bitshares研究系列【custom operation】

chaimyu

Published: 04 Aug 2018 › Updated: 04 Aug 2018bitshares研究系列【custom operation】

bitshares研究系列【custom operation】

在Bitshares中看到有个叫“custom_operation”的,来看一下这个是干什么的?

custom_operation定义

custom.hpp

   struct custom_operation : public base_operation
   {
      struct fee_parameters_type { 
         uint64_t fee = GRAPHENE_BLOCKCHAIN_PRECISION; 
         uint32_t price_per_kbyte = 20000;
      };

      asset                     fee;
      account_id_type           payer;
      flat_set<account_id_type> required_auths;
      uint16_t                  id = 0;
      vector<char>              data;

      account_id_type   fee_payer()const { return payer; }
      void              validate()const;
      share_type        calculate_fee(const fee_parameters_type& k)const;
   };

custom_operation交易

再来通过cli_wallet的建立operation,先取得operation的数据格式,如下:

get_prototype_operation custom_operation
[
  35,{
    "fee": {
      "amount": 0,
      "asset_id": "1.3.0"
    },
    "payer": "1.2.0",
    "required_auths": [],
    "id": 0,
    "data": ""
  }
]

手动建立交易4步曲:

1、

unlocked >>> begin_builder_transaction
begin_builder_transaction
0

2、

unlocked >>> add_operation_to_builder_transaction 0 [35,{"fee": {"amount": 0,"asset_id":"1.3.0"},"payer": "1.2.31","required_auths": [],"id": 9999,"data": ""}]
add_operation_to_builder_transaction 0 [35,{"fee": {"amount": 0,"asset_id":"1.3.0"},"payer": "1.2.31","required_auths": [],"id": 9999,"data": ""}]
null

3、

unlocked >>> set_fees_on_builder_transaction 0 BTS
set_fees_on_builder_transaction 0 BTS
{
  "amount": 100273,
  "asset_id": "1.3.0"
}

4、

unlocked >>> sign_builder_transaction 0 true
sign_builder_transaction 0 true
{
  "ref_block_num": 58488,
  "ref_block_prefix": 422249092,
  "expiration": "2018-08-02T08:43:12",
  "operations": [[
      35,{
        "fee": {
          "amount": 100273,
          "asset_id": "1.3.0"
        },
        "payer": "1.2.31",
        "required_auths": [],
        "id": 9999,
        "data": ""
      }
    ]
  ],
  "extensions": [],
  "signatures": [
    "2024c3b603d1fec11d2d206f5c75873560ae832a33e5436055abdb29a5786399386dc2e5f488f24e34c76fc6a8f083d1641e41d3f59eb9a21abfd4991a61eb609d"
  ]
}

custom_operation做什么用?

想到几个地方可以用上:

  1. 用data来构造一些数据结构,链可以解析数据结构做处理,相当于有了一个子集
  2. data用来存储数据,例如想存储一些数据,可以把数据加密后放在data字段中,通过发送这个交易能记录到块上,以后也可以取这个块并解密,而不必记到其它地方了;
  3. 用这个交易做签名验证,例如用户是否拥有对应私钥,如果签名过了则私钥正确。

感谢您阅读 chaimyuHive account@chaimyu 的帖子,期待您能留言交流!

Leave bitshares研究系列【custom operation】 to:

Written by

One day sitting in the well looked at the sky, blowing the wind uphole, jumping out of the well, dancing in the wind!

Read more #bitshares posts


Best Posts From 老鱼

We have not curated any of chaimyu's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From 老鱼