Действительно ли этот код Solidity каждый раз создает случайное число или конечный результат всегда один и тот же?

Ладно, поехали. Я очень начинающий программист-любитель, но недавно я погрузился в мир криптографии и пытаюсь хотя бы опасно познакомиться со смарт-контрактами Solidity. Это код из игры defi. Смысл этого кода в том, чтобы сгенерировать «подбрасывание монеты». Я чувствую, что это создает больше победителей, чем проигравших. Кроме того, не будет ли этот код давать один и тот же результат каждый раз, когда он использует адреса общедоступных кошельков ПОЛЬЗОВАТЕЛЕЙ (msg.sender) «постоянный номер» в качестве основы для функции?

Пожалуйста, мысли и спасибо!

Для переменной msg.sender вы можете использовать и адрес кошелька ERC-20, т.е.

0xA2C8EB70b58D57Db442a2395e8aB80b640C655a7

Если нужен весь контракт, его можно найти здесь.

https://bscscan.com/address/0xc4661ce2ef5dd31a1e020985e7364708c1af03d5#code

        //address(this).balance is increased by msg.value even before code is executed. Thus "address(this).balance-msg.value"
    //Create a random number. Use the mining difficulty & the player's address, hash it, convert this hex to int, divide by modulo 2 which results in either 0 or 1 and return as uint8
    uint8 result = uint8(uint256(keccak256(abi.encodePacked(block.difficulty, msg.sender, block.timestamp)))%2);
    bool won = false;
    if (guess == result) {
      won = true;
      uint256 win = (amount* 2/100*(100-houseedge));
       tokenpiggies.transfer(msg.sender, win-amount);
    }else{
        tokenpiggies.transferFrom(msg.sender, address(this), amount);  
    }

    emit GameResult(result);
    lastPlayedGames.push(Game(msg.sender, amount, guess,3, won, block.timestamp));
    return won; //Return value can only be used by other functions, but not within web3.js (as of 2019)
  }

0 ответов

Другие вопросы по тегам