참조 : [steem-engine] 거래 정보 추출 - 작업 진행 내용 기록용 내용이 잘못된 부분이 많이 존재하기 때문에 본 내용을 참조 바랍니다.
STEEMP 에서 정보를 조회하는 것은 정보량이 많기 떄문에 개별 토큰에서 조회한다. (상세정보 조회 시 시간이 너무 많이 걸림)
대상 마켓 이력정보를 조회하기 위한 관련 소스코드를 발췌하여 게시 합니다.
/// market 이력 정보를 조회한다
async function init(author, symbol){
// 전역 설정 값
let datas;
wlog.info(`STEP 0 (0/5) : start program ::: ${author}'s ${symbol} steem-engine market history.`);
// 전체 목록정보 조회
wse
.token_history(author, symbol) // 토큰 거래 정보 조회
.then(res=>{
wlog.info(`STEP 1 (1/5) : token_history is loaded. (${res.length})`);
// 매수, 매도 처리 정보의 txid 만 발췌하여 로딩
let buy = res
.filter(x=>x.from=='market'&&x.txid.indexOf('-')>0)
.map(_market_data_update); // buy 는 idx 가 다양하게 존재하는듯, 0은 없는 듯 ?!
let sell = res
.filter(x=>x.to=='market'&&x.txid.indexOf('-')>0)
.map(_market_data_update); // sell 은 idx 가 0 만 존재하는듯
// 전송 데이터
datas = buy.concat(sell);
// 유니크한 거래 TXID 정보
let txids = quique_strs(datas.map(x=>x.txid));
wlog.info(`STEP 2 (2/5) : filtered search txids. (${txids.length})`);
// 거래 정보 기준으로 전송
let sends = [];
for(let txid of txids){
sends.push(wse.getTransactionInfo(txid));
}
return Promise.all(sends);
})
.then(res=>{
wlog.info(`STEP 3 (3/5) : get detail transaction informations. (${res.length})`);
let trans = [];
for(let r of res){
if(r.action == 'buy' && r.sender==author){ // flag : buy - 내가 사는 것
_set_trans_data(trans, r, datas, author, symbol);
}else if(r.action == 'buy' && r.sender!=author){ // flag : sell - N/A
// 존재 불가의 데이터
wlog.error('sell - N/A', r);
}else if(r.action == 'sell' && r.sender==author){ // flag : sell - 내가 파는 것
_set_trans_data(trans, r, datas, author, 'STEEMP');
}else if(r.action == 'sell' && r.sender!=author){ // flag : buy - 남이 파는것을 산 경우
_set_trans_data(trans, r, datas, author, symbol);
}else {
// 존재 불가의 데이터 2
wlog.error('unknown data', r);
}
}// for(let r of res)
wlog.info(`STEP 4 (4/5) : filtered detail transaction informations. (${trans.length})`);
// 최신 순서로 정렬
trans.sort((a,b)=>b.time-a.time);
return Promise.resolve(trans);
})
.then(res=>{
wlog.info(`STEP 5 (5/5) : prints results (${res.length})`);
// 결과 출력
for(let r of res){
let color = r.flag=='buy'?'red':'blue';
// 로그 작성
wlog[color](`[${r.flag.padEnd(4,' ')}][${r.timestamp}] ${r.who.padEnd(16,' ')} ${r.quantity.toString().padStart(10,' ')} ${symbol} x ${r.price.toString().padEnd(8,' ')} = ${r.sum.toString().padStart(12,' ')} STEEMP ( ${r.txid} )`);
}
});
}
init('wonsama', 'sct'.toUpperCase());