[BlockChain]이오스블록체인_EOSJS사용하기

2 minute read

우리가 블록체인 서비스 DAPP을 개발하게 되면 두가지의 개발환경을 고민해야합니다.

Full Node, Test Node

첫번째 방식 Full Node는 자신의 PC에서 블록체인 환경(EOSIO, Geth)을 통해 Miner를 실행시키고 테스트 넷 또는 메인넷 블록체인과 동기화를 시키는 방식입니다.

두번째는 Test Node는 테스트 넷 환경(이오스 기준 Kylin net, junglenet)을 제공하는 주소를 통해서 EOSJS나 Web3js의 API를 이용해 블록체인의 노드정보를 가져오고 또한 블록체인 환경을 구성하지 않더라도 블록체인의 노드로서 참여할 수 있게 됩니다.

DAPP의 프로젝트 크기와 규모에 따라서 블록체인 서비스 설계자와 기획자는 풀노드 구축여부를 따져봐야하며 이에 따른 기회비용 또한 생각해 봐야합니다.

풀노드의 경우 블록체인 데이터의 안정성이 높아지고, 다른 노드의 대한 의존도가 낮아지는 점에 대해서는 명백한 이득이지만 그만큼의 블록동기화의 PC CPU소요와 메모리의 비용이 들기 때문입니다. (이더리움 노드 동기화를 하게되면 20GB이 설정되어 있는 것을 확인할 수 있습니다.)

저는 지금껏 블록체인 개발 환경은 테스트 노드를 통해 이루어졌습니다. 개인적으로 공부하고 DAPP을 만들때에는 테스트 노드가 가장 적합하고 쉽기 때문입니다. 때문에 이오스블록체인으로 테스트환경을 다루는 것과 그에 따른 가장 적합한 EOSJS의 사용방법에 대해 알아보겠습니다.

EOSJS

EOSIO재단에서는 Web3.js와 비슷하게 EOSjs의 라이브러리를 제공하였습니다. 때문에 자바스크립트를 이용한 EOSJS를 import할 수 있으며 그에 따른 함수를 사용할 수 있습니다.

EOSJS

EOSjs는 이처럼 하나의 API를 제공하고 있으며 이를 쉽게 다운로드 해서 사용할 수 있습니다. 그럼 EOSJS를 이용해서 이오스블록체인을 다뤄보겠습니다.

npm init의 명령어를 통해 먼저 프로젝트를 생성합니다. (Node version 10.14.2, npm version 6.4.1)

npm install — save eosjs

로 eosjs의 모듈을 설치해줍니다.

Image Alt 텍스트

위 그림과 같이 node_modules폴더가 생기고 그 안에는 eosjs를 사용할 여러 라이브러리들이 설치 되었을 겁니다.

그럼 eosjs를 이용하여 간단하게 Eos블록체인의 환경인 테스트 넷과 연결하는 방법에 대해 알아봅시다.

이오스 블록체인은 현재 정글넷(Jungle Net)과 기린넷(Kylin Net) 등의 테스트넷을 제공하고있습니다. 가장먼저 정글넷이 테스트넷의 환경을 자리 잡았고 기린넷이 그 이후에 나온 케이스입니다.

정글넷

기린

eosjs를 이용하여 이오스 블록체인에 config의 객체를 만들어야합니다.

  • endpoint : 테스트넷 또는 메인넷의 endpoint 주소를 적어줍니다.(기린넷의 endpoint주소는 위의 깃헙주소로 들어가면 HTTP API LIST 항목에 있습니다.)
  • chainid : chainid는 고정값으로 들어가게 됩니다. 즉 기린넷의 테스트넷 chainid는 ‘5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191’ 입니다.
  • keyProvider : 이오스 계좌의 Private Key를 작성해줍니다. 스마트컨트랙트나 토큰 전송을 할 경우 keyProvider에 Private Key를 적어주고 그렇지 않다면 적지 않으셔도 됩니다.
//eosjs를 import합니다.
const Eos = require('eosjs');

const config = {
  httpEndpoint: 'http://api.kylin.eosbeijing.one:8880',
  chainId : '5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191',
  keyProvider : ['privatekey']
};

Eos(config).getInfo((error, result) => { console.log(result) }); //블록정보 가져오기

EOS kylin net 블록체인 정보

Image Alt 텍스트

node main.js로 실행시켰을 때 이상없이 eos 블록체인의 정보가 출력되는 것을 확인하실 수 있습니다. 이렇게 되면 eosjs를 통해서 eos 블록체인의 기린넷 테스트 블록체인에 연동되는 것이며 우리는 그중 http://api.kylin.eosbeijing.one:8880 이 BP노드에 연결되어있는 것입니다.

즉 eosjs를 통해서 fullnode를 구지 구축하지 않더라도 위 방법으로 testnet으로 연동이 가능한 것을 확인할 수 있었습니다.

EOSJS를 이용하여 개발할 경우 죄다 영어로되어있다보니 생각보다 많이 접근하기 어려웠습니다. 그래서 EOSJS의 기본적인 함수와 제가 직접적으로 경험하면서 사용했던 함수를 아래 적어놓았습니다.

EOSJS의 Function

Eos(config).getInfo(promise)

앞서 살펴보았듯이 이오스 블록체인의 기본적인 정보를 출력해주는 함수입니다. 즉 이오스블록체인에 제대로 연동이 되었다면 정보를 확인 하실 수 있습니다.

EOS(config).transaction(promise)

트랜잭션을 일으키는 함수입니다. 송금, 스마트컨트랙트 실행, 또는 램 및 cpu(이오스 수수료 토큰)을 delegate나 buy할때 사용합니다.

Eos(config).transaction(tr => {
  tr.delegatebw({
    from:'eosaccount1',
    receiver:'eosaccount2',
    stake_cpu_quantity:'10.0000 EOS',
    stake_net_quantity:'10.0000 EOS',
    transfer:0
  });
}).then(console.log).catch(console.error);

EOS(config).getTransaction(Transaction ID)

트랜잭션ID를 통해서 트랜잭션 정보를 얻을 수 있는 함수입니다. 스마트컨트랙트로 트랜잭션이 발생하였다면 스마트컨트랙트의 정보를 얻을 수 있는 함수입니다.

Eos(config).getTransaction("4b8b96303c6fdc46dd012051534609a52553c85b658ae6d7d7c2c4222ba615a2").then(result => {
     console.log(result);
});

EOS(config).transfer(sendaccount, receiveaccount, token, text)

이오스나 이오스블록체인 위에 올라간 토큰들을 전송하는 함수입니다. 송금과 동시에 트랜잭션을 일으키는 함수입니다.

Eos(config).transfer('smartnadrhot', 'drhotsmartna', '1.0000 EOS', 'test transfer',(error, info) => {
   if(error){
     console.error(error);
   }
   console.log(info);
});