# Technical Overview

The **NotVault** SDK offers developers a robust toolkit for implementing confidential interactions by leveraging the power of  [zkSNARK](https://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof) verifications and  [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) / [Public Key Encryption](https://en.wikipedia.org/wiki/Public-key_cryptography) . Integrity and consistency of these interactions are ensured through the transparency and immutability of blockchain technology.

The architecture of **NotVault** consists of a set of Solidity smart contracts that operate on an Ethereum Virtual Machine ([EVM](https://ethereum.org/en/developers/docs/evm/)) compatible Layer 1 (L1) network, alongside a JavaScript npm package. These components enable:

1. **Obfuscation of fungible token balances:** This is achieved via the  [Poseidon](https://www.poseidon-hash.info) hash function. Note that only the token balances and the value of transfers are kept confidential. The identity, source, and destination of the transfers relating to these tokens remain public.
2. **Confidential storage and indexing of files onto IPFS:** Each file is encrypted with a unique secret key using the [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) algorithm, providing a secure method for file storage and retrieval.
3. **Verification of data integrity:** Credential workflows employing [zkSNARK](https://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof) allow for secure and efficient verification of data integrity.

The **NotVault** SDK's codebase is structured into three primary sections:

* [**Typescript**](https://www.typescriptlang.org) [**NPM**](https://www.npmjs.com) **package:** This is where encryption, proof generation, and connectivity to both blockchains and [IPFS](https://ipfs.tech) are handled.
* [**Solidity**](https://soliditylang.org) **smart contracts:** These define the vault, balances, and transactional logic, providing the framework for secure and confidential transactions.
* [**Circom**](https://docs.circom.io) **circuits:** These define the zero knowledge proof logic, facilitating the secure verification of data without revealing any unnecessary information.

Developers can leverage the **NotVault** SDK to accelerate the development of secure, confidential, and integrity-focused applications.
