Solidity.

Beitrag

Teile dein Wissen.

MetaInvestor.
Mar 29, 2025
Experten Q&A

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
Teilen
Kommentare
.

Antworten

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

„Aber gibt es eine Möglichkeit, eine Zufallszahl zu generieren?“ - nicht wirklich, die meisten Blockchains und insbesondere EVM sind von Natur aus deterministisch. Code, den Sie generiert haben, verwendet den Zeitstempel des Blocks aus Gründen der Zufälligkeit, aber er kann mit ausreichendem Aufwand manipuliert werden.

Einige Dienste wie Chainlink veröffentlichen zufällige Dinge auf der Blockchain, die andere Verträge verwenden können. Sie verhalten sich im Grunde genommen wie ein Drittanbieter mit einigen mathematischen Garantien. Es gibt Chainlink-Alternativen, aber sie verwenden sehr ähnliche Ansätze und sind viel weniger beliebt. Wenn Sie also eine gute Quelle für Zufälligkeit in der Kette suchen, ist Chainlink derzeit wahrscheinlich die beste Wahl. Falls Sie nur Solidität lernen, ohne sich Gedanken über die Sicherheit machen zu müssen, können Sie den Ansatz mit dem Zeitstempel wie im generierten Snippet ausprobieren.

0
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.

Solidity is an object-oriented, high-level language for implementing smart contracts. It is a curly-bracket language designed to target the Ethereum Virtual Machine (EVM).

38Beiträge47Antworten
Sui.X.Peera.

Verdiene deinen Anteil an 1000 Sui

Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.

Wir verwenden Cookies, um sicherzustellen, dass Sie die beste Erfahrung auf unserer Website haben.
Mehr Infos