___|  _ \   |  |    |   |_ _|\ \     / ____|
 |     |   |  |  |    |   |  |  \ \   /  __|
 |   | |   | ___ __|  ___ |  |   \ \ /   |
\____|\___/     _|   _|  _|___|   \_/   _____| 

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

DHF Vote Weighting System - Proposal

BY: @disregardfiat | CREATED: June 20, 2025, 7:03 p.m. | VOTES: 180 | PAYOUT: $12.40 | [ VOTE ]

Decentralized Hive Fund (DHF) Vote Weighting System

Overview

This post explains the enhanced DHF vote weighting system that introduces economic rationality to proposal voting by limiting vote power based on voting commitment relative to daily inflows(10% of inflation) and apathy. hive-disregardfiat/dhf-vote-weighting

This post aims to encourage discussion, critique, and improvements to HIVE. I fully expect if this or any other derivative gets implemented it will be through thorough and lengthy discussion and testing.

[IMAGE: https://files.peakd.com/file/peakd-hive/disregardfiat/23wgDUVfo9BMBijUfJmS5YsXsEMtwG9HQtWVVfcgcYf9b5x8o2VMXJtatZd9CfeVQLWmr.png]

Background

The original DHF system allowed accounts to vote for unlimited proposals without consequence, leading to potential economic irrationality where voters could support far more funding than the treasury could provide. The enhanced system addresses this by weighing votes based on the voter's total daily funding commitment versus the actual daily DHF inflows. Due to the nature of a good portion of our HIVE DHF being from the Ninja Mine. I also propose capping the weight penalty at the percentage of voting stake(simply calculated here as raw support for the most popular proposal divided by total Hive Power).

Key Concepts

Large Proposal Mechanism (Including Return Proposals)

The system recognizes that any proposal requesting more than the sustainable daily rate (fund/100) effectively acts as a threshold-setting mechanism:
- Traditional Return Proposal: Has the treasury (hive.fund) as receiver, funds return to treasury
- Alternative Large Proposals: Could go to automated market makers, burn mechanisms, or other destinations
- Sustainable Rate: Treasury fund size ÷ 100 = maximum sustainable daily spending (1% of treasury per day)
- Commitment Capping: For vote weighting, large proposals are capped at sustainable daily rate (fund/100)
- One Large Proposal Rule: Each voter's commitment calculation only includes one large proposal. This allows voters to support multiple large ideas, knowing they are only "on the hook" for one, preventing excessive vote weight reduction.
- Economic Reality: Voting for more than sustainable rate has same economic effect regardless of destination
- Threshold Setting: Community can set funding thresholds via any large proposal, not just treasury returns

Vote Weighting Formula

proportional_weight = min(1.0, daily_dhf_inflow / total_daily_commitment)
minimum_weight = highest_raw_vote_total / total_vesting_shares
final_vote_weight = max(proportional_weight, minimum_weight) * base_vote_power

daily_dhf_inflow: running average of the 10% inflation that goes into the DHF
total_daily_commitment: Proposals an account votes for
highest_raw_vote_total: Highest unweighted proposal(highest consensus spending)

Consensus-Driven Minimum Weight Floor

The system implements a dynamic minimum weight floor that automatically adjusts based on voting participation:
- Highest Raw Vote Tracking: During Phase 1, the system tracks the highest raw vote total across all proposals
- Minimum Weight Calculation: minimum_weight = (highest_raw_vote_total / total_vesting_shares) * 100%
- Automatic Threshold Adjustment: High consensus participation raises the minimum weight, effectively increasing the return threshold
- Participation Reward: Widespread voting prevents individual vote weights from falling too low

Current Personal Example:
- Daily DHF inflow: 1750 HBD (~10% inflation at $0.20 Hive)
- Treasury fund size: 23,500,000 HBD (Larger due to HBD Stabilizer return and Ninja Mine allocation)
- Sustainable daily rate: 23,500,000 ÷ 100 = 235,000 HBD/day
- Total vesting shares: 309,871,159,288 VESTS
- Highest raw vote total: ~120,000,000,000 VESTS (on VSC proposal)
- Voter(personal) commits to: 9 proposals for 4,000 HBD total
- Proportional weight: min(1.0, 1750/4,000) = 0.4375
- Minimum weight: 120,000,000,000 / 309,871,159,288 = 0.387 (38.7%)
- Final weight multiplier: max(0.4375, 0.387) = 0.4375
- All their votes carry 43.75% weight

Basic Example:
- Daily DHF inflow: 1000 HBD
- Treasury fund size: 150,000 HBD
- Sustainable daily rate: 150,000 ÷ 100 = 1,500 HBD/day
- Total vesting shares: 1,000,000,000 VESTS
- Highest raw vote total: 50,000,000 VESTS (on most popular proposal)
- Voter commits to: Large proposal (2000 HBD/day, capped at 1500) + Proposal A (300 HBD) + Proposal B (200 HBD) = 2,000 HBD total
- Proportional weight: min(1.0, 1000/2000) = 0.5
- Minimum weight: 50,000,000 / 1,000,000,000 = 0.05 (5%)
- Final weight multiplier: max(0.5, 0.05) = 0.5
- All their votes carry 50% weight

Consensus Raises Threshold Example:
- Daily DHF inflow: 1000 HBD
- Treasury fund size: 150,000 HBD
- Sustainable daily rate: 1,500 HBD/day
- Total vesting shares: 1,000,000,000 VESTS
- High Participation Scenario: Highest raw vote total: 200,000,000 VESTS (20% of all VESTS voting)
- Voter commits to:
- Large Proposal A (2000 HBD/day, capped at 1500)
- Large Proposal B (1800 HBD/day, commitment is 0 due to "one large" rule)
- Small proposal (200 HBD)
- Total Commitment: 1500 + 0 + 200 = 1,700 HBD
- Proportional weight: min(1.0, 1000/1700) = 0.59
- Minimum weight (consensus floor): 200,000,000 / 1,000,000,000 = 0.20 (20%)
- Final weight multiplier: max(0.59, 0.20) = 0.59
- Result: Normal proportional reduction applies

High Consensus Scenario:
- Same setup, but 40% participation: Highest raw vote total: 400,000,000 VESTS
- Heavily over-committed voter: Total commitment = 5,000 HBD (5× daily inflow)
- Proportional weight: min(1.0, 1000/5000) = 0.20
- Minimum weight (consensus floor): 400,000,000 / 1,000,000,000 = 0.40 (40%)
- Final weight multiplier: max(0.20, 0.40) = 0.40
- Result: Consensus participation prevents vote weight from falling below 40%, effectively raising the return threshold

Implementation Details

Data Structure Changes

Global Properties (dynamic_global_property_object)

// DHF daily inflow tracking for vote weighting
fc::array< asset, 24 > dhf_hourly_inflows = fc::array< asset, 24 >(); ///< Rolling 24-hour window of hourly DHF inflows
uint8_t dhf_current_hour_index = 0; ///< Current index in the rolling window
asset dhf_cached_daily_total = asset( 0, HBD_SYMBOL ); ///< Cached sum of all 24 hourly inflows
time_point_sec dhf_inflow_last_update = HIVE_GENESIS_TIME; ///< Last time inflow tracking was updated

Account Object (account_object)

// DHF voting commitment tracking for vote weighting
HBD_asset dhf_total_daily_commitment = HBD_asset( 0 ); ///< Total HBD/day this account is committed to via active proposal votes
time_point_sec dhf_commitment_last_update = fc::time_point_sec::maximum(); ///< Last time DHF commitment was recalculated
uint16_t dhf_active_proposal_count = 0; ///< Number of active proposals this account is voting for

Core Algorithm Implementation

Daily Inflow Tracking

Vote Calculation Process

Phase 1: Raw Calculation + Commitment Tracking

sustainable_rate = treasury_fund / 100
highest_raw_vote_total = 0

for each proposal:
    raw_total_votes = 0
    for each voter on proposal:
        raw_total_votes += voter.governance_vote_power

        commitment = (proposal.daily_pay > sustainable_rate) ? sustainable_rate : proposal.daily_pay
        voter_commitments[voter] += commitment

        if voter_commitments[voter] > daily_inflow:
            flagged_voters.insert(voter)

    // Track highest raw vote total for minimum weight calculation
    highest_raw_vote_total = max(highest_raw_vote_total, raw_total_votes)

Minimum Weight Calculation (Between Phases)

minimum_weight = 0
if flagged_voters.size() > 0 && highest_raw_vote_total > 0:
    total_vesting_shares = dynamic_global_properties.get_total_vesting_shares()
    if total_vesting_shares > 0:
        minimum_weight = (highest_raw_vote_total * HIVE_100_PERCENT) / total_vesting_shares

Phase 2: Reweighting (Only if Flagged Voters Exist)

if flagged_voters not empty:
    for each proposal:
        adjusted_total_votes = 0
        for each voter on proposal:
            if voter in flagged_voters:
                proportional_weight = min(1.0, daily_inflow / voter_commitment[voter])
                weight_multiplier = max(proportional_weight, minimum_weight)
                adjusted_total_votes += base_vote_power * weight_multiplier
            else:
                adjusted_total_votes += base_vote_power  // Full weight

Time Complexity Analysis

Current System

Enhanced System

Key Optimization: Only voters exceeding daily inflow get reweighted, minimizing computational overhead for typical scenarios.

User Experience Impact

For Voters

For Proposals

Economic Implications

Incentive Alignment

Attack Resistance

Market Dynamics

Migration and Compatibility

Hardfork Activation

Legacy Behavior

// Use weighted calculation if hardfork is active
if( false ) // TODO: Replace with actual hardfork constant
{
    calculate_votes_with_weighting( proposals );
}
else
{
    // Legacy calculation for backwards compatibility
    calculate_votes_legacy( proposals );
}

Technical Implementation Details

Key Methods

update_daily_inflow_tracker()

calculate_votes_with_weighting()

update_voter_dhf_commitment()

Data Consistency

Testing and Validation

Unit Tests Required

  1. Inflow Tracking: Verify 24-hour rolling window accuracy
  2. Weight Calculation: Test various commitment/inflow ratios
  3. Edge Cases: Zero inflow, single large voter, return proposal dynamics
  4. Performance: Ensure acceptable overhead in worst-case scenarios

Integration Tests

  1. End-to-End: Vote changes → commitment updates → payment calculations
  2. Hardfork Transition: Legacy to enhanced system migration

Stress Tests

  1. Large Voter Sets: Performance with thousands of voters
  2. High Commitment Ratios: Many voters exceeding daily inflow

Risk Assessment

Implementation Risks

Economic Risks

Conclusion

The DHF vote weighting system introduces economic rationality to proposal voting while maintaining the democratic nature of the DHF. By limiting vote power based on budget commitment, it creates incentives for thoughtful voting while preserving the ability for the community to control funding allocation through the return proposal mechanism.

The consensus-driven minimum weight floor adds a crucial democratic safeguard: when communities show high engagement (measured by highest raw vote totals), the system automatically becomes more permissive, preventing vote weight collapse and maintaining governance legitimacy. This creates a virtuous cycle where:

  1. High Participation → Higher minimum weight floors
  2. Protected Vote Weights → Maintained democratic legitimacy
  3. Adaptive Thresholds → System responds to community engagement levels
  4. Sustainable Governance → Balance between budget constraints and participation incentives

The implementation balances computational efficiency with economic effectiveness, providing a robust foundation for sustainable DHF governance that scales with the platform's growth while rewarding active community participation.

TAGS: [ #hive ] [ #dhf ] [ #dev ]

Replies

@techcoderx | June 21, 2025, 3:49 a.m. | Votes: 0 | [ VOTE ]

Looking at the first example it seems that this might discourage someone from voting for the return (large) proposal if they want to retain the full voting weight for the other smaller proposals. This may have an unintended effect of lower threshold of return (or burn, if exists) proposals.

Having the ability to vote against specific proposals may mitigate this which would allow preventing a particular proposal from being funded without affecting other proposals that a voter might abstain or vote for, even in a high participation scenario. The return proposal is expiring in 4.5 years and would be costly to recreate under the current fee structure so the best time to implement it would be before that expires.

@disregardfiat | June 21, 2025, 4:39 a.m. | Votes: 0 | [ VOTE ]

That is a feature and not a bug. However, with the Ninja mine and our DAO Fund being nowhere near equilibrium I wrote in the maximum weight penalty as a function of participation. So you could vote for the return and your chosen proposals with no further weight reduction for the foreseeable future(DAO Funds will last over 30 years at current price and payout). Also means, that as long as a whole bunch of Stake voted for the most desirable proposal, a vote for that would effectively be voting for return as well as the max weight reduction would go down.

After looking at the code, I think downvotes would be a lot harder ask than the weighting system... and if we had down votes I believe they'd have to be weighted as well... and the overall effect might not be as strong as we want.

A large proposal like VP would need to get more backing as well... But if this was the paradigm I'd guess VP would set up a longer proposal to attract the right support.

I agree that we should formalize a return proposal in code instead of having somebody pay thousands to set up another decade of it. Would also be cool if we could do stabilizer at the base level. I think the return could be as easy as modifying the end date of proposal 0 at hardfork... a stabilizer would be a lot harder as consensus code means everybody would know what it's actions are and it could likely be gamed.

@borislavzlatanov | June 21, 2025, 6:53 a.m. | Votes: 1 | [ VOTE ]

Still trying to understand how this would work. Several pieces are not clear.

daily_dhf_inflow - is this the new funds coming into the DHF from newly-minted HIVE every day?

total_daily_commitment - can you explain this one?

highest_raw_vote_total - can you also explain this one?

@disregardfiat | June 21, 2025, 1:28 p.m. | Votes: 0 | [ VOTE ]

Good points. I'll edit the post to clarify these details.

yes, this is a 24 hour running average of the 10% of inflation that goes to the DHF.

[IMAGE: https://files.peakd.com/file/peakd-hive/disregardfiat/23swib6kNyne6MSGAXGsmkJdTGUS6FBCTa54mBaQhPGmw5zJvGqsxUHgV8M7haY7aiUXe.png]
total_daily_commitment is daily supported from the wallet view here.
highest_raw_vote_total would currently be the VSC proposal with 59M HP

So at 20 cent hive, there is about $1750 a day that gets put into the DHF from inflation. So my votes would be weighted at ~45% right now. If the total Hive Power was 118M (2x the highest proposals unweighted votes) it would never fall below 50%.

If the price went to 40 cents, my vote weight would be back to full power. And I could also unvote proposals that wouldn't loose support if unvoted them.

@valued-customer | June 21, 2025, 1:46 p.m. | Votes: 1 | [ VOTE ]

This is a great improvement, sorely needed, as far as it goes. I reckon these additional points require inclusion.

First, each stakeholder has equity in the DHF proportional to their stake. As they vote for proposals that pass, the reduction of the DHF should deplete their VP to vote on new proposals. VP depletion causes profligate spending to reduce the power of profligate spenders and increases the relative power of the prudent in consideration of future proposals. In the event (unlikely as it may be) that there is growth of the DHF, that growth can be reckoned to proportionately increase VP concurrent with growth in the DHF, so prudent investment of DHF funds is reflected in VP of those that vote for performant proposals.

Second, without GAAP there is no accountability, no ability to measure performance, and no means of detecting fraud. With GAAP prudent DHF proposals that grow the DHF can be accounted to the credit of stakeholders that voted for those proposals, and increase their VP proportionately to their prudence increasing the value of Hive/DHF.

Third, instead of one Return proposal that must be overcome to fund anything, each proposal should have it's own Return proposal, so that expending small amounts of funds for worthy uses does not have to overcome the same resistance that spending the whole of the DHF does. A proposal to spend 2k HBD should not have to attract the same amount of attention necessary to a proposal to spend 2M HBD, which is the current situation. Finally, by requiring GAAP, a mechanism to measure the success of proposals at increasing investment in Hive becomes available, which can inform future proposals.

Because there are credible allegations of fraud facilitated by the complete absence of accounting standards for DHF proposals presently, I encourage everyone to vote the Return proposal until and unless proposals are required to use GAAP and are held accountable for performance. Without that the DHF proposal system is practically begging for fraud and criminal prosecution that can potentially destroy Hive itself.

Thanks!

@disregardfiat | June 21, 2025, 2:04 p.m. | Votes: 1 | [ VOTE ]

Equity proportional to stake means no consensus is necessary to draw to your own account. While it would be entirely "fair" it would reduce the purpose of the DHF just self voting. The proposal covers this by giving everybody full weight on votes upto the funding amount, so a consensus is still required to spend.

@valued-customer | June 21, 2025, 2:09 p.m. | Votes: 0 | [ VOTE ]

Unless the proposal is just kicking back to the whales voting for it, there's no 'self voting' for DHF proposals. Reducing the VP of voters proportional to their votes for passing proposals reflects the reality of their equity in the DHF, and further incentivizes prudence, and prevents profligacy.

@disregardfiat | June 21, 2025, 5:56 p.m. | Votes: 2 | [ VOTE ]

We need a system that doesn't just work in practice, but also in edge cases. If it doesn't work on old chain then it's a problem here too.

I like the thought of having different return levels for different proposals (like a threshold for proposals under 100, 500, 1000, 5000 etc) I'll have to mull on that as well.

@valued-customer | June 21, 2025, 8:57 p.m. | Votes: 1 | [ VOTE ]

>"...different return levels for different proposals (like a threshold for proposals under 100, 500, 1000, 5000 etc..."

Upon reflection, that's probably preferable than just enabling DV's.

@disregardfiat | June 22, 2025, 12:11 a.m. | Votes: 0 | [ VOTE ]

Good news... That's very nearly what this proposal does, and a little smoother so it can't be gamed as easily. The ladder is from daily inflow ~$1500 a day down to ~4500 a day(depending on price).

@valued-customer | June 22, 2025, 4:03 a.m. | Votes: 0 | [ VOTE ]

There might be lower totals, for instance enabling single expenditures of as little as may be desirable for superable purposes. Sometimes it's the little things that count.

@d-zero | June 27, 2025, 4:34 p.m. | Votes: 2 | [ VOTE ]

I really like the idea too!

@edb | June 24, 2025, 3:02 p.m. | Votes: 2 | [ VOTE ]

This is a complicated solution for a theoretical problem. Most people will be shy to admit this, but I can't foresee the possible consequences. I'd rather see one change implemented at a time, so we can tell what the cause is if something goes wrong.

@disregardfiat | June 24, 2025, 5:56 p.m. | Votes: 0 | [ VOTE ]

This is the simplest solution. I probably over explained it.

When the witnesses calculate payments now they already do most of this.

Go through a proposal's voters 1 at a time and add their votes.

This would just keep track of how much each account is voting for at once... no bigger lookup. Almost zero overhead.

The added step is then to subtract weigh for voters who have gone over the set range.

The hard part is figuring out the fair range.

Adding this information to the account object I agree is unnecessary.

Code that runs as little as 15% faster over an array lookup really can't get simpler.

This doesn't introduce downvotes, or a single new broadcast operation. It's finding 2 numbers for the range, and applying those numbers over the range of voters.

The problem is already quite real when we have effectively 0 outflow from the DHF. Stabilizer already returns roughly all they get. Accounts vote on the stabilizer comments for roughly another 10% inflation. The Ninja Fund doubles that inflow again. At this price ~20 cents we are adding ~$800 a day to the fund. At 40 cents closer to $5000 a day. The voting doesn't reflect this dynamic.

We weight comment voting, limit then number of witnesses you can vote for... But voting for saving $235,000 a day, spending $235,000 or voting for a $1,000 a day project carries the same weight.

The same DHF code here runs at STEEM(almost). They have 0 outflows. Therefore it's not a hypothetical problem.

I don't think this would change a whole lot initially. People already ask for accounts to up and down vote the return proposal to set the right kind of limit. Once you vote for the return proposal your vote weight doesn't decrease any more.

But you would also be able to drum directed support. Somebody who votes on the top or 2nd highest proposal could unvote that proposal and vote another proposal over the threshold... right now there is just no incentive to unvote a proposal.

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>