EOS Nation has built an open-source solution for Blocktivity statistics
Which includes:
- Server-Side: Calculate action & transaction counts
- Smart Contract: Hourly/Daily/Weekly statistics
We plan on deploying this solution/smart contracts on every EOSIO compatible blockchains to allow for more transparent statistics.
| chain | code/scope | endpoint |
|---|---|---|
| EOS | blocktivity1 | https://eos.eosn.io |
| BOS | blocktivity1 | https://bos.eosn.io |
| WAX | blocktivity1 | https://wax.eosn.io |
| MEETONE | blocktivit.m | https://meetone.eosn.io |
| TELOS | blocktivity1 | http://telosapi.atticlab.net |
| BEOS | blocktivity1 | https://api.beos.world |
| Jungle (Testnet) | blocktivity1 | https://jungle.eosn.io |
| Kylin (Testnet) | blocktivity1 | https://kylin.eosn.io |
$ eosio-cpp blocktivity.cppinstall
$ npm install node-fetch eosjssum.js
const fetch = require("node-fetch");
const { JsonRpc } = require("eosjs");
const rpc = new JsonRpc("https://eos.eosn.io", { fetch });
const code = "blocktivity1";
const scope = "blocktivity1";
const table = "sum";
rpc.get_table_rows({ json: true, code, scope, table }).then((data => {
console.log(data.rows[0]);
/**
* {
* hour: 815997,
* day: 20310523,
* week: 128191484,
* last_updated: '2019-11-06T15:48:24'
* }
*/
}))periods.js
const fetch = require("node-fetch");
const { JsonRpc } = require("eosjs");
const rpc = new JsonRpc("https://eos.eosn.io", { fetch });
const code = "blocktivity1";
const scope = "blocktivity1";
const table = "periods";
const limit = 168
rpc.get_table_rows({ json: true, code, scope, table, limit }).then((data => {
for (const row of data.rows) {
console.log(row);
/**
* {
* block_num: 88228800,
* timestamp: '2019-11-05T02:35:49',
* transactions: 178877,
* actions: 826073,
* cpu_usage_us: 316587911,
* net_usage_words: 8364304
* }
*/
}
}))Request sum statistics
curl --request POST \
--url http://eos.eosn.io/v1/chain/get_table_rows \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{"code":"blocktivity1","table":"sum","scope":"blocktivity1","json":true}' | jq .JSON response
{
"rows": [
{
"hour": 875365,
"day": 20773084,
"week": 83237200,
"timestamp": "2019-11-03T16:48:21"
}
],
"more": false
}Request periods (hourly intervals of 7200 blocks)
curl --request POST \
--url http://eos.eosn.io/v1/chain/get_table_rows \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{"code":"blocktivity1","table":"periods","scope":"blocktivity1","json":true,"limit":168}' | jq .JSON response
{
"rows": [
{
"block_num": 87696000,
"timestamp": "2019-11-03T16:48:21",
"transactions": 379379,
"actions": 1211942,
"cpu_usage_us": 63476,
"net_usage_words": 1772
}
...
],
"more": true
}$ git clone https://github.com/EOS-Nation/blocktivity-eosio-stats.git
$ cd blocktivity-eosio-stats
$ npm install.env
# Standard Nodeos
NODEOS_ENDPOINT="http://eos.eosn.io"
# (Required) History Solution (v1, hyperion, dfuse)
HISTORY_TYPE="hyperion"
NETWORK="mainnet"
NODEOS_ENDPOINT_HISTORY="http://eos.greymass.com"
# (Optional) Push results to on-chain contract
ACTOR="blocktivity1"
PERMISSION="push"
COSIGN="cpu.account@active"
# (Private) keys & tokens
DFUSE_TOKEN="<PRIVATE DFUSE TOKEN>"
PRIVATE_KEYS="<PRIVATE KEY>"
# (Optional) server-side settings
ONE_HOUR=7200
PAUSE_MS=60000
CONCURRENCY=3$ npm startPushes hourly (7200 blocks) statistics of transaction & action counts.
- Authority:
get_self()
{uint64_t} block_num- block number start (rounded to the nearest 7200 interval){time_point_sec} timestamp- block creation timestamp (UTC){uint64_t} transactions- number of actions during 1 hour period{uint64_t} actions- number of transactions during 1 hour period
cleos push action blocktivity push '[87458400, "2019-11-03T16:48:21", 299282, 281802]' -p blocktivity{uint64_t} block_num- start of block number{time_point_sec} timestamp- block creation timestamp (UTC){uint64_t} transactions- number of actions during 1 hour period{uint64_t} actions- number of transactions during 1 hour period{uint64_t} cpu_usage_us- number of cpu_usage_us during 1 hour period{uint64_t} net_usage_words- number of net_usage_words during 1 hour period
{
"block_num": 87458400,
"timestamp": "2019-11-03T16:48:21",
"transactions": 299282,
"actions": 281802,
"cpu_usage_us": 63476,
"net_usage_words": 1772
}{uint64_t} hour- hourly number of actions{uint64_t} day- daily number of actions{uint64_t} week- weekly number of actions{time_point_sec} last_updated- last updated (UTC)
{
"hour": 875365,
"day": 20773084,
"week": 83237200,
"last_updated": "2019-11-03T16:48:21"
}{uint64_t} hour- average hourly number of actions (7 day average){uint64_t} day- average daily number of actions (7 day average){uint64_t} week- weekly number of actions{time_point_sec} last_updated- last updated (UTC)
{
"hour": 875365,
"day": 20773084,
"week": 83237200,
"last_updated": "2019-11-03T16:48:21"
}{uint64_t} hour- highest hourly number of actions{uint64_t} day- highest daily number of actions{uint64_t} week- highest weekly number of actions{time_point_sec} last_updated- last updated (UTC)
{
"hour": 875365,
"day": 20773084,
"week": 83237200,
"last_updated": "2019-11-03T16:48:21"
}