banteg / multicall.py

aggregate results of multiple smart contract calls into one
MIT License
246 stars 106 forks source link

Example Issue #6

Closed kaleb-keny closed 3 years ago

kaleb-keny commented 3 years ago

Hey,

I tried running the example and ended up on the below traceback

Traceback (most recent call last):

  File "<ipython-input-33-9c652de726e4>", line 20, in <module>
    multi()  # {'whale': 566437.0921992733, 'fish': 7005.0, 'supply': 1000003.1220798912}

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\multicall\multicall.py", line 30, in __call__
    result.update(call.decode_output(output))

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\multicall\call.py", line 30, in decode_output
    decoded = self.signature.decode_data(output)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\multicall\signature.py", line 39, in decode_data
    return decode_single(self.output_types, output)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\codec.py", line 155, in decode_single
    return decoder(stream)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\decoding.py", line 127, in __call__
    return self.decode(stream)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_utils\functional.py", line 45, in inner
    return callback(fn(*args, **kwargs))

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\decoding.py", line 173, in decode
    yield decoder(stream)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\decoding.py", line 127, in __call__
    return self.decode(stream)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\decoding.py", line 198, in decode
    raw_data = self.read_data_from_stream(stream)

  File "C:\kaleb\miniconda\envs\skew\lib\site-packages\eth_abi\decoding.py", line 308, in read_data_from_stream
    len(data),

InsufficientDataBytes: Tried to read 32 bytes.  Only got 0 bytes

Note sure what the issue is, tried debugging it, but it seems running the call returns empty b'' which proceeds to fail on the decoder

        for call, output in zip(self.calls, outputs):
            result.update(call.decode_output(output))