• Stars
    star
    159
  • Rank 234,581 (Top 5 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated almost 3 years ago

Reviews

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

Repository Details

Playground for us to try out new ideas, specifically around Identity (ERC 725) & the Origin Marketplace

Origin Protocol

Head to https://www.originprotocol.com/developers to learn more about what we're building and how to get involved.

Origin Identity Playground


Warning! This repo contains only our protoyping work around ERC 725. It is now out of date and should not be used. Our current identity contracts are here.


This app is a working implementation of the ERC 725 and ERC 735 proposals for managing a unique identity on the blockchain.

Using ERC 725, a smart contract can protect function calls from being executed unless the sender has a verified claim from a trusted issuer.

Live Demo

You can try a deployed version of this app at http://erc725.originprotocol.com/#/

It has several Certifiers pre-populated that are not present when running the demo locally.

The screenshot walkthrough below shows an example of verifying a claims of a person's identity.

Explanation

Imagine we want to deploy a Listing contract to sell a concert ticket, but only allow interactions from users with a verified email address. How can we accomplish this with ERC 725?

First, lets define the entities that will be interacting:

  • The Consumer is an identity who wants to buy the ticket.
  • The Issuer is an identity which issues claims of type 'EMAIL_VERIFIED'.
  • The Listing will only allow Consumers with an EMAIL_VERIFIED claim from an Issuer they trust.

This leaves us with a few questions...

  1. How does the trusted Issuer verify an email address?
  2. How does the Consumer get an EMAIL_VERIFIED claim onto their Identity?
  3. How can the Listing verify that the Consumer has an EMAIL_VERIFIED claim from a trusted Issuer?

To answer these questions, lets go through the process of setting up all the required contracts and services, starting with the Issuer.

The job of the Issuer is to act as a trusted third party. In the future, trusted organizations may deploy their own Issuer identity contracts onto the blockchain, which third parties can then trust. Origin plan to offer their own basic Issuer contracts for verifying email addresses, phone numbers, Facebook accounts, Twitter accounts, etc. Third parties will then be able to trust that these Origin Issuer contracts only issue claims if they are, in fact, true.

How will an email verifier work? A typical verification service may involve an application, for example http://example.com/verify-email. This application will have a standard interface for verifying an email address, whereby a user is sent an email with a special code which they then submit back to the application. Now that the email address has been verified, it can be signed with a private key known only to the email verifier app. The corresponding public key is on the issuer's identity. This is how a claim is verified.

More explanation to follow...

Walkthrough

  1. Screen upon loading

image

  1. Confirm that the first wallet ID is active. (0x313AaD in our screenshot) We are playing the role of a person who desires a blockchain identity.

  2. Click "Add an Identity" and deploy an identity contract with name "Alice".

image

You can see the address of the contract, as well as the wallet ID of the owner.

  1. Switch the active wallet to the second. (0x56BEaa in our screenshot) We are now playing the role of a service that can verify a GitHub account.

  2. Click "Add a Certifier" and deploy a certifier contract called "Github". For now we'll use an example URL for our service.

image

Again, you should see the address of this contract, and the walled ID of the owner of this contract.

  1. Switch the active wallet to the third. (0xCd5e74 in our screenshot) We are now playing the role of an eBay-like application that wants to restrict access to only people with verified Github accounts. (A marketplace for developers, perhaps!)

  2. Click "Add a Protected Contract" and deploy a contract called "Listing" with certifier of "Github". This is the contract which will be limited to interacting to people with verified Github accounts.

image

  1. The screen should now look like this.

image

  1. Switch to the first wallet, belonging to "Alice".
  2. Click on the "Listing" contract.
  3. Click on "Run Protected Method", and switch the desired Claim Type to "Has GitHub",

image

  1. After clicking on "Check Claim", you should see that the claim is returned as ClaimInvalid. At this point, Alice has no proof that she has a GitHub account.

image

  1. Switch to the second wallet, and click on "GitHub" under "Certifiers".

  2. On right column, click on the "+" next to "Claims" to add a claim.

  3. Switch the "Claim Type" to "Has Github" and click "Add Claim".

image

  1. Switch to the first wallet, and click on the "Alice" identity.

  2. In right column, you should see the claim by our "Github" Certifier (from pervious step) that she has a GitHub account. Click "Approve" to accept this claim to Alice's identity.

image

  1. Alice now has on-chain proof of her GitHub!

image

  1. Now click the "Listing" under "Protected Contracts", and then click on "Run Protected Method". Change the "Claim Type" to "Has Github"

  2. You should see that this claim is returned as ClaimValid*.

image

Alice is ready to start shopping!

Installation

npm install
npm start

Tests

npm run test

Related

Credits

More Repositories

1

origin

Monorepo for our developer tools and decentralized marketplace application
JavaScript
652
star
2

security

Materials related to security: docs, checklists, processes, etc...
Solidity
199
star
3

dshop

Origin Dshop - launch your own decentralized store
JavaScript
138
star
4

origin-dollar

OUSD and OETH are stablecoins that passively accrue yield while you are holding it
JavaScript
116
star
5

telegram-moderator

Telegram bot for controlling spam, logging, and more
Python
113
star
6

origin-js

We've moved to a monorepo: https://github.com/OriginProtocol/origin
JavaScript
81
star
7

origin-website

The code powering our website
HTML
40
star
8

react-native-samsung-bks

React Native wrapper for Samsung Blockchain Keystore SDK
Java
16
star
9

origin-bridge

We've moved to a monorepo: https://github.com/OriginProtocol/origin/tree/master/infra/bridge
Python
15
star
10

minimal-proxy-example

An example implementation of a Minimal Proxy | EIP-1167
JavaScript
11
star
11

ousd-governance

OUSD Governance Portal and Contracts
Solidity
11
star
12

ousd.com

Frontend for ousd.com
TypeScript
11
star
13

nft-launchpad

Contracts for Origin's NFT platform
JavaScript
10
star
14

origin-tracer

Ethereum transactions visualization tool
TypeScript
9
star
15

origin-docs-archived

We've moved to a monorepo: https://github.com/OriginProtocol/origin/tree/master/docs
JavaScript
9
star
16

ousd-analytics

Web application to pull statistics on OUSD from the blockchain.
Python
8
star
17

website-frontend

originprotocol.com front-end
JavaScript
6
star
18

origin-box

We've moved to a monorepo: https://github.com/OriginProtocol/origin/blob/master/DEVELOPMENT.md
Shell
5
star
19

origin-defi

Origin Protocol frontend monorepo
TypeScript
4
star
20

origin-mobile

We've moved to a monorepo: https://github.com/OriginProtocol/origin/tree/master/mobile
JavaScript
3
star
21

origin-squid

Origin Subsquid
TypeScript
3
star
22

wash-inspector

NFT trade analytics tool that identifies NFTs that have been wash traded.
TypeScript
2
star
23

origin-schemas

Example Origin listing schemas
2
star
24

civic-proxy

Handles the decrypting of user information being returned from Civic
JavaScript
2
star
25

origin-monorepo

The Origin Protocol monorepo for dApps and resuable packages across the organization
TypeScript
2
star
26

origin-devops

We've moved to a monorepo: https://github.com/OriginProtocol/origin/tree/master/devops
2
star
27

test-builds

Test builds of the Origin dapp
CSS
2
star
28

oeth.com

Frontend for oeth.com
TypeScript
2
star
29

origin-squid-notifications

Subsquid for Notifications
TypeScript
2
star
30

ousd-compensation-calculation

Scripts, utilties, and data for the OUSD attack compensation
Python
1
star
31

telegram-discord-bridge

JavaScript
1
star
32

stolen

Literally the Worst Idea
JavaScript
1
star
33

origin-dollar-docs

Official documentation for OUSD. This repo is used to sync changes between Crowdin and Gitbook.
1
star
34

origin-how-to

1
star
35

oeth-dapp

The dapp for oeth integration
TypeScript
1
star
36

origin-cms

JavaScript
1
star
37

veogv

Solidity
1
star
38

story.xyz

Story.xyz frontend using Next.js
TypeScript
1
star