ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Klaytn SmartContract로 `내기 | 복권` 만들어보기 리뷰
    BlockChain Tech 2020. 6. 3. 18:51

    오늘 Klaytn 지갑 클립이 출시 되었고, 가입 유저들에게 50 Klay가 지급 되었다.

    조만간? 선물로 받은 50 Klay 사용처가 없을 것 같았고, 무언가 새로운 것을 만들어보고 싶어 45% 당첨확률 아이스크림내기 Contract를 만들어보기로 다짐하고, 반차를 사용하였다.

     

    아이스크림 몇 개나 들어오려나~

     

    정확히 난 무엇을 어떻게 만들고 싶은 가?

     처음 내게 창조의 욕구를 준 것은 유저들이 받는 50Klay 였다. 사실 약 8천원이라는 돈은 현금화 하기에는 굉장히 껄끄러운 돈이라고 생각한다. 작은돈도 아닌데. 고생해서 현금화하면 이동 간에 가격차이가 발생하고 또, 출금수수료가 든다. 게다가 코인에 대한 경험이 없는 일반 유저라면 이 과정은 더 힘들 것이다. 하지만 작은 돈들도 모으면 큰 돈이 된다고 생각했다. 그렇게 기부 or 내기 를 생각하다 짧은 시간 끝내고 싶은 마음에 내기 쪽을 선택했다.

     

     무엇을 만들고 싶은지는 대충 정해졌고, 그 다음은 Klip 자체만을 활용하고 싶었다. 현재 Klip안에 Private Key 추출은 없고, 유저가 고작 아이스크림내기를 하러 내가 만든 페이지에서 지갑을 다시 만들거나 혹은 크롬 확장프로그램으로 지갑을 설치하게 하고 싶지 않았다.

     

    이렇게 두 가지의 뚜렷한 목표가 정해졌다. (Depth가 없는 내기)

     

    유저가 Klip 안에서 즐길 수 있게 하기 (feat. 키워드 찾기)

    예전에 토큰 발행과 클라우드세일 코드를 공부하면서 payable의 존재를 알게 됬지만..
    좀 더 세세하게 접근 방법을 적어보고 싶다.

    몇 가지 의문이 들었다. 개인 계좌가 아닌 컨트랙트 계좌에서 입금을 받을 수 있을 까?

    유저가 단순히 SmartContract 주소로 송금을 하면, 당첨여부를 확인할 수 있고, 피드백 받을 수 없을까?

     

    이런 것들을 이미 하고 있는서비스를 생각 하다 보니 어떤 코인을 받고, 다시 다른 코인으로 Swap 해주는 DEX(Dcentral EXchange)가 생각났다. 그래서 나는 Ethereum Dex인 카이버 네트워크 Contract 코드를 찾는 여정을 떠났다.

     

    검색을 하기 위해선 키워드가 필요한 법이라구!

     

    (1) Kyber Network Contract Address 구하기

    생각보다 단순하지만..? 꿀팁이라고 하면, 그냥 직접 메타마스크를 열어버리는 방법이 있다. Gas Fee를 설정 하고 마지막 Confirm을 해야하기 때문에 확인창이 나타나는데. 결국 내가 어디로 보내게 되는지 나와있다.

     

    (2) Contract Code 살펴보기

    오우 에~

     그렇게 구한 Contract 주소로 etherscan에 검색해보면, 유저들에게 좀 더 쉬운 검증?을 하기 위해 제작자가 올려놓은 코드를 볼 수 있다. 누군가의 Code를 읽기는 힘들지만, 읽다 보면 payable이라는 것을 사용하는 함수들이 입금을 받았을 때 돌아가는 로직이라는 것을 알 수 있었다.

     

    그렇게 나는 Payable이라는 키워드를 얻을 수 있었고, 검색을 통하여 payable의 역할을 알게 되었다.

     

    필요한 기능을 조각 조각 만들어내자.

     나는 무언가 만들 때. 그 기능 들을 나열하고, 하나하나 테스트 해보는 것을 선호한다. 뭐.. 내 머리속에 '헤헿 이 기능은 구현 가능이제~' 라는 생각들이 있다면, 바로 설계 하고 작업에 들어가겠지만. 기능이 되는지 안되는지도 모르는 상태에서는 주요 기능들 테스트가 먼저인 것 같다.

     

     

    [Step 1.]

    그래서 난 첫 번째 스텝으로 Contract의 입금과, 송금을 목표로 잡았다.

    - Klip에서 Contract 계좌로 송금

    - 송금 받은 자에게 다시 금액 반환

    케농~ 케농~

    이 문제는 굉장히 쉽게 해결 할 수 있었고, 또 Klip의 송금 수수료가 현재?는 무료이기 때문에 너무 편리했다.
    (단순한 송금은 이벤트성이 아닐지 모르겠지만, Contract 실행은 유지할지 잘 모르겠다.)

     

     

    [Step 2.]

    두 번째 스텝으로 당첨 여부 확인이 필요했다.

     

    SmartContract에서는 난수를 발생하는게 어렵다고 알고 있었고, 대학원에서 들었던 영지식이 어렴풋이 떠올랐다.

    하지만, 난 반차에 대한 결과물을 얻고 싶었기 때문에 너무 복잡하게 생각하지 않았다.

     

    홀리 쓋~ 예측 가능~

    두 개의 인자 모두 block에 데이터로 할까? 아니면, 하나는 유저의 주소를 사용할 까 했지만. 어떤 데이터든 예측이 가능했기 때문에 포기했다. 그러다 문득, 그냥 내가 언제든 seed 값을 바꾸면 되지 않을까? 생각이 들어 Contract Owner만 변경 가능한 변수를 하나 만들었다.

    물론, 이 또한 완벽한 난수는 아닐 것이다. 일단.. 그렇게 무거운 프로젝트는 아니니까 이것으로 만족했다.

     

    급하게 결론..ㅎ

     

    아무 쪼록.. 돈은 잃고 있지만, 단시간에 Front도 없이 만든 서비스 치고 트랜잭션이 나와서 반차가 아깝지 않았다.

    더 자세한 코드리뷰를 하고 싶지만, 이 이상 시간을 쏟고 싶지는 않아. 이렇게 마무리 해본다.

     

    Front도 만들 거대한 생각이였지만.. 마치 텍스트 기반 게임 하나 만든 것 같아 기분이 좋았다.

     

    아.. 더 얘기하고 싶었던 부분은 Klaytn Scope에서 아직 지원되지 않는 기능들로 인하여 과연 내 코드를 검증받을 수 있을까? 에 대한 걱정 그리고, payable로 유저가 참여하기는 굉장히 스무스하지만 피드백이 보이지 않아 답답하지 않을까? 에 대한 걱정. 그리고 전체적인 코드리뷰는 이번 프로젝트의 상위 버전을 만들게 될 때 꼭 해야겠다.

     

    SmartContract 전체 코드

    https://github.com/RyuK-H/Klaytn-Panchigi/tree/master/SmartContract

    댓글

Developer RyuK