@zk-email/jwt-tx-builder-contracts
v0.0.1-main
Published
This directory contains verifier contracts for handling JSON Web Tokens(JWTs) proofs.
Maintainers
Keywords
Readme
JWT Contracts
This directory contains verifier contracts for handling JSON Web Tokens(JWTs) proofs.
Contracts Overview
JWTRegistry
- Purpose: The
JWTRegistrycontract is used to store and manage JWTs. It keeps track of all issued tokens and their statuses. - Usage: In another project, you can use this contract to verify if a JWT is valid and to check its status (active, revoked, etc.).
JWTVerifier
- Purpose: The
JWTVerifiercontract is responsible for verifying the authenticity of JWTs. It checks the proof and ensures the token is valid. - Usage: Use this contract in your project to verify JWTs proof before granting access to protected resources.
Build
To build the project, run the following command:
yarn buildUnit Tests
To run unit tests, use the following command:
yarn test:unitIntegration Tests
To run integration tests, use the following command:
yarn test:integrationDeployment
To deploy, run the following commands:
foundryup
source .env
forge script script/Deploy_jwtRegistry.s.sol:DeployScript --rpc-url $RPC_URL --broadcast --verify -vvvv --sender $ETH_FROMHow to Use in Another Project
Installation: First, install the package using yarn. Run the following command in your project directory:
yarn add @zk-email/jwt-tx-builder-contractsIntegration:
- Foundry: Add the following line to remappings.txt:
@zk-email/jwt-tx-builder-contracts=../../node_modules/@zk-email/jwt-tx-builder-contracts/srcSolidity: Import the contracts in your Solidity files using the following syntax:
// Import necessary contracts for JWT verification import {JwtVerifier} from "@zk-email/jwt-tx-builder-contracts/utils/JwtVerifier.sol"; import {JwtGroth16Verifier} from "@zk-email/jwt-tx-builder-contracts/utils/JwtGroth16Verifier.sol"; import {JwtRegistry} from "@zk-email/jwt-tx-builder-contracts/utils/JwtRegistry.sol";You can use the imported contracts as follows:
IVerifier jwtVerifier; JwtRegistry jwtRegistry; // Create jwt registry and set DKIM public key hash jwtRegistry = new JwtRegistry(deployer); jwtRegistry.setDKIMPublicKeyHash( "12345|https://example.com|client-id-12345", publicKeyHash ); // Create JwtVerifier and initialize with proxy { JwtVerifier verifierImpl = new JwtVerifier(); console.log( "JwtVerifier implementation deployed at: %s", address(verifierImpl) ); JwtGroth16Verifier groth16Verifier = new JwtGroth16Verifier(); ERC1967Proxy verifierProxy = new ERC1967Proxy( address(verifierImpl), abi.encodeCall( verifierImpl.initialize, (msg.sender, address(groth16Verifier)) ) ); jwtVerifier = IVerifier(address(verifierProxy)); }
Sample Deployed Addresses
Here are some example addresses where the contracts have been deployed on Base Sepolia test network:
- JWTRegistry:
0x60Dd906E3D1d827d23Bd393aa3224fb38cac1A11 - JWTVerifier Implementation:
0x020FD65080C114AB55Cdeb018db197f3A8751B7F - JWTVerifier Proxy:
0xD3863Ad6AD48e3dEc3736d335967b4117f64ce49
Troubleshooting
If you encounter a CreateCollision error, it means the salt in your .env file is already used. Try using a different salt value.
Error:
script failed: <empty revert data>This error indicates a problem with the deployment script. Check your environment variables and try again.
