Author Topic: Understanding roles (witnesses, delegates, workers, refund-workers)  (Read 2281 times)

0 Members and 1 Guest are viewing this topic.

Offline CLains

  • Hero Member
  • *****
  • Posts: 2606
    • View Profile
  • BitShares: clains
This is huge^3. :)
You are citing @fuzzy here .. aren't you? :P
Too much hangouts listening :P

This is huge! BitShares organism can modify its own DNA. :D

Offline ElMato

  • Sr. Member
  • ****
  • Posts: 288
    • View Profile

Offline xeroc

  • Board Moderator
  • Hero Member
  • *****
  • Posts: 12922
  • ChainSquad GmbH
    • View Profile
    • ChainSquad GmbH
  • BitShares: xeroc
  • GitHub: xeroc

merockstar

  • Guest
Will the ability to transfer voting power eventually put the blockchain at risk of being centralized? What happens if everybody trusts a few people to vote for them? I guess what I'm asking is, what happens when voters become apathetic about who they're ceding power to, or worst, just offer their votes up for grabs to the highest bidder?

Offline cgafeng

BTC:1EYwcZ9cYVj6C9LMLafdcjK9wicVMDV376

Offline ElMato

  • Sr. Member
  • ****
  • Posts: 288
    • View Profile
It seems that every parameter of the chain can be modified based on a proposal.
Number of delegates (committee), number of witnesses, pay rate, etc. 

There is an operation
Code: [Select]
struct global_parameters_update_operation
   {
      asset fee;
      chain_parameters new_parameters;

That is included into a proposal (proposed_ops)

Code: [Select]
struct proposal_create_operation
   {
       account_id_type    fee_paying_account;
       asset              fee;
       vector<op_wrapper> proposed_ops;
       time_point_sec     expiration_time;
       optional<uint32_t> review_period_seconds;


That can modify every aspect of the chain if accepted.

Code: [Select]
struct chain_parameters
   {
      fee_schedule_type       current_fees; ///< current schedule of fees, indexed by @ref fee_type
      uint32_t                witness_pay_percent_of_accumulated  = GRAPHENE_DEFAULT_WITNESS_PAY_PERCENT_OF_ACCUMULATED; ///< percentage of accumulated fees in core asset to pay to witnesses for block production
      uint8_t                 block_interval                      = GRAPHENE_DEFAULT_BLOCK_INTERVAL; ///< interval in seconds between blocks
      uint32_t                maintenance_interval                = GRAPHENE_DEFAULT_MAINTENANCE_INTERVAL; ///< interval in sections between blockchain maintenance events
      uint32_t                maximum_transaction_size            = GRAPHENE_DEFAULT_MAX_TRANSACTION_SIZE; ///< maximum allowable size in bytes for a transaction
      uint32_t                maximum_block_size                  = GRAPHENE_DEFAULT_MAX_BLOCK_SIZE; ///< maximum allowable size in bytes for a block
      uint32_t                maximum_undo_history                = GRAPHENE_DEFAULT_MAX_UNDO_HISTORY; ///< maximum number of undo states to keep in RAM
      uint32_t                maximum_time_until_expiration       = GRAPHENE_DEFAULT_MAX_TIME_UNTIL_EXPIRATION; ///< maximum lifetime in seconds for transactions to be valid, before expiring
      uint32_t                maximum_proposal_lifetime           = GRAPHENE_DEFAULT_MAX_PROPOSAL_LIFETIME_SEC; ///< maximum lifetime in seconds for proposed transactions to be kept, before expiring
      uint32_t                genesis_proposal_review_period      = GRAPHENE_DEFAULT_GENESIS_PROPOSAL_REVIEW_PERIOD_SEC; ///< minimum time in seconds that a proposed transaction requiring genesis authority may not be signed, prior to expiration
      uint8_t                 maximum_asset_whitelist_authorities = GRAPHENE_DEFAULT_MAX_ASSET_WHITELIST_AUTHORITIES; ///< maximum number of accounts which an asset may list as authorities for its whitelist OR blacklist
      uint8_t                 maximum_asset_feed_publishers       = GRAPHENE_DEFAULT_MAX_ASSET_FEED_PUBLISHERS; ///< the maximum number of feed publishers for a given asset
      uint16_t                maximum_witness_count               = GRAPHENE_DEFAULT_MAX_WITNESSES; ///< maximum number of active witnesses
      uint16_t                maximum_committee_count             = GRAPHENE_DEFAULT_MAX_COMMITTEE; ///< maximum number of active delegates
      uint16_t                maximum_authority_membership        = GRAPHENE_DEFAULT_MAX_AUTHORITY_MEMBERSHIP; ///< largest number of keys/accounts an authority can have
      uint16_t                burn_percent_of_fee                 = GRAPHENE_DEFAULT_BURN_PERCENT_OF_FEE; ///< the percentage of every fee that is taken out of circulation
      uint16_t                witness_percent_of_fee              = GRAPHENE_DEFAULT_WITNESS_PERCENT; ///< percent of revenue paid to witnesses
      uint32_t                cashback_vesting_period_seconds     = GRAPHENE_DEFAULT_CASHBACK_VESTING_PERIOD_SEC; ///< time after cashback rewards are accrued before they become liquid
      uint16_t                max_bulk_discount_percent_of_fee    = GRAPHENE_DEFAULT_MAX_BULK_DISCOUNT_PERCENT; ///< the maximum percentage discount for bulk discounts
      share_type              bulk_discount_threshold_min         = GRAPHENE_DEFAULT_BULK_DISCOUNT_THRESHOLD_MIN; ///< the minimum amount of fees paid to qualify for bulk discounts
      share_type              bulk_discount_threshold_max         = GRAPHENE_DEFAULT_BULK_DISCOUNT_THRESHOLD_MAX; ///< the amount of fees paid to qualify for the max bulk discount percent
      bool                    count_non_prime_votes               = true; ///< set to false to restrict voting privlegages to prime accounts
      bool                    allow_non_prime_whitelists          = false; ///< true if non-prime accounts may set whitelists and blacklists; false otherwise
      share_type              witness_pay_per_block               = GRAPHENE_DEFAULT_WITNESS_PAY_PER_BLOCK; ///< CORE to be allocated to witnesses (per block)
            share_type              worker_budget_per_day               = GRAPHENE_DEFAULT_WORKER_BUDGET_PER_DAY; ///< CORE to be allocated to workers (per day)
 

Power to the shareholder!

Thinking out loud.
If the community (shareholders) thinks that is better to lower/raise some fee, or to have more witnesses or whatever, they will vote a delegate (or convince any active delegate) to propose that change for later approval.

This is huge^3. :)
 

Offline ElMato

  • Sr. Member
  • ****
  • Posts: 288
    • View Profile
Is this correct ?

delegates ->
   * elected by shareholders (how many can be elected?)
   * have control of the genesis account (1.3.0)
     so they can => [adjust tx fees, ... , ?]
     (they publish a proposal and shareholders have time to vote them out if they don't like the change)

witnesses ->
   * elected by shareholders (no fixed number, no more 101 hardcoded)
   * block signers (aka: miners)
   * all get the same payment based on what delegates decide is fair for maintain the node (time+materials)

workers ->
   * elected by shareholders
   
refund-workers ->
   * elected by shareholders
   * return their pay to the reserve pool

No downvote for delegates
No downvote for witnesses
No downvote for workers (?)
No downvote for refund-workers (?)