sscjs 를 이용한 steem-engine API 샘플코드 - 토큰 보유자 현황(리치리스트), 마켓 오더북, 거래기록

in #sct5 years ago (edited)

저번에 쓴 글 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 순으로 정렬해야 스팀엔진 마켓과 비슷한 결과가 나옵니다.

Sort:  

코딩을 봐도 어떻게 해야하는지 모르겠지만 T.T 결과물들 감사히 잘쓰고 있습니다. 편안한 휴일되세요~

포스팅 잘 보았습니다~! 많은 도움이 될것 같아요~~!!
또 궁금한게 sellBook, tradesHistory같이 테이블명이 따로 공개 된게 있나요?

market 컨트랙에 metrics 테이블
tokens 컨트랙에 contractsBalances, pendingUnstakes 테이블
있네요

답변 감사드립니다~~

수고 많으셨습니당~💙
감사합니다~💙

행복한 💙 오늘 보내셔용~^^

Posted using Partiko Android

 5 years ago  Reveal Comment