sscjs 를 이용한 steem-engine API 샘플코드 - 토큰 보유자 현황(리치리스트), 마켓 오더북, 거래기록
저번에 쓴 글 SCT 리치리스트 등 스팀엔진 데이터 가져다 쓰기 개발 방법론 및 샘플코드 에서 너무 주먹구구식으로 암중모색 하듯 짰는데
https://github.com/harpagon210/sscjs
공식 툴이 있어서 이번에 잘 이용해서 coin-on 업데이트를 했습니다.
근데 너무 README.md 설명이 부족해 보여서 샘플코드 위주로 보충해봅니다.
API Endpoint URL
기트허브 readme에 보면 아래처럼 나와있던데
In node.js
const SSC = require('sscjs');
const ssc = new SSC('https://testapi.steem-engine.com');
ssc.stream((err, res) => {
console.log(err, res);
});
저렇게만 써놓으면 안되죠.
테스트용 Endpoint URL 만 써놓으면 프로덕션용 Endpoint 는 본능적인 감으로 찍어서 맞춰보란 소리인가?
const ssc = new SSC('https://api.steem-engine.com/rpc/');
이게 프로덕션 엔드포인트 입니다.
그 외에도 부실한 설명에 불만이 많았지만, 이정도로 자제하고 원래 쓰려던 내용에만 충실하게 써봅니다.
토큰 보유자 현황
ssc.find(
'tokens', //contract name
'balances', //table name
{'symbol':'SCT'}, //query to perform on the table
1000, //limit the number of records to retrieve
0, //offset applied to the records set
[], //array of index definitions { index: string, descending: boolean }
(err, results) => { //callback
console.log(err, results);
});
결과:
[ { account: 'sct',
symbol: 'SCT',
balance: '133.440',
stake: '13662.827',
delegatedStake: '0',
receivedStake: '0',
pendingUnstake: '0',
'$loki': 34165 },
... 566 more items ]
이렇게만 해도 결과는 성공적으로 나옵니다.
tokens 컨트랙(=namespace 개념인듯) 의 balances 테이블에서
symbol 이 'SCT' 인 것들을 다 찾는 쿼리.
stake 가 50000 이상인 것으로 걸러봅니다.
ssc.find(
'tokens', //contract name
'balances', //table name
{'symbol':'SCT', 'stake': {$gte: 50000}}, //query to perform on the table
1000, //limit the number of records to retrieve
0, //offset applied to the records set
[], //array of index definitions { index: string, descending: boolean }
(err, results) => { //callback
console.log(err, results);
});
결과:
[ { account: 'jack8831',
symbol: 'SCT',
balance: '114.959',
stake: '87832.618',
delegatedStake: '0',
receivedStake: '0',
pendingUnstake: '0',
'$loki': 34205 },
{ account: 'ramires',
symbol: 'SCT',
balance: '0.000',
stake: '104801.708',
delegatedStake: '0',
receivedStake: '0',
pendingUnstake: '0',
'$loki': 34497 },
{ account: 'kopasi',
symbol: 'SCT',
balance: '0.000',
stake: '116838.158',
delegatedStake: '0',
receivedStake: '0',
pendingUnstake: '0.000',
'$loki': 34534 },
{ account: 'jjm13',
symbol: 'SCT',
balance: '335.935',
stake: '58500.400',
delegatedStake: '0',
receivedStake: '0',
pendingUnstake: '0',
'$loki': 34607 } ]
$gte 는 Greater Than or Equal to, 이상
$gt 는 Greater Than, 초과
or 검색
stake 가 1 이상이거나
balance 가 1 이상이거나
pendingStake 가 1 이상인 결과물 찾기
ssc.find(
'tokens', //contract name
'balances', //table name
{
'symbol':'SCT',
'$or': [
{'stake': {$gte: 1}},
{'balance': {$gte: 1}},
{'pendingUnstake': {$gte: 1}}
]
},
1000, //limit the number of records to retrieve
0, //offset applied to the records set
[], //array of index definitions { index: string, descending: boolean }
(err, results) => { //callback
console.log(err, results);
});
마켓 오더북
ssc.find(
'market',
'buyBook',
{'symbol': 'SCT'},
200,
0,
[{'index': 'price', 'descending': true}],
(e, buyBook) => {
for (var i = 0; i < buyBook.length;i++){
var buy = buyBook[i];
console.log(buy);
}
});
ssc.find(
'market',
'sellBook',
{'symbol': 'SCT'},
200,
0,
[{'index': 'price', 'descending': false}],
(e, sellBook) => {
for (var i = 0; i < sellBook.length;i++){
var sell = sellBook[i];
console.log(sell);
}
});
[{'index': 'price', 'descending': true}]
이런식으로 해서 price 순으로 정렬해줍니다.
거래 기록
ssc.find(
'market',
'tradesHistory',
{'symbol': 'SCT'},
200,
0,
[{"index":"timestamp","descending":false}],
(err, results) => {
});
timestamp 순으로 정렬해야 스팀엔진 마켓과 비슷한 결과가 나옵니다.
코딩을 봐도 어떻게 해야하는지 모르겠지만 T.T 결과물들 감사히 잘쓰고 있습니다. 편안한 휴일되세요~
포스팅 잘 보았습니다~! 많은 도움이 될것 같아요~~!!
또 궁금한게 sellBook, tradesHistory같이 테이블명이 따로 공개 된게 있나요?
market 컨트랙에 metrics 테이블
tokens 컨트랙에 contractsBalances, pendingUnstakes 테이블
있네요
답변 감사드립니다~~
수고 많으셨습니당~💙
감사합니다~💙
행복한 💙 오늘 보내셔용~^^
Posted using Partiko Android