목차
3분 읽기
eosjs 설치부터 전송까지 (1/2): EOS 코인 전송
eosio 블록체인의 javascript 라이브러리 eosjs를 설치·설정하고 transfer 메서드로 EOS 코인을 전송하는 과정을 정리합니다.
안녕하세요, 김상호입니다. 이번 포스팅에서는 eosio 블록체인의 javascript 라이브러리인 eosjs를 소개해보고자 합니다.
eosjs는 이더리움의 web3.js와 같은 “특정 블록체인에 대한 특정 언어(eosjs의 경우 javascript)로 접근 가능한 API” 입니다. 물론 SwiftyEOS(swift), eos-java-rpc-wrapper(java) 등 다른 언어들에 대한 구현체도 여럿 존재합니다. 여기서 eosjs는 eosio 측에서 직접 개발을 맡은 라이브러리입니다.
eosio는 이미 RPC가 지원되는데 굳이 필요한가요?
그렇습니다. eosio는 http 요청을 통한 정보 제공 및 트랜잭션 전송 기능을 훌륭히 수행합니다. 하지만 eosjs를 사용했을 때의 장점 또한 존재합니다. 아래의 설명은 eosio의 RPC를 통해 코인 전송을 하기 위한 과정입니다.
/v1/chain/get_info호출을 통한 last_irreversible_block_num 획득/v1/chain/get_block호출을 통한 last_irreversible_block 정보 조회/v1/chain/push_transaction호출을 통한 실제 트랜잭션 전송
위와 같이 EOS 코인을 전송하기 위해 http 요청이 필요하고, 각 요청에 대한 에러 처리도 고스란히 개발자의 몫이 됩니다. eosjs도 결국 eosio RPC 요청에 대한 wrapper라고 볼 수 있지만, 이러한 작업을 편하게 수행하기 위해 다양한 named action function을 제공합니다. 따라서 eosjs를 사용한다면 transfer 메서드 호출 한 번에 위 작업을 수행할 수 있습니다.
이제 eosjs를 이용해 EOS 코인을 전송해보도록 하겠습니다.
eosjs 설치
이제 eosjs를 사용하기 위한 설정 작업을 진행하겠습니다. 직접 html에 script 태그를 이용한 방법은 아래와 같습니다.
<script src="https://cdn.jsdelivr.net/npm/eosjs@16.0.9/lib/eos.min.js"
integrity="sha512-zhPSKFEBlDVvUzjl9aBS66cI8tDYoLetynuKvIekHT8NZZl2oxwcZ//M/eT/2Rb/pR/cjFvLD8104Cy//sdEnA=="
crossorigin="anonymous"></script>만약 node.js와 같이 javascript 모듈 시스템을 사용할 수 있는 환경이라면 아래의 작업을 수행합니다. (nodejs / npm 기준)
# 필요한 위치에서 아래의 명령어를 수행해 eosjs 설치
npm install eosjs --save// .js 파일 내부에 eosjs 사용
let Eos = require('eosjs');eosjs 설정
무사히 eosjs를 설치하였다면 필요한 정보를 eosjs에게 알려 줄 차례입니다. 아래와 같이 chainID, 트랜잭션에 필요한 프라이빗 키, 접속할 nodeos의 주소를 입력합니다.
let eos = Eos({
chainId: '038f4b0fc8ff18a4f0842a8f05...',
keyProvider: [
"5JR9m7o......",
"5JAj2AMS5....",
......
],
httpEndpoint: "https://eos.greymass.com:443",
broadcast: true,
verbose: true,
sign: true
});chainId: 연결할 체인 ID를 명시해줍니다. 주요 체인들의 chain ID는 아래와 같습니다.
| 체인 | Chain ID |
|---|---|
| EOS 메인넷 | aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906 |
| Jungle 테스트넷 | 038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca |
| Crypto Kylin 테스트넷 | 5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191 |
keyProvider: 특정 계정에서 transfer를 하기 위해서, 해당 트랜잭션에 프라이빗 키 서명이 필요합니다. 따라서 필요한 프라이빗 키를 명시해 줍니다.httpEndpoint: 요청을 보낼 타겟 nodeos 주소입니다. 위 예제에서는 greymass의 퍼블릭 RPC 주소를 사용하였습니다.
eosjs로 EOS 전송
설정까지 무사히 끝났다면 실제 코인 전송을 진행해봅시다. 윗 단계에서 생성한 eos 객체의 transfer 메서드를 사용합니다. 순서대로 보내는 이, 받는 이, 수량, 메모를 파라미터로 사용합니다.
eos.transfer('lazylion1234', 'babylion1234', '1.0000 EOS', 'send!');transfer 메서드의 마지막 파라미터에 callback을 사용할 수 있습니다.
eos.transfer('lazylion1234', 'babylion1234', '1.0000 EOS', 'send!',
(error, result) => {
if(error) {
console.error('Failed...');
} else {
console.log("Success!");
}
}
);javascript의 특성상 위 메서드의 callback은 비동기적으로 수행됩니다. 하지만 파라미터로 callback이 명시되지 않았다면 transfer 메서드는 promise를 반환합니다. 따라서 아래와 같이 메서드 호출 이후의 처리를 동기적으로 진행할 수 있습니다.
async function() {
try {
......
let result = await eos.transfer('lazylion1234', 'babylion1234', '1.0000 EOS', 'send!');
// 전송된 트랜잭션에 대한 트랜잭션ID 출력
console.log('transaction ID is '+ result.transaction_id);
......
} catch (err) {
console.error('error!');
}
}transfer 로그 확인
마지막으로 transfer 메서드 호출 시 출력되는 로그를 확인해봅시다.

- 1: eos 객체 생성 시 자동으로 수행되는 부분입니다. 입력한 httpEndpoint에
get_info요청을 보냅니다. - 2: transfer 메서드 호출 시 출력된 내용입니다. 내부적으로 여러 RPC 요청을 보내 transfer 액션을 수행함을 알 수 있습니다.
지금까지 기본적인 eosjs 사용법 및 EOS 코인 전송 방법에 대해 알아보았습니다. 다음 포스팅에서는 트랜잭션 메서드를 이용한 토큰 전송을 같이 해보는 시간을 갖도록 하겠습니다. 감사합니다!
이 시리즈
eosjs 설치부터 전송까지
1 / 2
다음 읽을거리
- 스캐터(Scatter)를 이용한 eos 웹 서비스 개발 (2/2): 트랜잭션과 로그아웃
스캐터로 연동된 EOS 계정을 사용해 송금, 커스텀 토큰 전송, 투표 트랜잭션을 보내는 방법과 로그아웃 처리 방법을 정리합니다.
Development · 2018-11-14
- 스캐터(Scatter)를 이용한 eos 웹 서비스 개발 (1/2): 계정 연동
프라이빗 키를 웹에 노출하지 않기 위해 크롬 확장 플러그인 스캐터를 활용해 EOS 계정을 웹 서비스에 연동하는 방법을 정리합니다.
Development · 2018-10-19
- 이더리움 vs 이오스, 승자는 누구일까
2세대 이더리움과 3세대 이오스를 사용성, 수수료, dApp 활성화 측면에서 비교하며 어느 플랫폼이 시장을 선도할지 살펴봅니다.
Development · 2018-12-06
토론