## Overview - Grant FY23-1075 - Report 5
This report provides a summary of the completed deliverable **"Implement learnings"**. It includes a general overview of the created artifacts and some explanations on architectural decisions.
---
## Deliverable Details
- **Project:** Truster Issuer Registry on Ethereum
- **Deliverable:** "Implement learnings"
- **Task**: "Creation of new smart contract, libraries, and test suites"
- **Report Date:** 29.02.2023
---
## Summary
The final outcome of our previous work was the draft version of the ERC-7506[1], known as the "Trusted Hint Registry". This specification is designed to support various applications of digital identities, such as maintaining a collective list of trustworthy issuers within a digital ecosystem. These trusted issuers are key in the verification process, helping to increase the reliability of signed, digital claims.
Building on this foundation, we have developed a reference implementation of the ERC[2] and a TypeScript library[5]. This makes it easier for developers to utilize and expand upon our work. In the sections that follow, we will provide an overview of these two components, including brief discussions on the architectural choices made.
### ERC-7506 Implementation Details
The implementation of ERC-7506 has been fully realized through an upgradable Solidity smart contract, leveraging the OpenZeppelin UUPSUpgradable library for enhanced flexibility and ease of updates, while preserving a consistent deployment address. We've also incorporated other OpenZeppelin libraries for various functionalities, such as the EIP712Upgradable for meta transaction payload generation and verification, PausableUpgradable for temporarily halting contract interactions, and OwnableUpgradable for contract ownership management. For development, we chose Foundry over other tools like Truffle and Hardhat, as it offers a more straightforward approach to testing and deploying in Solidity, thereby overcoming challenges faced in our previous projects. The project has full test coverage with a total of 108 tests and includes deployment and upgrade scripts. All these resources are accessible in our open-source GitHub repository[2], which also features a lightweight JavaScript/TypeScript library that provides deployment addresses for different blockchains and the contract's ABI, available for installation via NPM[3].
### Trusted Hint Controller Library
The second major component is the "Trusted Hint Controller" JavaScript/TypeScript library, which simplifies for developers the task of interacting with the Trusted Hint Registry contract. This library utilizes publicly available deployments of the registry and its ABI for integration with Viem, a cutting-edge library akin to web3.js or ethers, but with a focus on simplicity and developer experience. It offers utility functions, testing tools, and type inference without the need for TypeChain for TypeScript typing. The Trusted Hint Controller library is compatible with various JavaScript/TypeScript project setups, thanks to pkgroll[4], which facilitates the creation of CommonJS and ESM versions. It features straightforward developer experience enhancements, particularly for meta transactions by simplifying the process of generating signed payloads. For testing, Vitest was chosen for its performance and ability to run integration tests on a locally forked blockchain, resulting in 83 unit tests and 29 integration tests that ensure robust code coverage. All of these resources are available in an open-source GitHub repository[5] and can be installed via NPM[6].
### Continuous Integration
Both repositories extensively utilize GitHub Actions to automate tasks like running tests with every new code push, significantly aiding in the identification and correction of errors during development.
---
## Timeline Updates
Progress is on track and aligned with the original timeline. Work on the next deliverable will start as planned on 1st March.
---
## Blockers/Issues
None.
---
## Links to Materials
- [1] [ERC-7506 Trusted Hint Registry](https://eips.ethereum.org/EIPS/eip-7506)
- [2] [Trusted Hint Registry Contract](https://github.com/spherity/trusted-hint-registry)
- [3] [Trusted Hint Registry Helper NPM Library](https://www.npmjs.com/package/@spherity/trusted-hint-registry)
- [4] [pkgroll](https://github.com/privatenumber/pkgroll)
- [5] [Trusted Hint Controller](https://github.com/spherity/trusted-hint-controller)
- [6] [Trusted Hint Controller in NPM](https://www.npmjs.com/package/@spherity/trusted-hint-controller?activeTab=readme)