What it does:
Records and verifies internship completion for students, providing tamper-proof, verifiable proof of experience on-chain.
Why it matters:
Eliminates fraudulent claims, allows employers or educational institutions to instantly verify internships, and gives students secure proof of professional experience.
How it works:
Internship providers (companies) are registered as authorized issuers
Students submit internship completion claims after finishing their internship
Authorized companies verify and approve completion on-chain
Smart contract mints a record or links to an NFT representing the verified internship
Students can share verification with employers, schools, or professional platforms
All verification history is immutably recorded and auditable
Can integrate with Academic Record NFT or Student Reputation DAO for holistic profile
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* @title InternshipVerification
* @author Nam
* @notice Verifies and records internship completions for students
*/
contract InternshipVerification {
address public admin;
uint256 public recordCount;
struct Record {
address student;
address company;
string metadataHash; // IPFS or encrypted proof of completion
bool verified;
}
mapping(uint256 => Record) public records;
mapping(address => bool) public authorizedCompanies;
// -------------------- EVENTS --------------------
event CompanyAuthorized(address indexed company);
event InternshipVerified(uint256 indexed recordId, address indexed student, address indexed company);
// -------------------- CONSTRUCTOR --------------------
constructor() {
admin = msg.sender;
}
// -------------------- COMPANY MANAGEMENT --------------------
function authorizeCompany(address _company) external {
require(msg.sender == admin, "Not admin");
require(_company != address(0), "Invalid company");
authorizedCompanies[_company] = true;
emit CompanyAuthorized(_company);
}
// -------------------- INTERNSHIP RECORD MANAGEMENT --------------------
function submitInternship(address _student, string calldata _metadataHash) external {
require(authorizedCompanies[msg.sender], "Not authorized company");
require(_student != address(0), "Invalid student");
recordCount += 1;
records[recordCount] = Record({
student: _student,
company: msg.sender,
metadataHash: _metadataHash,
verified: true
});
emit InternshipVerified(recordCount, _student, msg.sender);
}
function verifyRecord(uint256 _recordId) external view returns (
address student,
address company,
string memory metadataHash,
bool verified
) {
Record memory r = records[_recordId];
return (r.student, r.company, r.metadataHash, r.verified);
}
}
Build and Grow By Nam Le Thanh