Solidity.

Publication

Partagez vos connaissances.

MetaInvestor.
Mar 29, 2025
Questions et Réponses avec des Experts

How to generate random Number between 1&2 without VRF?

So I was making a coinflip game which assigns head- 1 and tails -2 and when user places bet on polygon chain.... smart contract generates a random number between 1 and 2 and if the outcome is same...user gets double - (5 % as fee to the owner of contract) ! from a pool and if outcome is different then user loses all and the lost amount is deposited in the pool - (3% as fee to the owner) (to fund winners)... but any way to make genrate a random number? I have no funds at all so I can't afford chainlink VRF to generate. So is there any other secure way for this? plus I am pritty new to solidity so I made this code with help of chat gpt but I don't it works....can anyone help to make the code better? code-

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract CoinFlip {
    address public owner;
    uint256 public contractBalance;
    
    event BetPlaced(address indexed player, uint256 amount, bool choice);
    event BetResult(address indexed player, uint256 amount, bool won);
    
    constructor() {
        owner = msg.sender;
    }
    
    function placeBet(bool choice) external payable {
        require(msg.value > 0, "Bet amount must be greater than 0");
        
        bool outcome = (block.timestamp % 2 == 0); // Simple pseudo-random outcome
        if (outcome == choice) {
            uint256 winAmount = (msg.value * 2 * 95) / 100;
            require(address(this).balance >= winAmount, "Insufficient contract balance");
            payable(msg.sender).transfer(winAmount);
            emit BetResult(msg.sender, winAmount, true);
        } else {
            uint256 lostAmount = (msg.value * 97) / 100;
            contractBalance += lostAmount;
            emit BetResult(msg.sender, msg.value, false);
        }
        emit BetPlaced(msg.sender, msg.value, choice);
    }
    
    function depositFunds() external payable {
        require(msg.sender == owner, "Only owner can deposit funds");
        contractBalance += msg.value;
    }
    
    function withdrawFunds(uint256 amount) external {
        require(msg.sender == owner, "Only owner can withdraw funds");
        require(amount <= address(this).balance, "Insufficient contract balance");
        payable(owner).transfer(amount);
        contractBalance -= amount;
    }
}
  • Smart Contract
  • Solidity
0
1
Partager
Commentaires
.

Réponses

1
0x67fc...27ac.
Mar 31 2025, 13:26

« mais y a-t-il un moyen de générer un nombre aléatoire ? » - pas vraiment, la plupart des blockchains et l'EVM en particulier sont déterministes de par leur conception. Le code que vous avez généré utilise l'horodatage du bloc pour des raisons aléatoires, mais il peut être manipulé avec suffisamment d'effort.

Certains services comme chainlink publient des informations aléatoires sur la blockchain pour d'autres contrats à utiliser, agissant essentiellement comme un tiers avec des garanties mathématiques. Il existe des alternatives aux chaînes, mais elles utilisent des approches très similaires et beaucoup moins populaires. Donc, si vous voulez une bonne source de hasard sur la chaîne, chainlink est probablement votre meilleur choix pour le moment. Si vous apprenez simplement la solidité sans vous soucier de la sécurité, vous pouvez essayer l'approche avec l'horodatage, comme dans l'extrait généré.

0
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

Nous utilisons des cookies pour vous assurer la meilleure expérience sur notre site Web.
Plus d'infos