리퀴댑스 DAPP 네트워크 워크스루 #1: Zeus 및 vRAM

Zeus SDK 설정 및 스마트 컨트랙트에 vRAM 추가

CREAM ER
리퀴댑스(Liquidapps) Kor
11 min readAug 20, 2019

--

여러분은 아마 DAPP 네트워크 뿐만 아니라 vRAM과 네트워크가 제공할 수 있는 다른 서비스에 대해 들어보았을 겁니다. 이 시리즈에서 우리는 이전에 추가 할 수 없었던 탈중앙화 된 방식의 여러 기능의 잠금을 해제하고, 분산된 어플리케이션에서DAPP 네트워크 서비스의 사용 과정을 알아볼것입니다.

Zeus SDK는DAPP 네트워크에서 DSP(DAPP 서비스 공급자)가 제공하는 서비스들의 이점을 여러분의 디앱에서 이용할 수 있도록 하는 주된 방법입니다. 이 글을 쓰면서, 13팀의 고유한 DSP들은 EOS 메인넷에 34개의 패키지(대부분 vRAM 서비스)를 제공하고 있습니다.

이 글은 기술 워크스루 시리즈의 첫번째 글입니다. 우리는 앞으로의 글에서 웹&크로스 블록체인 오라클(LiquidOracles), CRON 스케쥴 업무(LiquidScheduler) 무작위성 및 가상 계정(LiquidAccounts)을 포함한 다른 서비스들의 이점을 어떻게 얻을수 있는지 설명할 것입니다. 이러한 서비스들을 준비학 위해서 우리는 Zeus를 중심으로 배울 필요가 있습니다.

Zeus는 디앱 개발자들이 최소한의 스마트 컨트랙트 코드로 DAPP 네트워크 서비스와 특징들의 통합할 수 있도록 하는 간단하고 확장 가능한 개발 프레임워크입니다.

참고 : 이 워크스루는 많은 수의 터미널 커맨드가 포함되어있습니다. 각 라인에 $를 입력하거나 복사/붙여넣지 마십시오. 다음 커맨드가 시작되는 위치를 나타낼 뿐입니다.

(선택사항) NVM 설정 및 사용

여러분들은 이미 NVM(Node Version Manager)를 사용하여 Node.js 개발을 관리하고 있을 수 있습니다.

그렇지 않은 경우, 주어진 어플리케이션에 필요한 모든 버전의 노드를 사용할 수 있기 때문에 NVM 사용을 추천합니다.

참고 : NVM에는 Homebrew 설치가 권장되지 않음

만약 여러분이 macOS를 사용하는 경우 다음 프로세스 중 Xcode Commnad Line Tools를 설치하라는 메시지가 표시될 수 있습니다.

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

현재 제우스 SDK에 권장되는 Node.js 버전은 10.x(현재 10.15.3)입니다. NVM에 이 버전을 사용하도록 지시하십시오.

$ nvm install 10.x
$ nvm use 10.x
$ nvm install-latest-npm

Linux에 Zeus 필수 구성 요소 설치

리눅스에서는 몇가지 필수 구성요소 설치가 필요할 수 있습니다.

Ubuntu/Debian:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test$ sudo apt update
$ sudo apt upgrade -y libstdc++6
$ sudo apt install -y make cmake build-essential python

Centos/Fedora/AWS Linux:

$ sudo yum install -y make cmake3 python git gcc-c++ wget
$ export CMAKE_PREFIX_PATH=/usr/opt/eosio.cdt/1.6.1/lib/cmake/eosio.cdt

Centos/Fedora 추가 커맨드 :

$ wget https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3.tar.gz
$ tar xvfx cmake-3.14.3.tar.gz
$ cd cmake-3.14.3
$ ./bootstrap
$ gmake
$ sudo make install
$ cd ..

설치 및 배포

-g flag 함께 Zeus를 설치합니다.

$ npm install -g @liquidapps/zeus-cmd

하지만, 제우스를 설치하고 있음에도 불구하고, 오직 zeus unbox만이 전반적으로 기능할 것이다.

zeus test, zeus migrate, zeus compile 같은 커맨드들은 오직 로컬 프로젝트 디렉토리가 언박싱일때만 인식되는 익스텐션들입니다.

일단 Zeus 설치를 마치면, 우리는 모든 것이 제대로 되어 있는지 확인하기 위해 helloworldcontract를 풀고 테스트 할 수 있습니다. Zeus가 언박스 할 디렉토리로 이동한 후 다음을 실행하십시오.

$ zeus unbox helloworld
$ cd helloworld
$ zeus test

zeus unbox는 수많은 디렉토리와 zeus-box.jsonhelloworld 디렉토리 안에 배치할 것입니다.

제우스 SDK는 vRAM 예시인 coldtoken, deepfreeze, vgrab, cardgame, 및 registry와 같은 여러 가지 다른 샘플 배치와 함께 제공되며,microauctions, eos-detective-reports, token(표준 eosio.토큰 컨트랙트 개발) 등 새로운 서비스에 대한 레퍼런스 컨트랙트도 포함되어 있습니다.

스마트 컨트랙트에 vRAM 추가

이제 Zeus SDK를 설치했으니 EOSIO 개발에 사용할 수 있습니다. Elemental Battles 튜토리얼에 vRAM을 추가하는 방법에 대해 살펴봅시다. 참고로 여기서 vRAM 없이 완료된 Elemental Battles 코드를 가져올 수 있습니다.

zeus unbox cardgame실행하세요.

아직 helloworld에 있을 경우 :

$ cd ../
$ zeus unbox cardgame
$ cd cardgame

zeus unbox의 최종 아웃풋 부분은 우리가 다음에 무엇을 할 수 있는지에 대한 몇 가지 유용한 방향을 제공합니다.

(OUTPUT)Enter new directory:
cd cardgame
Please try these sample commands:
⭐Deploy contract: zeus migrate
⭐Run frontend locally: zeus run frontend main
⭐Build frontend: zeus build frontend main
⭐Deploy frontend: zeus deploy frontend main
⭐Deploy and register frontend: zeus deploy frontend main — ipfs — register cardgame1111

Running a few commands will compile and migrate the contract, then open your frontend (localhost:3015):

몇 개의 커맨드를 실행하면 컨트랙트를 컴파일 및 마이그레이션한 다음 프론트엔드를 여십시오(localhost :3015):

$ zeus migrate && zeus run frontend main

이 컨트랙트가 vRAM 지원 계약으로 변환된 방법을 이해하려면 cardgame.hpp 파일을 살펴보도록 합시다.

vRAM을 추가하면 cardgame.cpp 또는 gameplay.cpp 파일을 변경할 필요없이, cardgame.hpp 파일만 변경하면된다.

참고 : 언박스 된 카드 게임 컨트랙트의 코드는 본 튜토리얼에서 다루지 않은 추가 기능을 포함할 수 있습니다. 추후 워크스루에서 다루어질 것입니다.

$ cd cardgame/contracts/eos/cardgame
$ nano cardgame.hpp

vRAM을 추가하기 위해 여러 가지 간단한 단계가 수행되었음을 알 수 있습니다. EOS CDT에 대한 최근 변경 사항을 모르는 경우, 몇 가지 참고 사항이 아래에 포함되어 있습니다.

1) 우선, 아래 #include <eosio/eosio.hpp>를 포함하며 vRAM DAPP 서비스를 임포트 하는데 필요한 라이브러리와 함께 여러가지 새로운 프로세서 지침도 볼 수 있습니다.

#include "../dappservices/multi_index.hpp"
#define DAPPSERVICES_ACTIONS() \
XSIGNAL_DAPPSERVICE_ACTION \
IPFS_DAPPSERVICE_ACTIONS
#define DAPPSERVICE_ACTIONS_COMMANDS() \
IPFS_SVC_COMMANDS()
#define CONTRACT_NAME() cardgame

만약 추가 서비스가 필요하다면, 우리는 여기서 그것들을 참조할 것이다. 예를 들어 이 컨트랙트에 vRAM 및 오라클 서비스가 필요한 경우:

/* ORACLES EXAMPLE ONLY
NOT FOR VRAM */
#include "../dappservices/multi_index.hpp"
#include "../dappservices/oracle.hpp"
#define DAPPSERVICES_ACTIONS() \
XSIGNAL_DAPPSERVICE_ACTION \
IPFS_DAPPSERVICE_ACTIONS \
ORACLE_DAPPSERVICE_ACTIONS
#define DAPPSERVICE_ACTIONS_COMMANDS() \
IPFS_SVC_COMMANDS() \
ORACLE_SVC_COMMANDS()
#define CONTRACT_NAME() cardgame

다음 기사에서 vRAM을 넘어 다른 서비스 사용을 다루겠습니다.

2) 모든 지시사항 이후에, 우리는 Zeus에 우리의 컨트랙트가 시작되고 있다고 이야기합니다.

CONTRACT_START()

3) “users” 테이블의 타이핑을dapp::multi_index타입으로 수정합니다. 이 테이블은 컨트랙트의 유일한 테이블인 users_table _users에 대한 많은 레퍼런스에 의해 접근되는 테이블입니다. 원래 코드에서 이것은 eosio::multi_index타입이었습니다.dapp::multi_index 교체를 사용하여 이 테이블에 대해 vRAM을 사용하도록 설정하십시오.

참고: 모르는 경우, 구문 name(“users”)“users”_n동등합니다.

typedef dapp::multi_index<name("users"), user_info> users_table;

4) 클라이언트측에서 쿼리에 대한 지원을 가능하게 하기 위해, 동일한user_info구조를 사용하는 “users” 테이블도 추가하고, 현재 shardbucket 구조에서 정의한 “users” 테이블도 추가합니다.

typedef eosio::multi_index<".users"_n, user_info> users_table_v_abi;TABLE shardbucket {
std::vector<char> shard_uri;
uint64_t shard;
uint64_t primary_key() const { return shard; }
};
typedef eosio::multi_index<"users"_n, shardbucket> users_table_abi;

참고 : 원래 Elemental Battles 코드에서는 TABLE 대신struct[[eosio::table]]를 사용한다. 이것들은 동등하다; 후자는 컴파일러가 전자로 변환하는 매크로입니다.

5)마지막으로, 파일의 끝에 있는 EOSIO_DISPATCH매크로를 조금 더 일찍 CONTRACT_END()를 종료하는 CONTRACT_START()로 수정합니다.

CONTRACT_END((login)(startgame)(playcard)(nextround)(endgame))

이제 Zeus는 우리의 스마트 컨트랙트를 vRAM 지원 디앱으로 컴파일할 수 있습니다. 보조 인덱스들은 현재 vRAM에 사용할 수 없다는 점에 유의하십시오.

이전과 마찬가지로, 이제 우리는 테스트를 위해 로컬 테스트넷과 DSP에 컨트랙트를 배포 할 수 있습니다.

$ zeus migrate && zeus run frontend main

자세한 내용은 성장하는 리퀴댑스 문서 페이지를 방문하십시오. 질문이 있으면 개발자 텔레그램 채널에서 문의하십시오.

다음 글에서는 DAPP 토큰을 Kylin 테스트넷에 있는 DSP(DAPP 서비스 공급자)에 스테이크하고 vRAM 지원 디앱을 런칭하고, EOS 메인넷에서 런칭하는 방법도 논의할 것입니다. 리퀴댑스의 다음 시리즈를 확인하고 DAPP 네트워크를 통해 사용 가능한 서비스 전체를 효과적으로 사용하는 방법을 알아보십시오.

--

--