Klaytn 안전한 랜덤 값 생성 방법

안녕하세요 klatn을 통해서 개발을 진행을 하고 있습니다.

다름이 아니라 난수 생성하는 부분에서 많은 부분을 고려해야 한다고 생각을 하여 질문을 드립니다.

실타래 NFT사건도 있듯이 외부 데이터를 따오지 않는 이상 완전하게 안전한 난수 생성이 어려운 것으로 알고 있고 저는 안전한 난수 생성이 필요한 상황입니다.

혹시 안전한 난수 생성이 가능한 방법이 있는지가 의문이 들어거 질문을 남깁니다.

  • 글이 좀 두서가 없는거 같네요;;
function makeRandomNumber(uint256 _tokenNumber)
        internal
        view
        returns (uint256)
    {
        return
            uint256(
                keccak256(
                    abi.encodePacked(
                        block.timestamp,
                        msg.sender,
                        block.difficulty,
                        blockhash(block.number - 1),
                        _tokenNumber
                    )
                )
            ) % 100;
    }

최대한 검색을 통해서 어찌저찌 값들을 넣어보았는데 이러한 코드가 안전한 난수 생성이 가능한지도 궁금합니다.

감사합니다.

안녕하세요 :slight_smile:

말씀해주신 것처럼 외부 데이터 없이 완전한 난수 생성은 어렵습니다.

제공해주신 코드 상 보여지는 데이터들 모두 유추할 수 있기 때문에, 완전한 난수라고 보기는 어려울 것 같습니다.

현재 witnet 오라클 (https://witnet.io/) 을 지원하고 있으니, 완전한 난수 생성을 위해 witnet 오라클을 사용하시기를 권장드립니다.

또한 추가적으로, chainlink 오라클 역시 3Q에 지원 예정이오니 참고 부탁드립니다.

감사합니다.

2 Likes