如何从 pyethereum 获取事件日志信息?
How do I get event log information from 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's tests 中找到一些使用它的示例代码,这里是您的固定代码:
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)
我有一些测试可以创建与 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's tests 中找到一些使用它的示例代码,这里是您的固定代码:
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)