Unleash Your Luck: Crafting and Launching a Decentralized Lottery Contract in Solidity

Harshita BadwalHarshita Badwal
2 min read

Building a Decentralized Lottery Contract in Solidity.

Problem Statement:

Traditional lotteries are often criticized for their lack of transparency and fairness. Participants are left to trust that the lottery organizers are conducting the draw fairly, without any way to verify the results. This lack of transparency can lead to skepticism and distrust among participants.

Solution:

Decentralized lottery contracts solve this problem by using blockchain technology to ensure transparency and fairness. Each participant's entry is recorded on the blockchain, and the winner is selected through a transparent and verifiable randomization process.
In this article, we will create a basic decentralized lottery contract with Solidity. The contract will allow participants to enter the lottery by contributing ether, with a random winner receiving the full contract value.

Our Solidity contract includes the following features:

  • A manager variable to store the address of the contract deployer.

  • A participants array to store the addresses of all participants.

  • A receive function to allow participants to enter the lottery by sending ether.

  • A selectWinner function to randomly select a winner and transfer the contract balance to them.

  • The getBalance function returns the current balance of the contract. It can only be called by the manager.

  • The random function generates a pseudo-random number based on the current block's difficulty, timestamp, and the number of participants.

pragma solidity >=0.5.0 <0.9.0;
contract lottery{
    address public manager;
    address payable[] public participants;

    constructor ()
    {
        manager=msg.sender;  //global variable

    }
receive () external payable {
    require(msg.value==1 ether);
    participants.push(payable(msg.sender));
}

    function getBalance() public view returns(uint)
{
    require (msg.sender==manager);
    return address(this).balance;

}
    function random() public view returns(uint)
{
       return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, participants.length)));

}
    function selectWinner() public 
{
    require(msg.sender==manager);
    require(participants.length>=3);
    uint r= random();
    address payable winner;
    uint index = r % participants.length;
    winner=participants[index];
    winner.transfer(getBalance());

}
}

Now, we'll deploy a Solidity smart contract on the Goerli test network using Remix and MetaMask. This network provides a safe environment for testing without using real Ether.

  1. Compile your contract in Remix.

  2. Configure MetaMask for Goerli.

  3. Get Goerli test Ether from a faucet.

  4. Deploy your contract in Remix using "Injected Web3."

  5. Interact with your contract on the Goerli test network.

This allows you to test your contract's functionality before deploying it on the Ethereum mainnet.

Conclusion
Decentralized lottery contracts represent a new model for running lotteries that is transparent, fair, and safe. By utilizing the power of blockchain technology, these contracts can offer a new degree of reliability to the world of lotteries, making them more appealing to both players and organizers.

1
Subscribe to my newsletter

Read articles from Harshita Badwal directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Harshita Badwal
Harshita Badwal

๐Ÿ”—โ˜๏ธ Tech enthusiast exploring blockchain, cloud, and development through blogging โœ๏ธ.