• Stars
    star
    162
  • Rank 232,284 (Top 5 %)
  • Language
  • Created almost 4 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

List of verified mappings from Ethereum addresses to social profiles

sybil-list

This repo contains a list of verified mappings that link Ethereum addresses with social profiles (Twitter supported currently).

What is Sybil

Read the Sybil announcement post : https://uniswap.org/blog/sybil/

Sybil is a governance tool for discovering delegates. Sybil maps on-chain addresses to digital identities to maintain a list of delegates. These verified mappings are public and open for anyone to use.

One use case for Sybil is governance systems on Ethereum. Delegates and voters in these systems benefit from seeing real-world identities attached to Ethereum addresses. A interface for governance that incorporates Sybil can be used here https://sybil.org.

Use the Sybil list

A hosted verifier stores entries as part of a JSON blob in verified.json that maps all verified Ethereum addresses to their social usernames. For any address, data is indexed by a platform type.

Schema

A twitter entry for an Ethereum address includes 3 fields of data :

  • handle : the username found in a users tweet
  • tweetID: the id of the tweet (stored as reference for tweet data)
  • timestamp: unix timestamp at time of verification

Consuming the list

The raw JSON can be found at https://raw.githubusercontent.com/Uniswap/sybil-list/master/verified.json.

To use, just fetch the data at this endpoint:

fetch('https://raw.githubusercontent.com/Uniswap/sybil-list/master/verified.json').then(async res => {
  res.json().then(data => {
      console.log(data) // list data 
  })
})

Verifying an Identity

Sybil uses a 3 step process for linking an Ethereum address to a social identity.

  1. User uses their Ethereum private key to sign a message consisting of their social username (Twitter handle, github username, etc).
  2. User posts this signature on their social profile so others can view.
  3. Third parties can recover the signer of the signature found in a social post. For Twitter, a verifier would:
    • Fetch tweet content for a tweet containing a signature
    • Construct signature data using the author of the tweet
    • Parse the signature found in the tweet
    • Using these two inputs, recover a signer address
    • Store this signer as a verified owner of the handle that authored the tweet

Signature Construction

The sybil interface formats signature data according to EIP-712.

The message field for the signature contains just one field, username, which is a string representing the user's social username (Twitter handle, github name, etc). The signature data can be constructed as follows:

const EIP712Domain = [
  { name: 'name', type: 'string' },
  { name: 'version', type: 'string' }
]
const domain = {
  name: 'Sybil Verifier',
  version: '1'
}
const Permit = [{ name: 'username', type: 'string' }]
const message = { username: <include social username here> }
const data = JSON.stringify({
  types: {
    EIP712Domain,
    Permit
  },
  domain,
  primaryType: 'Permit',
  message
})

Signing Data

After constructing the data, signatures are produced using eth personal_sign. This is to allow for hardware wallet support, as signTypedData_v4 is not yet supported by most hardware wallets.

See here for how this is implemented in the Sybile interface.

Recovering a signer and verifying social identity

After obtaining a signature and constructing data based on a username, a verifier can recover an Ethereum address using any of many web3 libraries. This may look something like:

import { recoverPersonalSignature } from 'eth-sig-util'
 
const data = <'construct data as shown above'>
const sig = <'collect signature from social post'>
const signer = recoverPersonalSignature({
    data: JSON.stringify(data), // string format of EIP-712 data
    sig,
})
// if recovered, the signer is now a verified owner of the username used to construct the signature

Hosted Verifier

Verifier repo: https://github.com/Uniswap/sybil-verifier-worker

Users who verify their identities through the Sybil Interface submit data to a cloudflare worker that runs a verification script. If the content in the tweet meets requirements and valid signer is recovered, the signer <-> mapping is added to verified.json in a new commit.

Verify your own list

Users have the option to consume and trust the list provided in this repo, or can run the verification process themselves. Any social profile that has a published, valid, signature can be verified.

These steps describe how to verify a list of mappings on your own:

  1. Collect a list of identities you are trying to verify, aka a list tweetID's containing signatures.
    • One strategy is to collect all tweets that use a relevant Sybil hashtag. These tweets are generated by users verifying on the Sybil interface. The current hashtags are #UNIDelegate and #COMPDelegate.
  2. For each tweetID, follow the steps above to recover signer address
  3. store and use address -> handle mapping

This process can be adapted to support additional social networks in the future (github, telegram, etc)

Future Work / Considerations

Additional Platform Support

Currently the Sybil interface only supports verification through Twitter. Other social media platforms like Github may prove to be useful as well. Support for these will likely be added over time, and new entries will be formatted to exist in one shared JSON file.

More verification channels

Right now the interface is the only easy way for users to verify using Sybil. However, more verification UIs may be built in the future. This could take the form of standalone sites, or verification flows embedded within other web3 UIs.

More Repositories

1

web3-react

A simple, maximally extensible, dependency minimized framework for building modern Ethereum dApps
TypeScript
5,373
star
2

interface

🦄 Open source interfaces for the Uniswap protocol
TypeScript
4,923
star
3

v3-core

🦄 🦄 🦄 Core smart contracts of Uniswap v3
TypeScript
4,386
star
4

v2-core

🦄 🦄 Core smart contracts of Uniswap V2
TypeScript
2,964
star
5

v4-core

🦄 🦄 🦄 🦄 Core smart contracts of Uniswap v4
Solidity
1,810
star
6

v3-periphery

🦄 🦄 🦄 Peripheral smart contracts for interacting with Uniswap v3
TypeScript
1,194
star
7

token-lists

📚 The Token Lists specification
TypeScript
926
star
8

v2-periphery

🎚 Peripheral smart contracts for interacting with Uniswap V2
Solidity
916
star
9

permit2

🔑🔑🔑 next generation token approvals mechanism
Solidity
745
star
10

v4-periphery

🦄 🦄 🦄 🦄 Peripheral smart contracts for interacting with Uniswap v4
Solidity
640
star
11

wallet

Uniswap Wallet is the simplest, safest, and most powerful self-custodial crypto wallet. It is developed by the Uniswap Labs team, inventors of the Uniswap Protocol.
TypeScript
530
star
12

merkle-distributor

📦 A smart contract that distributes a balance of tokens according to a merkle root
TypeScript
497
star
13

v3-sdk

🛠 An SDK for building applications on top of Uniswap V3
TypeScript
453
star
14

v1-contracts

🐍Uniswap V1 smart contracts
Python
438
star
15

v2-sdk

🛠 An SDK for building applications on top of Uniswap V2
TypeScript
427
star
16

universal-router

Uniswap's Universal Router for NFT and ERC20 swapping
TypeScript
408
star
17

v2-subgraph

Uniswap V2 subgraph 📊
TypeScript
399
star
18

smart-order-router

TypeScript
398
star
19

UniswapX

🦄 Gasless ERC20 swap settlement protocol 🦄
Solidity
380
star
20

v3-info

Interface for Uniswap V3 analytics. 📊
TypeScript
378
star
21

v3-subgraph

Subgraph for Uniswap V3
TypeScript
341
star
22

v3-staker

Canonical liquidity mining contract for Uniswap V3
TypeScript
330
star
23

docs

📓 Uniswap V3 docs website
TypeScript
310
star
24

default-token-list

◦ The Uniswap default token list
JavaScript
298
star
25

info

ℹ️ Uniswap v1+v2 analytics
JavaScript
283
star
26

tokenlists-org

A site for browsing featured token lists
JavaScript
175
star
27

routing-api

TypeScript
147
star
28

org-v1

🌐 Uniswap protocol homepage
JavaScript
144
star
29

token-list-bridge-utils

TypeScript
138
star
30

solidity-lib

📖 Solidity libraries that are shared across Uniswap contracts
TypeScript
131
star
31

widgets

TypeScript
124
star
32

examples

TypeScript
124
star
33

governance-seatbelt

Make governance safer
TypeScript
116
star
34

retroactive-query

👀⬅️ Queries for surfacing information about past users of Uniswap
109
star
35

v3-market-depth-study

Market depth calculation for Uniswap v3
Python
107
star
36

swap-router-contracts

Smart contracts for swapping on Uniswap V2 and V3. Superseded by https://github.com/Uniswap/universal-router
TypeScript
102
star
37

unisocks

🧦
JavaScript
101
star
38

v3-polars

Jupyter Notebook
96
star
39

redux-multicall

A React + Redux library for fetching, batching, and caching chain state via the MultiCall contract.
TypeScript
93
star
40

api-deprecated

🔮 Uniswap market data
TypeScript
86
star
41

governance

🏛 Governance contracts for the Uniswap protocol
Solidity
78
star
42

sdk-core

⚙️ Code shared across TypeScript Uniswap SDK versions
TypeScript
77
star
43

universal-router-sdk

TypeScript
77
star
44

hardhat-v3-deploy

Hardhat plugin for Uniswap V3 deployment
TypeScript
75
star
45

sybil-interface

Interface that incorporates Sybil, a governance tool for discovering delegates.
TypeScript
69
star
46

deploy-v3

CLI to deploy Uniswap V3 to any Ethereum compatible network
TypeScript
62
star
47

liquidity-staker

Initial UNI liquidity staking contracts
TypeScript
60
star
48

unisocks-erc721

🧦
Python
52
star
49

sdks

prototype SDK monorepo
TypeScript
44
star
50

v1-docs

42
star
51

uniswapx-sdk

SDK bindings for the UniswapX protocol
TypeScript
40
star
52

uniswapx-parameterization-api

TypeScript
40
star
53

widgets-demo

@uniswap/widgets demo
40
star
54

uniswapx-service

UniswapX Order Service
TypeScript
39
star
55

marketdepth-v3

Uniswap v3 onchain market depth calculator
Solidity
39
star
56

unipig

🦄🐷
JavaScript
38
star
57

v3-new-chain-deployments

Instructions for deploying the Uniswap V3 protocol to new chains after receiving approval from governance.
34
star
58

unified-routing-api

TypeScript
34
star
59

uniswap-first-contract-example

Example code for the smart contract getting started example.
JavaScript
29
star
60

permit2-sdk

TypeScript
29
star
61

old-solidity-contracts

⚠️ DEPRECATED
Python
29
star
62

unisocks-erc20

🧦
Python
26
star
63

v3-core-optimism

Optimism fork of the V3 core contracts
TypeScript
25
star
64

lp-action-contracts

Solidity
25
star
65

sybil-verifier-worker

Cloudlfare worker to verify mappings for Sybil, a governance tool for delegates.
JavaScript
25
star
66

router-sdk

TypeScript
23
star
67

advanced-weth

A smart contract that wraps WETH that adds functionality for transparently dealing in WETH
JavaScript
20
star
68

ethers-rs-mobile

Rust
17
star
69

v3-periphery-optimism

Optimism fork of the V3 periphery contracts
TypeScript
17
star
70

ds-tools

Python
15
star
71

jest-environment-hardhat

TypeScript
15
star
72

conedison

Utilities for Uniswap repositories
TypeScript
13
star
73

extended-token-list

JavaScript
12
star
74

v1-interface

💀 Legacy interface for the Uniswap V1 protocol
JavaScript
12
star
75

returns-comparison-study

Python
11
star
76

mask-app

TypeScript
10
star
77

convert-cidv0-cidv1

GitHub action that converts CIDv0 for IPFS to CIDv1
JavaScript
9
star
78

polygon-bridge

Bridge contract for Polygon
TypeScript
9
star
79

mrkl-drop-data-chunks

The Merkle drop data broken up into chunks of 101 addresses and including a mapping file
TypeScript
8
star
80

fx-comparison-study

R
7
star
81

snapshot-gas-cost

Tiny utility package for snapshotting gas costs
TypeScript
7
star
82

eslint-config

Uniswap ESLint config
JavaScript
7
star
83

analytics

Uniswap analytics
TypeScript
7
star
84

interface-redirects

↪️ Redirects for alternative app.uniswap.org domains
6
star
85

analytics-events

Uniswap analytics events
TypeScript
6
star
86

permit2-dashboard

a dashboard for managing permit2 permissions
TypeScript
6
star
87

replace-vercel-dns-records

GitHub action for replacing Vercel DNS records, particularly useful for IPFS DNSLink TXT records
JavaScript
5
star
88

view-quoter-v3

Solidity
5
star
89

ticketblaster

a whimsical ticketing thing
TypeScript
4
star
90

relayer

Contracts supporting relayed UniversalRouter swaps
Solidity
4
star
91

v1-sdk

🛠 An SDK for building applications on top of Uniswap V1
TypeScript
3
star
92

signer

TypeScript
3
star
93

contracts

Collection of all Uniswap smart contracts
Solidity
2
star
94

interfaces

Solidity
2
star
95

info-redirects

↪️ Redirects for the uniswap.info domain
1
star