在上一篇文章中讲到了整个程序的思路,以及如何读取Hive区块链信息,并回溯N个区块。在这篇文章中讲讲如何在区块信息中过滤信息,并根据自己定义的规则生成待发送的信息。
图源:pixabay
首先,需要定义一些用于筛选信息的规则。这里的一个基本原则就是所定义的规则一定要和程序代码分离,这样最终的程序才容易维护。任何时候想要更改规则的话,只需要修改定义规则的配置文件,而无需修改程序代码。比如:
rules:
votes:
any_to_aafeng:
from: "*"
to: aafeng
exclude: aafeng,aafeng.test
min_weight: 20
上面定义了一组规则:除去'aafeng'和'aafeng.test'之外的任何用户对'aafeng'这个用户的点赞,如果点赞额度>=20%,则符合这个规则。
再举一个关于转账的规则:
transfers:
any_to_aafeng:
from: "*"
to: aafeng
min_account: 1
aafeng_to_any:
from: aafeng
to: "*"
min_account: 0
上面规则定义了:任何向'aafeng'转入的金额>=1,符合规则。任何从'aafeng'转出的金额>=0,符合规则。这条规则对于监测账号的资金变化非常有用。
除了上述的两类关于点赞和转账的规则,你还可以定义很多规则,比如:留言,发帖,提到你等等。道理都非常类似,这里就不一一例举了。
规则都定义了好了之后,我们需要考虑在程序中如何支持这样的规则,下面是对点赞规则的实现:
HIVE_BASE_URL = '\https://hive.blog/'
# check if there is a matched vote rule
def get_vote_message(vote_rules, transaction):
messages = ''
try:
t_voter = transaction["voter"]
t_author = transaction["author"]
t_weight = transaction['weight']/100.00
t_permlink = transaction['permlink']
for vr in vote_rules:
# check exclude
if t_voter in vote_rules[vr]["exclude"].split(","):
continue
# check if voting weight matches
if t_weight>0 and t_weight < vote_rules[vr]["min_weight"]:
continue
# check voter and votee matches
if (t_voter==vote_rules[vr]["from"] and t_author==vote_rules[vr]["to"]) or \
('*'==vote_rules[vr]["from"] and t_author==vote_rules[vr]["to"]) or \
(t_voter==vote_rules[vr]["from"] and '*'==vote_rules[vr]["to"]):
messages = messages + "VOTE: %s --> %s [%.2f]: %s/@%s/%s\n\n" % (t_voter,t_author,t_weight,HIVE_BASE_URL,t_author,t_permlink)
except Exception as e:
traceback.print_exc()
return None
if messages!='':
return messages
else:
return None
通过上面的程序,就可以从区块链信息中过滤出自己感兴趣的点赞信息了。下一篇讲讲如何配置Telegram。