eosJs 시작하기
EOSJS 시작하기
EOSJS란?
EOS 블록체인을 javascript로 좀더 편하게 컨트롤 할 수 있게 만들어 놓은 라이브러리라고 생각하면 편하다. 살짝만 깊게 들어가면 EOS에서 제공하는(nodeos) HTTP API를 이용하게 편하게 해 놓은 거라고 말 할 수 있다. (이더리움에는 web3.js, 네오에는 neon-js)
EOSJS도 EOS에서 제공하는 HTTP API를 사용하기 때문에 BP들을 잘 선택해야된다.(응답속도, 제공여부 등등)
설치
설치 방법으로는 2가지가 있다.
-
NPM을 통해서 간단하게 설치 할 수 있다.
Terminal window > npm install eosjs -
CNS를 이용하기
integrity="sha512-QX0dPq5pyX33coEuy5x1UqKHFDeveQYMp7Sz+qOUwRL9mol4QDvViU+QAjd+k6P7QjPjrDCoyhK1kz2GDxCP9A=="crossorigin="anonymous"></script>
EOS Connect
-
EOSJS를 이용한 EOS Connect
const Eos = require('eosjs');// 아래와 같이 하면 localhost Testnet에 접근한다.const eos = Eos();localhost에 EOS가 구동 되어있지 않는다면 위의 코드를 실행하면 아래와 같은 에러가 난다. (당연히 connect하는 EOS의 httpEndpoint가 틀려도 아래와 같은 에러가 나온다.)
{ FetchError: request to http://127.0.0.1:8888/v1/chain/get_info failed, reason: connect ECONNREFUSED 127.0.0.1:8888at 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' } -
Mainnet connect 하기
const Eos = require('eosjs');const eos = Eos({httpEndpoint: 'mainnet httpEndpoint'});아마 위와 같이 connect를 시도 한다면 아래와 같은 에러 메시지가 나온다.

에러가 나더라도 getInfo는 가능하네 이걸 통해서 chainId를 확인해서 넣자.
Mainnet인 경우는 aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906 이것이 공통으로 쓰는 chainId이기 때문에 넣으면 된다.
위와 같은 방법으로 connect를 하면 아래와 같이 최초 1회 get_info api를 호출한다. (처음에 이것도 모르고 매번 커넥트를 줬더니 모바일에서 데이터 사용량이 아주 높게 나온적이 있다.)

메인넷 주소는 https://api.eosnewyork.io 여기에서 확인 해 볼 수 있다. BP들마다 제공하는 정보의 양, 응답속도 등등이 다르기 때문에 확인을 해서 본인에게 가장 잘 맞는 BP를 찾는 것이 좋다.(혹은 본인이 직접 full node를 받아서 연결하는 방법도 있다.)
Connect Config
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의 기본 네트워크 정보를 가지고 올 수 있다. 코드는 아래와 같다.
const eos = Eos().getInfo((error, info) => { console.log(error, info);});재미 있는 것은 다른 api들은 전부 Promise를 기본으로 하는데 getInfo만 callback방식이다.
리턴된 값은 아래와 같다.
{ 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만 첫 걸음이라는 생각으로 가볍게 알아보았다.