VSkill (VeriSkill) is a decentralized platform for verifying skills. It leverages blockchain technology to create a transparent and trustworthy system for skill verification. The platform involves three key roles:
- Users: Submit evidence to be verified.
- Verifiers: Stake money to become verifiers, review evidence, and decide on skill verification.
- Owner: Can modify submission fees and supported skills for verification.
- Solidity
- Yul
- OpenZeppelin
- Foundry
- Filecoin(Lighthouse)
- Chainlink (Price Feed, VRF, Automation)
- Staking mechanism for verifiers
- Reputation system for verifiers
- Incentive mechanism to encourage correct verifications
- Filecoin(Lighthouse) integration for evidence submission and feedback storage
- NFT minting for verified skills
- Random assignment of evidence to verifiers using Chainlink VRF
- Automated evidence distribution using Chainlink Automation
- Real-time USD/ETH price conversion using Chainlink Price Feed
- User submits evidence for verification.
- Verifier check evidence and provide feedback.
- Relayer coordinates the user and verifier.
- Foundry
- Git
- CMake
- Clone the repository:
git clone https://github.com/cqlyj/VSkill
- Navigate to the project directory:
cd VSkill
- Install dependencies:
make install
- Build the project:
make build
-
Start a local Ethereum node:
make anvil
-
Deploy the contracts in the following order:
- VSkillUserNft.sol
- Distribution.sol
- VSkillUser.sol
- Verifier.sol
- Relayer.sol
// Deploy to local anvil network make deploy ContractName // Deploy to specific network (e.g., sepolia) make deploy ContractName NETWORK=Sepolia
-
Update all the necessary parameters in helper configs and initialize the contracts:
make initialize
or
make initialize NETWORK=${NETWORK}
-
Interact with the contracts using the commands in the Makefile. You can view all available commands with:
make help
VSkill includes a comprehensive test suite to ensure the reliability and correctness of the smart contracts.
To run the tests:
// Run all tests on local network
make test
// Run tests on specific network
make test NETWORK=Sepolia
//Generate test coverage report
make coverage-report
//Create a gas snapshot
make snapshot
//Run Slither analysis
make slither
//Run Aderyn analysis
make aderyn
//View project structure
make scope
To deploy VSkill to a testnet or mainnet:
-
Set up your environment variables:
cp .env.example .env
Edit .env and add your:
- RPC URLs for each network
- Private key or burner account details
- Etherscan API keys for verification
- Other required configuration variables
-
Run the deployment script:
make deploy ContractName NETWORK=NetworkName
In case you want to deploy to the layer 2 zkSync local network, you can follow the instructions in file zksync-node-instructions.md
.
//Convert files to CAR format
make packToCar evidence=your_file.txt // or whatever file format you have
//Convert CAR files back to original
make unpackToOrigin carfile=your_file.car output=output_file.txt // or whatever file format you have
//Lighthouse operations
make lighthouse-import-wallet private-key=your_key
make lighthouse-generate-api-key
make lighthouse-upload carfile=your_file.car
We welcome contributions to VSkill! Here's how you can help:
- Bug Reports: Open an issue describing the bug, including steps to reproduce, expected behavior, and actual behavior
- Feature Requests: Submit an issue describing the new feature and its potential benefits
- Code Contributions: Submit pull requests for bug fixes or new features
- Documentation: Help improve or translate our documentation
- Testing: Add more test cases or help identify test coverage gaps
-
Fork the repository and create your branch from
main
:git checkout -b feature/your-feature-name
-
If you've added code, add tests that cover your changes:
forge test
-
Ensure your code follows the project's style guidelines:
make slither make aderyn
-
Make sure all tests pass:
forge coverage
-
Update the documentation if necessary
- Update the README.md with details of changes if applicable
- Follow the existing code style and formatting
- Include comments in your code where necessary
- Add or update tests for any new functionality
- Reference any relevant issues in your PR description
- The PR must pass all CI checks and receive approval from a maintainer
- Use clear and meaningful commit messages
- Reference issue numbers in commit messages when applicable
- Keep commits focused on single changes
- Use present tense ("Add feature" not "Added feature")
- Be respectful and inclusive in your interactions
- Focus on constructive feedback
- Help maintain a positive environment for all contributors
Feel free to reach out if you have questions or need guidance:
- Open a GitHub issue for project-related questions
- Contact Luo Yingjie at luoyingjie0721@gmail.com for other inquiries
Your contributions help make VSkill better for everyone. Thank you for your interest in contributing!
This project is licensed under the MIT License - see the LICENSE file for details.