Consist in creating a new Lens module, and integrate Soul Bound Tokens, to verify people's working background.
Nowadays it's has been an issue when hiring people, you cant verify their profile based in SBTs solve this problem by providing a secure, non-transferable NFT that represents a person's unique professional trajectory. Companies can issue SBTs to their employees, which include details of their work experience, projects, achievements, and other relevant information. When an employee applies for a new job, they can provide their SBTs as proof of their skills and experience. This provides a verified and immutable record of an individual's work history, making the hiring process more efficient and effective for companies.
SoulBound Tokens are solving the problem of verifying work experience by providing a secure and immutable way for companies to confirm an applicant's claims about their past work history. With SBTs, individuals and companies alike can benefit from a more efficient and effective hiring process.
Technical Details.
We created a new module on Lens, to connect it to SBT. Consist on Follow the Module of the candidate’s profile, and other protocol members can interact with this user profile. The candidate must create this new module, specify the protocol that wants to join and only members of that protocol can follow him.
The interface Contract: It has to make the mapping of the address of current members for the protocol, then connect it to the protocol mapping, after that there has to vote for a candidate to be accepted. There must specify the number of votes needed to mint the SBT.
How does it connect to the protocol profile?
There must be a special/Specific publication for the new members to collect the SBT, and they must have a minimum number of followers/Vote from the protocol members.
We use the ERC-721 standard in OpenZeppelin to create a new contract.
contract SoulBoundToken is ERC721 (constructor () ERC721 ("SoulBoundToken", "SBT") {}
and then defined the additional functionalities of the token.
The code imports the ERC721 contract from the OpenZepelin library and creates a new contract that inherits from it. With the constructor, it is going to be linked to a function that sets the name and the symbol of the token.
Next it is going to create a mapping of addresses to Token ID's and functions:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract SoulBoundToken is ERC721 { uint256 public tokenCounter; mapping(address => uint256) public tokenIds;
constructor(ProtocolMembers) ERC721("SoulBoundToken", "SBT") {
tokenCounter = 0;
}
function issueToken(address recipient) public {
uint256 newTokenId = tokenCounter;
_safeMint(recipient, newTokenId);
tokenIds[recipient] = newTokenId;
tokenCounter++;
}
We need to specify if we need additional functionality with the token, this will be defined when customizing the specifications from the companies that are going to be creating the SBT.
Finally we integrate the smart contract with the Lens protocol.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract SoulBoundToken is ERC721 { uint256 public tokenCounter; mapping(address => uint256) public tokenIds;
constructor() ERC721("SoulBoundToken", "SBT") {
tokenCounter = 0;
}
function issueToken(address recipient) public {
uint256 newTokenId = tokenCounter;
_safeMint(recipient, newTokenId);
tokenIds[recipient] = newTokenId;
tokenCounter++;
}
function verifySoulBound(address owner) public view returns (bool) {
uint256 tokenId = tokenIds[owner];
return _exists(tokenId);
}
} This code adds a verifySoulBound() function that takes an owner address as input and returns a boolean indicating whether that address owns a soul bound token. This function can be integrated with Lens protocol to verify that a user has worked for a specific company.