Unity에서 Nethereum으로 Ethereum 노드와 연동하기

Park Juhyung
GoCryptobot
Published in
4 min readFeb 9, 2018

Nethereum 소개
Nethereum은 C#에서 Geth나 Parity 같은 이더리움 Client에서 제공하는 JSON RPC를 C#에서 쉽게 쓸 수 있게 해주는 라이브러리입니다. javascript로 제공되는 Web3라이브러리의 C#버전이라고 볼 수 있죠.

Nethereum의 유니티 지원

Nethereum 라이브러리의 페이지에 가면 유니티를 지원한다고 되어있습니다. 이 라이브러리를 사용하여, 유니티로 만든 모바일 게임에서도 이더리움 거래를 할 수 있습니다. 이더리움의 스마트 컨트랙트도 사용할 수 있습니다. 크립토 키티보다 복잡한 크립토 게임을 만들 계획이라면 유니티와 이 라이브러리를 같이 쓰는 걸 추천합니다.

하지만 유니티에서 라이브러리를 쓰려 하면 여러 문제에 부딪칩니다. 유니티는 낮은 버전의 .Net을 사용하기 때문이죠. 때문에 Nethereum에서 제공하는 매력적인 API들 중 상당수를 쓸 수 없습니다. 유니티용으로 제공되는 별도의 API를 써야합니다. 또한 문서에도 문제가 있습니다. 문서가 Unity가 아닌 환경에 대해서만 정리되어 있습니다. 때문에 공식 문서를 보고 Unity에서 이 라이브러리를 쓰려고 하면 꽤 큰 고생을 하게 됩니다. 공식 문서에서 나오는 함수들을 유니티에서는 쓸 수 없습니다.

이 뒤에서는 Unity에서 Nethereum을 사용해본 경험을 바탕으로 도움이 될만한 내용들을 정리했습니다.

Unity용 라이브러리 다운로드

https://github.com/Nethereum/Nethereum/releases

깃헙의 릴리즈 페이지에서 Nethereum.Unity.zip 을 받아야 합니다. nuget이나 다른 방식으로 라이브러리를 받으면, 유니티에서는 동작하지 않습니다.

쓰는 법

보통 라이브러리를 처음 사용하게 되면 공식 문서를 보게 됩니다. 공식 문서의 tutorial을 보고 따라서 쓰게 되죠. 하지만 Nethereum에는 유니티에서 어떻게 쓰는 법에 대한 공식 문서가 없습니다. 다만 블로그 글이 하나 올라와 있죠. 이 블로그에 간단한 사용법이 올라와 있습니다.

라이브러리에서 제공해 주는 기능

유니티용으로 배포되는 Nethereum에서는 다음 기능들을 쓸 수 있습니다.

  1. Web3의 API들
    Nethereum.JsonRpc.UnityClient namespace 아래에 web3 API들과 1대1 대응되는 함수들이 들어있습니다. Account의 balance들을 얻는 것, Transaction 보내기, Contract에 call해보기 등을 할 수 있습니다.
  2. Private key 생성 및 sign
    Nethereum.Signer namespace 아래에 있는 EthECKey의 함수들을 사용하여 ethereum account를 직접 만들거나 임의의 데이터를 signing할 수 있습니다.
  3. 오프라인 sign
    TransactionSignedUnityRequest을 사용하면, 트랜잭션을 보낼 때 게임 내부에서 signing해서 보낼 수 있습니다. 이 기능을 쓰면 유저의 private key를 ethereum node에 보내지 않고 게임에서 직접 관리할 수 있습니다. 자세한 내용은 제가 이전에 썼던 글을 읽어보세요.

결론

Nethereum은 좋은 기능을 많이 제공해주지만 유니티 관련해서는 문서화가 부족합니다. 이 글을 읽고 이더리움과 연동된 게임을 만들 때 도움이 되길 바랍니다.

--

--