-
Notifications
You must be signed in to change notification settings - Fork 841
Add ERC: Social SBT #924
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
base: master
Are you sure you want to change the base?
Add ERC: Social SBT #924
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,143 @@ | ||||||||
| --- | ||||||||
| eip: 7894 | ||||||||
| title: Social SBT | ||||||||
| description: Social SBT, A Soul-Bound Token for DAO Governance | ||||||||
| author: Ali Bertay SOLAK (@alibertay) | ||||||||
| discussions-to: https://ethereum-magicians.org/t/erc-social-sbt/22363 | ||||||||
| status: Draft | ||||||||
| type: Standards Track | ||||||||
| category: ERC | ||||||||
| created: 2024-01-25 | ||||||||
| --- | ||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
|
|
||||||||
| ## Abstract | ||||||||
| SocialSBT is a non-transferable [ERC-721](./eip-721)-based token standard that integrates a dynamic social point system to enhance DAO governance. Unlike traditional token-based governance, SocialSBT allocates voting power based on social contributions rather than financial holdings, mitigating whale attacks and ensuring equitable decision-making. | ||||||||
|
|
||||||||
| Each SocialSBT token starts with zero social points. Social points are adjusted through a community-driven voting process, where token holders vote on whether to increase or decrease an individual’s points based on their behavior and contributions. This system prevents governance manipulation by large token holders and ensures that influence within the DAO is distributed fairly. | ||||||||
|
|
||||||||
| By enforcing non-transferability, limiting token ownership to one per address, and introducing a community-based voting mechanism, SocialSBT strengthens the integrity of DAO governance and fosters a more community-aligned decision-making process. | ||||||||
|
|
||||||||
| ## Motivation | ||||||||
|
|
||||||||
| Traditional DAOs' economic token-based governance models are prone to manipulation by entities with significant financial resources, undermining the collective interests of the community. | ||||||||
|
|
||||||||
| In typical DAOs, governance tokens are bought and sold on the open market, meaning that a whale can acquire a large number of tokens and use them to dominate voting processes. This enables wealthy individuals or entities to override community-driven decisions simply by purchasing voting power. | ||||||||
|
|
||||||||
| SocialSBT shifts governance influence to social contributions rather than token holdings, mitigating whale attacks and fostering fair participation. However, social points are not automatically granted for actions. Instead, members must contribute meaningfully to the community in ways that encourage others to propose an increase in their social points. Social point adjustments occur through a **community-driven voting process**, where other members decide whether a participant’s contributions merit an increase or decrease in governance influence. This ensures that governance power remains a **collective decision**, rather than an automated metric or financial purchase. | ||||||||
|
|
||||||||
| ## Specification | ||||||||
|
|
||||||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. | ||||||||
|
|
||||||||
| All functions and structures declared in this section MUST be used. | ||||||||
|
|
||||||||
| **Non-Transferability Enforcement** | ||||||||
| - **Disabled Functions**: `transferFrom` and `safeTransferFrom` | ||||||||
| - **Description**: SocialSBT tokens are permanently non-transferable. The standard [ERC-721](./eip-721) transfer functions **MUST** be overridden and disabled to enforce soulbound behavior. | ||||||||
|
|
||||||||
| 1. **Minting Tokens** | ||||||||
| - **Function**: mint() public override payable | ||||||||
| - **Description**: The mint function MUST override the base [ERC-721](./eip-721) implementation to ensure compliance with SocialSBT’s non-transferability and single-token ownership per address. | ||||||||
| - **Constraints**: | ||||||||
| - The caller must pay the exact _price. | ||||||||
| - Each address can own only one token. | ||||||||
|
|
||||||||
| 2. **Deleting Tokens** | ||||||||
| - **Function**: deleteToken(uint256 tokenId) public | ||||||||
| - **Description**: Allows token owners to permanently delete their tokens without refunds. | ||||||||
| - **Constraints**: | ||||||||
| - Caller must own the specified token. | ||||||||
|
|
||||||||
| 3. **Voting on Proposals** | ||||||||
| - **Function**: vote(uint256 votingIndex_, bool choice_) public | ||||||||
| - **Description**: Token holders can vote "yes" (true) or "no" (false) on proposals to adjust social points. | ||||||||
| - **Constraints**: | ||||||||
| - Caller must own a token. | ||||||||
| - Each caller can vote only once per proposal. | ||||||||
|
|
||||||||
| 4. **Ending Voting** | ||||||||
| - **Function**: endVoting(uint256 votingIndex_) public | ||||||||
| - **Description**: Ends voting and adjusts points if the majority votes "yes." | ||||||||
| - **Constraints**: | ||||||||
| - Voting period must have expired. | ||||||||
| - Proposal must be active. | ||||||||
|
|
||||||||
| 5. **Querying Token Points** | ||||||||
| - **Function**: pointOf(uint256 tokenId) public view returns (uint256) | ||||||||
| - **Description**: Retrieves the social points associated with a specified token. | ||||||||
|
|
||||||||
| 6. **Event Triggers** | ||||||||
| - **NewVotingCreated**: Triggered when a voting proposal is created. | ||||||||
| - **VoteEvent**: Triggered when a user casts a vote. | ||||||||
| - **VotingEnd**: Triggered when voting ends. | ||||||||
| - **PointUpdated**: Triggered when token points are adjusted. | ||||||||
|
|
||||||||
| 7. **Voting Struct** | ||||||||
| - **votingIndex**: uint256 | ||||||||
| - **name**: string | ||||||||
| - **description**: string | ||||||||
| - **tokenIndex**: uint256 | ||||||||
| - **point**: uint256 | ||||||||
| - **increase**: bool | ||||||||
| - **yes**: uint256 | ||||||||
| - **no**: uint256 | ||||||||
| - **startDate**: uint256 | ||||||||
| - **endDate**: uint256 | ||||||||
| - **isActive**: bool | ||||||||
|
Comment on lines
+38
to
+86
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd recommend using a solidity interface instead of writing it out in this form. |
||||||||
|
|
||||||||
| ## Rationale | ||||||||
|
|
||||||||
| SocialSBT decouples governance power from token holdings by implementing a community-based governance system. This ensures fairness and prevents undue influence by high-point token holders. | ||||||||
|
|
||||||||
| Unlike traditional DAOs, where governance power is directly tied to the number of tokens held, SocialSBT enforces a **contribution-based governance model**. However, social points are **not automatically assigned** when a user contributes. Instead, members must perform valuable actions that prompt the community to initiate a voting process to recognize their efforts. This approach ensures that social points are **collectively decided and transparently adjusted** rather than arbitrarily awarded. | ||||||||
|
|
||||||||
| Here’s how SocialSBT mitigates whale attacks in practice: | ||||||||
|
|
||||||||
| 1. **Non-transferable tokens**: Since SocialSBT tokens cannot be bought or transferred, governance power cannot be acquired through market purchases. | ||||||||
| 2. **Community-driven social point adjustments**: Social points are not automatically granted. Instead, a proposal must be initiated and approved by the DAO community for a member’s points to increase or decrease. | ||||||||
| 3. **Contribution-based voting power**: Only members who provide meaningful contributions can gain governance influence, and these contributions must be recognized by the community through an **on-chain voting process**. | ||||||||
|
|
||||||||
| Because SocialSBT ensures that governance influence is directly linked to community engagement rather than wealth, whales cannot manipulate voting outcomes by simply acquiring tokens. This system reinforces democratic participation and aligns decision-making with the collective interests of the DAO. | ||||||||
|
Comment on lines
+90
to
+100
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Most of this belongs in Motivation. The Rationale section should explain technical decisions made while writing the proposal, where the Motivation section justifies the proposal as a whole. My favourite analogy is:
|
||||||||
|
|
||||||||
| ## Backwards Compatibility | ||||||||
|
|
||||||||
| SocialSBT extends the [ERC-721](./eip-721) standard while remaining compatible with its core functionalities. However, it introduces non-transferability and a social point mechanism, which deviate from the standard. | ||||||||
|
|
||||||||
| ## Test Cases | ||||||||
|
|
||||||||
| 1. **Minting Tokens** | ||||||||
| - Expected: Successful minting for eligible users. | ||||||||
| - Failures: | ||||||||
| - User already owns a token. | ||||||||
| - Payment amount does not match _price. | ||||||||
|
|
||||||||
| 2. **Voting** | ||||||||
| - Expected: Correct vote recording and prevention of duplicate voting. | ||||||||
| - Failures: | ||||||||
| - Non-token holder participation. | ||||||||
| - Duplicate votes on the same proposal. | ||||||||
|
|
||||||||
| 3. **Ending Voting** | ||||||||
| - Expected: Accurate point adjustment based on majority votes. | ||||||||
| - Failures: | ||||||||
| - Ending before expiration. | ||||||||
| - Inactive proposals. | ||||||||
|
|
||||||||
| 4. **Burning Tokens** | ||||||||
| - Expected: Permanent token removal. | ||||||||
| - Failures: | ||||||||
| - Unauthorized burn attempts. | ||||||||
|
Comment on lines
+108
to
+129
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Test cases should be either simple inputs and outputs (i.e. function calls and state changes) or actual coded unit tests. |
||||||||
|
|
||||||||
| ## Security Considerations | ||||||||
|
|
||||||||
| SocialSBT ensures secure governance through: | ||||||||
| - **Non-transferability**: Prevents token trading and governance manipulation. | ||||||||
| - **Fair voting**: Independent of social points. | ||||||||
| - **Mitigation of whale attacks**: Restricts tokens to one per wallet. | ||||||||
| - **Non-refundable burning**: Discourages exploitative behaviors. | ||||||||
|
|
||||||||
| Needs discussion. | ||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
|
|
||||||||
| ## Copyright | ||||||||
|
|
||||||||
| Copyright and related rights waived via [CC0](../LICENSE.md). | ||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your title and description need some work. "Social SBT" gives no useful information about the token, and your description is mostly repeating your title or expanding SBT. Try to make your title unique and meaningful, and your description should expand on your title instead of simply repeating it.