I don't know if they are doing that, but what you could do is create a program that reads all blocks from start_block
var:
- Read block
start_block
- Check if this block has transactions
- If yes, save the transactions in your database
- Increment
start_block
- Go back to step 1 and keep doing that till you are in the head block
Or, I already did it for you, just use the "eos-node-watcher" program that I created: https://github.com/EOSEssentials/eos-node-watcher
What you want to do in your dapp is to listen to only relevant actions. For my dapps I'm using my eos-node-watcher and you can setup the filters like this:
"accounts": {
"monstereosio": [], # leave an empty array to listen to all the actions
"eosio.token": [ # here you can filter all the actions
{
"name": "transfer",
"data": { "to": "monstereosio" } # (optional) if you set the data, it
} # will filter the actions parameters
]
},
Above I'm filtering everything from my contract monstereosio
actions and also all the eosio.token::transfer
that goes to monstereosio
.
Now with the transactions in your database you can play and keep the log of all the accounts that you need to, also free for doing your queries.
You could use your own EOS node with filter-on = *
if you have enough memory to. If you do that you are still tied to EOSRPC API limitations, it's better if you save it in your own database and play with it, maybe you will like to create your own tables/views and have more freedom to architect your data layer.