Example: Identity Verification Library
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev This library provides functions to facilitate identity verification and management for dApps
* operating in the real-world asset domain (RWA) using the Evire blockchain.
*/
library EvireIdentityVerificationLibrary {
// Event emitted when a new KYC provider is added
event KYCProviderAdded(address indexed provider);
// Event emitted when a user completes the KYC verification process
event UserVerified(address indexed user, uint256 timestamp);
struct KYCProvider {
bool isApproved;
string name;
string jurisdiction;
}
struct UserKYC {
bool isVerified;
uint256 timestamp;
address verifiedBy;
}
mapping(address => KYCProvider) private kycProviders;
mapping(address => UserKYC) private userKYCRecords;
/**
* @dev Adds a new KYC provider to the approved list.
* @param provider Address of the KYC provider
* @param name Name of the KYC provider
* @param jurisdiction Jurisdiction of the KYC provider
*/
function addKYCProvider(address provider, string memory name, string memory jurisdiction) external {
require(provider != address(0), "Invalid provider address");
require(!kycProviders[provider].isApproved, "Provider already approved");
kycProviders[provider] = KYCProvider({
isApproved: true,
name: name,
jurisdiction: jurisdiction
});
emit KYCProviderAdded(provider);
}
/**
* @dev Verifies a user's identity through an approved KYC provider.
* @param user Address of the user to verify
*/
function verifyUser(address user) external {
require(user != address(0), "Invalid user address");
require(kycProviders[msg.sender].isApproved, "Caller is not an approved KYC provider");
userKYCRecords[user] = UserKYC({
isVerified: true,
timestamp: block.timestamp,
verifiedBy: msg.sender
});
emit UserVerified(user, block.timestamp);
}
/**
* @dev Checks if a user is verified.
* @param user Address of the user to check
* @return isVerified Boolean indicating if the user is verified
* @return timestamp Timestamp when the user was verified
* @return verifiedBy Address of the KYC provider who verified the user
*/
function isUserVerified(address user) external view returns (bool isVerified, uint256 timestamp, address verifiedBy) {
UserKYC storage userRecord = userKYCRecords[user];
return (userRecord.isVerified, userRecord.timestamp, userRecord.verifiedBy);
}
/**
* @dev Retrieves the details of an approved KYC provider.
* @param provider Address of the KYC provider
* @return name Name of the KYC provider
* @return jurisdiction Jurisdiction of the KYC provider
*/
function getKYCProviderDetails(address provider) external view returns (string memory name, string memory jurisdiction) {
require(kycProviders[provider].isApproved, "Provider not approved");
KYCProvider storage providerDetails = kycProviders[provider];
return (providerDetails.name, providerDetails.jurisdiction);
}
/**
* @dev Utility function to check if a KYC provider is approved.
* @param provider Address of the KYC provider
* @return isApproved Boolean indicating if the provider is approved
*/
function isApprovedProvider(address provider) external view returns (bool isApproved) {
return kycProviders[provider].isApproved;
}
}
Example of Usage
Description of the Smart Contract
Last updated