在本文中,我将演示一种缓存以太坊事件的简单方法。我只想说,通常我们将事务用于链下操作,例如跟踪令牌的传输或检索特定事务的筛选列表,就像一个SQL查询一样。
假设我们想要创建一个跟踪令牌传输的网站,Etherscan。我们只需要一波简单的操作,比如:
取得所有令牌转移信息
取得以太坊转账来源地址
取得以太坊转账目标地址
获得特定金额的转账信息
在特定时间范围内获得转移信息
在web3中是有getPastEvents方法,其示例用法是:
这种方法的主要问题是,随着区块链的增长,速度可能会变慢,尤其是如果您不运行自己的以太坊节点,并且使用像infura或MyEtherApi这样的公共提供者。
王坚院士:加快推进区块链技术在工业互联网数据确权等方面的应用:中国工业互联网研究院首席科学家、中国工程院院士王坚今日在经济参考报刊文《“新基建”提速 工业互联网大数据发展迎新机遇》,文中提到,数据要素参与价值创造与分配是实现高质量发展的关键环节。要加快推进区块链技术在工业互联网数据确权、确责和交易中的应用,推动数据资产的有序流通、可信交易、合法变现。[2020/3/10]
接下来,几乎不可能实现一些比较复杂的查询,因为筛选对象的功能非常有限。
此外,已经写入区块链的事件无法更改,只能随时间添加新记录。这个和其他事实使事件成为缓存的完美目标。
数据库选择
在这个例子中,我们将使用mysql作为保存事件记录的数据库。MySQL有能力存储原始JSON,然后使用JSON对象的属性编写查询,就好像它们是普通的SQL列一样。
声音 | 微众银行李斌:微众银行2019年已公开区块链发明专利217件,位列全球第五:金色财经报道,11月15日,微众银行金融科技首席研究员李斌在上海证券报?中国证券网主办的第12期产业前沿(深圳)圆桌论坛上阐述了该行区块链技术探路的最新进展。据李斌介绍,微众银行2015年即率先在区块链领域开展联盟链技术研究和应用实践。经过多年布局,微众银行牵头研发的FISCO BCOS区块链底层平台率先攻克一揽子关键核心技术并全面开源,2019年已公开区块链发明专利217件,位列全球第五;同时,积极链接同业,牵头成立金链盟,参与国际和国家标准制定;并在政务、版权、智慧城市、司法、金融、供应链、社会治理等诸多领域落地成熟应用,开源生态圈内已有众多企业的上百个应用,其中超60个应用在生产环境中稳定运行,从而发展成为国内最大的开源联盟链社区。此外,以微众银行牵头搭建的国内首个在生产环境运行的多金融机构间对账平台为例:该平台2016年8月投产,目前在生产环境中运行的交易记录笔数已超过7000万笔,并保持零故障运行。[2019/11/16]
我们应该储存什么?
声音 | 中金公司张宇:立足区块链等技术,存量住房智能化开发空间巨大:据新华社报道,中金公司研究部董事总经理张宇表示,立足BAT、大数据、区块链、BIM等信息技术数据整合、分析与处理,存量住房智能化开发空间巨大。[2019/3/13]
让我们仔细看看getPastEvents方法的结果,以实现我们使用的数据。我以Binance代币转移为例。每个事件对象都具有以下结构:
如您所见,事件参数存储在returnValues属性中。blockNumber,transactionHash,logIndex也可能有用,我稍后会告诉你。
我们的目标是将这些JSON对象编写到数据库中,并实现可以无缝替换标准web3的getPastEvents方法的简单访问方法。
以下是用于创建Transfer表的SQL脚本。
动态 | HTC区块链手机接受莱特币、BNB及法币购买:据Coindesk报道,近日,电子产品制造商HTC宣布其此前推出的区块链手机HTC EXODUS 1现已接受美元及其他法定货币、LTC和BNB购买,在此之前,该手机只接受BTC和ETH支付购买。此外,HTC今天推出了约20款新应用,其中包括一款个人追踪器,可以将你的数据以加密货币的形式出售,并与Opera合作,允许用户通过以太坊向网站进行小额支付,到目前为止,手机的主要区块链相关功能还包括加密钱包和一种密钥恢复机制,可让与少数朋友存储恢复(密钥)的详细信息,以防手机丢失或被盗。[2019/2/26]
需要说明的一些重要事项:
json列创建为JSON类型。这允许我们使用特殊语法创建自动生成的列。
from,to,value?-这些是自动生成的列。这个表达式起初看起来很复杂,但实际上它很简单。例如,从列值等于存储在json列中的对象的returnValues.from属性。
印度尼西亚区块链协会正式成立 创始成员为六家本地区块链公司:当地时间3月21日,印度尼西亚区块链协会Asosiasi Blockchain Indonesia(A-B-I)宣布在西雅加达正式成立。该协会共有六家创始会员,均是在印尼本地运营的区块链公司。据悉,印度尼西亚区块链协会将归为印尼工商业联合会(KADIN Indonesia)下属机构,首任临时主席是INDODAX首席执行官Oscar Darmawan,目前已开放会员申请。[2018/3/21]
txHash和logIndex。这些属性组合在一起可识别每个事件对象我们需要那些为行创建唯一索引,从而防止偶尔重复事件。
我们还可以选择添加数据库索引来提高性能。例如,对于to列
案例实践
先决条件
Node.js的我使用的是8.4.0版。
Web3npm包与区块链进行交互。我们需要特定版本1.0.0-beta.35。在尝试检索某些事件时,最新版本beta.36的使用导致“返回值无效,是否运行OutofGas”错误。
3.要在JavaScript中使用MySQL数据库,我们应该安装mysql包?
?4.最后一个-?MySQL服务器。值得一提的是,我们将使用MySQL5.7作为最新的8.0版本似乎与mysql包兼容。
MySQL交互
我们将利用连接池对此示例进行查询。
使用promisified版本的查询方法会更方便?
现在我们可以使用以下代码将记录插入之前创建的传输表中。?
在这里,我们还检查可能的重复行插入。现在我们不希望在这种情况下做任何特别的事情,可能我们已经提前写过这些重复事件或类似的事情。所以我们只考虑处理这种异常。
缓存功能
让我们构造一个智能合约对象来从中检索事件
?我们只能在abi参数中包含Transfer事件接口,如下所示:
这是缓存功能的基本版本。首先,我们获取事件对象,然后逐个将它们写入数据库。?
定期区块链扫描
现在让我们将其扩展为一个简单的后台脚本,该脚本不断扫描区块链以查找发出的事件。
一些实用功能:
第一个是setTimeout的简单异步/等待实现。第二个用于fn的无限周期调用-工作函数。
有了这些辅助功能,我们的后台扫描仪看起来非常简单
让我解释'latestEthBlock1'的事情。Web3的getPastEvents返回在范围内写入的事件,包括边界。因此,如果没有这个递增,下一个cacheEvents调用将再次将写入latestEthBlock的事件作为结果的一部分返回。
虽然由于实现了唯一索引,重复事件不会插入到数据库中,但我们仍然不希望完成这些多余的工作。
对于简单的后台扫描程序,此实现应该足够了。但是,总有改进的余地。稍后我们会回到它。现在让我们快速了解一下我们现在可以利用这些数据做些什么。
事件检索
以下是选择从特定地址进行的转移的功能示例:
我们使用生成的列查询数据库。这里最值得注意的部分是函数的结果看起来就像web3的getPastEvents的结果。它使得重构当前代码变得更加容易。
进一步改进
事件对象包含许多可能对您的应用程序完全无用的属性。在写入数据库之前删除多余部分会更好。这样我们就节省了很多空间。
您可能还注意到,当前版本的扫描程序在每次重新启动时都以区块#0开始。在一直扫描到当前块时,它会尝试将重复记录插入数据库。我们可以通过查询数据库中的最新缓存块来消除那些多余的工作。
不是从块#0开始扫描也是很好的,但至少从部署合同时的块开始扫描。为简单起见,您可以使用etherscan.io获取此信息。
这里我们再次使用MySQLjson函数来获取事件对象的blockNumber属性。
然后更换旧的扫描功能
新的扫描功能?
?结论
最后,我们创建了一个简单但有效的事件扫描程序,可以将事件连续缓存到MySQL数据库中。
本文转载公众号:区块链研究实验室,专注区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。欢迎联系作者微信加入社群:csschan1120???
标签:MYS区块链STESONMYST币区块链是什么多选题Artificial intelligence ecoystemBoson Protocol
尊敬的用户:BiKi.com即将开放UID的充值、提现,并开放UID/USDT交易对,具体时间如下:1、开放充值时间:8月12日20:00;2、开放提现时间:8月12日20:00;3、开放交易时.
1900/1/1 0:00:00享云链全球节点招募第二轮争锋会于8月7日举行。各大竞选人再度交锋,主要针对社群用户最关注的小融“双挖”、链克回购和链克产量减半等议题展开激烈讨论.
1900/1/1 0:00:00ZG.COMCEO赵昌宇与NMSCEOSteven将于5月7日20:00-21:00在一直播平台直播,与ZG.COM粉丝畅谈NEW打新计划第二期项目NMS。本次直播由新财经协办.
1900/1/1 0:00:00文?|?周文怡?编辑?|?Tong?来源?|PANews近日,据《福布斯》报道,德国保险业巨头安联全球企业及特殊风险有限公司正在开发一种基于代币的区块链.
1900/1/1 0:00:00中国人民银行支付结算司副司长穆长春在中国金融四十人论坛上表示,央行数字货币即将推出,将采用双层运营体系,即上层是中国人民银行,第二层是商业机构.
1900/1/1 0:00:00尊敬的ZT用户:ZT即将正式上线ACM,定于香港时间2019年8月9日14:00开放充值,香港时间2019年8月9日18:00开启ACM/USDT交易对.
1900/1/1 0:00:00