Skip to content
View CJ42's full-sized avatar

Highlights

  • Pro

Organizations

@lukso-network
Block or Report

Block or report CJ42

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
CJ42/README.md

Welcome to my GitHub Profile! 👋

side Gif

X (formerly Twitter) URL Contact Me Read My Articles Youtube videos 🥖🥐🇫🇷

I am Jean a passionate web3 dev, specialised in smart contracts and Solidity.

Author of the 📓 All About Solidity Book! + ✍🏼 All About Solidity article series

  • 🔭 Currently working as: Smart Contract Team Lead at LUKSO.
  • 🌱 Currently learning: Defi.
  • 🤝🏻 Looking to collaborate on: any web3 protocol or project.
  • 💬 Ask me anything about: smart contracts and Solidity! 🫡

🎙️ Talks & Presentations

Note: below is my GitHub profile as a smart contract code in Solidity!


// SPDX-License-Identifier: YOLO
pragma 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. #blazeit

import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";

/// @title GitHubProfile
/// @dev A contract to store and manage your GitHub profile information.
contract GitHubProfile is Ownable(0xB82023c6d61C60E8715db485066542d501A91140) { // cj42.eth

    /// @dev Event emitted when the profile is created
    event ProfileCreated(string username, string url, string job, string[] skills);

    /// @dev Event emitted when the job is updated
    event JobChanged(string oldJob, string newJob);

    /// @dev Event emitted when a new skill is added
    event SkillAdded(string newSkill);

    struct Github {
        string username;
        string url;
    }

    Github private githubInfos;

    /// @dev Set as constant as assigned at birth (not planning to change it!)
    string public constant FIRST_NAME = "Jean";
    
    /// @notice The current job title
    string public job;

    /// @notice A list of skills
    string[] public skills;

    /// @dev My approach to web3, Blockchain and Programming 🪂
    string public 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");

        emit ProfileCreated(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 function
    function updateJob(string memory newJob) public onlyOwner {
        emit JobChanged(job, newJob);
        job = newJob;
    }

    /// @notice Adding a new skill `newSkill` to the list
    /// @param newSkill The new skill to add
    function addSkill(string memory newSkill) public onlyOwner {
        skills.push(newSkill);
        emit SkillAdded(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 skills
    function getSkills() public view returns (string[] memory) {
        return skills;
    }

    /// @notice Retrieves the GitHub username and URL
    /// @return A tuple containing the GitHub username and URL
    function getGithubInfo() public view returns (string memory, string memory) {
        return (githubInfos.username, githubInfos.url);
    }
}

🌟 Featured Projects

Jean's Github Stats

💝 LUKSO Featured

Jean's Github Stats

👨🏻‍🍳 Ongoing projects I am cooking

Pinned Loading

  1. All-About-Solidity All-About-Solidity Public

    A series of tutorials that cover most of the core elements of the Solidity language

    Assembly 526 108

  2. solidity-debugger.github.io solidity-debugger.github.io Public

    Solidity Debugger - A curated list of errors and warnings for Solidity, main smart contract language used by Ethereum

    30 2

  3. lukso-forge-template lukso-forge-template Public

    Forge / Foundry template to get started with @lukso/lsp-smart-contracts

    TypeScript 6

  4. contracts.any.sender contracts.any.sender Public

    Forked from PISAresearch/contracts.any.sender

    Contracts for the any.sender repo

    Solidity 1

  5. Solidity-BytesUtils Solidity-BytesUtils Public

    (Work in Progress) - Solidity library to manipulate bytes, including getting subsets and toggling.

    Solidity 1 2