<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Kim</title>
    <description>The latest articles on DEV Community by Michael Kim (@michael_kim_aa14d7026122b).</description>
    <link>https://dev.to/michael_kim_aa14d7026122b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3487994%2Feb68aa6e-7981-4246-bbe8-3a28ebdc59dd.png</url>
      <title>DEV Community: Michael Kim</title>
      <link>https://dev.to/michael_kim_aa14d7026122b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michael_kim_aa14d7026122b"/>
    <language>en</language>
    <item>
      <title>Decentralized Lottery</title>
      <dc:creator>Michael Kim</dc:creator>
      <pubDate>Mon, 08 Sep 2025 20:43:09 +0000</pubDate>
      <link>https://dev.to/michael_kim_aa14d7026122b/decentralized-lottery-1ppd</link>
      <guid>https://dev.to/michael_kim_aa14d7026122b/decentralized-lottery-1ppd</guid>
      <description>&lt;p&gt;Dettery - decentralized lottery dApp (Ethereum testnet Sepolia).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq88oxwx5b4sr3uq4lt65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq88oxwx5b4sr3uq4lt65.png" alt=" " width="500" height="500"&gt;&lt;/a&gt;&lt;br&gt;
I just launched dettery and testing the app. &lt;/p&gt;

&lt;p&gt;Here is the markdown…(&lt;a href="https://github.com/advexon/Dettery" rel="noopener noreferrer"&gt;https://github.com/advexon/Dettery&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;DETTERY - Decentralized Lottery Platform&lt;br&gt;
License: MIT Solidity Next.js TypeScript Ethereum&lt;/p&gt;

&lt;p&gt;A provably fair, transparent, and decentralized lottery system built on Ethereum Sepolia testnet with automatic payouts and secure randomness.&lt;br&gt;
🌟 Features&lt;/p&gt;

&lt;p&gt;🔒 Security &amp;amp; Transparency&lt;/p&gt;

&lt;p&gt;✅ Smart Contract Verified - All contracts are verified and auditable&lt;br&gt;
✅ Block Hash Randomness - Free, secure randomness using blockchain data&lt;br&gt;
✅ No Central Authority - Fully decentralized operation&lt;br&gt;
✅ Automatic Payouts - Winner gets 80%, admin gets 20%&lt;br&gt;
✅ Public Blockchain - All transactions are transparent and verifiable&lt;br&gt;
🎯 User Experience&lt;/p&gt;

&lt;p&gt;✅ Modern UI/UX - Beautiful, responsive design with Tailwind CSS&lt;br&gt;
✅ Real-time Updates - No page refresh needed for lottery updates&lt;br&gt;
✅ Participant Visibility - See all participants and their entries&lt;br&gt;
✅ Multiple Entry Support - Users can enter multiple times&lt;br&gt;
✅ Wallet Integration - MetaMask and Web3 wallet support&lt;br&gt;
🛠️ Technical Features&lt;/p&gt;

&lt;p&gt;✅ TypeScript - Full type safety across the application&lt;br&gt;
✅ Wagmi &amp;amp; Viem - Modern Ethereum development tools&lt;br&gt;
✅ Hardhat - Professional smart contract development&lt;br&gt;
✅ Sepolia Testnet - Deployed and tested on Ethereum testnet&lt;br&gt;
✅ Auto-refresh - Real-time data updates after transactions&lt;br&gt;
🚀 Quick Start&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;Node.js 18+&lt;br&gt;
npm or yarn&lt;br&gt;
MetaMask or Web3 wallet&lt;br&gt;
Sepolia ETH (get from faucets)&lt;br&gt;
Installation&lt;/p&gt;

&lt;p&gt;Clone the repository&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/yourusername/dettery.git" rel="noopener noreferrer"&gt;https://github.com/yourusername/dettery.git&lt;/a&gt;&lt;br&gt;
cd dettery&lt;br&gt;
Install dependencies&lt;/p&gt;

&lt;h1&gt;
  
  
  Install frontend dependencies
&lt;/h1&gt;

&lt;p&gt;npm install&lt;/p&gt;

&lt;h1&gt;
  
  
  Install smart contract dependencies
&lt;/h1&gt;

&lt;p&gt;cd contracts&lt;br&gt;
npm install&lt;br&gt;
cd ..&lt;br&gt;
Environment Setup&lt;/p&gt;

&lt;h1&gt;
  
  
  Copy environment template
&lt;/h1&gt;

&lt;p&gt;cp contracts/.env.example contracts/.env&lt;/p&gt;

&lt;h1&gt;
  
  
  Edit contracts/.env with your configuration
&lt;/h1&gt;

&lt;p&gt;SEPOLIA_RPC_URL=&lt;a href="https://ethereum-sepolia.publicnode.com" rel="noopener noreferrer"&gt;https://ethereum-sepolia.publicnode.com&lt;/a&gt;&lt;br&gt;
PRIVATE_KEY=your_private_key_here&lt;br&gt;
ETHERSCAN_API_KEY=your_etherscan_api_key&lt;br&gt;
Deploy Smart Contracts&lt;/p&gt;

&lt;p&gt;cd contracts&lt;br&gt;
npx hardhat compile&lt;br&gt;
npx hardhat run scripts/deploy.ts --network sepolia&lt;br&gt;
Update Frontend Configuration&lt;/p&gt;

&lt;p&gt;// Update src/lib/config.ts with your deployed contract address&lt;br&gt;
export const FACTORY_ADDRESS = 'your_deployed_contract_address';&lt;br&gt;
Start the Application&lt;/p&gt;

&lt;p&gt;npm run dev&lt;br&gt;
Open in Browser&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;br&gt;
📖 How It Works&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create Lottery Pool&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set ticket price and maximum players&lt;br&gt;
Deploy a new lottery contract&lt;br&gt;
Lottery becomes available for participation&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Participate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connect your Web3 wallet&lt;br&gt;
Pay the ticket price to enter&lt;br&gt;
Multiple entries allowed per user&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Winner Selection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When lottery reaches maximum players&lt;br&gt;
System waits 2 blocks for fair randomness&lt;br&gt;
Block hash randomness selects winner automatically&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Payouts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Winner receives 80% of total pool&lt;br&gt;
Admin receives 20% fee&lt;br&gt;
All transactions are automatic and transparent&lt;br&gt;
🏗️ Architecture&lt;/p&gt;

&lt;p&gt;Smart Contracts&lt;/p&gt;

&lt;p&gt;contracts/&lt;br&gt;
├── Lottery.sol          # Individual lottery logic&lt;br&gt;
├── LotteryFactory.sol   # Factory for creating lotteries&lt;br&gt;
└── scripts/&lt;br&gt;
    └── deploy.ts        # Deployment script&lt;br&gt;
Frontend&lt;/p&gt;

&lt;p&gt;src/&lt;br&gt;
├── app/                 # Next.js App Router&lt;br&gt;
├── components/          # React components&lt;br&gt;
│   ├── ConnectWallet.tsx&lt;br&gt;
│   ├── CreateLottery.tsx&lt;br&gt;
│   ├── LotteryCard.tsx&lt;br&gt;
│   └── LotteryList.tsx&lt;br&gt;
└── lib/&lt;br&gt;
    └── config.ts        # Contract addresses and ABIs&lt;br&gt;
🔧 Configuration&lt;/p&gt;

&lt;p&gt;Environment Variables&lt;/p&gt;

&lt;p&gt;Create contracts/.env:&lt;/p&gt;

&lt;p&gt;SEPOLIA_RPC_URL=&lt;a href="https://ethereum-sepolia.publicnode.com" rel="noopener noreferrer"&gt;https://ethereum-sepolia.publicnode.com&lt;/a&gt;&lt;br&gt;
PRIVATE_KEY=your_private_key_here&lt;br&gt;
ETHERSCAN_API_KEY=your_etherscan_api_key&lt;br&gt;
Contract Addresses&lt;/p&gt;

&lt;p&gt;Update src/lib/config.ts:&lt;/p&gt;

&lt;p&gt;export const FACTORY_ADDRESS = '0xDE22C7fF7Ac8C7645AfB673a4Ea7087705FE94Ce';&lt;br&gt;
🧪 Testing&lt;/p&gt;

&lt;p&gt;Smart Contract Tests&lt;/p&gt;

&lt;p&gt;cd contracts&lt;br&gt;
npx hardhat test&lt;br&gt;
Frontend Testing&lt;/p&gt;

&lt;p&gt;npm run test&lt;br&gt;
Manual Testing&lt;/p&gt;

&lt;p&gt;Connect MetaMask to Sepolia testnet&lt;br&gt;
Get Sepolia ETH from faucets&lt;br&gt;
Create a lottery pool&lt;br&gt;
Participate with multiple wallets&lt;br&gt;
Test winner selection and payouts&lt;br&gt;
📊 Smart Contract Details&lt;/p&gt;

&lt;p&gt;Lottery Contract&lt;/p&gt;

&lt;p&gt;contract Lottery {&lt;br&gt;
    // Core state variables&lt;br&gt;
    uint256 public immutable i_ticketPrice;&lt;br&gt;
    uint256 public immutable i_maxPlayers;&lt;br&gt;
    address payable public immutable i_admin;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Lottery state
enum LotteryState { OPEN, CALCULATING_WINNER, CLOSED }
LotteryState private s_lotteryState;

// Participants and winner
address payable[] public s_players;
address public s_winner;

// Randomness
uint256 public s_commitBlock;
uint256 public s_revealBlock;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;br&gt;
Key Functions&lt;/p&gt;

&lt;p&gt;enter() - Join the lottery by paying ticket price&lt;br&gt;
pickWinner() - Select winner using block hash randomness&lt;br&gt;
getPlayers() - Get list of all participants&lt;br&gt;
getLotteryState() - Get current lottery state&lt;br&gt;
🔒 Security Features&lt;/p&gt;

&lt;p&gt;Randomness&lt;/p&gt;

&lt;p&gt;Uses blockhash(), block.timestamp, and block.prevrandao&lt;br&gt;
Commits to randomness block, reveals after 2 blocks&lt;br&gt;
Prevents manipulation and ensures fairness&lt;br&gt;
Access Control&lt;/p&gt;

&lt;p&gt;Only lottery participants can trigger winner selection&lt;br&gt;
Admin cannot manipulate results&lt;br&gt;
All functions are public and auditable&lt;br&gt;
Transparency&lt;/p&gt;

&lt;p&gt;All lottery data is public&lt;br&gt;
Contract source code is verified&lt;br&gt;
All transactions are on-chain&lt;br&gt;
🌐 Deployment&lt;/p&gt;

&lt;p&gt;Sepolia Testnet (Current)&lt;/p&gt;

&lt;p&gt;Factory Contract: 0xDE22C7fF7Ac8C7645AfB673a4Ea7087705FE94Ce&lt;br&gt;
Network: Ethereum Sepolia&lt;br&gt;
RPC: &lt;a href="https://ethereum-sepolia.publicnode.com" rel="noopener noreferrer"&gt;https://ethereum-sepolia.publicnode.com&lt;/a&gt;&lt;br&gt;
Mainnet Deployment&lt;/p&gt;

&lt;p&gt;Update environment variables&lt;br&gt;
Deploy to mainnet&lt;br&gt;
Verify contracts on Etherscan&lt;br&gt;
Update frontend configuration&lt;br&gt;
🤝 Contributing&lt;/p&gt;

&lt;p&gt;We welcome contributions! Please see our Contributing Guidelines for details.&lt;/p&gt;

&lt;p&gt;Development Setup&lt;/p&gt;

&lt;p&gt;Fork the repository&lt;br&gt;
Create a feature branch&lt;br&gt;
Make your changes&lt;br&gt;
Add tests if applicable&lt;br&gt;
Submit a pull request&lt;br&gt;
📝 License&lt;/p&gt;

&lt;p&gt;This project is licensed under the MIT License - see the LICENSE file for details.&lt;/p&gt;

&lt;p&gt;🆘 Support&lt;/p&gt;

&lt;p&gt;Issues: GitHub Issues&lt;br&gt;
Discussions: GitHub Discussions&lt;br&gt;
Documentation: Wiki&lt;br&gt;
🙏 Acknowledgments&lt;/p&gt;

&lt;p&gt;Hardhat - Smart contract development framework&lt;br&gt;
Next.js - React framework&lt;br&gt;
Wagmi - React hooks for Ethereum&lt;br&gt;
Viem - TypeScript interface for Ethereum&lt;br&gt;
Tailwind CSS - CSS framework&lt;br&gt;
📈 Roadmap&lt;/p&gt;

&lt;p&gt;Mainnet deployment&lt;br&gt;
 Mobile app (React Native)&lt;br&gt;
 Additional randomness providers&lt;br&gt;
 Lottery categories and themes&lt;br&gt;
 Governance token&lt;br&gt;
 Multi-chain support&lt;/p&gt;

</description>
      <category>dettery</category>
      <category>blockchain</category>
      <category>dapp</category>
    </item>
  </channel>
</rss>
