# VESS.id

VESS is now beta version.

## Decentralized Identity and Verifiable Credentials for Business

VESS provides the DIW(Decentralized Identity Wallet) called "VESS Wallet" and Verifiable Credential management tool called "VESS Credentials" built on top of[ **Ceramic Network**](https://ceramic.network/), a decentralized data network protocol. Users can own and manage all of their data by **attaching them to their DIDs** and carry them around without being restricted to a specific platform, organization, or blockchain.&#x20;

### :rocket: Getting Started&#x20;

#### :beginner:Tutorials

You can easily try VESS along with a tutorial below.

{% content-ref url="/pages/1Xkqx3GnP03oM1wDnTdb" %}
[Create your first VOXEL](/tutorials/create-your-first-voxel)
{% endcontent-ref %}

#### :school: Learn More

▶︎ If you want to read about VESS concept, please refer to this page.

{% content-ref url="/pages/aIPp1d7uZYIdaF55xOzY" %}
[Background](/basics/background)
{% endcontent-ref %}

▶︎ If you want to know how VESS works, you can learn the overview of VESS system briefly with a link below.

{% content-ref url="/pages/LXyyIjphtr9UQmsccpUZ" %}
[How does it work](/basics/how-does-it-work)
{% endcontent-ref %}

▶︎ If you are interested in VOXEL appearance, please click below.

{% content-ref url="/pages/e81X076jp10ZggbohI0y" %}
[VOXEL](/basics/voxel)
{% endcontent-ref %}

### :family: Join our Community

* **Discord:** <https://discord.gg/aXM7QD2brg>
* **Twitter:** <https://twitter.com/vess_id>
* **Substack:** Coming Soon
* **Youtube**: Coming Soon


# Background

## The Road To Self-Sovereign Identity

### Introduction

The [Soulbound Token ](https://vitalik.ca/general/2022/01/26/soulbound.html)concept proposed by Vitalik and the [DeSoc](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4105763) concept suggest the need for non-transferable data tied to individuals. While these ideas are in the very early stages, the battle over our personalized "Identity" has been going on for decades.

Standards and technologies such as SAML, OAuth, and OpenID Connect have enabled services to provide a higher UX for the identity infrastructure on the Web, and have enabled User-Centric systems where users can handle only the data they have authorized.

As a result, however, we now need an Identity Provider (IdP), a big tech company like Google or Facebook, to handle our identity. This poses a big problem. For example, if a fire breaks out in the data center of an IdP or a major system failure occurs, our identities will be lost, we will not be able to log in to services that we were able to log in to before, and we will not be able to access important information that we have stored.

Because of these problems, the concept of Self-Sovereign Identity has been fundamental in the field of Identity since the early days of the industry. This is the idea that identity, which is information that represents a user, should be owned by the user himself/herself without relying on a third party, and that the user should be able to edit and share the information.

In recent years, with the development of blockchain technology and the Snowden’s scandal, the idea that our identities should be self-sovereign has become even more prevalent.

### DID and Ceramic Network

[DID (Decentralized Identifier)](https://www.w3.org/TR/did-core/) is a solution that brings our identity one step closer to Self-Sovereign. DIDs allow us to create our own IDs and update or delete them under our own control, whereas before we could only create IDs through IdP.

DID is not constrained to use distributed ledger technology such as blockchain, but it is compatible with such technology, and various DID methods have been proposed and implemented, such as creating a DID from an individual's wallet.

Now, can DID make our identity Self-Sovereign? The answer is somewhere between Yes and No. Certainly, identity may come to be under our own control. However, DIDs alone will not allow us to own the information that makes up an individual, such as age, region of residence, driver's license, passport, website browsing history, purchase history, and so on. The blockchain is not suitable for storing large amounts of information because it has very strict storage capacity limitations.

[The Ceramic Network](https://ceramic.network/) is a distributed data storage network built on [IPFS](https://ipfs.io/). Normally, IPFS does not allow modification or deletion of stored data, but the Ceramic Network system makes it possible to edit such data. Another unique feature of the Ceramic Network is that the storage is tied to an individual's DID, which allows users of the Ceramic Network to access their data using their DID.

Yes, by using the Ceramic Network, a mechanism will be constructed to decentralize and manage the vast amount of personal data tied to the DID, which is lacking from the DID alone. We believe that the Ceramic Network will be an important factor to realize a truly Self-Sovereign Identity.

## CV on the web3

### Conventional CV

Everyone has written his or her own CV at least once. Whether it is for a part-time job interview or a job offer, we write a CV so that we can appeal our performance maximum while appropriately recalling our background for various situations.

However, this may not be the information that the company or organization interviewing you is really looking for, and the person writing the resume may not be able to recall all of his/her background and skills, nor can he/she write them all down due to paper space limitations.

Even if a CV writer can perfectly understand the information a company is looking for, can recall his/her entire background, and can write it all down on an endless sheet of paper, the next problem is the endless reference checks. Companies that want to hire people spend enormous amounts of money each year trying to determine whether that CV is true or not.

### CV2.0 with VESS

VESS solves these problems and provides a new form of CV. VESS allows the user's on-chain transactions to be used as the basis for storing the type of work that was undertaken online and the deliverables tied to the individual's DID. By using a transaction-based system, it is impossible to falsify the fact that a job has been accepted or ordered, and by capturing the details of the job and the signature of the deliverables, it is also impossible to falsify the contents of the job, eliminating the need for companies and other employers to take reference checks.

Of course, individuals can enter their own works in VESS by themselves, or a company or DAO can issue achievements to a job receivers. In addition, with the VESS API/SDK, it is also possible to create a system that automatically issues achievements when a job is ordered or received on the job marketplaces or platforms.

The work credentials created with VESS can be shared with any services or platforms through [the Ceramic Network's SDK](https://developers.ceramic.network/reference/self-id/). For example, a work credential created on one crowdsourcing site can be carried over to another crowdsourcing site, and can be easily shared with others on Twitter or Discord.

Another important feature of the VESS system is that each "work" is issued as a [VOXEL](/basics/voxel), a 3D cube that visualizes the CV. This system is expected to make new effects not seen in conventional CVs, such as making it possible to refer to personal histories more intuitively and allowing users to visualize their own work histories and get a bird's-eye view of them.

VESS will bring greater flexibility, portability, and self-sovereignty to personal work identities, allowing individuals to find new utility and convenience in their work history.


# Why VESS?

### Self-Sovereign Work Credentials

VESS uses the Ceramic Network to create the self-sovereign work history by storing it, previously siloed and closed within services and platforms, in the decentralized storage tied to an individual's DID. It then works as composable data that can be shared and referenced on any platform.

{% content-ref url="/pages/uwQqfZ185eSlqw30tdvP" %}
[Work Credential Data-Model](/advanced/work-credential-data-model)
{% endcontent-ref %}

### Visualized Identity

One of the unique points of VESS is that identities are visualized. By visualizing, you can intuitively understand what kind of person other ones are. Also, by visualizing information that is part of yourself, you can observe yourself objectively, and you may notice things about yourself that you were not aware of, or find the person you should be aiming for.

{% content-ref url="/pages/e81X076jp10ZggbohI0y" %}
[VOXEL](/basics/voxel)
{% endcontent-ref %}

### Composability

In the future, functions such as VOXEL generation, reference, and sharing will be easily composable to external services and platforms via SDK/API provided by VESS.


# VOXEL

### What's VOXEL?

VOXEL is a single **visualized Work Credential.** Your work credential, stored in distributed storage, is represented as a colorful 3D cube on the VESS application.

In other words, the VOXEL is the smallest unit of your entire work history.

### Properties

VOXEL is visualized based on several properties in Work Credential. The properties are as follows in the beta version

* Presence of deliverables
* Presence of signatures of both Sender and Receiver
* Job titles

And as shown in the table below, "Presence of deliverables" corresponds to "Presence of internal cube" in VOXEL, "Presence of signatures on both sides" corresponds to "Vividness" in VOXEL, and "Job titles" corresponds to "Hue".

In the future, we plan to change the look and feel depending on the rewards for the work, the validation of the deliverables, and the platform on which the escrow took place.

If you want to know more detail about the job titles-Hue correspondence, please refer to below.

{% content-ref url="/pages/cozLvXivDDLQhyytey9h" %}
[Visualization Protocol v0.1](/advanced/visualization-protocol-v0.1)
{% endcontent-ref %}

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2Fw81oneSuJidUpZ7hdi9C%2FSlide%2016_9%20-%201.jpg?alt=media\&token=094415f1-9dbd-4015-bbad-52117600e9cb)

### Trustworthiness

VOXEL not only shows job titles it was by its appearance, but also allows you to see the level of trust in the work. Based on the presence or absence of deliverables and the signatures of both the Sender and Receiver, the trust map looks like the following.

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FSfJcLgc70IF2g2w3CX8g%2FFrame%2049.png?alt=media\&token=3c3c6a81-4ef3-4a81-af96-a31a223ba9ea)


# How does it work

## Work Credential

VESS stores work credentials in Ceramic Network's DID Datastore. work credentials consist of the [data model](/advanced/work-credential-data-model), which includes wallet addresses of a client and a worker, as well as the details of the work (task, genre, amount, etc.).&#x20;

In addition, the trustworthiness of the data can be enhanced by adding a link to the deliverable (URL) or the deliverable data (stored in IPFS). (Recommended)&#x20;

To ensure the trustworthiness of the data, the Work Credential contains signatures signed with the respective private keys of a payer and a payee of the transaction, so that by verifying the signatures of a payer and a payee, a third party can determine if the work credential is correct.&#x20;

## How to issue work credential?

There are 3 main ways for users to issue work credentials.

### 1. Issue from an existing transaction

To issue a Work Credential from an existing FT or NFT transaction, select the transaction from the [VESS website](https://app.vess.id/), enter the deliverables and other work data, and sign the transaction. The other party to the transaction (would be the payee if you are the payer) signs the transaction, and the work credential is issued.

( NFT transactions are limited to NFTs related to jobs, evaluations, etc. This feature is currently under development. )

### 2. Issue at the same time as payment (currently under development)

When making an on-chain payment, you can issue a work credential by inputing work data such as deliverables at the same time. In that case, a work credential is the so-called **delivery note / receipt**.

### 3. Third party acts as Issuer and issues Work Credential (currently under development)

DAO or a specific organization acts as Issuer and issues Work Credential, which is similar to **Verifiable Credential**.

## Decentralized Database

Work credentials are stored in the Ceramic Network, so anyone can access them.

Currently, all work credentials are public, but in the near future the VESS team plans to implement **a system to encrypt data that users do not want to make it public**.

In addition, VESS team plans to build a **decentralized database of work credentials**. We would like to build a **marketplace** where users can sell the right to refer their work credential data to the clients.

###


# Roadmap

Since we cannot perfectly predict what the web3 world will look like in the future, we only provide a rough roadmap.

## 🟨 2022

### Q1

* [x] Alpha version(C-Voxel) Release
* [x] Listing on Gitcoin GR 13

### Q2

* [x] 1st Fundraising
* [x] Listing on Gitcoin GR14

### Q3

* [x] VESS beta Release
* [x] Collaboration with Orbis
* [x] Listing on Gitcoin GR15

### Q4

* [x] VESS SDK MVP Release
* [x] Listing on Gitcoin GR16

## 🟧 2023

* [ ] VESS SDK/API Release
* [ ] VESS Job marketplace Release
* [ ] Expanding Ecosystem
* [ ] 1M user's work identity

## 🟥 2024

* [ ] Holding VESS Hackathons
* [ ] 100M user's work identity


# Terminology

### VOXEL

VOXEL is a **visualized work credentials.** In VESS, your work credentials is visualized as colorful 3D cube. If you want to know more about VOXEL, please visit below.

{% content-ref url="/pages/e81X076jp10ZggbohI0y" %}
[VOXEL](/basics/voxel)
{% endcontent-ref %}

### Sig. request

Sig. request is a signature request from who created VOXEL. VOXEL's trustworthiness gets higher if signatures of both of Tx sender and receiver are attached rather than a signature of one side are attached. So, when a VOXEL created by one side, a sig. request to the VOXEL is sent to the other side simultaneously.


# Create your first VOXEL

Here, we explain how to create your first VOXEL.

### 1. Connect your wallet

As same as other dApps, you need to connect your wallet at first.

{% hint style="warning" %}
Currently, Ethereum mainnet and Polygon mainnet are supported.
{% endhint %}

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2F2tr46XfSX8OOgCB4EvXB%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20025149.jpg?alt=media\&token=83d9cc36-a771-4a7a-8c04-27218945bf95)

### 2. Scroll down the screen

Please scroll down your screen, then you can see your VOXELs. If you have no VOXEL yet, such this screen below would be displayed.

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2F56gFQ0wcdQTQJGJwGPre%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20025456.jpg?alt=media\&token=801fddc0-3e11-4aad-98ec-2b93dccda49f)

### 3. Move to the transactions tab

Press "Transactions" on the navigation rail and move to your transactions list.

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FwnzIfo89JbEGsE3vXd2d%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20030410.jpg?alt=media\&token=ccd00e44-552f-4bf6-98d4-d1a2cf1b472f)

### 4. Select a transaction and fill your work detail

Select a transaction in transactions list and fill its detail of work like below.

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FlFx4df28anq7swFw7lik%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20031011.jpg?alt=media\&token=26943032-0bbf-4071-9663-ffb21050e6db)

### 5. Press the Create Button

At last, press the create button at right bottom of your selected transaction card.&#x20;

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FUS9KMLCfjxRUKLbYZNpT%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20031457.jpg?alt=media\&token=308dd950-5b5b-42cf-9444-6de61b7a4d42)

### 🎉 Your first VOXEL has been created!! 🎉

If the VOXEL is created successfully, it would be visualized like this. On upper screen! \
Congrats ⭐

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FkXmb3RtnmTYhwPDe9eCk%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-08-17%20031554.jpg?alt=media\&token=0cf44ea7-0d5b-428e-9547-573e44232303)

&#x20;


# Share your VOXELs

{% hint style="info" %}
Coming Soon...
{% endhint %}


# Search Other One's VOXELs

{% hint style="info" %}
Coming Soon...
{% endhint %}


# Dework Integration

This function is still in beta

You can easily issue **work credentials** from completed tasks on **Dework**. Here is how to do it.

### Connect your Dework Account

First, Make sure you have connected the metamask to Dework. You can check it on your **setting** page on [**Dework**](https://app.dework.xyz/)**.**

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2F7ivcrYjfirDDM3sjaFuT%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-05%2018.11.28.png?alt=media&amp;token=7bc1fa3f-71c2-43ab-85d3-5cd4d9fdb84b" alt=""><figcaption><p>Setting</p></figcaption></figure>

Open [VESS](https://app.vess.id/), and enter your Dework username.

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2Fyhtv8kk7wRuLD9KhH8oE%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-04%2016.28.09.png?alt=media&amp;token=dacc6b5f-5fc1-4075-927f-1ce62c8f5988" alt=""><figcaption><p>your dework profile page</p></figcaption></figure>

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FdtnE8DgkkpvBoUrQNxs3%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-04%2016.31.51.png?alt=media&amp;token=ba04cbc8-1d65-4a12-847b-d07d3f6866fb" alt=""><figcaption><p>VESS profile</p></figcaption></figure>

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FDKpsMylhJnh9PUTTmGMr%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-04%2016.32.06.png?alt=media&amp;token=55169332-b991-4b21-9f9e-71fe368baf85" alt=""><figcaption><p>Enter your Dework username</p></figcaption></figure>

### Pick your works to issue credential

Once your Dework account is connected successfully, you will see a list of your completed tasks. Select the task for which you want to issue credentials and press the "Issue Credential" button.

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2Fgadcvj0gjPW9Vr24e3Wq%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-05%2018.29.29.png?alt=media&amp;token=09ec9d41-a6ec-4ed1-a33b-6b1798dcb727" alt=""><figcaption><p>pick and issue credentials</p></figcaption></figure>

Tasks that do not have a skill property set on Dework cannot be issued as a credential on VESS. In that case, please set one genre before issuing credentials.

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2Fjpt2Htp1oQBcR0HkN0p9%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-05%2018.29.44.png?alt=media&amp;token=22523474-8e26-42e3-aeb0-aa883c60a175" alt=""><figcaption><p>select genre</p></figcaption></figure>

**That's it!** It will take a little time, but please stay tuned. If successful, your task will be issued as Work Credentials. **Congratulations!**&#x20;

<figure><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FJOvRyIT2jsZmQvOnYe79%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202022-10-05%2018.36.42.png?alt=media&amp;token=42ea83cf-0812-4ee3-bd34-3649e6c98f0a" alt=""><figcaption></figcaption></figure>


# for Personal

### Deeply Knowing Each Other

One of the typical uses of VESS is **sharing among individual VOXELs**. Let's say, for example, that today you have connected with someone you have never met before on Twitter. You don't yet know what kind of personality they are, nor can you imagine what kind of background they have.&#x20;

What if you had enough VOXELs in VESS that you could easily send them a link to your VOXELs using VESS's Share function, so you could learn about them and they could learn about you and your background?

If you don't have time to look at each of their VOXELs, VESS's visualization protocol allows you to get a quick idea of what kind of background they have. For example, if there are a lot of blue VOXELs, he is an "engineer". If there are many purple VOXELs, he is probably an "NFT artist. If there are more VOXELs with small cubes inside, he is someone with a more reliable career.

Thus, if you are an individual, you can learn more about someone you just met through VESS's easy sharing function and visualization protocol.

### VOXELs are Your Own CV

Another way to use VESS is that your **VOXELs are themselves your CVs**. If you are looking for a job or have an interview at a DAO or organization, you can share your VOXELs with the DAO or organization management in the same way as described above to let them know about your background without having to create a special resume each time. Furthermore, since VOXELs are like a reference-checked CV, they can be presented with more credibility than a traditional paper resume.

### 🔰 Tutorial of Sharing VOXELs

{% content-ref url="/pages/jh6YjcmlYwwui9RIYA9Q" %}
[Share your VOXELs](/tutorials/share-your-voxels)
{% endcontent-ref %}

▶ ︎If you want to know about VOXEL visualization, please visit below.

{% content-ref url="/pages/e81X076jp10ZggbohI0y" %}
[VOXEL](/basics/voxel)
{% endcontent-ref %}


# for DAO Managers

### Hiring Contributors Most Effectively

'This guy says he's going to be our contributor, but what skills does he have!' . 'There are many members on Discord, but I have no idea what kind of career they have..." —— If you are a DAO manager you have probably felt this problem at least once.

Once you have collected the Wallet addresses of your community members through surveys or airdrops, you can view all of the members' background at once through VESS's search function and API (currently under development).

From now on, you will be able to immediately learn more about the skills and careers of those who say "I want to work with you!

### Using VESS More Flexibly

We are currently developing some further useful functions for DAOs so that they can make more effective use of VESS. Look forward to it! 🔥

### 🔰 Tutorial

{% content-ref url="/pages/tmDbGjLPFC8SgifMBoJV" %}
[Search Other One's VOXELs](/tutorials/search-other-ones-voxels)
{% endcontent-ref %}


# for Job Marketplace

### **Boost Your Service**

It may be a bit limited, but if you are planning to run a job marketplace on the web3 now, there is no reason not to use VES&#x53;**.** The SDK/API (currently under development) provided by VESS can be used to present many of the worker's careers and skills from the very beginning of the service.

### Connecting All Careers of Any Platforms

Of course, it is no different for job marketplaces, which already have many users. There are still various job marketplaces and job bounty platforms, but workers' work histories are closed within each platform and cannot be carried over to other platforms.

Using VESS, the barriers between platforms can be broken down, and the work history developed on other platforms can be shared across all environments, minimizing worker resistance to the new environment.


# Overview

WIP

**VESS KIT SDK** is a typescript library that makes it easy to work with DID/VC on VESS.

VESS content is stored in Ceramic Network, a decentralized data network, and VESS's private. cloud server. This means that data shared by users is open and available to the public.

## Install

#### Frontend

```
pnpm add vess-kit-core vess-kit-web 
```

#### Backend

```shell
pnpm add vess-kit-core vess-kit-node 
```

## Getting started

### Initialize

#### Frontend

```typescript
import { getVESSKit } from 'vess-kit-web'

const vessKit = getVESSKit()
```

#### Backend

```typescript
import { getVESSKit } from 'vess-kit-node'

const vessKit = getVESSKit()
```

### Connect ComposeDB/Ceramic

#### Frontend

```javascript
import { getVESSKit } from 'vess-kit-web'

const isDev:boolean = true
const env = isDev ? 'testnet-clay': 'mainnet'
const address = "0x....."
const provider:Web3Provider = new Web3Provider() //any web3 provider
const vessKit = getVESSKit(isDev)

const { session } = await vess.connect(address, provider, env)


```

#### Backend

```javascript
import { getVESSKit } from 'vess-kit-node'

const isDev:boolean = true
const address = "0x....."
const provider:Web3Provider = new Web3Provider() //any web3 provider
const signer = provider.getSinger()
const vessKit = getVESSKit(isDev)

const didSession = await vessKit.connect(
        address,
        async (message) => {
          const signed = await signer.signMessage(message)
          return signed
        },
        isDev ? 'testnet-clay':'mainnet',
      )

```

### Next steps:

**For more infomation, please check below.**

{% content-ref url="/pages/1lunqCuMhJrDT9Cpk5KA" %}
[API Documentation](/vess-sdk/api-documentation)
{% endcontent-ref %}

**Please visit here for an example of VESS-KIT usage.**

**VESS:** [**https://app.vess.id/**](https://app.vess.id/)

**Github:** [**https://github.com/cvoxelprotocol/vess-kit**](https://github.com/cvoxelprotocol/vess-kit)


# API Documentation

WIP

{% content-ref url="/pages/85LxSbjKmJfkn7Fer3vb" %}
[V2](/vess-sdk/api-documentation/v2)
{% endcontent-ref %}


# V2

{% content-ref url="/pages/NQv4z01qyueFqJOiWPfz" %}
[Auth](/vess-sdk/api-documentation/v2/auth)
{% endcontent-ref %}

{% content-ref url="/pages/ps7CkLy7EFaSgi1PcW1i" %}
[Get](/vess-sdk/api-documentation/v2/get)
{% endcontent-ref %}

{% content-ref url="/pages/L0LB6AcAUevVhTNGODOr" %}
[Create](/vess-sdk/api-documentation/v2/create)
{% endcontent-ref %}


# Auth

{% content-ref url="/pages/jXwUMJPWg6kAhNDzZZIr" %}
[connect()](/vess-sdk/api-documentation/v2/auth/connect)
{% endcontent-ref %}

{% content-ref url="/pages/qv7Mp89WklKmMmxaMi1I" %}
[Disconnect()](/vess-sdk/api-documentation/v2/auth/disconnect)
{% endcontent-ref %}


# connect()

connects to Ceramic

### How to use?

```javascript
import { ExternalProvider } from "@ethersproject/providers";
import { getVESS } from "vess-sdk"

const isDev:boolean = true // set environment
const provider:any // any ethereum provider that is already connected
const address = "0x....."

const vessKit = getVESSKit(isDev) // initialize vess kit
const { session } = await vessKit.connect(address, provider, isDev ? 'testnet-clay': 'mainnet')const { session } = await vess.connect(provider)
```

### Parameters

address: wallet address

***provider:*** ExternalProvider : web3Provider

**env**: "mainnet" | "testnet-clay" `Optional` Specifies the Ceramic connection point. Default is mainnet.

### Examples

```javascript
import { Connector, useConnect, useDisconnect } from 'wagmi'
import { getVESSKit } from 'vess-kit-web'

const { connectAsync } = useConnect()

const loginWithWallet = async (connector?: Connector<any, any>) => {
    try {
      // connect wallt and get provider with wagmi (or any other services)
      const res = await connectAsync({ connector })
      const provider = await connector?.getProvider()
      
      const isDev:boolean = true // set environment
      const vessKit = getVESSKit(isDev) // initialize vess kit
      const { session } = await vessKit.connect(res.account, provider, isDev ? 'testnet-clay': 'mainnet')
      console.log({ session })
    } catch (error) {
      console.error(error)
    }
  }
```

### Returns

**session**: Promise\<DIDSession>: for more info about DIDSession, please check [here](https://github.com/ceramicnetwork/js-did/blob/5413ba1da9f6717d4a54d2bc30634a06a9435da5/docs/classes/did_session.DIDSession.md)


# Disconnect()

Disconnects from Ceramic

### How to use?

```javascript
import { getVESSKit } from 'vess-kit-web'

const isDev:boolean = true
const vessKit = getVESSKit(isDev)
vessKit.disconnect()
```

### Parameters

None

### Returns

None


# Get

{% content-ref url="/pages/zKTdFB0a0YfJBoD8rIIE" %}
[getOrganization()](/vess-sdk/api-documentation/v2/get/getorganization)
{% endcontent-ref %}

{% content-ref url="/pages/mWJpU9vSglDFJoFeQAW4" %}
[getAllVCsByHolder(did:string)](/vess-sdk/api-documentation/v2/get/getallvcsbyholder-did-string)
{% endcontent-ref %}


# getOrganization()

### How to use?

```typescript
import { getVESSKit } from 'vess-kit-web' // `vess-kit-node' when backend

const streamId = "kj............."
const vess = getVESSKit()
const org = await vess.getOrganization(streamId)
```

### Parameters

streamId: string

### Return

Promise\<OrganizationWIthId | undefined>


# getAllVCsByHolder(did:string)

### How to use?

```typescript
import { getVESSKit } from 'vess-kit-web' // `vess-kit-node' when backend

const did = "did:pkh:eip155:1:0x......."
const vess = getVESSKit()
const vcs = await vess.getAllVCsByHolder(did)
```

### Parameters

did: string

### Return

Promise\<VsVerifiableCredential\[]>


# Create

{% content-ref url="/pages/IPfCYoRYIiIPOsGFS4Ly" %}
[issueEventCredEIP712()](/vess-sdk/api-documentation/v2/create/issueeventcredeip712)
{% endcontent-ref %}

{% content-ref url="/pages/yxqqe3Gd3BJYz4UnVCIH" %}
[issueMembershipCredEIP712()](/vess-sdk/api-documentation/v2/create/issuemembershipcredeip712)
{% endcontent-ref %}

{% content-ref url="/pages/qYPcNqlg6QnLN8XSR3Se" %}
[issueCertificationCredEIP712()](/vess-sdk/api-documentation/v2/create/issuecertificationcredeip712)
{% endcontent-ref %}

{% content-ref url="/pages/qlqSanPor32aPWj5N8hy" %}
[createVSCredential()](/vess-sdk/api-documentation/v2/create/createvscredential)
{% endcontent-ref %}


# issueEventCredEIP712()

issuing EIP712 verifiable credentials for event attendance.

### How to use?

```typescript
import { getVESSKit,getPkhDIDFromAddress } from 'vess-kit-node'

const provider:any // any ethereum provider that is already connected
const signer = provider.getSigner()
const isDev:boolean = true
const issuerAddress = "0x....."
const did = "did:pkh:eip155:1:0x......."
const subject = {
          id: did,
          ...other props
          }
          
const vess = getVESSKit()

// connect to ComposeDB
await vessKit.connect(
          issuerAddress,
        async (message) => {
          const signed = await signer.signMessage(message)
          return signed
        },
        !isDev ? 'mainnet' : 'testnet-clay',
      )

const vcs = await vessKit.issueEventCredEIP712(
          provider,
          getPkhDIDFromAddress(issuerAddress),
          [subject],
          expirationDate,
        )
```

### Parameters

```typescript
provider: Web3Provider,
issuerDid: string,
credentialSubjects: CredentialSubjectProp[],
expirationDate?: string
```

### Return

Promise\<VsVerifiableCredential\[]>


# issueMembershipCredEIP712()

issuing EIP712 verifiable credentials for membership.

### How to use?

```typescript
import { getVESSKit,getPkhDIDFromAddress } from 'vess-kit-node'

const provider:any // any ethereum provider that is already connected
const signer = provider.getSigner()
const isDev:boolean = true
const issuerAddress = "0x....."
const did = "did:pkh:eip155:1:0x......."
const subject = {
          id: did,
          ...other props
          }
          
const vess = getVESSKit()

// connect to ComposeDB
await vessKit.connect(
          issuerAddress,
        async (message) => {
          const signed = await signer.signMessage(message)
          return signed
        },
        !isDev ? 'mainnet' : 'testnet-clay',
      )

const vcs = await vessKit.issueMembershipCredEIP712(
          provider,
          getPkhDIDFromAddress(issuerAddress),
          [subject],
          expirationDate,
        )
```

### Parameters

```typescript
provider: Web3Provider,
issuerDid: string,
credentialSubjects: CredentialSubjectProp[],
expirationDate?: string
```

### Return

Promise\<VsVerifiableCredential\[]>


# issueCertificationCredEIP712()

issuing EIP712 verifiable credentials for certificates.

### How to use?

```typescript
import { getVESSKit,getPkhDIDFromAddress } from 'vess-kit-node'

const provider:any // any ethereum provider that is already connected
const signer = provider.getSigner()
const isDev:boolean = true
const issuerAddress = "0x....."
const did = "did:pkh:eip155:1:0x......."
const subject = {
          id: did,
          ...other props
          }
          
const vess = getVESSKit()

// connect to ComposeDB
await vessKit.connect(
          issuerAddress,
        async (message) => {
          const signed = await signer.signMessage(message)
          return signed
        },
        !isDev ? 'mainnet' : 'testnet-clay',
      )

const vcs = await vessKit.issueCertificationCredEIP712(
          provider,
          getPkhDIDFromAddress(issuerAddress),
          [subject],
          expirationDate,
        )
```

### Parameters

```typescript
provider: Web3Provider,
issuerDid: string,
credentialSubjects: CredentialSubjectProp[],
expirationDate?: string
```

### Return

Promise\<VsVerifiableCredential\[]>


# createVSCredential()

storing EIP712 verifiable credentials to ComposeDB/Ceramic

### How to use?

```typescript
import { getVESSKit,getPkhDIDFromAddress } from 'vess-kit-node'
          
const vc = {
  id: "urn:...........",
  type: ["Verifiable Credential"],
  issuer: {
    id: "did:pkh:eip155:1:0x......."
  },
  credentialSubject: {
    id: "did:pkh:eip155:1:0x......."
    ...other props
  },
  issuanceDate: "2024-10-12",
  expirationDate: "2124-10-12",
  ...other props
  } // EIP712 verifiable credential
          
// connect to ComposeDB
const provider:any // any ethereum provider that is already connected
const signer = provider.getSigner()
const isDev:boolean = true
const issuerAddress = "0x....."

const vess = getVESSKit()
await vessKit.connect(
          issuerAddress,
        async (message) => {
          const signed = await signer.signMessage(message)
          return signed
        },
        !isDev ? 'mainnet' : 'testnet-clay',
      )
const payload = await vessKit.createVSCredential({
      content: {
        plainCreds: JSON.stringify(vc),
        issuerDid: vc.issuer.id,
        holderDid: vc.credentialSubject.id,
        issuanceDate: vc.issuanceDate,
        expirationDate: expirationDate,
        type: vc.type,
      },
    })
```

### Parameters

```typescript
input: CreateVsVerifiableCredentialInput
```

### Return

Promise\<CreateVsVerifiableCredentialPayload>


# V1

vess-sdk v1

{% hint style="info" %}
Deprecated
{% endhint %}


# Get


# getTaskCredential()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
const work = await vess.getTaskCredential(streamId),
```

### Parameters

***streamId:*** string : Document's streamId&#x20;

### Returns

**Promise\<WithCeramicId\<TaskCredential> | null>**


# getHeldTaskCredentials()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const work = await vess.getHeldTaskCredentials(did)
```

### Parameters

***did:*** string&#x20;

### Returns

**Promise\<WithCeramicId\<TaskCredential>\[]>**


# getOrganization()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const streamId = "kj............."
const vess = getVESS()
const org = await vess.getOrganization(streamId)
```

### Parameters

streamId: string

### Return

Promise\<OrganizationWIthId | undefined>


# getCreatedOrganization()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const orgs = await vess.getCreatedOrganization(did)
```

### Parameters

did: string

### Return

Promise\<OrganizationWIthId\[] | undefined>


# getMembership()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const streamId = "kj............."
const vess = getVESS()
const vcs = await vess.getMembership(streamId)
```

### Parameters

streamId: string

### Return

Promise\<MembershipWithId | undefined>


# getCreatedMemberships()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getCreatedMemberships(did)
```

### Parameters

did: string

### Return

Promise\<MembershipWithId\[] | undefined>


# getVerifiableMembershipSubjectCredential()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const streamId = "kj............."
const vess = getVESS()
const vcs = await vess.getVerifiableMembershipSubjectCredential(streamId)
```

### Parameters

streamId: string

### Return

Promise\<MembershipSubjectWithId | undefined>


# getHeldMembershipSubjects()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getHeldMembershipSubjects(did)
```

### Parameters

did: string

### Return

Promise\<MembershipSubjectWithId\[] | undefined>


# getIssuedMembershipSubjects()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getIssuedMembershipSubjects(did)
```

### Parameters

did: string

### Return

Promise\<MembershipSubjectWithId\[] | undefined>


# getHeldSelfClaimedMembershipSubjects()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getHeldSelfClaimedMembershipSubjects(did)
```

### Parameters

did: string

### Return

Promise\<WithCeramicId\<SelfClaimedMembershipSubject>\[]>


# getEvent()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const streamId = "kj............."
const vess = getVESS()
const event = await vess.getEvent(streamId)
```

### Parameters

streamId: string

### Return

Promise\<EventWithId | undefined>


# getIssuedEvents()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const event = await vess.getIssuedEvents(did)
```

### Parameters

did: string

### Return

Promise\<EventWithId | undefined>


# getEventAttendance()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const streamId = "kj............."
const vess = getVESS()
const vc = await vess.getEventAttendance(streamId)
```

### Parameters

streamId: string

### Return

Promise\<EventAttendanceWithId | undefined>


# getIssuedEventAttendanceVerifiableCredentials()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getIssuedEventAttendanceVerifiableCredentials(did)
```

### Parameters

did: string

### Return

Promise\<EventAttendanceWithId\[] | undefined>


# getHeldEventAttendanceVerifiableCredentials()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getHeldEventAttendanceVerifiableCredentials(did)
```

### Parameters

did: string

### Return

Promise\<EventAttendanceWithId\[] | undefined>


# getSocialLinks()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getSocialLinks(did)
```

### Parameters

did: string

### Return

Promise\<SocialLinks | null>


# getHighlightedCredentials()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const did = "did:pkh:eip155:1:0x........."
const vess = getVESS()
const vcs = await vess.getHighlightedCredentials(did)
```

### Parameters

did: string

### Return

Promise\<HighlightedCredentials | null>


# Create


# createTask()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const credential = await vess.createTask(content),
```

### Parameters

content: TaskCredential

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# storeSocialLinks()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const credential = await vess.storeSocialLinks(content),
```

### Parameters

content: SocialLinks

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# storeSelfClaimedMembership()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const credential = await vess.storeSelfClaimedMembership(content),
```

### Parameters

content: SelfClaimedMembershipSubject

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# createOrganization()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const orgId = await vess.createOrganization(content)
```

### Parameters

content: Organization

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# createMembership()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const membership = await vess.createMembership(content)
```

### Parameters

content: Membership

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# createEvent()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const membership = await vess.createEvent(content)
```

### Parameters

content: Event

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# issueMembershipSubject()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const membership = await vess.issueMembershipSubject(content)
```

### Parameters

content: VerifiableMembershipSubject

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# issueEventAttendanceCredential()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
const membership = await vess.issueEventAttendanceCredential(content)
```

### Parameters

content: EventAttendance

### Returns

**Promise< CustomResponse<{ streamId: string | undefined }> >**


# Update


# updateTask()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
await vess.updateTask(newItem),
```

### Parameters

newItem: WithCeramicId\<TaskCredential>

### Returns

**Promise<** BaseRespons&#x65;**>**


# updateOrganization()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
await vess.updateOrganization(content)
```

### Parameters

content: OrganizationWIthId

### Returns

**Promise<** BaseRespons&#x65;**>**


# updateEvent()

### How to use?

```javascript
import { getVESS } from "vess-sdk"

const vess = getVESS()
await vess.connect(provider)
await vess.updateEvent(id, newItem)
```

### Parameters

id: string

newItem: Event

### Returns

**Promise<** BaseRespons&#x65;**>**


# Tech Architecture

![Current Tech Architecture](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FvQQEqUMuY8ULS2Z8JnVT%2FMy%20First%20Board%20-%20Copy%20of%20Current%20Product%20Architecture%20\(3\).jpg?alt=media\&token=872a5694-6501-43d5-8811-c9197394d359)


# Work Credential Data-Model

![work credential data model](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2F6TGxx3GYUZVuQaXZVGcB%2Fdatamodel.png?alt=media\&token=65632379-b7d8-43b6-bd3e-d2702ab68c80)

### Ceramic Data model

We deployed the work credential data-model to Ceramic Network mainnet.

Please check out [here](https://github.com/ceramicstudio/datamodels/tree/main/models/work-credentials) for more detail.

(We currently developing the wrapper SDK to make it easy to deal with work credential data-model.)


# Visualization Protocol v0.1

### Properties

VOXEL is visualized based on several properties in Work Credential. The properties are as follows in the beta version

* Presence of deliverables
* Presence of signatures of both Sender and Receiver
* Job titles

And as shown in the table below, "Presence of deliverables" corresponds to "Presence of internal cube" in VOXEL, "Presence of signatures on both sides" corresponds to "Vividness" in VOXEL, and "Job titles" corresponds to "Hue".

In the future, we plan to change the look and feel depending on the rewards for the work, the validation of the deliverables, and the platform on which the escrow took place.

If you want to know more detail about the job titles-Hue correspondence, please refer to below.

![](https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2Fw81oneSuJidUpZ7hdi9C%2FSlide%2016_9%20-%201.jpg?alt=media\&token=094415f1-9dbd-4015-bbad-52117600e9cb)

### VOXEL Hue and Work Genre

As mentioned, the hues of VOXEL correspond to the job titles held by engineers, designers, community managers, and so on. The following table summarizes the correspondence.

<div align="center"><img src="https://3076882717-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkZXKr1XunoPnVXQIlW0F%2Fuploads%2FO559B540oGdUDZ5r1HQT%2FFrame%2048.png?alt=media&amp;token=56553e28-5d6c-4d7d-905d-2d22fec5cd93" alt=""></div>


