此脚本用于EOS链上获取鲸交所2018年12月26日0点0分0秒到12月26日59分59秒的数据。
const axios = require('axios');
const fs = require('fs');
const start = 3996731;
const to = 4056774;
let now = start;
let allActions = [];
let total = to - start;
async function fetchData() {
let offset = 99;
if (now + offset >= to) {
offset = to - now;
}
let startTime = Date.now();
let waitTime = 5;
try {
let response = await axios.post('https://eos.greymass.com/v1/history/get_actions', {
account_name: 'whaleextrust',
pos: now,
offset: offset
});
if (response.status == 200) {
var actions = response.data.actions;
allActions.push.apply(allActions, actions);
now += 100;
console.log('('+Math.ceil((now - start) / 100)+'/'+Math.ceil(total / 100)+')fetch success in ' + (Date.now() - startTime) + 'ms');
if (now > to) {
console.log('data fetch complete.');
var finalData = JSON.stringify(allActions);
fs.writeFile('actions.json', finalData, function(){
console.log('actions saved.');
});
return;
}
} else {
console.log('fetch error.');
waitTime = 1000;
}
} catch (e) {
console.log('fetch failure.');
waitTime = 1000;
}
setTimeout(() => {
fetchData();
}, 10);
}
//start
fetchData();
以下脚本用于采集数据的分析
function parseData() {
console.log('start analyze...');
const startTime = Date.now();
let data = fs.readFileSync('actions.json');
const actions = JSON.parse(data);
data = null;
let trades = 0;
let mineTrades = 0;
let accounts = [];
let mineAccounts = [];
let candyAccounts = [];
for (const action of actions) {
const act = action.action_trace.act;
if (act.name == 'verifytrade') {
trades++;
if (!accounts.includes(act.data.buyer)) {
accounts.push(act.data.buyer);
}
if (!accounts.includes(act.data.seller)) {
accounts.push(act.data.seller);
}
if (act.data.buyer == act.data.seller) {
mineTrades++;
if (!mineAccounts.includes(act.data.buyer)) {
mineAccounts.push(act.data.buyer);
}
}
}
if (act.name == 'verifyad') {
if (!candyAccounts.includes(act.data.to)) {
candyAccounts.push(act.data.to);
}
}
}
let mineAmount = 0;
let totalAmount = 0;
let actionMaps = {};
for (const action of actions) {
const act = action.action_trace.act;
if (typeof actionMaps[act.name] == 'undefined') {
actionMaps[act.name] = 0;
}
actionMaps[act.name]++;
if (act.name == 'verifytrade') {
if (mineAccounts.includes(act.data.buyer) || mineAccounts.includes(act.data.seller)) {
mineAmount += act.data.quote_amount;
}
totalAmount += act.data.quote_amount;
}
}
for (const action in actionMaps) {
console.log('action: '+ action + ':' + actionMaps[action]);
}
console.log('--------------------');
console.log('action count:' + actions.length);
console.log('trade count:' + trades);
console.log('account count:' + accounts.length);
console.log('total amount:' + (totalAmount / 10000));
console.log('candy account count:' + candyAccounts.length);
console.log('--------------------');
console.log('mine trade count:' + mineTrades);
console.log('mine account count:' + mineAccounts.length);
console.log('mine amount:' + (mineAmount / 10000));
console.log('--------------------');
console.log('cost time: ' + (Date.now() - startTime) + 'ms');
}
parseData();
网友评论