如何从pyethereum获取事件日志信息



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

一个简化的例子:

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)

我运行这个并得到:

No handlers could be found for logger "eth.pow"
{'': 4, '_event_type': 'LogMyNumber'}

打印出来的json是我想要的信息,但有人能解释一下,或者给我举个例子,我可以如何捕获它并将其加载到python中的一个变量中,这样我就可以检查它并对它做些什么吗?似乎有一种叫做log_listener的东西可以传递到abi_contract中,看起来它是相关的,但我不知道该怎么办。

我知道你已经等了很长时间了,但如果有人想知道,下面是:你提到的log_listeners就是一条路。您可以在pyethereum的测试中找到一些使用它的示例代码,下面是您的固定代码:

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)

最新更新