Blog Content

    티스토리 뷰

    가위바위보 게임 개선하기

    트랜잭션 input 값 숨기기

     

    깃헙 주소 : https://github.com/DobbyIsSlave/ha4-RSPGame.git

    컨트랙트 주소 : 0xfbe5695E9104F6a13d0ac9A818194CE5A697D9cC

     

    GitHub - DobbyIsSlave/ha4-RSPGame

    Contribute to DobbyIsSlave/ha4-RSPGame development by creating an account on GitHub.

    github.com

    기존 가위바위보의 경우 이더스캔에서 검색하면 방장이 무엇을 냈는지 미리 알 수가 있었다.

     

    그래서 생각했던 방법은 변수 자체를 private으로 하거나 가위바위보의 값을 해싱하여 넣는 방법 두가지였다.

     

    이후 검색해본 바로는 private으로 할 경우 추적이 어렵지만 16진수 값에서 가위바위보 값을 발견할 수 있다는 글을 보았다.

     

    따라서 가위바위보 값을 해싱하여 input값에 넣는 방법을 택했다.

     

    function RSPHashing (Hand hand, uint roomNum) private returns (bytes32) {
    	return keccak256(abi.encodePacked(uint8(hand) + uint8(roomNum)));
    }

    처음에는 그냥 가위바위보 값을 바로 해싱하여 넣으려 했으나

     

    그렇게 할 경우 두번째 게임부터 첫번째 게임을 분석하여 어떤 해시값이 어떤 해시값을 이기는지 분석이 가능할거라 생각했고,

     

    그래서 기본 가위바위보 값에 현재 방번호를 더한 값을 해싱하여 가위바위보에 사용하기로 했다.

     

    이렇게 하면 매판 가위바위보의 해시값이 달라지니 분석하기 더 어려울 것이라고 생각한다.

     

    방장을 제외한 참가자는 기존처럼 0, 1, 2로 가위바위보 값을 내면 된다.

     

    2를 keccak256으로 해싱한 값 0xf2ee15ea639b73fa3db9b34a245bdfa015c260c598b211bf05a1ecc4b3e3b4f2로 

     

    방을 생성한 이미지

     

    방 번호 0에 바위(0)을 낸 이미지

     

    회고

    코드를 다 짜고 테스트 도중에 keccak256 함수를 써서 해싱한 값이

     

    사이트에서 해싱해서 넣은 값이랑 일치하지 않는다고 계속 에러가 떠서 많이 해맸다.

     

    에러의 원인은 첫째로 사이트에서 복사한 값에 0x를 앞에 붙이지 않고 input에 넣은 것과

     

    둘째는 해싱하는 사이트에서 해싱할 값을 text로 인식할거냐 hex로 인식할거냐 선택하는 부분에서 text로

     

    디폴트가 설정되어 있어서 해싱된 값이 달랐었다.

     

    가나슈로 계속 컨트랙트를 하면서 나오는 값으로 확인하느라 디버깅이 너무 번거로웠다.

     

    뭔가 다른 디버깅 방법을 찾아야만 나중에 더 큰 프로젝트를 하게 되었을 때 진행할 수 있을 것 같다.

    'BlockChain' 카테고리의 다른 글

    졸업증명 DID를 백신시스템으로 변경해 보자  (0) 2022.02.09

    Comments