Actually this is a good idea, but if realised should be taught very thoroughly.
One of the potential flaws I see is while it will incentivise the use and staking of JUP it will also incentivise more people to join in order to be able to purchase first and dump later - so instead of the bots there will be people working with more time and money (and lso with bots at some stage).
Having this in mind. Here is an idea how this could be implemented in a proper manner to really give advantage to investors who join the Launchpad and stake their JUP to invest at least in short term if not even long.
A smart contract can be created that will collect the limit “pre-orders” only by people that staked JUP. We can give him a code name “LFG Concierge” - because he will make the orders on our behalf.
Investors who want to participate in the “priority” purchase set their settings for their order:
- How much they will invest
- What is their price ceiling they would give for the token (based on several considerations that I will explain below).
- They send their SOL/USDC to the smart contract and activate their priority position.
The concierge will collect all preorders without “promissing” any exact result and without giving any allocation. The allocation will be calculated on a fair formula after the preorders are closed and before the launchpad starts.
Instead of using any tiers and allocations we use a fair split based on voting power.
We already have enough other constants that can help us allocate dynamically based both on the interest for the project and the voting power that joined the priority purchase.
- There should be a maximum allocation for priority purchase (let’s use the 10% proposed in the initial proposal).
- The variables of the pool should be known before the opening of the priority preorders. This way we know the minimum price, the maximum price, the bin sizes both price and quantity wise.
So based on all collected priority orders by the Concierge and considering the other variables, the concierge creates consolidated limit orders based on bin size - one order for each bin (when there is a full priority of the concierge insted of thousands of players, it can calculate very precisely the order sizes and price).
The concierge creates each of this orders one by one calculating the current participants and their order sizes that will go into this bin starting by the lowest.
Each participant is considered to join the bin-order proportionally on their voting power if they qualify to this bin based on their ceiling price and order size. After the calculations and allocations for Bin 1 is made the allocated quantities for each participant are deducted from their total order and the next iteration for the next bin-order starts with the same rules.
In order to protect the Launchpad to be joined by paperhands that will join the priority purchase just to dump few minutes after the actual sale start the Concierge will lock the tokens for couple of days (for example will distribute the priority purchased tokens in the same time that unlocks the liquidity to the project team).
Also, because the algorithm supposes that there may be unused USDC (or SOL) tokens they should be returned immediatelly after the allocations are calculated in order the investors to have them liquid to use them for the regular pool if they want to. This can be achieved if the “Concierge” stops taking orders some time before the launch of the actual presale, so it can make the actual calculations and free the tokens that will not be used in the purchase.
Here is a very simple example with few bins and participants.
*NOTE: Examples are with numbers that are easy to calculate manually just so showcase the idea of the algortihm. In the real life bins are much more granular.
We have a pool of 5 bins (which represent the 10% allocation not all the tokens in the launchpad, the rest does not matter to the Concierge).
Bin |
1 |
2 |
3 |
4 |
5 |
Bin size (tokens) |
1000 |
2000 |
3000 |
4000 |
5000 |
Bin price (USDC) |
1 |
2 |
3 |
4 |
5 |
Then we have 5 participants in this presale:
User |
Voting Power |
Ceiling Price |
Deposit |
User 1 |
1000 |
1 USDC |
200 USDC |
User 2 |
1000 |
5 USDC |
500 USDC |
User 3 |
2000 |
4 USDC |
5 000 USDC |
User 4 |
2000 |
2 USDC |
1 000 USDC |
User 5 |
4000 |
5 USDC |
75 000 USDC |
User 5 is greedy and wants them all. But lets see what happens, when the Concierge starts to make allocations.
…
ITERATION 1
Iteration 1 |
Bin 1 |
Total Allocation |
1000 |
Token price |
$1.00 |
Total Participants |
5 |
Total Voting Power |
10000 |
…
ALLOCATIONS:
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 1 |
$200.00 |
10.00% |
100 |
200.00 |
TRUE |
100 |
$100.00 |
User 2 |
$500.00 |
10.00% |
100 |
500.00 |
TRUE |
100 |
$100.00 |
User 3 |
$5,000.00 |
20.00% |
200 |
5000.00 |
TRUE |
200 |
$200.00 |
User 4 |
$1,000.00 |
20.00% |
200 |
1000.00 |
TRUE |
200 |
$200.00 |
User 5 |
$75,000.00 |
40.00% |
400 |
75000.00 |
TRUE |
400 |
$400.00 |
Lets Explain the variables:
Remaining Budget - This is the budget that is left after the previous Iteration. Since we are at the first one Remaining is the same as the initial budget.
Allocation % - This is the Maximum Allocation from the current BIN that the user will receive. The percent is equal to the ratio of the users Voting Power to the Total Voting Power of all competitors in this iteration.
Max Allocation Size is the maximum number of tokens that the user can be allocated for this iteration. MAS=A%*TA
Requested QTY - this is the quantity that each users would like to buy. Assuming that the user wants to have his whole budget filled at the lowest possible price the Requested QTY is simply his budget divided to the price of the current bin.
REQ>MAX? - A simple check if the Requested Quantity is more than the Max Allocation Size.
Filled QTY - IF REQ>MAX? = TRUE, then the filled QTY equals the Max Allocation size. Else it will equal the Requested Quantity and then we will need to re-iterate the same bin in order to distribute the remaining tokens in the bin. (Example to follow in next iterations).
Budget Spent - this should be obvius
In this Iteration example all users qualify to get their maximum Allocation, since they have enough budget.
…
ITERATION 2
Here we already lose User 1. While he has a remaining budget of $100 his ceiling price is set to $1 so he will not qualify for allocations at all in this iteration.
Iteration 2: |
Bin 2 |
Total Allocation |
2000 |
Token price |
$2.00 |
Total Participants |
4 |
Total Voting Power |
9000 |
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 2 |
$400.00 |
11.11% |
111.1111111 |
200.00 |
TRUE |
111.1111111 |
$222.22 |
User 3 |
$4,800.00 |
22.22% |
222.2222222 |
2400.00 |
TRUE |
222.2222222 |
$444.44 |
User 4 |
$800.00 |
22.22% |
222.2222222 |
400.00 |
TRUE |
222.2222222 |
$444.44 |
User 5 |
$74,600.00 |
44.44% |
444.4444444 |
37300.00 |
TRUE |
444.4444444 |
$888.89 |
…
ITERATION 3
Iteration 3 |
Bin 3 |
Total Allocation |
3000 |
Token price |
$3.00 |
Total Participants |
4 |
Total Voting Power |
9000 |
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 2 |
$177.78 |
11.11% |
333.3333333 |
59.26 |
FALSE |
59.26 |
$177.78 |
User 3 |
$4,355.56 |
22.22% |
666.6666667 |
1451.85 |
TRUE |
- |
|
User 4 |
$355.56 |
22.22% |
666.6666667 |
118.52 |
FALSE |
118.52 |
$355.56 |
User 5 |
$73,711.11 |
44.44% |
1333.333333 |
24570.37 |
TRUE |
- |
|
In this Example User 2 and User 4 have REQ>MAX?=FALSE. What we do is we fill only their orders at their Requested Quantity and then Re-Iterate for the rest of the tokens with the other users, that have a greater budget.
*NOTE: We can also perform a regular allocation in this iteration to the other users and then reiterate again only for the remaining tokens. I think ti does not matter, but either way the result would be the same for the users.
…
ITERATION 4
Iteration 4 |
Bin 3 |
Remaining Allocation |
2822.22 |
Token price |
$3.00 |
Total Participants |
2 |
Total Voting Power |
6000 |
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 3 |
$4,355.56 |
33.33% |
940.7407407 |
1451.85 |
TRUE |
940.7407407 |
$2,822.22 |
User 5 |
$73,711.11 |
66.67% |
1881.481481 |
24570.37 |
TRUE |
1881.481481 |
$5,644.44 |
After the Re-Iteration the Bin Allocation is filled so we can move to the next Bin.
In the real life there will most probably be several reiterations for each bin, since there will be a lot of players with different budgets which will be filled at different levels and it is possible to have users that at first iteration of a particular bin have REQ>MAX=TRUE, but after several re-iterations of the same bin they fill their budgets. In this case I made it simple just to showcase the idea.
…
ITERATION 5+6
Here you will see that User 3 will fill his budget on Iteration 5, and since they are only 2 users left in this example I combined Iteration 5 and the Reiteration for Bin 4 in one table, where User 3 gets his Requested QTY and User 5 gets all the remaining tokens in the bin.
Iteration 5+6 |
Bin 4 |
Total Allocation |
4000 |
Token price |
$4.00 |
Total Participants |
2 |
Total Voting Power |
6000 |
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 3 |
$1,533.33 |
33.33% |
1333.333333 |
383.33 |
FALSE |
383.33 |
$383.33 |
User 5 |
$68,066.67 |
66.67% |
2666.666667 |
22688.89 |
TRUE |
3616.67 |
$3,616.67 |
…
ITERATION 7
Iteration 7 |
Bin 5 |
Total Allocation |
5000 |
Token price |
$5.00 |
Total Participants |
1 |
Total Voting Power |
4000 |
User |
Remaining budget |
Allocation % |
Max Allocation Size |
Requested QTY |
REQ>MAX? |
Filled QTY |
Budget Spent |
User 5 |
$64,450.00 |
100.00% |
5000 |
21483.33 |
TRUE |
5000 |
$25,000.00 |
At this iteration User 5 is alone so he takes the full bin allocation. And while he still has a remaining budget to spent the total allocation for the Concierge is finished so there will be no more iterations and allocations.
Lets see what happened with our users at the end of the priority purchase:
User |
Total Budget |
Ceiling Price |
D |
Total Allocation |
Budget Spent |
AVG Price |
Remaining Budget |
User 1 |
$200.00 |
$1.00 |
|
100.00 |
$100.00 |
$1.00 |
$100.00 |
User 2 |
$500.00 |
$5.00 |
|
270.37 |
$500.00 |
$1.85 |
|
User 3 |
$5,000.00 |
$4.00 |
|
1746.30 |
$5,000.00 |
$2.86 |
|
User 4 |
$1,000.00 |
$2.00 |
|
540.74 |
$1,000.00 |
$1.85 |
|
User 5 |
$75,000.00 |
$5.00 |
|
11342.59 |
$46,400.00 |
$4.09 |
$28,600.00 |
In Summary I think this (or similar approach) will be very beneficial for the Jupiter Launchpad because of several things:
- It will prioritise Investors before Sinping bots which usually try to dump shortly after they buy.
- It will also prioritise investors before paper hand traders because the of the token lock for several days or a week
- It will incentivise people to stake JUP and give a huge priority to the Jupiter Community wile it will not be a barrier for project’s community to invest since JUP staking is open to everyone and if timing is made right it will give enough time to anyone who wants to participate in particular project to prepare for the Launch of this kind of sale as well.
It is important to note that most of the Launchpads on the market “Sell” to project the idea that they have a community of investors, while in the real life if projects want to raise enough funds they need to do their own marketing and the vast majority of funds comes from their own community. This fact makes very few launches really sucessfull in general, while Jupiter as the biggest platform on Solana with a set of “revolutionary” measures have the real opportunity to cultivate a substantial community of small and medium investors and can make a real change on the market.
From projects perspective - this mechanism is also very beneficiary, because it incentivises mainly investors, who are not bothered to have their tokens locked for severals days or one-two weeks at least and know that those investors are also committed to at least one project - Jupiter with staking their tokens.
Of course it will be naive to think that this mechanism will completely “delete” speculative trade from LFG Launchpad, but it will at least give “the best share of the pie” to actual investors and to some extent to speculative traders, who will “dump” their best priced tokens at a much later stage instead of the very first minutes.