Правильная настройка, позволяющая Web3.py взаимодействовать с Remix Solidity Contract - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть задание, для которого я должен написать клиента, который может взаимодействовать с развернутым контрактом посредством транзакций и фильтрации журналов событий, но я не могу понять, как успешно заставить либо работать через web3py. У меня есть контракт, скомпилированный и развернутый на Remix, но я не уверен, как найти подходящего поставщика или другую настройку, чтобы он мог правильно взаимодействовать с ним из python программы. До сих пор я пытался установить переменную WEB3_INFURA_PROJECT_ID в ID проекта проекта Infura, который я запустил, затем использовать web3.auto.infura w3 и использовать WebsocketProvider с URL, заданным Infura. (Обратите внимание, что w3.eth.accounts - пустой список)

Затем я получаю контракт, используя w3.eth.contract(abi = <Remix's produced ABI>)(<address of Remix contract>). В любом случае, если я попытаюсь выполнить какую-либо транзакцию с contract.functions.<function name>(<params>).transact(), я получу

ValueError: {'code': -32601, 'message': 'The method eth_sendTransaction does not exist/is not available'}

Я также хочу иметь возможность получить все экземпляры определенного события в моем контракте, которое произошло в блокчейне через эту программу. Итак, если я вызываю функцию через Remix IDE, которая создает журнал событий, то пытаюсь отфильтровать ее, используя

filter = contract.events.<event name>.createFilter(fromBlock='latest')
filter.get_new_entries()

, я получаю пустой список. Если я вместо этого использую filter.get_all_entries(), то же самое происходит. Это также не изменится, если я сначала создаю фильтр, а затем вызываю функцию в Remix, а затем вызываю get_XXX_entries(). Если вместо этого при создании фильтра я использую kwargs fromBlock = 0, toBlock = 'latest', то get_new_entries() по-прежнему возвращает пустой список, а get_all_entries() вызывает

concurrent.futures._base.TimeoutError

По сути, я хочу знать, что я должен делать в Для тестирования и разработки этой программы python, чтобы она могла осуществлять транзакции и извлекать журналы событий с этим контрактом, развернутым через Remix. Есть ли способ сделать это без необходимости покупать / тратить газ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...