Recursive Algorithm to Get Proxy Votes on Steem Blockchain
- 时间:2020-09-09 13:08:38
- 分类:网络文摘
- 阅读:140 次
Regarding this tool: Get Proxy Votes on Steem Blockchain, In case you might not notice, this tool also returns the indirect proxy supporters.
For example, danielhuhservice proxies to der-prophet, who sets proxy to steemchiller.
Recursive Algorithms to Get Both Direct/Indirect Proxy Voters
If you perform real-time scan backwards on the steem blockchain, it is hard to obtain the indirect proxy because for each direct proxy, you have to spawn new thread search their account history.
Real-time processing is slow, and thus we process and sync the blocks into a database (e.g. SQLite). Suppose you can use a SQL to obtain the direct proxy voters like this:
1 2 3 4 5 6 7 8 | def getProxy(account): sql = "select account from proxy where proxy=" + account; con.exec(sql) data = [] for row in cur.fetchall(): # recursive data.append({"account": row[0], "voters": getProxy(row[0]) return data |
def getProxy(account):
sql = "select account from proxy where proxy=" + account;
con.exec(sql)
data = []
for row in cur.fetchall():
# recursive
data.append({"account": row[0], "voters": getProxy(row[0])
return dataHere it is the beauty of the recursion. We call the function itself to fill the voters array of the current proxy.
Terminating the Recursion
Usually, for recursion to work, you have to set a terminal condition, otherwise, the recursive calls might go forever which causes the infamous “Stack Overflow”.
But in our case, the steem blockchain, this might be ok without it. As you can’t broadcast a proxy vote to someone who proxies you back, or even proxies to someone who proxies to you – which causes a loop.
You can, however, pass a maximum depth value (as a second parameter), as a safety check.
1 2 3 4 5 6 7 8 9 10 11 | def getProxy(account, depth = 99): if depth == 0: # max depth exceeded, just return empty array return [] sql = "select account from proxy where proxy=" + account; con.exec(sql) data = [] for row in cur.fetchall(): # recursive data.append({"account": row[0], "voters": getProxy(row[0], depth - 1) return data |
def getProxy(account, depth = 99):
if depth == 0:
# max depth exceeded, just return empty array
return []
sql = "select account from proxy where proxy=" + account;
con.exec(sql)
data = []
for row in cur.fetchall():
# recursive
data.append({"account": row[0], "voters": getProxy(row[0], depth - 1)
return dataHere, the default maximum recursion depth is 100, when it exceeds, it will stop further recursive calls and simply return empty array.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:外婆家的菜园作文 我们一起加油吧 我的灰色童年 最后一个六一儿童节作文500字 姥姥家的菜园作文 数学题:三位老师带50名学生去参观植物园 在一个面积5平方分米的正方形里画一个最大的圆 数学题:有两个底面半径相等的圆柱,高的比是2:5 数学题:用这堆沙在5米宽的公路上铺2厘米厚的路面 数学题:某县城去省城的高速公路长160千米
- 评论列表
-
- 添加评论