Built Projects
Here are some of my works
GambleFi Protocol
Solidity ArchitectThe core staking engine and gambling logic powering multiple successful platforms. Collectively processed over $100k+ in NFT and ETH volume via 'The Veil' contract and other proprietary betting systems.
SolidityPyth EntropyVRFGas Optimization
Custom Minting Platforms
Full Stack DevDeployed bespoke minting experiences. Handling whitelist logic, Merkle trees, and high-traffic launches with 100% uptime. Example: Elixir by Yowies.
Next.jsElixir YowiesMerkle TreeTailwind
P2P Betting & Arcades
Lead DeveloperCreated fast-paced gambling dApps like Die Guys (Pawshot Roulette) and Big Moto Win. Features real-time gameplay, VRF integration, and secure payout logic.
Big Moto WinDie GuysWeb3.js
Smart Contract Architecture
Secure, gas-optimized, and verifiable on-chain logic. Features TheVeil.sol, the core staking engine for the GambleFi NFT Protocol.
TheVeil.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract TheVeil is IEntropyConsumer, ReentrancyGuard, Ownable {
struct StakeData {
address owner;
uint256 stakeStart;
uint256 targetTime;
bool isBlessed;
bool isClaimed;
uint64 sequenceNumber;
bytes32 userCommitment;
}
mapping(uint256 => StakeData) public stakes;
// Probability weights for blessing system
uint256 private constant NOTES_WEIGHT = 4500; // 45%
uint256 private constant WEAPONS_CACHE_WEIGHT = 1000; // 10%
function stake(uint256 tokenId, bytes32 userRandomNumber) external payable {
require(goatContract.ownerOf(tokenId) == msg.sender, "Not owner");
// Generate user commitment for secure randomness
bytes32 userCommitment = keccak256(
abi.encodePacked(userRandomNumber, msg.sender, block.timestamp)
);
// Request randomness from Pyth Entropy
uint64 sequenceNumber = entropy.requestWithCallback{value: requestFee}(
entropyProvider,
userCommitment
);
stakes[tokenId] = StakeData({
owner: msg.sender,
stakeStart: block.timestamp,
targetTime: 0,
isBlessed: false,
isClaimed: false,
sequenceNumber: sequenceNumber,
userCommitment: userCommitment
});
}
function _determineBlessingType(uint64 seq) private view returns (uint256) {
uint256 rand = uint256(keccak256(abi.encode(seq, block.timestamp))) % 10000;
if (rand < LOOT_CACHES_WEIGHT) return 4;
else if (rand < LOOT_CACHES_WEIGHT + ARMOR_CACHE_WEIGHT) return 3;
else return 0; // Notes of The Veil
}
}