【问题标题】:How do I get event log information from pyethereum?如何从 pyethereum 获取事件日志信息?
【发布时间】:2016-03-19 10:31:07
【问题描述】:

我有一些测试可以与 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 ,看起来它是相关的,但我不知道该怎么处理它。

【问题讨论】:

    标签: python ethereum


    【解决方案1】:

    我知道您已经等待了很长时间的答案,但如果其他人想知道,这里是: 您提到的 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)
    

    【讨论】:

    • 谢谢,有道理,我试试看。
    • 工作得很好,正好赶上我需要再次这样做。再次感谢。
    • 太好了,很高兴它有帮助。
    猜你喜欢
    • 2020-03-27
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    相关资源
    最近更新 更多