SBT-based membership system design

LXDAO SBT Buidler Membership

Requirements

  • We have criteria for Buidlers to join LXDAO
    • Must be a Web3 buidler
      • Believes Web3 can bring a better world
      • Has some skills to contribute to LXDAO
    • Must have enough energy to contribute
      • 5+ hours/week for any buidler
      • 20+ hours/week if you are in a project or core team
    • In line with our Core Values
      • Want to buidl some valuable and meaningful projects in Web3
  • The roles and membership cannot be transferred.
    • We have a vote for accepting a new buidler. After we approved, the membership should not be transferred
    • The membership should be able to
      • Conferred by LXDAO vote
      • Revoked by LXDAO vote or revocation by the owner (quit LXDAO)
      • Transferred after LXDAO community recovery
        • Only if the wallet’s private key leaked
  • Save buidlers information on the blockchain
    • Public contacts and social media (on-chain)
    • Private contacts, like private email (off-chain)
    • Involved Events and Projects (on-chain)
    • Contribution and Points (on-chain)
    • Part of the information can only be managed by LXDAO (on-chain)
      • official granted roles: core, project manager, investor, etc
  • The gas fee as lower as possible and compatible with Ethereum will be better
    • As we gonna have a lot of transactions, but mainly for updating a state on the contract

SBT Contract Design

  • Based on ERC721 NFT ERC 721 - OpenZeppelin Docs
  • Override ERC721 transfer API
    • Can be transferred by the contract owner (LXDAO multi-sig)
    • Cannot be transferred by the token owner
  • Provide Burn API
    • Can be burned by the contract owner (LXDAO multi-sig)
    • Can be burned by the token owner
  • Lock state
    • Can be locked by the contract owner for security reasons. After locked, cannot vote, enroll in projects, and update profile
  • Rich metadata on IPFS
    • Basic public data
    • Involved projects
    • Income
      • LX Points
      • Income

Contract Technical Details

Actions Implementations

Issue the SBT
  • Onboarding session ~20min after voted
  • Generated signature by LXDAO
  • Mint the SBT token with the signature
  • Fill in some information and update on-chain data, generate the new metadata, and update in the contract for that SBT
Update profile
  • Update the profile on the LXDAO website
  • Backend API verifies the authorization
    • Is it updated by LXDAO or the token owner?
    • Is it an official managed field?
  • Generate a signature and new metadata JSON file and upload to IPFS
  • Update in contract with the signature
Revoke or Burn the SBT

By LXDAO:

For those buidlers who are not in line with our values anymore, the community can revoke the SBT:

  • Make a proposal and vote for it
  • Burn the SBT

By the token Owner:

For those buidlers who want to quit LXDAO:

  • Burn by themselves
Enroll in a project
  • Submit an application to the Project Manager
  • Project Manager checks and approves the application, PM generates a signature
  • Enroll the project with the signature, will create a new metadata JSON, and update it into the SBT token

SBT Metadata fields

  • name: nickname
  • description
  • image: SBT avatar chosen by the buidler
  • role: buidler, core, investor, project manager, Onboarding Committee. Granted by LXDAO official
  • skills: skill[]
    • name: skill name, like frontend, backend, design, operation, etc
    • level: Junior, Intermediate, Senior
  • interests: DAO, DeFi, solidity, smart contract, frontend, backend, DevOps, etc. It will be used for project matching.
  • contacts: contact[]
    • name: Twitter, telegram, Facebook, phone, website, email, etc.
    • text: Twitter handle, phone number, website URL, email, etc.
  • projects: project[]
    • project_number: 001, 002, etc
    • project_role: project design, project manager, frontend, full-stack, etc.
    • started_at: enroll time
    • ended_at: quit time
  • lxpoints: lxpoint (will be deprecated after LX Tokens is out)
    • value: number
    • reason: text for the reason
  • extra_data: private off-chain data endpoint, passing authorization token (signature) + SBT token id to the API will get the private extra information

Questions

  • Which blockchain? Ethereum or Polygon or others?