Как выполнять транзакцию () по контрактным функциям на удаленном узле

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

Код, который у меня есть, выглядит следующим образом, но он не работает, поскольку нет кошелька:

from web3 import Web3
import json
from web3.providers.rpc import HTTPProvider
contractAddress = '0xabcd'
web3 = Web3(HTTPProvider('https://mainnet.infura.io'))
with open('abcd.abi', 'r') as abi_definition:
    abi = json.load(abi_definition)
print (web3.eth.blockNumber)


fContract = web3.eth.contract(abi,contractAddress)

print ("Test",fContract.transact().test("0xabcd",100000))

Ошибка:

ValueError: {u'message': u'gas required exceeds allowance or always failing transaction', u'code': -32000}
3 голоса | спросил ph0rex 15 Jpm1000000pmMon, 15 Jan 2018 13:38:23 +030018 2018, 13:38:23

1 ответ


2

Эта функциональность довольно новая, поддерживается только в v4-бета-версии. Обязательно обновляйтесь до самой последней версии, регулярно.

Проверьте документы для:

Грубо, вы захотите:

txn = fContract.functions.test("0xabcd", 100000).buildTransaction()
signed = web3.eth.account.signTransaction(txn, privateKey)
txn_hash = web3.eth.sendRawTransaction(signed.rawTransaction)
ответил carver 15 Jpm1000000pmMon, 15 Jan 2018 21:17:00 +030018 2018, 21:17:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132