eosJs 시작하기

EOSJS 시작하기

EOSJS란?

EOS 블록체인을 javascript로 좀더 편하게 컨트롤 할 수 있게 만들어 놓은 라이브러리라고 생각하면 편하다. 살짝만 깊게 들어가면 EOS에서 제공하는(nodeos) HTTP API를 이용하게 편하게 해 놓은 거라고 말 할 수 있다. (이더리움에는 web3.js, 네오에는 neon-js)

EOSJS도 EOS에서 제공하는 HTTP API를 사용하기 때문에 BP들을 잘 선택해야된다.(응답속도, 제공여부 등등)

설치

설치 방법으로는 2가지가 있다.

  1. NPM을 통해서 간단하게 설치 할 수 있다.

    1
    > npm install eosjs
  2. CNS를 이용하기

    1
    2
    3
    <script src="https://cdn.jsdelivr.net/npm/eosjs@15.0.3/lib/eos.min.js"
    integrity="sha512-QX0dPq5pyX33coEuy5x1UqKHFDeveQYMp7Sz+qOUwRL9mol4QDvViU+QAjd+k6P7QjPjrDCoyhK1kz2GDxCP9A=="
    crossorigin="anonymous"></script>

EOS Connect

  1. EOSJS를 이용한 EOS Connect

    1
    2
    3
    4
    const Eos = require('eosjs');

    // 아래와 같이 하면 localhost Testnet에 접근한다.
    const eos = Eos();

    localhost에 EOS가 구동 되어있지 않는다면 위의 코드를 실행하면 아래와 같은 에러가 난다. (당연히 connect하는 EOS의 httpEndpoint가 틀려도 아래와 같은 에러가 나온다.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    { FetchError: request to http://127.0.0.1:8888/v1/chain/get_info failed, reason: connect ECONNREFUSED 127.0.0.1:8888
    at ClientRequest.<anonymous> (/Users/mayajuni/Projects/eos-scan/node_modules/node-fetch/index.js:133:11)
    at ClientRequest.emit (events.js:182:13)
    at Socket.socketErrorListener (_http_client.js:382:9)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    name: 'FetchError',
    message:
    'request to http://127.0.0.1:8888/v1/chain/get_info failed, reason: connect ECONNREFUSED 127.0.0.1:8888',
    type: 'system',
    errno: 'ECONNREFUSED',
    code: 'ECONNREFUSED' }
  2. Mainnet connect 하기

    1
    2
    3
    const Eos = require('eosjs');

    const eos = Eos({httpEndpoint: 'mainnet httpEndpoint'});

    아마 위와 같이 connect를 시도 한다면 아래와 같은 에러 메시지가 나온다.
    connect-error

    에러가 나더라도 getInfo는 가능하네 이걸 통해서 chainId를 확인해서 넣자.

    Mainnet인 경우는 aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906 이것이 공통으로 쓰는 chainId이기 때문에 넣으면 된다.

위와 같은 방법으로 connect를 하면 아래와 같이 최초 1회 get_info api를 호출한다. (처음에 이것도 모르고 매번 커넥트를 줬더니 모바일에서 데이터 사용량이 아주 높게 나온적이 있다.)

network-image

메인넷 주소는 https://api.eosnewyork.io 여기에서 확인 해 볼 수 있다. BP들마다 제공하는 정보의 양, 응답속도 등등이 다르기 때문에 확인을 해서 본인에게 가장 잘 맞는 BP를 찾는 것이 좋다.(혹은 본인이 직접 full node를 받아서 연결하는 방법도 있다.)

Connect Config
1
2
3
4
5
6
7
8
9
10
11
12
13
const Eos = require('eosjs');

const config = {
chainId: null, // 32 byte (64 char) hex string
keyProvider: ['PrivateKeys...'], // WIF string or array of keys..
httpEndpoint: 'http://127.0.0.1:8888',
expireInSeconds: 60,
broadcast: true,
verbose: false, // API activity
sign: true
};

const eos = Eos(config);

이부분의 자세한 내용은 github에 있으니 여기에서 확인하면 된다.(github-configuration)

getInfo - api

EOS의 기본 네트워크 정보를 가지고 올 수 있다. 코드는 아래와 같다.

1
2
3
const eos = Eos().getInfo((error, info) => {
console.log(error, info);
});

재미 있는 것은 다른 api들은 전부 Promise를 기본으로 하는데 getInfo만 callback방식이다.

리턴된 값은 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
server_version: '36a043c5',
chain_id:
'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906',
head_block_num: 5469047,
last_irreversible_block_num: 5468711,
last_irreversible_block_id:
'00537227a657d1f4fd74de877e9ad1a3839540ece45eedeaf177b20e51b2da1b',
head_block_id:
'005373770504c59e992214b3056c7bdabb07c53c5a9c4785909b90fe595a119f',
head_block_time: '2018-07-12T08:58:05.500',
head_block_producer: 'helloeoscnbp',
virtual_block_cpu_limit: 200000000,
virtual_block_net_limit: 1048576000,
block_cpu_limit: 199900,
block_net_limit: 1048576
}

위에서(EOS Connect) 애기 했던 chainId를 모를 경우 getInfo를 통해서 chainId를 얻어서 쓸 수 있다.

이번 글에서는 설치, connect, getInfo만 첫 걸음이라는 생각으로 가볍게 알아보았다.

Share Comments