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

in sct •  5 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 순으로 정렬해야 스팀엔진 마켓과 비슷한 결과가 나옵니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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

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

  ·  5 years ago (edited)

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

답변 감사드립니다~~

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

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

Posted using Partiko Android