CertWallet is a decentralized protocol and Soulbound Token (SBT) implementation built on the Sui Network, designed for the secure, permanent, and non-transferable storage of educational credentials such as diplomas, certificates, and awards.
Leveraging Sui's object-centric architecture, CertWallet ensures that once a "Certificate" is issued by an authorized institution (verified via a unique AdminCap), it belongs exclusively to the recipient and cannot be transferred, sold, or tampered with. The system features a modular design where dynamic fields allow for flexible data expansion—enabling the inclusion of transcripts, GPA, and honors over time. Every issuance and update is recorded as an on-chain event, providing a transparent, immutable, and easily verifiable audit trail that eliminates the risk of fraudulent documentation.
- Documents cannot be transferred or sold thanks to Soulbound Token (SBT) technology
- AdminCap based authorization system (only authorized institutions can print documents)
- Flexible data expansion with Dynamic Fields (transcript, GPA, additional achievements, etc.)
- Event-driven architecture (all important transactions are recorded)
- Ready infrastructure for IPFS integration (metadata links)
- High security and modular structure for easy future upgrades
certwallet-contracts/
├── sources/
│ ├── certwallet.move # Main contract logic
│ ├── types.move # Data structures (Certificate, AdminCap, Transcript)
│ └── errors.move # Centralized error management
├── Move.toml
├── README.md
└── tests/
└── certwallet_tests.move # Unit tests- Blockchain: Sui Network
- Language: Move (Sui 2024 Edition)
- Authorization Model: Capability Pattern (AdminCap)
- Data Storage: Dynamic Fields + Object-centric model
- Sui CLI must be installed.
- Clone the repository:
git clone https://github.com/KutraCorporation/certwallet-contracts.git
cd certwallet-contracts- Compile the contracts:
sui move build- Run the tests:
sui move test- Publish to the testnet:
sui move publish --gas-budget 50000000- Create Certificate:
issue_certificate(
&admin_cap,
student_name,
institution,
major,
graduation_date,
recipient_address,
ctx
);- Adding a Transcript
add_transcript(&admin_cap, &mut certificate, gpa, honors, credits);- Certificates cannot be transferred thanks to soulbound design.
- Only organizations with AdminCap can issue certificates.
- All transactions are recorded as events.
- Error management is centralized and consistent.
We welcome your contributions!
- Fork
- Create a Feature branch (git checkout -b feature/amazing-feature)
- Commit your changes (git commit -m 'Add amazing feature')
- Push your branch (git push origin feature/amazing-feature)
- Create a Pull Request
This project is licensed under the Apache-2.0 License.