Property Governance - Testing

Prerequisites:

  • Users must complete DID/KYC/KYB/AML (Kilt DID & Deloitte Verifiable Credentials) process and be whitelisted.

  • Accounts must be whitelisted by the sudo account using the add_to_whitelist function in the xcavate_whitelist pallet.

Setup: Follow the steps in the NFT Marketplace documentation up to point 5 ("Buying Process"). Also, follow the steps in the Property Management documentation up to point 4 ("Distribute Income"). A property must be listed, sold, and assigned a letting agent.

1. Propose

Purpose:

Letting agents propose funding for property-related expenses.

Function: propose

  • Called by: Letting agent

  • Parameters:

    • assetId: ID of the property

    • amount: Amount of funds requested

    • data: Details of the proposal

Process:

  1. The letting agent initiates a proposal for necessary expenses (e.g., repairs).

  2. Proposals need at least 50% approval to pass.

  • Proposals below 500 tokens (per runtime config) are executed directly.

Note: Proposals allow for transparent and democratic decision-making regarding property expenses.

2. Voting on Proposal

Purpose:

Token holders vote on proposals based on their token holdings.

Function: voteOnProposal

  • Called by: Token holder/property owner

  • Parameters:

    • proposalId: ID of the proposal

    • vote: Enum (yes or no)

Note: View proposal status: Query proposals in chain state. ProposalId starts at 1.

Note: View votes: Query ongoingVotes in chain state.

Outcome:

  • Accepted proposals transfer the amount to the letting agent, deducted from real estate reserves.

  • If reserves are insufficient, the deficit is added to real estate debt, to be paid from future income.

Note: Voting ensures that token holders have a say in significant property-related decisions.

3. Challenge Letting Agent

Purpose:

Property owners express distrust and potentially replace a letting agent.

Function: challengeAgainstLettingAgent

  • Called by: Property owner

  • Parameters:

    • assetId: ID of the property

Note: Challenge process has four stages:

  • Stage 1: Vote to express mistrust.

  • Stage 2: Letting agent defends (no voting).

  • Stage 3: Vote to slash the letting agent.

  • Stage 4: Vote to change the letting agent.

Note: The challenge process ensures accountability and provides a mechanism for addressing grievances against letting agents.

4. Vote on Challenge

Purpose:

Property owners vote on each stage of a challenge against a letting agent.

Function: voteOnLettingAgentChallenge

  • Called by: Property owner

  • Parameters:

    • challengeId: ID of the challenge

    • vote: Enum (yes or no)

Note: Token owners must vote for each stage (except stage 2) individually. If a stage has at least 50% no votes, the challenge will be removed. To successfully remove a landlord, each stage must have enough Yes votes.

Note: View challenge status: Query challenges in chain state.

Note: View current voting: Query ongoingChallengeVotes in chain state, specifying challengeId and current stage.

Note: Voting on challenges allows property owners to take collective action against underperforming or unethical letting agents.

Last updated