强哥醚事件

django-ethereum-events的Python项目详细描述


Django中的以太坊合同事件日志监视

https://travis-ci.org/artemistomaras/django-ethereum-events.svg?branch=masterhttps://img.shields.io/pypi/v/django-ethereum-events.svg

概述

这个包提供了一种简单的方法来监视以太坊区块链中调用Contract Events的、特别感兴趣的事务。

主要概念的灵感来自以下项目:

软件包版本0.2.x+支持web3 v4

如果您想要python 2.7兼容性和/或web3 v3支持,请使用此包的0.1.x版本。

安装

  1. 使用pip安装:

    pip install django-ethereum-events
    
  2. 确保在INSTALLED_APPS

    中包含'django_ethereum_events'
    INSTALLED_APPS+=('django_ethereum_events')

    如果您使用的是管理后端,也可以在INSTALLED_APPS中包含solo

  3. 进行必要的迁移

    pythonmanage.pymigratedjango_ethereum_events

用法

  1. settings文件中,指定以下设置

    ETHEREUM_NODE_URI='http://localhost:8545'
  2. 创建新的监视器devent

    contract_abi="""
    The whole contract abi goes here
    """event="MyEvent"# the emitted event nameevent_receiver="myapp.event_receivers.CustomEventReceiver"contract_address="0x10f683d9acc908cA6b7A34726271229B846b0292"# the address of the contract emitting the eventMonitoredEvent.object.register_event(event_name=event,contract_address=contract_address,contract_abi=contract_abi,event_receiver=event_receiver)
  3. 创建适当的事件接收器

    fromdjango_ethereum_events.chaineventsimportAbstractEventReceiverclassCustomEventReceiver(AbsractEventReceiver):defsave(self,decoded_event):# custom logic goes here

    decoded_event参数是从web3.utils.events.get_event_data方法提供的解码日志。

  4. 要开始监视区块链,请运行芹菜任务django_ethereum_events.tasks.event_listener或更高版本,使用celerybeat将其作为定期任务运行

    fromcelery.beatimportcrontabCELERYBEAT_SCHEDULE={'ethereum_events':{'task':'django_ethereum_events.tasks.event_listener','schedule':crontab(minute='*/1')# run every minute}}

    还可以设置可选的^ {tt9} $设置,它限制了可以从芹菜任务中一次读取的块的最大数量。

有关事件接收器的详细信息

建议将自定义事件接收器中的代码简单化,因为它是在event_listener任务运行时同步运行的。如果不是这样,请将参数decoded_event传递给您自己的芹菜任务

# inside the CustomEventReceiver.save methodfromdjango_ethereum_events.utilsimportHexJsonEncoderdecoded_event_data=json.dumps(decoded_event,cls=HexJsonEncoder)my_custom_task.delay(decoded_event_data)

如果在事件接收器中引发未处理的异常,event_listener任务将记录该错误并创建 包含所有相关事件信息的django_ethereum_events.models.FailedEventLog的新实例。

事件侦听器不尝试重新运行FailedEventLogs。这取决于客户端实现。

重置内部状态

块只处理一次。最后处理的块存储在.models.Daemon条目中。

若要重置已处理的块数,请运行reset_block_daemon命令(可选)指定要重置为(默认为零)的块数(-b,–block)。如果将其重置为零,则下次触发event_listener时,它将开始处理来自genesis块的块。

也可以从django管理后端更改Daemon项。

权威网络证明

若要在rinkeby或任何其他使用权威证明共识引擎(也称为clique)的专用网络上使用此包,请将可选的ETHEREUM_GETH_POA设置设置设置为True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列