
Join 1500+ leaders who secured themselves from losing Billion Dollars



Innovation City’s DigitalLicense contract functions as a centrally controlled, revocable Soulbound Token (SBT) system designed to manage digital licenses with precision and control. While built on standard ERC-721 structures, it departs from fully trustless ownership models by enabling controlled issuance, revocation, and reassignment of licenses.
The system’s security and reliability depend heavily on the operational security of privileged roles—MINTER_ROLE, UPGRADER_ROLE, and DEFAULT_ADMIN_ROLE—which govern critical functions. These contracts ensure structured license management, enforce access control, and enable transparent tracking of license states within the ecosystem.
Innovation City envisions building a robust digital infrastructure for managing licenses, permissions, and digital identities through upgradeable Soulbound Tokens (SBTs). This approach aims to bring greater control, transparency, and efficiency to systems where ownership is non-transferable but still requires lifecycle management.
By leveraging blockchain-based licensing with revocation, upgradeability, and role-based control, Innovation City seeks to create a framework where digital assets can be securely issued, monitored, and governed without relying on traditional centralised systems.
This model enables organisations to maintain regulatory compliance, operational flexibility, and data integrity, while ensuring that licenses remain verifiable and tamper-resistant. Through this approach, Innovation City is positioned to redefine how digital rights and permissions are managed in an increasingly decentralised world.
Our audit of Innovation City uncovered several vulnerabilities that required attention, including inaccurate license supply tracking, the ability to transfer expired licenses, and inconsistencies in time-based logic.
To address these issues, we implemented accurate license accounting mechanisms to ensure reliable supply data, enforced strict expiration checks to prevent invalid license transfers, and improved timestamp handling to ensure correct lifecycle tracking of licenses. We also enhanced standards compliance and optimised contract behaviour for better reliability.
These enhancements significantly strengthened Innovation City’s security posture, ensuring accurate license management, improved compliance, and greater trust in the system.
Our comprehensive audit was executed through the following steps:
Our approach to auditing Innovation City involved a combination of threat modelling, a security-first mindset, and extensive testing. We used both white-box and black-box testing methods to ensure a thorough assessment, maintaining transparency and clear communication with the Huddle01 team throughout the process
Our comprehensive audit of these contracts revealed a total of 7 issues, categorised by severity:
Description:
The getTotalLicenses() function returns misleading data after licenses are revoked because _nextTokenId is never decremented when tokens are burned, causing the total count to include revoked licenses.
Description:
The _update() hook enforces soulbound restrictions but does not check token expiration status. This allows MINTER_ROLE to transfer or reassign tokens that have expired.
Description:
When minting tokens and startTimeVal is set to 0 as the current timestamp to mean that the token is 'live' immediately, the logs are kept in the events, as well as the storage slot for startTime value holds 0 and not the timestamp required.
Description:
Mints begin with the tokenId at 0, which is contrary to what is specified in the docs here.
Description:
Additionally, the contract's design document specifies that DEFAULT_ADMIN_ROLE should only manage roles, yet setContractURI() uses this role for contract metadata management.
Description:
The updateLicenseMetadata() function emits a MetadataUpdate event after calling _setTokenURI(), which already emits the same event internally.
Description:
The locked() function does not follow the ERC-5192 specification regarding non-existent tokens. Per the standard, it should revert for non-existent tokens, but currently returns false.
Implement a separate counter to track accurate license supply and not _nextTokenId, as _nextTokenId can still be used for general mint count.
Add expiration checks to _update() and reassign():
If (1) startTime is very sensitive for data provision AND (2) there is no plan to migrate old licenses to this new system, there should be sanity checks that startTimeVal is not below the current timestamp so new licenses cannot be backdated.
Have the implementation contracts align with the specs as described.
Update the NatSpec comments to accurately reflect the implementation.
Additionally, clarify the intended scope of DEFAULT_ADMIN_ROLE in the contract documentation.
Remove the duplicate event emission.
Align the current implementation to the ERC-5192 specifications.
Impressed by our findings and recommendations, the Innovation City Protocol developers promptly addressed all identified vulnerabilities.
Through our collaborative efforts, the Innovation City Protocol project is now significantly more secure, ensuring the protection of user funds.
The Innovation City smart contracts security audit identified and addressed critical vulnerabilities, protecting user funds and ensuring platform stability. This case study demonstrates the importance of proactive security measures for blockchain-based projects, especially those dealing with financial assets. By conducting audits and addressing identified issues, the Innovation City Team has taken a significant step towards securing its platform and safeguarding user trust.

From day-zero risk mapping to exchange-ready audits — QuillAudits helps projects grow with confidence. Smart contracts, dApps, infrastructure, compliance — secured end-to-end.