I am Jean a passionate full stack software engineer, focused on Web3 development, specialised in smart contracts and Solidity.
Author of the 📓 All About Solidity Book! + ✍🏼 All About Solidity article series
- 🌱 Currently learning: AI engineering, latest DeFi protocols (Aave v4, Morpho Midnight).
- 🤝🏻 Looking to collaborate on: any web3 protocol or project.
- 💬 Ask me anything about: smart contracts and Solidity! 🫡
- Building a POAP using the LSP8 Standard - Eth Denver 2024 Workshop.
- The Bytecode Episode #4 - Explaining the LSP6 Key Manager
- LUKSO LSP Recipes to build new protocols
- LUKSO Standard Proposal Workshops for BuildUP #2 Hackathon - Episode 1 | Episode 2
Note: below is my GitHub profile as a smart contract code in Solidity!
See GitHubProfile.sol
// SPDX-License-Identifier: YOLOpragma solidity^0.8.x;
// YOLO LICENSE// Version 1, July 10 2015// THIS SOFTWARE LICENSE IS PROVIDED "ALL CAPS" SO THAT YOU KNOW IT IS SUPER// SERIOUS AND YOU DON'T MESS AROUND WITH COPYRIGHT LAW BECAUSE YOU WILL GET IN// TROUBLE HERE ARE SOME OTHER BUZZWORDS COMMONLY IN THESE THINGS WARRANTIES// LIABILITY CONTRACT TORT LIABLE CLAIMS RESTRICTION MERCHANTABILITY SUBJECT TO// THE FOLLOWING CONDITIONS:// 1. #yolo// 2. #swag// 3. #blazeitimport { Ownable } from"@openzeppelin/contracts/access/Ownable.sol";
/// @title GitHubProfile/// @dev A contract to store and manage your GitHub profile information.contractGitHubProfileisOwnable(0xC0Dec0dec0DeC0Dec0dEc0DEC0DEC0DEC0DEC0dE) {
/// @dev Event emitted when the profile is createdevent ProfileCreated(stringusername, stringurl, stringjob, string[] skills);
/// @dev Event emitted when the job is updatedevent JobChanged(stringoldJob, stringnewJob);
/// @dev Event emitted when a new skill is addedevent SkillAdded(stringnewSkill);
struct Github {
string username;
string url;
}
Github private githubInfos;
/// @dev Set as constant as assigned at birth (not planning to change it!)stringpublic constant FIRST_NAME ="Jean";
/// @notice The current job titlestringpublic job;
/// @notice A list of skillsstring[] public skills;
/// @dev My approach to web3, Blockchain and Programming 🪂stringpublic constant motto =unicode"Keep Learning 📚, Keep BUIDLing! 🫡";
/// @dev Initializes the contract with default values for GitHub information, job title, and skills.constructor() {
githubInfos.username ="CJ42";
githubInfos.url ="https://github.com/CJ42";
job ="Smart Contract Team Lead at LUKSO";
skills.push("Solidity");
skills.push("Smart Contracts");
skills.push("Blockchain");
skills.push("Web Development");
skills.push("React");
emitProfileCreated(githubInfos.username, githubInfos.url, job, skills);
}
/// @notice Updates the job title/// @param newJob The new job title to set/// @dev Only the contract owner (CJ42.eth) can call this functionfunction updateJob(stringmemorynewJob) public onlyOwner {
emitJobChanged(job, newJob);
job = newJob;
}
/// @notice Adding a new skill `newSkill` to the list/// @param newSkill The new skill to addfunction addSkill(stringmemorynewSkill) public onlyOwner {
skills.push(newSkill);
emitSkillAdded(newSkill);
}
/// @notice Retrieves the list of skills/// @dev We cant get back the full array from the `public` getter of the state variable./// The `skills(uint256)` getter function can only get value at specific indexes./// @return An array of strings representing the skillsfunction getSkills() publicviewreturns (string[] memory) {
return skills;
}
/// @notice Retrieves the GitHub username and URL/// @return A tuple containing the GitHub username and URLfunction getGithubInfo() publicviewreturns (stringmemory, stringmemory) {
return (githubInfos.username, githubInfos.url);
}
}- All About Solidity
- Blockchain Academic References
- Bitcoin Core Alpha release - Deep Dive into the C++ source code.
- solidity-debugger.io - curated list of Solidity errors and warnings + their explanations and how to fix them.
- Decentralised Relayer Contracts - optimised forked version of any.sender working with Solidity 0.8.x
- Solidity Bytes Utils - Solidity library to manipulate bits and bytes.





