[DEV] eosjs-cluster를 소개합니다.
안녕하세요, EOS 기반 최초의 탈중앙화 거래소인 DEXEOS의 개발자 Lecko 입니다.
저희 서비스는 탈중앙화 거래소로 주문을 위해 EOS 블록체인으로 트랜잭션을 발송해야하는 등, 서비스의 가용성이 EOS의 API node에 매우 의존적인 상황입니다.
그러나 런칭한지 수개월밖에 되지않은 상황에서 모든 API node가 높은 고가용성을 지원하지 않는 상황입니다. 때문에 몇몇 API node의 Endpoint를 주기적으로 체크하면서 사용해야했습니다.
이를 손쉽게 처리할 수 있도록 해주는 eosjs-cluster 라이브러리를 소개합니다.
현재 DEXEOS와 Bloks.io의 실제 서비스에서 사용 중에 있습니다.
기본적으로 eosjs 라이브러리와 동일하게 사용하실 수 있습니다. ENOTFOUND, ECONNREFUSED, Too many request 등 트랜잭션 자체의 문제가 아닌 Endpoint에 대한 오류가 발생하는 경우 자동으로 다음 Endpoint에 연결시켜줍니다.
아래의 예처럼, "https://some-wrong-end-point-1.com" 와 "https://some-wrong-end-point-2.com"는 존재하지 않는 Endpoint 이지만 다음 Endpoint에 자동으로 연결해주면서 별도의 예외처리 없이 API를 정상적으로 호출할 수 있게됩니다.
즉, 이 라이브러리를 사용하면 사용자들에게 네트워크를 직접 선택하게 하는 등의 단계가 사라지게 되는 것입니다.
const httpEndpoints = [
'https://some-wrong-end-point-1.com', // Wrong Endpoint for test
'https://some-wrong-end-point-2.com', // Wrong Endpoint for test
'https://eos.greymass.com',
'https://api.main-net.eosnodeone.io',
'https://user-api.eoseoul.io/'
];
const chainId = 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906';
const keyProvider = ['PrivateKey1', 'PrivateKey2'];
const account = 'accountname1';
const EosCluster = require('eosjs-cluster');
// Do not use httpEndpoint in second parameter.
// EosCluster(httpEndpoints, {httpEndpoint: 'This is wrong usage!!', chainId, keyProvider});
// EosCluster([] or null or undefined, {chainId, keyProvider});
// == Eos({chainId, keyProvider});
const eos = EosCluster(httpEndpoints, {chainId, keyProvider});
eos.getCurrencyBalance('eosio.token', 'leckoaccount', 'EOS')
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
DEXEOS는 이오스의 생태계 발전을 위해 다양한 방법으로 지원 중에 있습니다.
항상 여러분의 의견에 귀를 기울이는 DEXEOS가 되겠습니다.
감사합니다.
꽤 유용한 라이브러리네요.. 감사합니다.
eosjs나 eosjs cluster lib는 nodejs기반 전용 lib 인가요?
일반 브라우저에서 javascript 프로그램에서도 사용할 수 있는지요?
안녕하세요, eosjs와 eosjs-cluster 모두 브라우저에서 사용하실 수 있습니다 :)
네... 감사합니다. 한번 써봐야 겠네요...
혹시 Scatter연동하여 로그인/아웃/승인하는 참고할만한 자료는 없으시나요? 스캐터 깃허브 봐도 내용이 친절하지 않아서...
Web programming은 이제 배워가는 중이라 모르는게 많아 문의드립니다..
https://get-scatter.com/docs/dev/setting-up-for-web-apps
이곳 참고하시면 도움이 되실 것 같습니다 :)