$name is a fully autonomous decentralized social network.
- #$name is a blend of forums and blogs.
- Its purpose is to be a simple way to publish content on a public compute infrastructure.
- Posts containing #tags will appear in feeds comprised of these tags.
- Users can follow tag feeds, other users and watch activity on posts.
- $name is owned and governed by its community.
- $name rewards its users with ICP and shares its revenue with token holders.
The experimental part of $name is that the community decides what the rules are. The auto-regulation is enforced through a scheme of incentives:
- Every user starts with at least
$min_cycles_minted
cycles minted for1
XDR in ICP. - Every mutable operation on $name burns user's cycles.
- Users earn or lose "karma" by writing posts and getting reactions and comments.
- Users can mint new cycles at any point paying at least
1
XDR in ICP. - All payments go to $name's Treasury holding ICP rewards and $name's revenue.
$name has a total supply of $total_supply
tokens. Tokens can only be mined.
Currently, all users who earn karma, automatically mine $token_symbol
tokens.
The token minting happens weekly by converting the earned karma to $token_symbol
tokens at an exponentially declining ratio.
The ratio starts with 1:1
for the first 10%
of supply, then drops to 2:1
for the next 10%
, then to 4:1
and so on.
Hence the last 10%
of supply will be minted at the ratio 512:1
.
The utility of tokens is governance and ownership of $name's revenue.
- During positive engagements users can receive karma from other users.
- The received karma points will be converted to rewards during the next distribution.
- The rewards are computed by converting
$min_cycles_minted
karma points to ICP at the same rate as cycle minting (1 XDR
for$min_cycles_minted
karma points). - Additionally to rewards, users that own tokens and were active within the last
$revenue_share_activity_weeks
weeks receive a share of $name's revenue proportional to their token share. - Users are excluded from both distributions if their ICP amount are smaller than
100
times the transaction fee. These users carry over their accumulated karma to the next round. Note that in this case the minting is delayed as well.
Every new user goes through a "bootcamp" period of $trusted_user_min_age_weeks
weeks.
During this time the user is marked with *️⃣ on their profile and cannot affect anybody's karma through the engagements, cannot downvote posts or vote on proposals.
If after the bootcamp period the user still has less than $trusted_user_min_karma
karma points, the user stays in the bootcamp until the karma threshold is reached.
Realms represent sub-communities grouped by a certain topic. Every realm can have its own term and conditions, so that any violation of them can lead to flagging of user's post to stalwarts. By joining a realm, a user implicitly agrees with its terms and conditions.
Stalwarts are the top $stalwart_percentage%
of users with the highest karma being active during the last $min_stalwart_activity_weeks
consecutive weeks, with accounts older than $min_stalwart_account_age_weeks
weeks and at least $proposal_rejection_penalty
karma points.
They are marked with ⚔️ on their profiles and count as trusted members of the community.
Stalwarts can carry out moderating actions and submit proposals.
Decentralization does not imply lawlessness! The content allowed on $name is the content tolerated by the community which agreed on a moderation in the following cases:
- the post is threatening $name as a public service (e.g., it is illegal in most jurisdictions),
- the post was created with a nefarious intent, e.g. to game the $name system and/or is threatening $name's community members, sustainability or decentralization,
- the post breaks the rules of a realm.
The policy is vague on purpose and will require a social consensus among the stalwarts.
Posts violating this policy are a subject to moderation.
Moderation on $name is decentralized: it can be triggered by anyone and can be exercised by the stalwarts.
Whenever a post or a user gets reported, all stalwarts get notified and are expected to confirm or reject the report.
As soon as $report_confirmation_percentage%
of stalwarts agree on confirmation or rejection of the report, the report gets closed.
If most stalwarts confirm the report:
- the misbehaving user loses
$reporting_penalty_post
(post report) or$reporting_penalty_misbehaviour
(user report) karma points and at least as many cycles, - the user who created the report receives half of this penalty as karma points.
If the stalwarts reject the report, the user who created the report loses half of the penalty as cycles and karma points.
In both cases, every stalwart participating in voting receives an equal share of karma points from the penalty fee, but not more than $stalwart_moderation_reward
.
Using $name costs cycles. Here's a breakdown of all costs.
Function | Cycles 🔥 | Comments |
---|---|---|
New post or comment | $post_cost |
without hashtags |
Hashtags | T * $tag_cost |
for T unique hashtags in a post or comment |
On-chain pictures | B * $blob_cost |
for B pictures in a post or comment |
Poll | $poll_cost |
for extending a post or comment with a poll |
Reacting with ❤️ | 2 |
burns $reaction_fee cycle, adds 1 point to author's karma |
Reacting with 🔥, 😆 | 6 |
burns $reaction_fee cycle, adds 5 points to author's karma |
Reacting with ⭐️ | 11 |
burns $reaction_fee cycle, adds 10 points to author's karma |
Reacting with 👎 | 3 |
burns 3 cycles and karma points of the post author |
New realm creation | $realm_cost |
burns $realm_cost cycles |
Note:
- Every response to a post increases author's karma for creating a resonance (by
$response_reward
karma point). - The karma and cycles of every user inactive for longer than
$inactivity_duration_weeks
weeks decreases by$inactivity_penalty
per week. - Users with a negative karma do not participate in distributions.
Additionally to rewards users can tip each other with any amount of cycles. The fee for tipping is $tipping_fee
cycle.
The cycles transferred via tipping get added to receiver's cycle balance and do not contribute to karma.
A proposal passes if $proposal_approval_threshold%
of users approve it or it fails if (100-$proposal_approval_threshold)%
of users reject it.
Only tokens of registered users active within $voting_power_activity_weeks
weeks count as participating votes.
To prevent low-quality proposals, if a proposal is rejected with a rejected/adopted ratio of less than $proposal_controversy_threashold%
, the proposer loses $proposal_rejection_penalty
karma points and cycles.
The total voting power of all registered users needed to adopt or reject a proposal decreases daily by 1%
as long as the proposal stays open.
This is achieved by multiplying the total available voting power by the factor d%
with d
being the number of days on which the proposal remained open.
That allows any proposal to pass eventually within 100
days.
Voting is rewarded with $voting_reward
karma points.
While a proposal stays open, the system defers the reward distributions and token minting until the proposal is rejected or adopted.
Every user can invite new users to $name by creating invites charged with cycles. The profile of every invited user shows their "host", s.t. users can be held accountable for their invites.
$name is designed with decentralization in mind which means full autonomy. Hence, $name is automatically creating new storage canisters if it runs out of space. $name also automatically tops up its canisters if they are low on cycles using the ICP from the Treasury. All information on the current state of the system and past events can be found on the dashboard.
Every $name user can be turned into a bot by adding one or more principal ids in the account settings.
Bots are marked with the 🤖 emoji on their profiles.
Those principal ids (canisters or self-authenticating) can then call $name's add_post
method specified in Candid format as follows:
"add_post": (text, vec record { text; blob}, opt nat64, opt text) -> (variant { Ok: nat64; Err: text });
With arguments:
text
: the body text;vec record {text; blob}
: the vector of attached pictures where each tuple contains a blob id and the blob itself; the tuple must satisfy the following requirements:- the id should be shorter than
9
characters, - the blob should contain less than
358401
bytes, - every picture needs to be referenced from the post by the URL
/blob/<id>
.
- the id should be shorter than
opt nat64
: the id of the parent post;opt text
: the realm name.
Note that currently #IC does not support messages larger than 2Mb
in total size.
The result of the add_post
post method will contain the id of the new post if the post could be added successfully, or an error message otherwise.
Bots can only create root posts at the rate 1 post per hour.
$name's code is open source and has a GPL license.
$name's DAO has agreed with a bug bounty program with the following bug classification and corresponding rewards nominated in $token_symbol
.
SEV | DESCRIPTION | PRIZE |
---|---|---|
0 | The bug enables an unsanctioned state mutation affecting the monetary value of user assets like cycles, karma, tokens, the Treasury or critically endanger $name's functionality, autonomy or decentralization. | 1000 |
1 | The bug enables an unsanctioned state mutation affecting important data, like posts, comments, rewards and so on or has a negative but not critical impact on $name's decentralization and autonomy. | 400 |
2 | The bug enables an unsanctioned state mutation but cannot be easily leveraged to endanger $name or its data. | 100 |
If you found a bug that falls under any of these categories, please immediately reach out to stalwarts to coordinate further actions.