Club Fundraising: Difference between revisions
Andrew.gore (talk | contribs) |
Andrew.gore (talk | contribs) |
||
| (7 intermediate revisions by the same user not shown) | |||
| Line 22: | Line 22: | ||
* 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 | 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 28: | 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 | * 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, currently 70 days (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 | * '''<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 40: | 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 ( | * '''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) === | === 3. The Fundraise Event (Contribution Phase) === | ||
| Line 52: | 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 70: | 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 78: | 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 85: | 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''': | # '''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 97: | Line 96: | ||
| <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 || 500 | ||
|- | |- | ||
| <code>dilution-max-bps</code> || Maximum new influence as basis points of | | <code>dilution-max-bps</code> || Maximum new influence as basis points of circulating supply || 2000 | ||
|- | |||
| <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 || 7 * days | | <code>dilution-upcoming-seconds</code> || Duration of the "upcoming" (amendable) phase || 7 * days | ||
| Line 107: | Line 108: | ||
| <code>min-seconds-between-dilution-votes</code> || Cooldown between user-proposed fundraise votes per club || 70 * days | | <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 | | <code>seasonend-dilution-bp</code> || New influence to create at season end, as basis points of circulating || 500 | ||
|} | |} | ||
| Line 113: | 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. | ||
* '''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 | * '''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> | * '''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:
- 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
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-bpsparameter). - 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 bydilution-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
nandmrcombinations). 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 by
dilution-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 bydilution-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-bpsparameter. 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:
- Effective price is calculated:
total_contributions / number_of_shares, rounded down to whole SVC units. - Success check: The event succeeds if:
- At least one user contributed, and
multiplier × shares_sold × price / 10,000 ≥ minimum_raise(currently equivalent to100 × shares_sold × price ≥ minimum_raise)
- 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:
shares_bought = min(remaining_shares, contribution / price)SVC_spent = shares_bought × pricerefund = contribution - SVC_spent
- The refund is not taken from the user's balance — only the actually spent SVC is deducted.
- 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 asdilution_income. - 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_incomeentry. 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.