Creating a New Committee Member

We can create a new committee member with::

>>> create_committee_member account "url" true


How to Propose Committee Actions

Setting Smartcoin Parameters

This paragraph shows how the committee account can act using the proposed transaction system. Specifically, as an example I’m using the creation of Graphene proposal 1.10.21, a proposal to update a committee-controlled BitAsset to reduce maximum_force_settlement_volume for asset CNY from 2000 (20%) to 200 (2%).

First check the asset to see what its current configuration is:

>>> get_asset CNY
{
  ...
  "bitasset_data_id": "2.4.13"
}

Then check its bitasset object to get the currently active options:

>>> get_object 2.4.13
{
  ...
    "options": {
      "feed_lifetime_sec": 86400,
      "minimum_feeds": 7,
      "force_settlement_delay_sec": 86400,
      "force_settlement_offset_percent": 0,
      "maximum_force_settlement_volume": 2000,
      "short_backing_asset": "1.3.0",
      "extensions": []
    },
  ...
}

Then do update_bitasset to update the options. Note we copy-paste other fields from above; there is no way to selectively update only one field.

>>> update_bitasset "CNY" {"feed_lifetime_sec" : 86400, "minimum_feeds" : 7, "force_settlement_delay_sec" : 86400, "force_settlement_offset_percent" : 0, "maximum_force_settlement_volume" : 200, "short_backing_asset" : "1.3.0", "extensions" : []} false

If this was a privatized BitAsset (i.e. a user-issued asset with feed), you could simply set the broadcast parameter of the above command to true and be done.

However this is a committee-issued asset, so we have to use a proposed transaction to update it. To create the proposed transaction, we use the transaction builder API. Create a transaction builder transaction with begin_builder_transaction command:

>>> begin_builder_transaction

This returns a numeric handle used to refer to the transaction being built. In the following commands you need to replace $HANDLE with the number returned by begin_builder_transaction above.

>>> add_operation_to_builder_transaction $HANDLE [12,{"fee": {"amount":
100000000, "asset_id": "1.3.0"}, "issuer": "1.2.0", "asset_to_update":
"1.3.113", "new_options": { "feed_lifetime_sec": 86400, "minimum_feeds": 7,
"force_settlement_delay_sec": 86400, "force_settlement_offset_percent": 0,
"maximum_force_settlement_volume": 200, "short_backing_asset": "1.3.0",
"extensions": []}, "extensions": []}]
>>> propose_builder_transaction2 $HANDLE init0 "2015-12-04T14:55:00" 3600 false

The propose_builder_transaction command is broken and deprecated. You need to recompile with this patch in order to use the new propose_builder_transaction2 command which allows you to set the proposing account.

Then set fees, sign and broadcast the transaction:

>>> set_fees_on_builder_transaction $HANDLE GPH
>>> sign_builder_transaction $HANDLE true

Notes:

  • propose_builder_transaction2 modifies builder transaction in place. It is not idempotent, running it once will get you a proposal to execute the transaction, running it twice will cause you to get a proposal to propose the transaction!

  • Remember to transfer enough to cover the fee to committee account and set review period to at least committee_proposal_review_period

  • Much of this could be automated by a better wallet command.



How to Approve/Disapprove a Committee Proposal

Approve Proposal

Now we need to convince the other committee members to approve. We can do so on the blockchain by asking them for approval with

>>> approve_proposal <fee-paying-account> <proposal-id> {"active_approvals_to_add" : ["<MY-COMMITTEE-MEMBER>"]} true

where <proposal-id> takes the form 1.10.xxx and identifies the actual proposal to approve.

Removeing Approval

A previous approval can also be removed if the proposal is not yet expired, executed or within the preview period. This is done by::

>>> approve_proposal <fee-paying-account> <proposal-id> {"active_approvals_to_remove" : ["<MY-COMMITTEE-MEMBER>"]} true

Note that we now use active_approvals_to_remove instead of active_approvals_to_add.



How Committee Proposes a Change in Fee

Create a Proposal

Let’s assume we want to propose a new fee for the account creation operation. We want 5 GPH as basic fee and want premium names to cost 2000 GPH. Additionally, a price per kbyte for the account creation transaction can be defined. We get

{
 "account_create_operation" : {
           "basic_fee"      : 500000,
           "premium_fee"    : 200000000,
           "price_per_kbyte": 100000}
}

We propose the fee change for account <committee_member> with::

>>> propose_fee_change <committee_member> "2015-10-14T15:29:00" {"account_create_operation" : {"basic_fee": 500000, "premium_fee": 200000000, "price_per_kbyte": 100000}} false

Approve Proposal

Now we need to convince the other committee members to approve. We can do so on the blockchain by asking them for approval with

>>> approve_proposal <committee_member> "1.10.1" {"active_approvals_to_add" : ["<MY-COMMITTEE-MEMBER>"]} true

where 1.10.1 is the id of the proposal in question.