Skip to content

palladians/herald

Repository files navigation

πŸͺ½ Herald: SnarkyJS Credential Creation, Issuance & Proving Framework

Welcome to Herald! A SnarkyJS credential creation, Crafting, issuing, and proving digital heralds has never been this enchanting.

Harnessing the might of SnarkyJS, and fortified by Kimchi, Herald empowers you to seamlessly create and manage credentials, delivering unparalleled performance in the realm of Mina's zk-SNARK world. πŸͺΆ

Embark on a journey into verifiable credentials and client-side proving. Join our passionate community of contributors! Together, we're pioneering the future of credentials not just within the Mina ecosystem, but throughout Web3.

πŸ§™β€β™‚οΈ Unleash the spellbinding capabilities of Herald, your ultimate toolkit for establishing a fortified fortress around digital identity. Embrace the power of SnarkyJS and witness the metamorphosis of the credential ecosystem. Let Herald be the wizard's hat to your magical adventure.

Herald seeks to be compatible with the data model outlined by W3C's Verifiable Credential Data Model. It does so by mapping JSON credential objects to SnarkyJS MerkleMaps. The issuer signs the MerkleMap's root, with that signature a subject can prove arbitrary properties of their credentials privately using ZkPrograms. The resulting proof can then be used for many things, including in smart contracts and other SnarkyJS recursive programs! The possible use-cases are not limited ⚑

🌌 Features

  • Craft, Issue, and Prove Credentials πŸŽ“
  • Built upon the power of SnarkyJS πŸ§™β€β™‚οΈ
  • Effortless integration with the Mina ecosystem 🌍
  • Comprehensive documentation πŸ“–
  • Active development and an engaged community 🌟

πŸ“š Documentation

Navigate through our extensive documentation which covers all facets of Herald:

Benchmarking

Benchmarking is vital in understanding the performance and efficiency of Herald throughout its lifecycle. It gives insights into how efficiently Herald generates and verifies zk-SNARK proofs, crucial for achieving swift, responsive applications.

The benchmark tests are conducted on a Linux-based virtual machine with the following specifications:

  • CPU: An 8-core CPU, perfect for tasks requiring multi-threading.
  • Memory: 32 GB RAM to cater to high-memory demands.
  • Storage: 300 GB SSD for fast data access.
  • OS: The system runs on Ubuntu 22.04, the latest version as of 2022.

Proving Time Benchmarks

Proving Time is a measure of how long it takes to generate a zk-SNARK proof. In Herald, it indicates the speed at which a client can produce a proof for a given rule provided by a challenger. A practical example would be the time it takes for someone to prove they're above 18 using a credential issued by a specific authority.

Swift proving times are pivotal, especially for apps depending on frequent or time-sensitive zk-SNARK proofs. However, proving time can be influenced by numerous factors like computational resources, circuit sizes, and computation complexity. It's essential to understand that different users might have varying efficiency needs. While a sequencer might not require rapid proving times, a wallet aiming for a seamless user experience would.

Verification Time Benchmarks

Verification Time represents the time needed to verify a zk-SNARK proof. It's all about how swiftly a challenger can authenticate proofs given by a subject.

Fast verification times are the backbone of zk-SNARK reliant systems. They guarantee quick confirmations, fostering real-time responsiveness in applications. Ideally, zk-SNARK verification should be πŸ”₯ blazing πŸ”₯ fast!

Proof Size Benchmarks

Proof Size denotes the storage space occupied by a zk-SNARK proof. This benchmark evaluates Herald's prowess in producing compact proofs - a trait zk-SNARKs are inherently known for! πŸ”Ž

Proof size is a critical factor, especially considering storage and transmission. Concise proofs lead to reduced storage demands and swifter transmission, crafting more scalable and efficient apps and interactions.

To stay updated with Herald's benchmarking progress and insights, visit our Benchmark Page.

Run Benchmarks Yourself πŸš€

To run the benchmarks yourself, from the root:

pnpm i && pnpm build && pnpm run benchmark

🀝 Contribute

Herald thrives with the combined magic of our community wizards. We welcome contributors with open arms. For more details, check out our contributing guide.

πŸ“– License

This project is licensed under the Apache 2.0 license.

See LICENSE for more information.

Happy building! ❀️

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Teddy Pender
Teddy Pender

πŸ’»
Tomek Marciniak
Tomek Marciniak

πŸ’»