Club Fundraising: Difference between revisions

From Soccerverse Wiki
Jump to navigation Jump to search
Created page with "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. Fundraising is exclusive to '''club influence''' — player influence cannot be diluted...."
 
 
(12 intermediate revisions by the same user not shown)
Line 8: Line 8:


# '''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.
# '''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. It is also a safeguard against "lost keys": if a club becomes unmanaged or locked, the end-of-season fundraise proposal ensures it is not permanently lost.
# '''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 18: Line 18:
==== A. End-of-Season (Automatic) ====
==== A. End-of-Season (Automatic) ====


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


* If the club is '''not in debt''', a '''proposal''' is created. Influencers vote on whether to accept the fundraise.
* If the club is '''in debt''', the fundraise '''bypasses voting entirely''' — a fundraise event is created immediately and goes straight to the contribution phase.
* If the club is '''in debt''', the fundraise '''bypasses voting entirely''' — a fundraise event is created immediately and goes straight to the contribution phase.


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


==== B. User-Proposed (Influencer Initiative) ====
==== B. User-Proposed (Influencer Initiative) ====
Line 29: Line 28:
Any influencer can propose a fundraise if they meet two requirements:
Any influencer can propose a fundraise if they meet two requirements:


* They must own at least a certain '''relative percentage''' of all outstanding club influence (configured by the <code>dilution-min-bps</code> parameter, e.g. 5%).
* They must own at least a certain '''relative percentage''' of all circulating club influence, currently 5% (configured by the <code>dilution-min-bps</code> parameter).
* Enough time must have passed since the '''last user-proposed fundraise vote''' for that club (configured by <code>min-seconds-between-dilution-votes</code>).
* 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:
The proposing influencer specifies:


* '''<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>).
* '''<code>n</code>''': How much new influence to create, between 1 and a maximum, which is a percentage of circulating influence, currently 20% (configured by <code>dilution-max-bps</code>).
* '''<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.
* '''<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.


Line 41: Line 40:
When a user proposes a fundraise, it goes through a '''governance proposal''' lifecycle:
When a user proposes a fundraise, it goes through a '''governance proposal''' lifecycle:


* '''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>.
* '''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 7 days (configured by<code>dilution-upcoming-seconds</code>).
* '''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.
* '''Voting phase''': After the upcoming phase, the proposal enters voting for 7 days (configured by<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.
* '''The ballot''': Every fundraise proposal has a '''"do nothing"''' option (unless created by an end-of-season proposal). 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.


=== 3. The Fundraise Event (Contribution Phase) ===
=== 3. The Fundraise Event (Contribution Phase) ===
Line 53: Line 50:
* A '''number of new influence''' to be created.
* A '''number of new influence''' to be created.
* A '''minimum raise''' amount (0 for end-of-season fundraises; set by the proposer for user-proposed ones).
* 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>.
* An '''end time''', calculated as <code>current_time + dilution-seconds</code>. The end time is currently set at 28 days (configured by <code>dilution-seconds</code>).


During this phase, '''any user''' can contribute SVC to the event. They send a move with:
During this phase, '''any user''' can contribute SVC to the event. They send a move with:
Line 71: Line 68:
* 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.
* 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.
* The contributed SVC is '''reserved''' (locked) from the user's balance immediately.
* The club funding is multiplied by the <code>dilution-coins-multiplier-bps</code> parameter. At the current value of 1,000,000 basis points, each 1 SVC actually spent by contributors credits 100 SVC to the club. The minimum raise is checked after applying this multiplier.


=== 4. Settlement (After the End Time) ===
=== 4. Settlement (After the End Time) ===
Line 79: Line 77:
# '''Success check''': The event succeeds if:
# '''Success check''': The event succeeds if:
#* At least one user contributed, '''and'''
#* At least one user contributed, '''and'''
#* <code>shares_sold × price ≥ minimum_raise</code>
#* <code>multiplier × shares_sold × price / 10,000 ≥ minimum_raise</code> (currently equivalent to <code>100 × shares_sold × price ≥ minimum_raise</code>)
#: If the event '''fails''', all SVC is refunded and no influence is created.
#: If the event '''fails''', all SVC is refunded and no influence is created.
# '''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:
# '''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:
Line 86: Line 84:
#* <code>refund = contribution - SVC_spent</code>
#* <code>refund = contribution - SVC_spent</code>
#: The refund is '''not taken from the user's balance''' — only the actually spent SVC is deducted.
#: 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).
# '''Club gets the money''': Contributors spend the unmultiplied amount after refunds, while the club receives that amount multiplied by <code>dilution-coins-multiplier-bps / 10,000</code> — currently '''100×'''. The resulting income is visible on the club's balance sheet as <code>dilution_income</code>.
# '''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.
# '''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.


Line 92: Line 90:


{| class="wikitable"
{| class="wikitable"
! Parameter !! Description
! Parameter !! Description !! Current value
|-
| <code>dilutions-enabled</code> || Master switch (0 = off, 1 = on) || 1
|-
|-
| <code>dilutions-enabled</code> || Master switch (0 = off, 1 = on)
| <code>dilution-min-bps</code> || Minimum influence holding (in basis points) required to propose a fundraise || 500
|-
|-
| <code>dilution-min-bps</code> || Minimum influence holding (in basis points) required to propose a fundraise
| <code>dilution-max-bps</code> || Maximum new influence as basis points of circulating supply || 2000
|-
|-
| <code>dilution-max-bps</code> || Maximum new influence as basis points of outstanding supply
| <code>dilution-coins-multiplier-bps</code> || Multiplier applied to contributors' actually spent SVC when crediting the club and checking the minimum raise || 1,000,000 (100×)
|-
|-
| <code>dilution-upcoming-seconds</code> || Duration of the "upcoming" (amendable) phase
| <code>dilution-upcoming-seconds</code> || Duration of the "upcoming" (amendable) phase || 7 * days
|-
|-
| <code>dilution-voting-seconds</code> || Duration of the voting phase
| <code>dilution-voting-seconds</code> || Duration of the voting phase || 7 * days
|-
|-
| <code>dilution-seconds</code> || Duration of the contribution window
| <code>dilution-seconds</code> || Duration of the contribution window || 28 * days
|-
|-
| <code>min-seconds-between-dilution-votes</code> || Cooldown between user-proposed fundraise votes per club
| <code>min-seconds-between-dilution-votes</code> || Cooldown between user-proposed fundraise votes per club || 70 * days
|-
|-
| <code>seasonend-dilution-bp</code> || New influence to create at season end, as basis points of outstanding
| <code>seasonend-dilution-bp</code> || New influence to create at season end, as basis points of circulating || 500
|}
|}


Line 114: Line 114:


* '''No contributors''': If nobody contributes to a fundraise event, it fails. No influence is created and no money changes hands.
* '''No contributors''': If nobody contributes to a fundraise event, it fails. No influence is created and no money changes hands.
* '''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).
* '''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.
* '''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.
* '''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.
* '''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.
* '''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.
* '''Beyond base supply''': Fundraising can push the max supply of 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.
* '''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.
* '''End-of-season proposals for clubs in debt 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.
* '''Balance sheet entries''': For the club, the fundraise creates a <code>dilution_income</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 ==
== User-Facing Move Summary ==

Latest revision as of 12:16, 4 August 2026

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.

Fundraising is exclusive to club influence — player influence cannot be diluted.

Why Fundraising Exists

Fundraising serves two main purposes:

  1. 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.
  2. 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

1. Triggering

Fundraising can be triggered in one of two ways.

A. End-of-Season (Automatic)

At the end of each season, every club in debt automatically gets a fundraise proposal or event:

  • If the club is in debt, the fundraise bypasses voting entirely — a fundraise event is created immediately and goes straight to the contribution phase.

The amount of new influence to be created is calculated as a percentage (basis points) of the club's current circulating influence, currently 5% (configured by the seasonend-dilution-bp parameter). The minimum raise is zero.

B. User-Proposed (Influencer Initiative)

Any influencer can propose a fundraise if they meet two requirements:

  • They must own at least a certain relative percentage of all circulating club influence, currently 5% (configured by the dilution-min-bps parameter).
  • Enough time must have passed since the last user-proposed fundraise vote for that club, currently 70 days (configured by min-seconds-between-dilution-votes).

The proposing influencer specifies:

  • n: How much new influence to create, between 1 and a maximum, which is a percentage of circulating influence, currently 20% (configured by dilution-max-bps).
  • mr (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)

When a user proposes a fundraise, it goes through a governance proposal lifecycle:

  • 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 n and mr combinations). The upcoming phase lasts for 7 days (configured bydilution-upcoming-seconds).
  • Voting phase: After the upcoming phase, the proposal enters voting for 7 days (configured bydilution-voting-seconds). 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 (unless created by an end-of-season proposal). If the winning option is "do nothing", no fundraise event is created.

3. The Fundraise Event (Contribution Phase)

Once a fundraise proposal passes (or is triggered directly for clubs in debt), a fundraise event is created and becomes active. It has:

  • A number of new influence to be created.
  • A minimum raise amount (0 for end-of-season fundraises; set by the proposer for user-proposed ones).
  • An end time, calculated as current_time + dilution-seconds. The end time is currently set at 28 days (configured by dilution-seconds).

During this phase, any user can contribute SVC to the event. They send a move with:

<syntaxhighlight lang="json"> {

 "dc": {
   "a": <amount>,
   "e": <event_id>
 }

} </syntaxhighlight>

Key points about contributing:

  • 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.
  • 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.
  • The club funding is multiplied by the dilution-coins-multiplier-bps parameter. At the current value of 1,000,000 basis points, each 1 SVC actually spent by contributors credits 100 SVC to the club. The minimum raise is checked after applying this multiplier.

4. Settlement (After the End Time)

When the block time reaches or passes the event's end_time, the event is finalised:

  1. Effective price is calculated: total_contributions / number_of_shares, rounded down to whole SVC units.
  2. Success check: The event succeeds if:
    • At least one user contributed, and
    • multiplier × shares_sold × price / 10,000 ≥ minimum_raise (currently equivalent to 100 × shares_sold × price ≥ minimum_raise)
    If the event fails, all SVC is refunded and no influence is created.
  3. 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:
    • shares_bought = min(remaining_shares, contribution / price)
    • SVC_spent = shares_bought × price
    • refund = contribution - SVC_spent
    The refund is not taken from the user's balance — only the actually spent SVC is deducted.
  4. Club gets the money: Contributors spend the unmultiplied amount after refunds, while the club receives that amount multiplied by dilution-coins-multiplier-bps / 10,000 — currently 100×. The resulting income is visible on the club's balance sheet as dilution_income.
  5. 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.

Key Parameters

Parameter Description Current value
dilutions-enabled Master switch (0 = off, 1 = on) 1
dilution-min-bps Minimum influence holding (in basis points) required to propose a fundraise 500
dilution-max-bps Maximum new influence as basis points of circulating supply 2000
dilution-coins-multiplier-bps Multiplier applied to contributors' actually spent SVC when crediting the club and checking the minimum raise 1,000,000 (100×)
dilution-upcoming-seconds Duration of the "upcoming" (amendable) phase 7 * days
dilution-voting-seconds Duration of the voting phase 7 * days
dilution-seconds Duration of the contribution window 28 * days
min-seconds-between-dilution-votes Cooldown between user-proposed fundraise votes per club 70 * days
seasonend-dilution-bp New influence to create at season end, as basis points of circulating 500

Edge Cases and Important Behaviours

  • No contributors: If nobody contributes to a fundraise event, it fails. No influence is created and no money changes hands.
  • 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.
  • 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.
  • Beyond base supply: Fundraising can push the max supply of 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 for clubs in debt start immediately: Unlike user-proposed ones, they have no "upcoming" phase and go straight to voting (start_time = now + 1 second). They also cannot be amended.
  • Balance sheet entries: For the club, the fundraise creates a dilution_income 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

Action Move JSON
Propose fundraise {"p": {"s": {"club": <id>}, "dilute": {"n": <num>, "mr": <min_raise>}}}
Contribute to event {"dc": {"a": <amount>, "e": <event_id>}}
Vote on proposal {"v": {"p": <proposal_id>, "o": <option_id>}}

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.