RPS_GAME (가위바위 보 게임)

이민기·2022년 2월 7일
0
post-thumbnail

RPS_GAME Modify

개발 목적

기존의 가위바위보 게임은 createRoom을 통해 방을 만들며 자신이 사용할 가위바위보 중 하나를 설정하게 되는데 Transaction의 input의 Data를 통해 이를 사전에 확인 가능했으며, 이를 통해 악용가능성이 있으므로 input의 Data를 암호화하여 사전에 확인이 어렵게 수정하였다


코드 설명

  • Hand : rock(0), paper(1), scissors(2)로 구분
  • PlayerStatus : Player의 상태를 나타내며 승리,패배,무승부,대기 상태로 구분
  • GameStatus : Game의 상태를 나태내며 시작전, 시작, 종료, 에러로 구분
  • Player : Player Sturct은 지불가능한 address와 베팅금액, 암호화된 Hand, Player상태로 구분
  • Game : Game Struct은 방장,도전자,총 베팅금액, Game상태로 구분
  • rooms : uint256타입의 방번호로 Game상태로 구성
  • roomLen : 방번호 이며 방이 생성될 때마다 +1씩 증가한다

  • isValidHand : 암호화된 Hand를 검증하기 위한 modifier
  • isPlayer : 함수를 실행하는 사용자가 originator 또는 taker인지 검증하기 위한 modifier

  • Encryption : Hand인 0,1,2 중 하나와 자신의 주소 그리고 지정된 문자열을 합해 암호화 한다

  • createRoom : 가위바위보 게임을 위한 방을 생성한다, 암호화된 hand를 사용해서 실행
  • joinRoom : 암호화된hand와 방번호를 이용해서 방에 입장

  • decodeHand : 암호화된 방장과 도전자의 hand를 decode하는 함수
  • compareHands : 암호화된 방장과 도전자의 hand를 decode하여 게임을 실행하고 그 후 각 player의 상태를 변경

  • payout : 실행자가 방장 또는 도전자인지 확인 후 승리자에게 베팅된 금액 지불

전체 실행 화면


회고

가위바위보 게임을 개선하면서 1차원적인 목적인 input data를 통해 볼 수 있는 방장의 설정된 가위바위보 상태를 숨기는 것은 성공하였으나 입력받은 가위바위보를 암호화하는 Encryption함수를 실행할 때 고정된 문자열을 사용한다는 것은 큰 단점이라고 생각이 된다
sender.sigsender.data를 이용한다던지, 다른 개선 방법에 대해 고민도 필요하고 무엇보다 공부가 더 필요하다는 것을 절실하게 느꼈다


profile
블로그를 옮기는 중입니다. https://min71.dev

0개의 댓글