实时推送Hive区块链信息到Telegram客户端(2)

上一篇文章中讲到了整个程序的思路,以及如何读取Hive区块链信息,并回溯N个区块。在这篇文章中讲讲如何在区块信息中过滤信息,并根据自己定义的规则生成待发送的信息。

image.png
图源: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。

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center