首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从虚空获取事件日志信息?

如何从虚空获取事件日志信息?
EN

Stack Overflow用户
提问于 2015-12-14 01:55:46
回答 1查看 383关注 0票数 2

我已经有了一些测试,可以用pyethereum创建契约,并对它们做各种事情,但是我对如何获得关于它们记录的事件的信息感到困惑。

一个简化的例子:

代码语言:javascript
复制
from ethereum import tester as t

s = t.state()
code = """contract LogTest {
            event LogMyNumber(uint);

            function LogTest() {
            }

            function logSomething() {
                LogMyNumber(4); 
            }
        }"""

logtest = t.state().abi_contract(code, language='solidity', sender=t.k0)
logtest.logSomething()

#number_i_logged = WHAT DO I DO HERE?
#print "You logged the number %d" % (number_i_logged)

我运行这个,得到:

代码语言:javascript
复制
No handlers could be found for logger "eth.pow"
{'': 4, '_event_type': 'LogMyNumber'}

正在打印的json是我想要的信息,但是有人能解释,或者给我举一个例子,说明我如何捕获它并将它加载到python中的一个变量中,这样我就可以检查它并使用它做一些事情?似乎有一种叫做log_listener的东西可以传递到abi_contract中,看起来它是相关的,但我不知道该如何处理它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 09:28:05

我知道你已经等了很长一段时间了,但是如果其他人想知道的话,下面是这样的:你提到的log_listeners是解决问题的方法。您可以在[医]虚线试验中找到一些使用它的示例代码,下面是您的固定代码:

代码语言:javascript
复制
from ethereum import tester as t

s = t.state()
code = """contract LogTest {
            event LogMyNumber(uint loggedNumber);

            function LogTest() {
            }

            function logSomething() {
                LogMyNumber(4);
            }
        }"""

c = s.abi_contract(code, language='solidity', sender=t.k0)
o = []
s.block.log_listeners.append(lambda x: o.append(c._translator.listen(x)))

c.logSomething()

assert len(o) == 1
assert o == [{"_event_type": 'LogMyNumber', "loggedNumber": 4}]

number_i_logged = o[0]["loggedNumber"]
print "You logged the number %d" % (number_i_logged)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34258639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档