Web3 카지노 프로젝트: 가위바위보의 신

동네에 카지노가 새로 생겼어요! 옆에 도박꾼들이 필승법을 알아냈다고 수근거리네요. 그들이 말하는 필승법을 찾아 카지노의 모든 재산을 먼저 털어봅시다!

image

Upside_Cookie_Land

Upside_Cookie_Land에 오신 것을 환영합니다. 쿠키 토큰으로 게임을 즐기고, 상금을 획득하세요. 현재는 가위바위보 게임만 제공하고 있습니다.

쿠키 토큰

토큰은 ETH와 1:100 비율로 교환됩니다.

게임 소개

Station 컨트랙트의 play 함수들을 호출하는 것으로 게임을 시작합니다. 운영자에 의해 검증된 게임만 추가할 수 있으며, 플레이어는 고유한 ID를 통해 게임을 선택할 수 있습니다.

가위바위보 (id: 0)

쿠키 코인을 사용하여 가위바위보 게임을 즐기세요. 게임 결과에 따라 상금을 획득하거나 잃을 수 있습니다. 게임 결과는 컨트랙트 내부에서 생성된 난수를 통해 결정됩니다.

게임 규칙

참가비: 100 이상의 쿠키 코인

사용자 입력

  • 현재 무작위로 플레이하는 기능만을 제공합니다. 원하는 결과값을 만들기 위해 적절한 시드를 전달해보세요!

결과

승리: 2배, 무승부: 1배, 패배: 0배

  • 각 입력에 대한 승패 여부를 토대로 상금이 책정됩니다.
  • 단 한 번이라도 패배하면 모든 상금을 잃습니다.
  • 게임의 수행 시점을 기준으로 4 블록 이후의 결과를 토대로 게임 결과를 판정합니다. 사용자는 이를 통해 결과를 검증할 수 있습니다.

개발 계획

  • 게임 결과에 따른 상금 반영
  • 수수료 5% 적용
  • 유동성 제공자에 대한 수익 분배
  • jackpot에 따른 쿠키 가격 변동 (최대 2배)
  • 추가 게임 제공

Cookie

Git Source

Inherits: ERC20

Functions

constructor

constructor() ERC20("Cookie", "CKE");

CookieVendor

Git Source

State Variables

Cookie public cookie;

CK

mapping(address => uint256) internal CK;

Functions

constructor

constructor();

buyCookie

function buyCookie(uint256 _amount) public payable;

sellCookie

function sellCookie(uint256 _amount) public;

increaseCookie

function increaseCookie(uint256 _amount) internal;

decreaseCookie

function decreaseCookie(uint256 _amount) internal;

getCookiePrice

function getCookiePrice() public pure returns (uint256);

getCookieBalance

function getCookieBalance() public view returns (uint256);

Errors

InsufficientFunds

error InsufficientFunds();

TransferFailed

error TransferFailed();

CookieStation

Git Source

Inherits: CookieVendor, Ownable, Pausable, Multicall

State Variables

games

mapping(uint256 => GameMeta) internal games;

gameCount

uint256 gameCount;

rewards

mapping(address => uint256) public rewards;

Functions

constructor

constructor() payable Ownable(msg.sender);

pause

function pause() public onlyOwner;

unpause

function unpause() public onlyOwner;

onlyStatus

modifier onlyStatus(Status _status);

setGame

function setGame(uint256 _gameId, address _game, uint256 _minAmount, uint256 _maxAmount) external onlyOwner;

getGameMeta

function getGameMeta(uint256 _gameId) external view returns (GameMeta memory);

claim

function claim() external onlyStatus(Status.SHOULD_WITHDRAW);

withdraw

function withdraw() public;

playRandom

function playRandom(uint256 _gameId, uint256 _amount, uint256 _length, bytes32 _seed)
    external
    onlyStatus(Status.NEED_GAME);

charge

function charge(uint256 _amount) private onlyStatus(Status.NEED_READY);

Structs

GameMeta

struct GameMeta {
    address logic;
    uint256 minAmount;
    uint256 maxAmount;
}

Enums

Status

enum Status {
    NEED_READY,
    NEED_GAME,
    SHOULD_WITHDRAW
}

UpgradeableGameRPS

Git Source

Inherits: UUPSUpgradeable, OwnableUpgradeable, GameRPS

Functions

initialize

function initialize() public initializer;

_authorizeUpgrade

function _authorizeUpgrade(address newImplementation) internal override onlyOwner;

GameProxy

Git Source

Inherits: ERC1967Proxy

Functions

constructor

constructor(UUPSUpgradeable _impl) ERC1967Proxy(address(_impl), "");

implementation

function implementation() public view returns (address);

receive

receive() external payable;

GameRPS

Git Source

State Variables

ROCK

bytes1 public constant ROCK = bytes1(uint8(Hand.Rock));

PAPER

bytes1 public constant PAPER = bytes1(uint8(Hand.Paper));

SCISSORS

bytes1 public constant SCISSORS = bytes1(uint8(Hand.Scissors));

games

mapping(address => RPSPlay[]) public games;

Functions

getUserGameLength

function getUserGameLength(address _user) public view returns (uint256);

play

function play(address _player, uint256 _amount, bytes1[] memory _hands) public virtual;

play

function play(address _player, uint256 _amount, bytes32 _hands, uint8 _streak) public virtual;

handsToBytes32

function handsToBytes32(bytes1[] memory _hands) public pure returns (bytes32 result);

toRPS

function toRPS(uint256 _amount, bytes32 _hands, uint8 _streak) public view returns (RPSPlay memory result);

calcMultiplier

function calcMultiplier(uint8 _len, bytes32 _player, bytes32 _dealer) internal pure returns (uint256 multiplier);

rule

function rule(bytes1 _player, bytes1 _dealer) internal pure returns (uint8);

verify

function verify(RPSPlay memory data) internal view returns (uint8 code);

getDealerHash

function getDealerHash(RPSPlay memory data) public view returns (bytes32);

claimReward

function claimReward(address owner) public returns (uint256 prize);

Events

GamePlayed

event GamePlayed(address indexed player, uint256 indexed countPlay, uint256 targetBlock, uint256 timestamp);

Claimed

event Claimed(address indexed player, uint256 reward);

Structs

RPSPlay

struct RPSPlay {
    address player;
    uint256 timestamp;
    uint256 targetBlock;
    uint256 bet;
    bytes32 hands;
    uint8 streak;
}

Enums

Hand

enum Hand {
    Rock,
    Paper,
    Scissors
}