EOS 기반 방치형 RPG게임 제작 #1
EOS 기반의 게임을 만들고 있습니다. 만든지는 2달쯤 되었고, 그동안 진행했던 내용들을 개발기처럼 이곳에 공유해볼까 합니다.
.
.
2018년 4월, EOS 게임 개발의 시작
0.5초의 트랜잭션 컨펌! 1000TPS 이상의 성능! 10분의 트랜잭션 완료시간이 걸리는 이더리움으로는 할수 있는게 너무나 제한적이였는데, 이정도면 충분히 쓸만한 dApp을 만들어 불수 있을것 같았다. 목표는 방치형 RPG, 스마트 컨트랙트 코드위에서 재료가 드랍되고, 장비도 합성하는 종류의 게임을 러프하게 기획했다. 모든 재료의 드랍과 장비의 생성이 단순이 체인위에 기록하는 것이 아니라, 생성 자체가 컨트랙트 위에서 이루어 지게해서 레어도에 대한 신뢰를 얻을 수 있는 게임. 유저들간에 아이템 거래가 가능한 게임.
2018년 4월, 프로토 타입 개발
EOS 스마트 컨트랙트 개발은 솔리디티에 비해 이해해야 될 것들이 많은데다가, EOS자체가 급격하게 변하는 중이라 바로 컨트랙트로바로 개발하는 것은 시간을 너무 많이 잡아 먹는 일이라 생각했다. 그래서 먼저 게임성 검증을 위해 로컬에서 컨트랙 없이 개발을 진행했다. 대신 추후 스마트 컨트랙으로 포팅이 쉽게 EOS 스마트 컨트랙트에 콜을 날리는 것처럼 시뮬레이션 해서 코드를 작성했다. 3~4주 정도의 작업으로 장비 재료 50종이 드랍되고 장비 200종을 장착할 수 있는 프로토 타입을 만들었다.
2018년 5월, EOS VC에 제안서 제출
EOS에서 직접 벤처 캐피탈을 운영하는데 이곳에 시험삼아 한번 제안서를 보내봤다. 지금 까지의 개발 진행과, 앞으로의 마일스톤 그리고 이 게임이 왜 워킹할 것인지에 대한 내용이였다. 큰 기대를 하고 보낸것은 아니지만 2주 정도 뒤에 답변이 왔다.
Many thanks for reaching out. The goal of our EOS VC program is to provide resources to help new projects get off the ground, and to help existing projects move to the EOS blockchain.
I have gone ahead and forwarded your submitted information to our EOS VC partners and fund managers for them to independently evaluate your project. Should an investment manager have an interest in your project, they will reach out to you directly.
Not all projects building on the EOS blockchain will receive EOS VC funding – rather, funding is only available to projects that are building or have firm intentions to build on the EOS ecosystem. Decision-making on investments is at the sole discretion of the EOS VC partners and investment managers.
...
내 제안서를 파트너 VC (아마도 홍콩)쪽으로 보냈고 그쪽에서 판단할거다 라는 내용. 아직까지 연락은 없다. 급조한 제안서라 아마도 탈락 하지 않을까 싶다. VC를 받아서 회사로 독립한다는 것 자체가 큰 도전이기 때문에, 진짜로 독립하겠다는 생각이 들때 이번 제출을 경험삼아 제대로 만들어서 보내볼 수 있을 것 같다.
2018년 5월, 스마트 컨트랙트 클라이언트 제작
안타깝게도 EOS 클라이언트는 전무하다. 공식적으로 제공하는 유일한 js클라이언트는 EOS의 개발 속도를 못따라가 동작하지 않은지 오래다. 체인에 트랜잭션을 날리는 것은 의외로 간단하다. 체인 데몬(nodeos)에 Rest 콜을 날리면 끝. 문제는 트랜잭션을 개인 키로 싸이닝 하지 않으면 권한이 없다고 실패를 한다. 싸이닝을 하는 방법은 2가지인데 하나는 월렛 서버를 이용하는 방법이다. 메타마스크를 일종의 로컬 월렛 서버로 보면된다. 다만 이 방법은 모바일 게임으로 만들기에 불가능하다. 다른 한가지 방법은 직접 싸이닝 하는 방법. 모바일 게임을 위해서는 이 방법이 유일한데, 문제는 타원 암호를 이용한 공개키, 비밀키의 구현이 해당 분야 전문가가 아니고서야 쉬운 일이 아니라는것. 다행이 국내에 프랙탈이라는 회사가 java버전으로 싸이닝을 직접하는 코드를 개발을 했는데, 이걸 가지고 C#으로 포팅을 하기로 했다. (https://github.com/plactal/EosCommander)
과정은 삽질의 연속이였다. 4~5 종류의 처음 보는 해싱함수들과 타원 암호 코드, 처음에는 하나씩 이해를 하면서 포팅하려 했지만, 시간이 오래걸릴 것 같아 단순 기계 포팅으로 방향을 바꿨다. 포팅시 가장 큰 문제는 BigInteger. 이 클래스는 아주아주 큰 정수를 처리할수 있게 해주는 클래스이다. RSA쪽에도 사용되고 Base58에도 사용되고 암호쪽에서는 매우 애정하는 클래스 인것처럼 보였다. 문제는 유니티에서는 Mono버전이 낮아서 저 클래스가 아예 없다. 상위 버전의 BigInteger도 제공하는 기능이 단순해서 타원 암호 구현이 가능할지 의문이였다. 직접 BigInteger를 구현할 수 밖엔 없는 상황. github에 누가 구현한걸 가져왔는데 클라이언트가 1~2초 멈출 정도로 성능이 너무나 떨어지는데다가 버그도 너무 많고 일부 구현은 없어서 직접 구현해 줬지만 결국 기존 구현들 자체에 문제가 많아서 실패했다. 몇번의 삽질 끝에 그냥 open jdk의 BigInteger클래스를 그대로 C#으로 포팅하기로 했다. 이 역시 삽질의 연속, 문제는 java에 signed 데이터 형이 없어서 동작이 C#과 다른것과, 묵시적 형 변환시 동작이 C#과 달라서 버그를 찾는데 시간이 오래 걸렸다. 일주일만에 겨우 포팅하는데 성공!
다음 문제는 EOS의 시리얼라이징 이슈이다. 개발이 급격히 진행이 되면서, transaction 구조체에 없던 필드들이 잔뜩 늘어나기도하고, 사라지기도 하고, 싸이닝을 위해 붙이던 prefix가 바뀌기도하고, 앞뒤 패딩이 바뀌기도 하고 eos git을 땅겨와서 빌드를 걸때마다 기존 코드들이 안돌아 갔다. 문제는 문서화가 전혀 없다는것, eos 코드를 주구장창 보면서 어디가 바꼈는지 눈으로 확인할 수 밖엔 없었다. 프랙탈쪽 코드도 eos의 빠른 변화를 따라가기엔 한계가있어서 직접 하는 수 밖엔 없었다. 다행인건 Dawn4가 마지막일꺼라 이제는 더 급격한 변화는 없을 것 같다.
2018년 5월, 스마트 컨트랙 포팅
기존에 작업했던 비지니스 로직을 모두 컨트랙트 쪽으로 하나씩 옮기기 시작했다. 이쪽 개발이 처음이라 착각했던것 중에 하나는, 트랜잭션을 날리고 일반 적인 Rest API처럼 내가 원하는 대로 Response를 줄 수 있을줄 알았다. 생각해보면 비동기로 트랜잭션이 승인되는거라 그게 가능할리 없지,, 결국 트랜잭션을 날리고 변화된 내용을 fetch 해가는 식으로 로직을 모두 변경했다. 이 이슈를 빼면 기존에 포팅을 쉽게 하기위해 구조를 잡아둬서, 넘어가는 작업은 비교적 순조로웠다. EOS 스마트 컨트랙은 C++로 작성을 하는데 난이도가 솔리디티에 비해 조금 있는 반면, 대신 솔리디티에 비해 훨씬 좋은 기능들을 많이 제공한다. 특히나 데이터를 store하는 쪽은 멀티 인덱스가 지원되는 테이블을 지원해서, 솔리디티에 비하면 훨신 데이터를 가공하기가 쉽다.
개발중에 몇가지 EOS 컨트랙트쪽 자체 버그들을 발견했는데 하나는 좀 크리티컬한 것이였다. 스마트 컨트랙트내 persistance api에서 iterator쪽 버그로 무한루프가 발생하고 이로인해 체인이 멈춰버리는 (https://github.com/EOSIO/eos/issues/2787) 이슈로, 올리자마자 댄라이머가 수정했다는 답글을! 댄한테 답글을 받다니! Dawn4로 넘어가면서 Dawn3에서 멀쩡하던것이 안되던 이슈도 발생했는데 (https://github.com/EOSIO/eos/issues/3013) 이것도 EOS 1.0버전에 수정돠어 포함되었다.
계속 이어집니다~
재밌네요. 응원합니다!
빨리 다음 편 보고 싶어요.
응원합니다~~
pairplay 가 kr-dev 컨텐츠를 응원합니다! :)
저도 아직 기여한 바는 없지만 참여하고 있습니다. ㅎㅎ
많은 피드백 + 응원 기대합니다 !!
아니 커픽스님이 참여하고 계시군요!!
네 ~ 많은 피드백 부탁드려요 ㅎㅎ
대단하시네요 응원합니다^^
보팅하고 가요~~
raindays 님 멋진 도전 응원합니다. 스팀친구 추가했습니다. 저도 EOS 개발하고 싶습니다. ^^ 쫌 가르쳐주세요.
감사합니다. 저도 배우면서 하고 있어요ㅎㅎ
오옷~ 정말 멋지네요
너무 재밌게 읽었습니다. 얼른 소개페이지라도 만들어져서 코리오스 dApp 코너에 소개할 수 있는 그날을 기대하겠습니다.
Koreos에 소개된다니 두근두근 하네요! 그쪽에 소개될정도로 작업이 되면 또 공유드리겠습니다.
EOS 기반 방치형 RPG !!기대되네요. 응원합니다!