Club Fundraising: Difference between revisions

From Soccerverse Wiki
Jump to navigation Jump to search
No edit summary
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
Influence Fundraising is a mechanism in Soccerverse that allows a '''club''' to issue '''new influence''' and sell it to users in exchange for '''SVC''' (Soccerverse Coin). The SVC raised goes directly into the club's balance, strengthening its finances. In return, contributors receive the newly-created influence, which gives them voting power and a claim on future income payouts.
Influence fundraising allows a '''club''' to issue '''new influence''' in exchange for contributions of '''SVC''' (Soccerverse Coin). The club receives the contributors' actually spent SVC multiplied by the fundraising multiplier. Contributors receive newly created influence, which carries voting power and eligibility for income payouts under the game's normal rules.


Fundraising is exclusive to '''club influence''' — player influence cannot be diluted.
Fundraising applies only to '''club influence''', not player influence. It increases outstanding influence by the amount actually issued and can take supply above the base supply of 1,000,000. It does not necessarily take supply above that level in every event.
 
The parameter values below were checked against the live game on '''23 September 2026'''. Parameters can change.


== Why Fundraising Exists ==
== Why Fundraising Exists ==


Fundraising serves two main purposes:
# '''Helping clubs in debt.''' At season end, eligible negative-balance clubs get an automatic fundraising event, without a proposal or vote. There is no guarantee that it attracts contributions or raises enough to clear the debt.
 
# '''Influencer-led funding.''' Eligible influence holders can propose fundraising for a club, whether or not the club is in debt. Influence holders vote on whether to proceed and on the fundraising terms.
# '''Rescuing clubs in debt.''' At the end of each season, clubs with a negative balance automatically get a fundraise event started immediately (no vote needed). This creates new influence for SVC, injecting cash into the club so it can recover.
# '''Letting influencers raise SVC.''' Even healthy clubs can benefit from a fundraise — influencers can propose and vote for a fundraise to raise funds for transfers, wages, or other expenses.


== The Lifecycle of a Fundraise ==
== The Lifecycle of a Fundraise ==
Line 14: Line 14:
=== 1. Triggering ===
=== 1. Triggering ===


Fundraising can be triggered in one of two ways.
==== A. Automatic End-of-Season Fundraising ====
 
While fundraising is enabled, clubs whose balance is negative when the season-end fundraising check runs are considered for an automatic event.
 
* The number of influence offered is <code>floor(outstanding_influence * seasonend-dilution-bp / 10,000)</code>, currently '''5% of actual outstanding influence, rounded down'''.
* If that calculation produces zero, '''no event is created'''.
* The minimum raise is zero.
* The event goes '''directly to contributions'''. There is '''no proposal, upcoming phase or vote'''.
 
==== B. User-Proposed Fundraising ====
 
To propose a fundraiser or add an option to an upcoming proposal, a user must hold at least:
 
<pre>ceil(dilution-min-bps * max(outstanding_influence, 1,000,000) / 10,000)</pre>
 
At the current 500-basis-point setting, this means:
 
* '''50,000 influence''' when outstanding influence is at or below 1,000,000.
* '''5% of actual outstanding influence, rounded up''' when outstanding influence exceeds 1,000,000.
 
This is a '''proposal eligibility threshold''', not a voting turnout quorum.


==== A. End-of-Season (Automatic) ====
A new user-proposed fundraiser cannot be created until the club's cooldown has elapsed. Currently this is '''70 days after the previous user-proposed vote was finalised''', even if that vote selected "do nothing". An existing upcoming proposal can be amended with another valid option; once it enters voting, new options cannot be added.


At the end of each season, '''every club in debt''' automatically gets a fundraise proposal or event:
The proposed terms are:


* If the club is '''in debt''', the fundraise '''bypasses voting entirely''' — a fundraise event is created immediately and goes straight to the contribution phase.
* '''<code>n</code>:''' The number of new influence offered, from 1 to <code>floor(outstanding_influence * dilution-max-bps / 10,000)</code>. Currently this is up to '''20% of actual outstanding influence, rounded down'''. Unlike proposal eligibility, this calculation does '''not''' use a 1,000,000 minimum denominator.
* '''<code>mr</code>:''' The minimum amount the '''club must receive after allocation rounding and the funding multiplier'''. It may be zero. It is not a minimum for gross reserved contributions.


The amount of new influence to be created is calculated as a percentage (basis points) of the club's current outstanding influence, currently 5% (configured by the <code>seasonend-dilution-bp</code> parameter). The minimum raise is zero.
=== 2. Proposal Phase (User-Proposed Fundraising Only) ===


==== B. User-Proposed (Influencer Initiative) ====
* '''Upcoming phase:''' Currently 7 days. Eligible influence holders can add options with different <code>n</code> and <code>mr</code> combinations.
* '''Voting phase:''' Currently 7 days. Influence holders vote with their influence.
* '''Do nothing:''' A user-proposed fundraising ballot includes a default "do nothing" option. If it wins, no event is created. Otherwise the winning fundraising terms create an event.


Any influencer can propose a fundraise if they meet two requirements:
These stages also apply to a '''user-created proposal for a club in debt'''. It is the automatic season-end path, not debt status alone, that bypasses voting.


* They must own at least a certain '''relative percentage''' of all outstanding club influence, currently 5% (configured by the <code>dilution-min-bps</code> parameter).
=== 3. Contribution Phase ===
* Enough time must have passed since the '''last user-proposed fundraise vote''' for that club, currently 70 days (configured by <code>min-seconds-between-dilution-votes</code>).


The proposing influencer specifies:
An event specifies the number of influence offered, its minimum raise and its end time. The contribution window is currently '''28 days from event creation'''.


* '''<code>n</code>''': How much new influence to create (between 1 and a maximum, which is a percentage of outstanding influence configured by <code>dilution-max-bps</code>).
Any user with sufficient available SVC can contribute a positive amount. Contributions are not price bids: users do not choose a price per influence, and the final price and allocation are determined at settlement.
* '''<code>mr</code>''' (minimum raise): The minimum amount of SVC that must be raised. If the total contributions fall short of this, the fundraise fails and all SVC is refunded.


=== 2. Proposal Phase (for non-debt clubs) ===
* Contributions are '''reserved''' against the user's balance immediately, reducing available SVC. They are not yet deducted from the total balance.
* Users can top up while the event remains active. Top-ups are combined into one contribution per user and retain the user's original contribution ID for tie-breaking.
* The club's funding multiplier is currently '''100×''': each 1 SVC actually spent by contributors credits 100 SVC to the club. Unspent reservations do not generate club income.


When a user proposes a fundraise, it goes through a '''governance proposal''' lifecycle:
=== 4. Settlement ===


* '''Upcoming phase''': The proposal is created but voting hasn't started yet. During this time, the proposer (or any other eligible influencer) can '''amend''' the proposal by adding more fundraise options (different <code>n</code> and <code>mr</code> combinations). The upcoming phase lasts for <code>dilution-upcoming-seconds</code>.
The game finalises an event when block time reaches or passes its end time.
* '''Voting phase''': After the upcoming phase, the proposal enters voting for <code>dilution-voting-seconds</code>. Influencers vote with their existing influence (1 influence = 1 vote). Once voting ends, the winning option is executed.
* '''The ballot''': Every fundraise proposal has a '''"do nothing"''' option (option 0 for user proposals, option 1 for end-of-season proposals). If the winning option is "do nothing", no fundraise event is created.


For end-of-season proposals, the default option (option 0) is the fundraise itself, meaning it passes unless influencers actively vote it down.
All monetary calculations use integer '''raw units''', where '''10,000 raw units = 1 SVC'''. Influence counts are whole influence and are not scaled.


=== 3. The Fundraise Event (Contribution Phase) ===
==== Price and Success Check ====


Once a fundraise proposal passes (or is triggered directly for clubs in debt), a '''fundraise event''' is created and becomes active. It has:
Let <code>G</code> be total gross contributions in raw units and <code>N</code> the number of influence offered:


* A '''number of new influence''' to be created.
<pre>P = floor(G / N)</pre>
* A '''minimum raise''' amount (0 for end-of-season fundraises; set by the proposer for user-proposed ones).
* An '''end time''', calculated as <code>current_time + dilution-seconds</code>.


During this phase, '''any user''' can contribute SVC to the event. They send a move with:
<code>P</code> is the raw-unit price per influence. The price is therefore rounded down to '''0.0001 SVC increments, not whole SVC'''.


<syntaxhighlight lang="json">
For a positive price, the tentative number sold is:
{
  "dc": {
    "a": <amount>,
    "e": <event_id>
  }
}
</syntaxhighlight>


Key points about contributing:
<pre>S = min(N, sum(floor(each_user_contribution / P)))
club_receipt = floor(dilution-coins-multiplier-bps * S * P / 10,000)</pre>


* Contributions are '''not bids''' — you don't specify a price per influence. The price is determined '''after''' the event ends, based on total SVC raised divided by the amount of influence.
The event succeeds if at least one user contributed and the calculated club receipt meets the minimum raise. If it fails, no influence is issued, no contribution is spent and all reservations are released.
* Users can '''top up''' their contribution at any time while the event is active. Multiple contributions from the same user are combined into one entry.
* The contributed SVC is '''reserved''' (locked) from the user's balance immediately.


=== 4. Settlement (After the End Time) ===
==== Allocation and Payment ====


When the block time reaches or passes the event's <code>end_time</code>, the event is finalised:
Contributors are processed in order of '''largest combined contribution first''', then '''lowest original contribution ID first''' for equal amounts.


# '''Effective price''' is calculated: <code>total_contributions / number_of_shares</code>, rounded '''down''' to whole SVC units.
At a positive price:
# '''Success check''': The event succeeds if:
 
#* At least one user contributed, '''and'''
<pre>influence_bought = min(influence_remaining, floor(contribution / P))
#* <code>shares_sold × price ≥ minimum_raise</code>
amount_spent = influence_bought * P
#: If the event '''fails''', all SVC is refunded and no influence is created.
unspent_amount = contribution - amount_spent</pre>
# '''Influence distribution''' (if successful): Contributors are processed in order of '''largest contribution first''', then '''earliest contribution''' as a tie-breaker. Each contributor buys as many whole influence as their contribution allows at the effective price:
 
#* <code>shares_bought = min(remaining_shares, contribution / price)</code>
Only the amount spent is deducted from the user's total SVC balance. Newly issued influence is credited to the user. All remaining reservations are released.
#* <code>SVC_spent = shares_bought × price</code>
 
#* <code>refund = contribution - SVC_spent</code>
The club receives the total actually spent by all contributors multiplied by <code>dilution-coins-multiplier-bps / 10,000</code>, rounded down in raw units. Currently this is exactly '''100×''' the amount spent.
#: The refund is '''not taken from the user's balance''' — only the actually spent SVC is deducted.
 
# '''Club gets the money''': The total SVC raised (all contributions minus all refunds) is transferred to the club's balance as a '''"cash injection"''' (visible on the club's balance sheet).
'''Allocation is not guaranteed to be exactly proportional.''' Integer rounding and allocation order can leave later contributors with less influence or a full release of their reserved contribution. Some offered influence may remain unissued.
# '''Contributors get influence''': New influence is minted and credited to contributors' balances. This is '''new influence''' — it increases the total supply above the base supply of 1,000,000.
 
If nobody contributes, the event fails and no influence is issued.


== Key Parameters ==
== Key Parameters ==
Values checked on 23 September 2026:


{| class="wikitable"
{| class="wikitable"
! Parameter !! Description !! Current value
! Parameter !! Meaning !! Value
|-
| <code>dilutions-enabled</code> || Fundraising enable switch || 1
|-
|-
| <code>dilutions-enabled</code> || Master switch (0 = off, 1 = on) || 1
| <code>dilution-min-bps</code> || Proposal threshold against the greater of actual outstanding influence and 1,000,000 || 500 (5%, rounded up)
|-
|-
| <code>dilution-min-bps</code> || Minimum influence holding (in basis points) required to propose a fundraise || 500
| <code>dilution-max-bps</code> || Maximum user-proposed new influence against actual outstanding influence || 2,000 (20%, rounded down)
|-
|-
| <code>dilution-max-bps</code> || Maximum new influence as basis points of outstanding supply || 2000
| <code>dilution-coins-multiplier-bps</code> || Club-receipt multiplier used for settlement and minimum-raise checks || 1,000,000 (100×)
|-
|-
| <code>dilution-upcoming-seconds</code> || Duration of the "upcoming" (amendable) phase || 7 * days
| <code>dilution-upcoming-seconds</code> || Upcoming/amendable phase || 604,800 (7 days)
|-
|-
| <code>dilution-voting-seconds</code> || Duration of the voting phase || 7 * days
| <code>dilution-voting-seconds</code> || Voting phase || 604,800 (7 days)
|-
|-
| <code>dilution-seconds</code> || Duration of the contribution window || 28 * days
| <code>dilution-seconds</code> || Contribution window || 2,419,200 (28 days)
|-
|-
| <code>min-seconds-between-dilution-votes</code> || Cooldown between user-proposed fundraise votes per club || 70 * days
| <code>min-seconds-between-dilution-votes</code> || Wait from finalising a user-proposed vote to allowing a new proposal || 6,048,000 (70 days)
|-
|-
| <code>seasonend-dilution-bp</code> || New influence to create at season end, as basis points of outstanding || 500
| <code>seasonend-dilution-bp</code> || Automatic new influence against actual outstanding influence || 500 (5%, rounded down)
|}
|}


== Edge Cases and Important Behaviours ==
== Balance and Influence History ==


* '''No contributors''': If nobody contributes to a fundraise event, it fails. No influence is created and no money changes hands.
* Positive club receipts use the balance-sheet label <code>dilution_income</code>.
* '''Zero price''': If the total contributions are less than the amount of influence, the effective price rounds down to 0. In this case, the single largest (and earliest) contributor gets '''all the influence for free''' (but still gets their SVC refunded — effectively free influence).
* Positive user spending uses the user balance-sheet transaction type <code>dilution</code>.
* '''Minimum raise not met''': Even if many users contribute, if the total SVC that would actually be spent (after rounding) falls below the minimum raise, the event fails. All SVC is refunded.
* Newly credited influence uses the influence transaction type <code>dilution</code>.
* '''Individual rounding''': Because influence is bought in whole units at a rounded-down price, it is possible that less influence is sold than was available. E.g. with 1 influence available and a price of 3 SVC/influence, three contributors each putting in 1 SVC would each be able to buy 0 influence (1 / 3 = 0), so the raise would fail despite total bids exceeding the minimum.
* Releasing an unspent reservation is not a new SVC payment to the user: that SVC was never deducted from their total balance.
* '''Beyond base supply''': Fundraising can push the total outstanding influence above the base supply of 1,000,000. This is intentional — fundraising is how supply grows.
* '''Voting power for proposals''': The quorum for proposing fundraises is always based on '''base supply''' (1,000,000) if fewer influence than that is minted. This prevents a small influencer from proposing a fundraise when very little influence is in circulation.
* '''End-of-season proposals start immediately''': Unlike user-proposed ones, they have no "upcoming" phase and go straight to voting (<code>start_time = now + 1 second</code>). They also cannot be amended.
* '''Balance sheet entries''': For the club, the fundraise creates a <code>cash_injection</code> entry. For the user, it creates a fundraise entry under their balance sheet, and a fundraise entry in the influence transaction history.


== User-Facing Move Summary ==
== Move Summary ==


{| class="wikitable"
The following are move-field templates, not complete signed transactions. Replace the placeholder strings with valid integer values. '''Both <code>a</code> and <code>mr</code> are in raw units (10,000 per SVC), not displayed SVC amounts.''' Influence counts and IDs are not scaled.
! Action !! Move JSON
 
|-
Propose fundraising or add an option to an upcoming proposal:
| Propose fundraise || <code>{"p": {"s": {"club": <id>}, "dilute": {"n": <num>, "mr": <min_raise>}}}</code>
<pre>{"p": {"s": {"club": "CLUB_ID"}, "dilute": {"n": "INFLUENCE_COUNT", "mr": "MINIMUM_CLUB_RECEIPT_RAW_UNITS"}}}</pre>
|-
 
| Contribute to event || <code>{"dc": {"a": <amount>, "e": <event_id>}}</code>
Contribute to an event:
|-
<pre>{"dc": {"a": "CONTRIBUTION_RAW_UNITS", "e": "EVENT_ID"}}</pre>
| Vote on proposal || <code>{"v": {"p": <proposal_id>, "o": <option_id>}}</code>
 
|}
Vote on a proposal:
<pre>{"v": {"p": "PROPOSAL_ID", "o": "OPTION_ID"}}</pre>
 
For example, a contribution amount of <code>500000</code> represents '''50 SVC'''.


== Summary ==
== Summary ==


Influence fundraising is a governance-based mechanism for clubs to raise capital by issuing new influence. It operates in two modes: '''automatic end-of-season''' (to prevent clubs from being stuck in debt) and '''user-proposed''' (for active influencer-driven fundraising). The process is: propose → vote → contribute → settle. At settlement, an effective price per influence is determined by dividing total contributions by the number of influence; contributors receive influence in proportion to their contribution (largest first); any unspent SVC is refunded; and the club receives the proceeds.
* '''User-proposed fundraising:''' propose → vote → contribute → settle.
* '''Automatic season-end fundraising for eligible debt clubs:''' contribute → settle, with no vote.
 
The final allocation uses integer pricing and largest-contribution-first ordering. The club receives the multiplied amount actually spent, not gross reserved contributions. Fundraising can increase outstanding influence beyond the base supply, but neither raising money nor exactly proportional allocation is guaranteed.


[[Category:Game Mechanics]]
[[Category:Game Mechanics]]

Latest revision as of 11:32, 24 September 2026

Influence fundraising allows a club to issue new influence in exchange for contributions of SVC (Soccerverse Coin). The club receives the contributors' actually spent SVC multiplied by the fundraising multiplier. Contributors receive newly created influence, which carries voting power and eligibility for income payouts under the game's normal rules.

Fundraising applies only to club influence, not player influence. It increases outstanding influence by the amount actually issued and can take supply above the base supply of 1,000,000. It does not necessarily take supply above that level in every event.

The parameter values below were checked against the live game on 23 September 2026. Parameters can change.

Why Fundraising Exists

  1. Helping clubs in debt. At season end, eligible negative-balance clubs get an automatic fundraising event, without a proposal or vote. There is no guarantee that it attracts contributions or raises enough to clear the debt.
  2. Influencer-led funding. Eligible influence holders can propose fundraising for a club, whether or not the club is in debt. Influence holders vote on whether to proceed and on the fundraising terms.

The Lifecycle of a Fundraise

1. Triggering

A. Automatic End-of-Season Fundraising

While fundraising is enabled, clubs whose balance is negative when the season-end fundraising check runs are considered for an automatic event.

  • The number of influence offered is floor(outstanding_influence * seasonend-dilution-bp / 10,000), currently 5% of actual outstanding influence, rounded down.
  • If that calculation produces zero, no event is created.
  • The minimum raise is zero.
  • The event goes directly to contributions. There is no proposal, upcoming phase or vote.

B. User-Proposed Fundraising

To propose a fundraiser or add an option to an upcoming proposal, a user must hold at least:

ceil(dilution-min-bps * max(outstanding_influence, 1,000,000) / 10,000)

At the current 500-basis-point setting, this means:

  • 50,000 influence when outstanding influence is at or below 1,000,000.
  • 5% of actual outstanding influence, rounded up when outstanding influence exceeds 1,000,000.

This is a proposal eligibility threshold, not a voting turnout quorum.

A new user-proposed fundraiser cannot be created until the club's cooldown has elapsed. Currently this is 70 days after the previous user-proposed vote was finalised, even if that vote selected "do nothing". An existing upcoming proposal can be amended with another valid option; once it enters voting, new options cannot be added.

The proposed terms are:

  • n: The number of new influence offered, from 1 to floor(outstanding_influence * dilution-max-bps / 10,000). Currently this is up to 20% of actual outstanding influence, rounded down. Unlike proposal eligibility, this calculation does not use a 1,000,000 minimum denominator.
  • mr: The minimum amount the club must receive after allocation rounding and the funding multiplier. It may be zero. It is not a minimum for gross reserved contributions.

2. Proposal Phase (User-Proposed Fundraising Only)

  • Upcoming phase: Currently 7 days. Eligible influence holders can add options with different n and mr combinations.
  • Voting phase: Currently 7 days. Influence holders vote with their influence.
  • Do nothing: A user-proposed fundraising ballot includes a default "do nothing" option. If it wins, no event is created. Otherwise the winning fundraising terms create an event.

These stages also apply to a user-created proposal for a club in debt. It is the automatic season-end path, not debt status alone, that bypasses voting.

3. Contribution Phase

An event specifies the number of influence offered, its minimum raise and its end time. The contribution window is currently 28 days from event creation.

Any user with sufficient available SVC can contribute a positive amount. Contributions are not price bids: users do not choose a price per influence, and the final price and allocation are determined at settlement.

  • Contributions are reserved against the user's balance immediately, reducing available SVC. They are not yet deducted from the total balance.
  • Users can top up while the event remains active. Top-ups are combined into one contribution per user and retain the user's original contribution ID for tie-breaking.
  • The club's funding multiplier is currently 100×: each 1 SVC actually spent by contributors credits 100 SVC to the club. Unspent reservations do not generate club income.

4. Settlement

The game finalises an event when block time reaches or passes its end time.

All monetary calculations use integer raw units, where 10,000 raw units = 1 SVC. Influence counts are whole influence and are not scaled.

Price and Success Check

Let G be total gross contributions in raw units and N the number of influence offered:

P = floor(G / N)

P is the raw-unit price per influence. The price is therefore rounded down to 0.0001 SVC increments, not whole SVC.

For a positive price, the tentative number sold is:

S = min(N, sum(floor(each_user_contribution / P)))
club_receipt = floor(dilution-coins-multiplier-bps * S * P / 10,000)

The event succeeds if at least one user contributed and the calculated club receipt meets the minimum raise. If it fails, no influence is issued, no contribution is spent and all reservations are released.

Allocation and Payment

Contributors are processed in order of largest combined contribution first, then lowest original contribution ID first for equal amounts.

At a positive price:

influence_bought = min(influence_remaining, floor(contribution / P))
amount_spent = influence_bought * P
unspent_amount = contribution - amount_spent

Only the amount spent is deducted from the user's total SVC balance. Newly issued influence is credited to the user. All remaining reservations are released.

The club receives the total actually spent by all contributors multiplied by dilution-coins-multiplier-bps / 10,000, rounded down in raw units. Currently this is exactly 100× the amount spent.

Allocation is not guaranteed to be exactly proportional. Integer rounding and allocation order can leave later contributors with less influence or a full release of their reserved contribution. Some offered influence may remain unissued.

If nobody contributes, the event fails and no influence is issued.

Key Parameters

Values checked on 23 September 2026:

Parameter Meaning Value
dilutions-enabled Fundraising enable switch 1
dilution-min-bps Proposal threshold against the greater of actual outstanding influence and 1,000,000 500 (5%, rounded up)
dilution-max-bps Maximum user-proposed new influence against actual outstanding influence 2,000 (20%, rounded down)
dilution-coins-multiplier-bps Club-receipt multiplier used for settlement and minimum-raise checks 1,000,000 (100×)
dilution-upcoming-seconds Upcoming/amendable phase 604,800 (7 days)
dilution-voting-seconds Voting phase 604,800 (7 days)
dilution-seconds Contribution window 2,419,200 (28 days)
min-seconds-between-dilution-votes Wait from finalising a user-proposed vote to allowing a new proposal 6,048,000 (70 days)
seasonend-dilution-bp Automatic new influence against actual outstanding influence 500 (5%, rounded down)

Balance and Influence History

  • Positive club receipts use the balance-sheet label dilution_income.
  • Positive user spending uses the user balance-sheet transaction type dilution.
  • Newly credited influence uses the influence transaction type dilution.
  • Releasing an unspent reservation is not a new SVC payment to the user: that SVC was never deducted from their total balance.

Move Summary

The following are move-field templates, not complete signed transactions. Replace the placeholder strings with valid integer values. Both a and mr are in raw units (10,000 per SVC), not displayed SVC amounts. Influence counts and IDs are not scaled.

Propose fundraising or add an option to an upcoming proposal:

{"p": {"s": {"club": "CLUB_ID"}, "dilute": {"n": "INFLUENCE_COUNT", "mr": "MINIMUM_CLUB_RECEIPT_RAW_UNITS"}}}

Contribute to an event:

{"dc": {"a": "CONTRIBUTION_RAW_UNITS", "e": "EVENT_ID"}}

Vote on a proposal:

{"v": {"p": "PROPOSAL_ID", "o": "OPTION_ID"}}

For example, a contribution amount of 500000 represents 50 SVC.

Summary

  • User-proposed fundraising: propose → vote → contribute → settle.
  • Automatic season-end fundraising for eligible debt clubs: contribute → settle, with no vote.

The final allocation uses integer pricing and largest-contribution-first ordering. The club receives the multiplied amount actually spent, not gross reserved contributions. Fundraising can increase outstanding influence beyond the base supply, but neither raising money nor exactly proportional allocation is guaranteed.