Web3 카지노 프로젝트: 가위바위보의 신
동네에 카지노가 새로 생겼어요! 옆에 도박꾼들이 필승법을 알아냈다고 수근거리네요. 그들이 말하는 필승법을 찾아 카지노의 모든 재산을 먼저 털어봅시다!
Upside_Cookie_Land
Upside_Cookie_Land
에 오신 것을 환영합니다. 쿠키
토큰으로 게임을 즐기고, 상금을 획득하세요. 현재는 가위바위보 게임만 제공하고 있습니다.
쿠키 토큰
토큰은 ETH와 1:100 비율로 교환됩니다.
게임 소개
Station
컨트랙트의 play
함수들을 호출하는 것으로 게임을 시작합니다.
운영자에 의해 검증된 게임만 추가할 수 있으며, 플레이어는 고유한 ID를 통해 게임을 선택할 수 있습니다.
가위바위보 (id: 0)
쿠키
코인을 사용하여 가위바위보 게임을 즐기세요. 게임 결과에 따라 상금을 획득하거나 잃을 수 있습니다. 게임 결과는 컨트랙트 내부에서 생성된 난수를 통해 결정됩니다.
게임 규칙
참가비: 100 이상의 쿠키
코인
사용자 입력
- 현재 무작위로 플레이하는 기능만을 제공합니다. 원하는 결과값을 만들기 위해 적절한 시드를 전달해보세요!
결과
승리: 2배, 무승부: 1배, 패배: 0배
- 각 입력에 대한 승패 여부를 토대로 상금이 책정됩니다.
- 단 한 번이라도 패배하면 모든 상금을 잃습니다.
- 게임의 수행 시점을 기준으로 4 블록 이후의 결과를 토대로 게임 결과를 판정합니다. 사용자는 이를 통해 결과를 검증할 수 있습니다.
개발 계획
- 게임 결과에 따른 상금 반영
- 수수료 5% 적용
- 유동성 제공자에 대한 수익 분배
- jackpot에 따른 쿠키 가격 변동 (최대 2배)
- 추가 게임 제공
Cookie
Inherits: ERC20
Functions
constructor
constructor() ERC20("Cookie", "CKE");
CookieVendor
State Variables
cookie
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
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
Inherits: UUPSUpgradeable, OwnableUpgradeable, GameRPS
Functions
initialize
function initialize() public initializer;
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal override onlyOwner;
GameProxy
Inherits: ERC1967Proxy
Functions
constructor
constructor(UUPSUpgradeable _impl) ERC1967Proxy(address(_impl), "");
implementation
function implementation() public view returns (address);
receive
receive() external payable;
GameRPS
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
}