PassionProof, a Solana-based program that mints a soulbound badge for consistent open source contributions, has been deployed on devnet. The badge uses Token-2022's NonTransferable extension to permanently lock the token to the recipient's wallet, making it non-transferable at the protocol level. The project was built for the DEV Weekend Challenge: Passion Edition.
How It Works
PassionProof is an Anchor program that leverages two Token-2022 extensions: the NonTransferable extension, which rejects any transfer instruction at the consensus level, and the MetadataPointer plus TokenMetadata extensions, which store metadata directly on the mint account without requiring an external metadata program. The program exposes two instructions: `create_badge_mint` and `mint_badge`. The first initializes the mint with both extensions and writes custom metadata fields — category, awarded_for, recipient, and issued — into the mint's TLV metadata. The second mints exactly one unit into the recipient's associated token account, which becomes permanently bound to that wallet due to the NonTransferable extension.
The developer, a self-taught career-shifter with a Biochemistry degree, recorded their own milestone of becoming a core contributor to statix, a Nix linter now canonical in nixpkgs, as the badge's `awarded_for` field. The badge's on-chain reason field makes it a verifiable record of a specific contribution, not just a generic image.
Technical Challenges and Next Steps
Building PassionProof involved several infrastructure hurdles. The developer initially struggled with getting a local Anchor/Rust toolchain working in WSL due to a transitive dependency requiring Cargo's edition2024 feature, which the Solana CLI's bundled platform-tools compiler didn't support. Unreliable network conditions led to a switch to Solana Playground, a browser-based Anchor IDE, for building, deploying, and testing. Another challenge was manually funding rent for the metadata extension as the account grew, since each metadata field write resizes the account. The developer also had to ensure that the transfer failure test proved the NonTransferable extension's rejection rather than mundane issues like an empty wallet.
Future plans include GitHub-verified minting to make the `awarded_for` field a verified fact instead of a self-attested string, a minimal frontend for users to mint and view their badges, support for multiple contribution categories beyond open source, and a path from devnet to mainnet once the extension logic has more mileage.
Live Demo and Code
The program is deployed on devnet at address HSSLcVQmCdCo8qt9UBMSAL9vbqpxYLkCLHoz74dgrBE1. Real transactions on devnet include creating the badge mint and minting a badge. The code is available on GitHub under the PassionProof repository.