Transacting users before HF20 vs after.
hf20·@mattockfs·
0.000 HBDTransacting users before HF20 vs after.
To gain some insights on the impact of HF20 on access to the STEEM blockchain, I ran a little script that looked at one simple metric: **The number of unique transacting accounts per hour of the day**. To get a usefull insights I rewinded to a few days before the hard fork untill just before the moment I made this post. I'll share my script below, but first, here is the data.
Let us first look what two normal days look like:
| Date| From|Till| Transacting users | |
|---|---|---|---|---|
| 2018-09-23 | 0:00 | 1:00 | 13398 | |
| | 1:00 | 2:00 | 14807 | |
| | 2:00 | 3:00 | 12984 | |
| | 3:00 | 4:00 | 12781 | |
| | 4:00 | 5:00 | 11569 | |
| | 5:00 | 6:00 | 14502 | |
| | 6:00 | 7:00 | 14645 | |
| | 7:00 | 8:00 | 14012 | |
| | 8:00 | 9:00 | 13098 | |
| | 9:00 | 10:00 | 13349 | |
| | 10:00 | 11:00 | 15252 | |
| | 11:00 | 12:00 | 13588 | |
| | 12:00 | 13:00 | 17553 | |
| | 13:00 | 14:00 | 16040 | |
| | 14:00 | 15:00 | 15115 | |
| | 15:00 | 16:00 | 17483 | |
| | 16:00 | 17:00 | 15255 | |
| | 17:00 | 18:00 | 16414 | |
| | 18:00 | 19:00 | 17095 | |
| | 19:00 | 20:00 | 16090 | |
| | 20:00 | 21:00 | 15258 | |
| | 21:00 | 22:00 | 15101 | |
| | 22:00 | 23:00 | 12428 | |
| | 23:00 | 24:00 | 13247 | |
| 2018-09-24 | 0:00 | 1:00 | 13287 | |
| | 1:00 | 2:00 | 13338 | |
| | 2:00 | 3:00 | 13619 | |
| | 3:00 | 4:00 | 14070 | |
| | 4:00 | 5:00 | 14289 | |
| | 5:00 | 6:00 | 13608 | |
| | 6:00 | 7:00 | 13756 | |
| | 7:00 | 8:00 | 16027 | |
| | 8:00 | 9:00 | 12244 | |
| | 9:00 | 10:00 | 17003 | |
| | 10:00 | 11:00 | 15512 | |
| | 11:00 | 12:00 | 15231 | |
| | 12:00 | 13:00 | 17231 | |
| | 13:00 | 14:00 | 15986 | |
| | 14:00 | 15:00 | 15101 | |
| | 15:00 | 16:00 | 17626 | |
| | 16:00 | 17:00 | 16788 | |
| | 17:00 | 18:00 | 17124 | |
| | 18:00 | 19:00 | 17918 | |
| | 19:00 | 20:00 | 15851 | |
| | 20:00 | 21:00 | 18640 | |
| | 21:00 | 22:00 | 16303 | |
| | 22:00 | 23:00 | 12480 | |
| | 23:00 | 24:00 | 14577 | |
And now two days with HF20 in it. Remember, HF20 was supposed to activate at 15:00 on the 25th.
| Date| From|Till| Transacting users | |
|---|---|---|---|---|
| 2018-09-25 | 0:00 | 1:00 | 14633 | |
| | 1:00 | 2:00 | 13038 | |
| | 2:00 | 3:00 | 12497 | |
| | 3:00 | 4:00 | 12908 | |
| | 4:00 | 5:00 | 13970 | |
| | 5:00 | 6:00 | 14156 | |
| | 6:00 | 7:00 | 13635 | |
| | 7:00 | 8:00 | 14027 | |
| | 8:00 | 9:00 | 13483 | |
| | 9:00 | 10:00 | 15537 | |
| | 10:00 | 11:00 | 14755 | |
| | 11:00 | 12:00 | 15216 | |
| | 12:00 | 13:00 | 15931 | |
| | 13:00 | 14:00 | 18746 | |
| | 14:00 | 15:00 | 18782 | |
| | 15:00 | 16:00 | 635 | |
| | 16:00 | 17:00 | 92 | |
| | 17:00 | 18:00 | 74 | |
| | 18:00 | 19:00 | 79 | |
| | 19:00 | 20:00 | 56 | |
| | 20:00 | 21:00 | 51 | |
| | 21:00 | 22:00 | 59 | |
| | 22:00 | 23:00 | 83 | |
| | 23:00 | 24:00 | 45 | |
| 2018-09-26 | 0:00 | 1:00 | 65 | |
| | 1:00 | 2:00 | 44 | |
| | 2:00 | 3:00 | 48 | |
| | 3:00 | 4:00 | 91 | |
| | 4:00 | 5:00 | 41 | |
| | 5:00 | 6:00 | 43 | |
| | 6:00 | 7:00 | 118 | |
| | 7:00 | 8:00 | 157 | |
| | 8:00 | 9:00 | 130 | |
| | 9:00 | 10:00 | 136 | |
| | 10:00 | 11:00 | 99 | |
| | 11:00 | 12:00 | 72 | |
| | 12:00 | 13:00 | 107 | |
| | 13:00 | 14:00 | 87 | |
| | 14:00 | 15:00 | 118 | |
| | 15:00 | 16:00 | 5061 | |
| | 16:00 | 17:00 | 6670 | |
| | 17:00 | 18:00 | 4207 | |
| | 18:00 | 19:00 | 4020 | |
| | 19:00 | 20:00 | 2819 | |
| | 20:00 | 21:00 | 2372 | |
| | 21:00 | 22:00 | | |
| | 22:00 | 23:00 | | |
| | 23:00 | 24:00 | | |
Most if obvious from the tables, but let us look at it in a little graph:

The above data was gathered using the below asyncsteem script.
```python
#!/usr/bin/python
from twisted.internet import reactor, endpoints
from twisted.logger import Logger, textFileLogObserver
from asyncsteem import ActiveBlockChain
class CommentStream:
def __init__(self):
self.accounts = set()
def _account(self,account):
self.accounts.add(account)
def hour(self,tm,event,client):
print tm,len(self.accounts)
self.accounts = set()
def account_create(self,tm,event,client):
self._account(event["creator"])
def account_create_with_delegation(self,tm,event,client):
self._account(event["creator"])
def account_update(self,tm,event,client):
self._account(event["account"])
def account_witness_proxy(self,tm,event,client):
self._account(event["account"])
def account_witness_vote(self,tm,event,client):
self._account(event["account"])
def cancel_transfer_from_savings(self,tm,event,client):
self._account(event["from"])
def change_recovery_account(self,tm,event,client):
self._account(event["account_to_recover"])
def claim_reward_balance(self,tm,event,client):
self._account(event["account"])
def comment_options(self,tm,event,client):
self._account(event["author"])
def comment(self,tm,event,client):
self._account(event["author"])
def decline_voting_rights(self,tm,event,client):
self._account(event["account"])
def delegate_vesting_shares(self,tm,event,client):
self._account(event["delegator"])
def delete_comment(self,tm,event,client):
self._account(event["author"])
def feed_publish(self,tm,event,client):
self._account(event["publisher"])
def limit_order_cancel(self,tm,event,client):
self._account(event["owner"])
def limit_order_create(self,tm,event,client):
self._account(event["owner"])
def recover_account(self,tm,event,client):
self._account(event["account_to_recover"])
def request_account_recovery(self,tm,event,client):
self._account(event["account_to_recover"])
def transfer_from_savings(self,tm,event,client):
self._account(event["from"])
def transfer(self,tm,event,client):
self._account(event["from"])
def transfer_to_savings(self,tm,event,client):
self._account(event["from"])
def transfer_to_vesting(self,tm,event,client):
self._account(event["from"])
def vote(self,tm,event,client):
self._account(event["voter"])
def withdraw_vesting(self,tm,event,client):
self._account(event["account"])
def witness_update(self,tm,event,client):
self._account(event["owner"])
mypath = dirname(realpath(__file__))
observer = textFileLogObserver(io.open(join(mypath,"hf20.log"), "a"))
logger = Logger(observer=observer,namespace="asyncsteem")
blockchain = ActiveBlockChain(reactor,log=logger,nodelist="default",rewind_days=3)
steembot = CommentStream()
blockchain.register_bot(steembot,"comment_stream")
reactor.run()
```