Verification API service in accordance with the Verite Smart Contract Patterns as designed by Centre (now Circle).
Install Node through nvm. We should use the node version that matches the docker container in production boxes.
brew install nvm;
nvm install v14.20.0;
nvm use v14.20.0
Upgrade npm
:
npm install -g npm --force
Start the dependencies including the database:
./docker-dependencies.sh
Migrate the database:
./rebuild-db.sh
This repository is organized as a mono-repo, using npm workspaces (which requires npm v7 or greater). As such, the dependencies for all included packages are installed from the root level using npm install. Do not run npm install from a package's directory.
This will only run the verifier server.
From the root of the monorepo, run:
npm install -w verifier
If there is database schema changes, the following command is also needed in order to let Prisma to generate codes:
npm run build -w verifier
Start the server through nodemon
which will auto-compile + rerun upon changes:
npm run dev -w verifier
Compile the Javascript files and start the server from the Javascript files:
npm run build -w verifier
npm start -w verifier
npm test -w verifier
This will run all the services under the packages
folder including starting local blockchain.
From the root of the monorepo, run:
npm run setup
This setup
command only needs to be run once when the project is first being set up.
npm run dev
npm run build
npm start
npm test
The Verite Verifier is simply a verifier. At minimum, demos should demonstrate verification of an already issued credential and finally demonstrate that it could be used on chain with a minimal contract. Consequently, this project does not include an issuer or identity wallet. Instead, e2e demos create and present credentials as needed. Additionally, contracts are designed to demonstrate the verification behavior, without any particular utility.
There are automated tests demonstrating the behaviors of the service end-to-end across both Ethereum and Solana blockchains. These projects' test cases include VerificationResults and signatures generated from the verifier to demonstrate end-to-end success.
Additionally, we have provided several additional examples of end-to-end behavior. These include 1) an end-to-end example of issuance and verification using generic JWT libraries, which can be used to port these behvaiors to other languages such as Java or Python, 2) documentation for how to replace the Verite reference project's verifier with Circle's, and and finally 3) a sample ethereum dapp and sample Solana dapp that demonstrates E2E the behavior across both blockchains.
The Verite project uses did-jwt-vc to create VCs and VPs as JWTs. While this library is very useful, other implementations might not be written in javascript or may wish to implement their own solution.
We have provided end-to-end examples using standard JWT libaries so teams can easily recreate the expected behaviors. An end-to-end example, which simulates an Issuer and performs verification, is located in ./packages/examples.
The project includes several end-to-end examples. First, there are two end-to-end examples featuring a Dapp that interacts with the verifier, one for Ethereum and another for Solana. These demos feature the verifier and a minimal implementation of the verification registry using a mocked out issuer and wallet. Additionally, the project includes instructions for how to integrate the verifier with the demos found in the Verite project. Integration with the verite project demonstrates full end-to-end behavior of the Circle Verifier in combination with an issuer, mobile wallet, dapp, and a smart contract. Finally, end-to-end behavior of the Circle Verifier is demonstrated using node. The node scripts specifically demonstrate how both an issuer and verifier can encode Verifiable Credentials and Verifiable Presentations to conform to the Verite spec without using specialized libraries such as did-jwt-vc. This example should be sufficient documentation if attempting to implement these demos in another language or framework, such as Java.
- Example Ethereum Dapp that uses a locally deployed Ethereum contract to demonstrate e2e acceptance of the project on the Ethereum blockchain.
- Example Solana Dapp that uses a locally deployed Solana contract to demonstrate e2e acceptance of the project on the Solana blockchain.
- Integrating with Centre (now Circle)'s Open Source Verite Project documentation demonstrates how the Circle Verifier can be easily replaced within a complete ecosystem. Using Verite's issuer, wallet, dapp, and contract -- we demonstrate that the verifier can be easily substituted for the Circle implementation. This demonstrates e2e acceptance of the project on the Ethereum blockchain.
- Node Examples that exercise the Circle Verifier while also demonstrating how to encode a Verifiable Credential and Verifiable Presentation JWTs without using a specialized library.
This library is organized into several packages, located in the packages
directory.
package | description |
---|---|
verifier | Verification Service API |
ethereum | Ethereum Contract |
ethereum-dapp | Ethereum E2E Demo |
solana | Solana Program |
solana-dapp | Solana E2E Demo |
examples | Example code for interacting with the Verifier API |
See docs/API.md