fair-squares icon indicating copy to clipboard operation
fair-squares copied to clipboard

Implement owners-vote governance structure

Open ilhanu opened this issue 2 years ago • 3 comments

We want to owners (shareholders) to be able to vote on anything regarding governance of the asset. This is can be maintenance, proposals if a tenant should be allowed or selecting and appointing a representative. Utilising the democracy and treasury frame pallet with limited features. We want to use the following function proposal, voting, tallying and executing.

Implementation:

Share conversion and generic implementation:

  1. We need to convert the shares of the assets corresponding to the NftItemId to votingWeights. @Kazu suggested something about converting the asset shares to weight. With conviction voting disabled for now.
  2. We need to re-use the same weights for tallying and processing the result.

Any proposal, vote, tallying and execution should be done with the above logic from shares to weights. this will be the basis of the governance structure for the asset.

Features:

  • proposeRepresentative allows one of the owners to select and appoint a representative. This is a one time action and you can't select multiple representatives. Runtime of max 3 epoch ( configurable)
  • Vote on appointing a representative / vote on removing a representative.
    • Vote approved, execute the call to appoint the representative.
  • Spend proposal Vote on maintenance of the asset / Spend proposal for maintenance.
  • Implement access to the virtual account funds for a spend proposal.
  • Generate a field in the NftItemId struct for the representative and tenant.

Features for the representative:

  • Implement Representative to accept the job
  • Implement Representative to propose a tenant, that needs to be on-chain approved by the owners.
  • Implement a spendProposal for the representative to propose, this goes immediately to the owners of the corresponding asset. The proposal is for maintenance of the asset or improvements and can only be created by the representative of the asset.

Note: A representative can represent multiple assets

ilhanu avatar Nov 08 '22 16:11 ilhanu

Share conversion

One possible way is to use the conviction_vote feature of the democracy pallet. The investor share needs to be converted into a balance that will be transfered to the asset virtual account after voting==> Voting will therefore also contribute to increase the maintenance fund of the asset. Implementation Method: The maximum conviction amount is fixed in the runtime, and used/combined with the investor share to calculate respective investors vote_conviction. This conviction_balance is then used in the democracy pallet, and sent to the virtual_account. Investors will have no way to modify the amount of their conviction, unless they buy additional shares from another fellow investor of course.

ndkazu avatar Nov 09 '22 06:11 ndkazu

That sounds good! Currently I think for democracy conviction is set to 0.1x, maybe we can fix this do 1x, so it's displayed and converted right. Further I think the locking of the vote with 1x can also be disabled in the runtime, as it doesn't apply to the owners vote, also not to the investors vote (1 vote per investor id)

ilhanu avatar Nov 09 '22 08:11 ilhanu

Asset management Pallet

All the above should be in an Asset management pallet that will be extended in the Future. management of an asset includes:

  • Give owners the possibility to elect or replace a representative (conviction-voting_pallet or democracy_pallet)
  • Allow owners to decide on keeping of evicting an contentious tenant (conviction-voting_pallet or democracy_pallet)
  • Allow the representative to select tenants for an asset
  • Allow Representative to make expenses proposals for the asset (treasury_pallet)
  • Allow owners to evaluate an decide on expenses proposals (treasury_pallet)

Later the same pallet will also manage rent payment, and additional representative tasks.

ndkazu avatar Nov 10 '22 06:11 ndkazu