-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Creator Tokens Requirements #2362
Comments
Should interoperate with #2365. |
Addendum: For simplicity:
|
Is both a fixed and non-fixed issuance possible? Might have missed it but I'd imagine the option should be there? |
A common problem that occurred A LOT on Bitclout were pump and dumps. The actual owners of the tokens/accounts didn't even need to be in on it, any group of scammers could choose a creator token to pump and dump. Because most creator tokens had such small transaction amount and volume it meant any group of scammers could have a large impact on the price of a token. Often times what they would do is create fake profiles of people with existing audiences on other social media platforms and use the narrative that "so and so just joined bitclout, now they'll go bring their existing audience over.. get in early". It worked and I witnessed a lot of ppl getting rugged. The way they successfully did this was based on the fact that most profiles on bitclout would use the same handle as they had on Twitter. If the influencer/famous person in question already had a reserved handle on Bitclout the scammers would use some other social media handle instead, such as their instagram handle, to seem legitimate, and because these pump and dumps occur so rapidly people throw caution to the wind and invest quickly before others find out that "Ronaldo just set up his bitclout account, he will share it on his instagram stories soon". One partial remedy to this was what they called "Founder Reward Percentage" ( This Now, how does this prevent pump and dumps? Well if there is a cost to buy into a token you'll only really do so if you plan to see it through for a longer period of time. If it's free to buy creator tokens then pump and dumps will be rampant, as they have no "cost" to recoup and can just buy in and out of creators without thought. I'm not sure if this is natively prevented by some other mechanism in our scheme, but thought I'd share it here for your review @bedeho . To add to this: Bitclout had no fees on the transactions.. which I do believe we'll have, so that would be a partial deterrent for sure. |
This sounds like a very expensive and roundabout way to prevent manipulation. We actually do have fees planned, but not for the creator, but for the platform, but it would have the same effect. But as a remedy it seems both expensive and ineffective. You are saying it ended up working? If the amount of abuse declined, could that be for other reasons? Seems the core problem is fake profiles: since Joystream has on-chain governance, we can try to address that more directly, as curators can get involved, but this would require more thought, and perhaps more importantly, more data and examples of how exactly people are abusing the system.
It has fees, or, we can just crash the bitclout chain right now. Perhaps they paid fees on your behalf, I don't know, but no fees is not really a thing unless you Sybill control who gets onto your system in some other way. |
First let me clarify: the Founder Reward Percentage was not deployed as a mechanism to fight pump and dumps, that was just one of the side effects it had. Its primary use case for existing was that.. when you really boil it down, having people invest in your coin does not directly yield any rewards to the token owner. A Joystream channel could have a token worth $100m, and by that alone, they would not have any money to actually buy things with.. UNLESS they withdrew some of their own tokens which would have gone up in value. The problem with that is the fact that it's on the blockchain and therefor any creator cashing out any amount of their tokens sends a signal of "this creator does not believe in himself, look at him cash out his own token". I can almost guarantee that someone will develop a program that notifies Joystream creator token holders when the owner of the tokens is cashing out their own tokens, because this of course is a sign of rugging, and we know how fickle crypto folks are (rightfully so). So if I hold $BEDEHO tokens I'll sign up to be notified if Bedeho cashes in $BEDEHO for $JOY because it could potentially be the case that he's rugging the investors and if that's the case I don't want to be the last one holding the bag. The This is actually a separate topic from what I started commenting on, but also one I think is valuable to consider.
I'm not sure what is expensive? The fee to the investor? The Founder Reward Percentage is set by the token / account owner. It can also be set to 0%. It did work to prevent pump and dumps, yes. It was not for other reasons because this was a feature that was made from the start, not something they deployed later on. The way you knew it worked was that there were not many, if any, pump and dumps involving creator tokens that did actually have a FRP set to say 10%.. it only happened when the FRP was set to 0%, or something close to that.
This is fair, but hard to deal with directly I think, as these profiles would be created, pumped, and dumped, in less than an hour so you'd need incredibly responsive efforts to combat it. With that said the amounts were never huge, a couple of thousand dollars at a time, at most. To summarize I think the fact that the token owner had the option of adding their own Fees into transactions was a fantastic way for creators to earn actual tokens (that were not their own token) they could spend, without needing to cash out their own tokens which sends really bad signals. What's the point in having people invest in you if there is no actual direct benefit of that? If you can't cash out any amount of your own tokens in order to use the money without sending bad signals, that's an issue for creators. Again, the rugging prevention was a side effect of this. |
Revenue Split:
Transfers:
Further Questions:
Final Question:
I did review Bitclout and its an almost completely closed system. “Creator coins” don't actually exist, it is all just their native token tied to accounts somehow and its initial issuance is controlled by the company that runs it and some sort of pricing formula is involved. I wasn't able to find any exchange that sold any of the "creator coins" and all of them have their value determined solely by the amount of Bitclout’s native token that they hold. So their "creator coins" are very, very highly controlled, with basically only their platform allowing buying and selling--I am pretty sure that this restriction if anything significantly increases the incentives for pump and dump operations. I think the rich level of options available here would allow content creators to experiment with different things and maybe just like the early altcoin days when people began showing distaste and distrust towards any |
Splits can happen only once at a time, but an unlimited number over time.
No. You can either chose to give 0 % to $CRT, or, you could just never do splits, but, if you have split % > 0, then this also means you also cannot get funds out for yourself.
Yes.
I did not understand this really, but they are unrestricted in when they want to do splits, and how much to split out.
Yes.
This is only normal tx fee, the only real burning fees are
The one who makes the extrinsic pays, but there is no p2p swap feature like you are describing. The AMM is not a p2p swap, its trading with the chain/curve.
Only $JOY
This is a complex topic, just getting into it myself.
There is no such fee, but yes, you can distribute your token however you like, including doing lots of manual transfers.
The creator allocation is just a number of $CRT units, and initially this is 100% of the supply. Any other tokens are minted in a subsequent sale or AMM or patronage.
I decided to add |
That does not make sense, because channel account is a shared resources which $CRT holders have a claim on.
what do you mean by this? by backing with JOY? Do you mean no minting/dilution?
You can't block this... Sybil identities. |
Then you mean a $CRT instead of $JOY in the original question?
$CRT amount |
I imagine there beeing a cap on total issuance provided during |
To be more percise: struct MovingCap<Balance> {
initial_cap: Balance,
increase_per_block: Balance,
}
enum TotalIssuanceCap<Balance, MovingCap> {
Static(Balance),
Moving(MovingCap),
}
struct TokenIssuanceParams<..., TotalIssuanceCap> {
// ...
issuance_cap: TotalIssuanceCap
} |
I like the following about this idea
I am not quite sure what the implications are for the AMM & patronage side that they are also constrained by this limit. I get that the limit has to be universal, but then this has some cost in these other domains, as those functions stop working, and this now has to be explained properly, and picking numbers during issuance has to be with more care. There is a separate problem relating to sales which also concerns me: self-dealing. Someone could launch a sale, perhaps at a low price, and snipe most of the allocation themselves through a dummy account. Now you can try to fix this, by adding a minimum lead time before sale begins for example, and there is also the issue that a sale with a suspiciously low price which is all bought fast can undermine credibility of entire project anyway, which then backfires, but it does get tricky. You could imagine getting curators involved, where they have to approve all sales or all sales after the first sale, but this again gets complicated. What if we do something just ded simple: sales are funded by creators assets, end of story. This solves everything, and the main cost is you can't do dilutive funding. In a way this more closely reflects the nature of the transaction, because the $JOY raised is not a shared asset of $CRT holders, like a normal equity raise for a company, its the personal asset of the issuer. This is because there is no $JOY treasury or governance process over that treasury which $CRT holders influence. I think that would be a useful thing to have, but its too complex for us right now. The issuer can still do multiple sales, for example by selling smaller chunks, or by selling patronage $JOY, so that option is still there. Later we could layer in a proper governance & dilutive funding like $JOY has, if that is something people end up asking for. WDYT? |
Sounds good, as this is definitely simpler to implement and reason about and I think it's a good enough starting point. |
I am not sure about limiting the total issuance. Most AMM bonding curve assume the opposite. I need to investigate... Update: References: |
Indeed. |
How about a cap on the total sale $CRT allocation, instead? like the following:
|
Yeah, you could still do one 1000 times per day, and again, the self-dealing is still an issue. I don't see any good way of dealing with that some governance around the $CRT, either by stakeholders or curators, and that starts to get really too complicated too quickly. Honestly: I just don't know. The ability to do dilute financing in the future may even make the issuer an even more committed steward than otherwise, because they have the right to print in the future, which itself is a valuable asset. So it does discourage some level of self-dealing even. |
How about this: max x % sale dilution per year, in total, and x is a parameter controlled by governance (council or curators). Still pretty simple, allows some self-dealing, but also dilute financing for honest actors. |
I have another, more math-like idea, I am putting it out there in case it might be a good one.
This allows to control the total inflation induced by self dealing since
Summation taken for References: Last edit: Apr.11th at 20:27 CEST |
I think the benefit of this, compared to my suggestion just prior, is if the platform itself is perhaps not perfectly credible in constraining annual dilution, the cost side is that its less flexible and more complex to explain to users and implement. I think on balance the prior one would be better in my judgement. |
Background
Already assumes this has been done
#3263
in particular the built in channel accounts for holding $JOY earned.
Requirements
A given generic creator token is herein referred to as $CRT. Here is a super simple state machine diagram which captures the major states and transitions.
Issue $CRT
A channel owner, but not collaborator, can issue a fungible token controlled using normal Substrate accounts, if one does not already exist, with parameters:
I
below, with optional cliff+linear vesting schedule.S
of channel revenue the token holders are entitled to.Let the actual dynamic supply of the token at any time be denoted by
Q
.A note on decimals
One unit of the ticker symbol of a token refers to
10^18
base units of the actual token. This is purely a UI concept, and it means all input and output fields of UIs should use this denomination, hence there can be up to18
decimal places. So if the user inputs1,87
this means18700000000
units as understood by the runtime, or if the runtime has unit balance3427812313251
then UIs should display0.00000342781
.General
orml_tokens::MultiTokenCurrencyExtended
, from ORML. It is for example used by AMMs likePatronage
Transfers
join_whitelist
) a Merkle proof of inclusion in the whitelist commitment.Revenue Split
X
(user input) of $JOY, no more than the current balance of the channel,Y
. The owner specifies some account during split initiation, where the owner share ofX
is diverted, that isX*(1 - S/100)
. If the owner also holds actual $CRT, the owner can also receive value via this mechanism by doing the same as normal token holders, as will be described next. Notice that if there is any additional channel revenue after the split is initiated and is ongoing, that is not included in the split, as we are committing toX
. Also remember that it must be checked whether channel is currently specifically, or generally, blocked from doing cashouts/splits (see Finalize channel payouts in runtime #3263).V
number of tokens in such an account will, upon staking, receive(V/Q)*X*(S/100)
in $JOY from the channel balance to any account of their liking. Importantly, while staked, $CRT cannot be transferred to any other account. Tokens staked for one revenue split are not counted as staked for any subsequent split automatically, this will require restaking them specifically for that split, and it is only then a part of the revenue for that split is paid out.Sale
Automated Market Making
This feature requires a short prelude. The idea here is that these assets are extremely long tail bespoke assets, with very low liquidity. It would be very useful for all parties if there was some minimal level of market making which supported people obtaining, or reducing, exposure to such assets. Relying on active traders to manage orderbooks on another DEX/CEX is very possibly not a great solution. Instead, the idea is to have a very minimal automated market maker for each $CRT token in our chain. With that said, I am not entirely happy with this feature. The whole idea of bonding curves for this is something I see used for similar use cases, but the fully implications of it are not apparent to me. I did also consider us going with a more sophisticate product rule (x*y=k, ala Uniswap) system, which seems more well tested and economically rational to me, however it is also more complex, and requires liquidity providers.
Resources
https://github.com/AragonBlack/fundraising/blob/master/docs/components/bonding-curve.md
https://yos.io/2018/11/10/bonding-curves/
https://medium.com/coinmonks/token-bonding-curves-explained-7a9332198e0e
https://www.linumlabs.com/articles/bonding-curves-the-what-why-and-shapes-behind-it
https://github.com/realnimish/polkadot-amm/blob/main/tutorial.md
https://www.linumlabs.com/articles/bonding-curves-the-what-why-and-shapes-behind-it
Technical Constraints
Note
This is one way in which the implementation can be done.
It seems like most of this should be in its own fresh pallet, which uses an authentication trait to verify actors int he content directory, and also which exposes some simple method calls that allow the content directory to read certain things, like whether a given channel has a token issued or not. There is some need for cross pallet mutation, like potentially trying to mutate channel balance in revenue splits, but perhaps it can be minimal. It would be preferable if the existing content directory could remain ignorant about almost everything relating to creator tokens, and only have the dependency go in one direction: creator tokens -> content directory. One way to do this is to have certain key
Anyway, this will get more clear once work begins, it's just a starting place.
┆Issue is synchronized with this Asana task by Unito
The text was updated successfully, but these errors were encountered: