Я сгенерировал следующий код для транзакции с моей частной сетью и реализовал следующий скрипт на Python:
import sys, os, time
from solc import compile_source, compile_files, link_code
from ethjsonrpc import EthJsonRpc
print("Using enviroment in " + sys.prefix)
print("Python version " + sys.version)
c = EthJsonRpc('127.0.0.1', 8042)
c.web3_clientVersion()
params = [1,2,3,4,5,6,b'0x2a706b3187db623b309cd7e8a8c15308160600d68b8eae590978a32ad6c967b2']
tx = c.call_with_transaction(c.eth_coinbase(),'0x1e291B2CDB574519Ee1c3d75CA849f34153EE9e5', 'post(uint8,uint8,uint8,uint8,uint8,uint8,bytes32)', params)
Когда я выполняю скрипт, я получаю следующую ошибку:
Traceback (most recent call last):
File "write_raspberry_v1.py", line 15, in <module>
tx = c.call_with_transaction(c.eth_coinbase(),'0x1e291B2CDB574519Ee1c3d75CA849f34153EE9e5', 'post(uint8,uint8,uint8,uint8,uint8,uint8,bytes32)', params)
File "/usr/local/lib/python3.7/site-packages/ethjsonrpc/client.py", line 127, in call_with_transaction
data = self._encode_function(sig, args)
File "/usr/local/lib/python3.7/site-packages/ethjsonrpc/client.py", line 78, in _encode_function
encoded_params = encode_abi(types, param_values)
File "/usr/local/lib/python3.7/site-packages/ethereum/abi.py", line 369, in encode_abi
myhead += enc(proctypes[i], args[i])
File "/usr/local/lib/python3.7/site-packages/ethereum/abi.py", line 344, in enc
return utils.to_string(encode_single(typ, arg))
File "/usr/local/lib/python3.7/site-packages/ethereum/abi.py", line 211, in encode_single
assert len(arg) <= int(sub)
Как я могу решить это? Есть ли другой способ отправить транзакцию из python в мою частную сеть (напрямую используя web3?)
Версия с использованием web3.py:
w3 = Web3(HTTPProvider("http://127.0.0.1:8042"))
vinduino = w3.eth.contract(
address = "0x1e291B2CDB574519Ee1c3d75CA849f34153EE9e5",
abi = contract_interface['abi'],
)
tx_hash = vinduino.functions.post(1,2,3,4,5,6,"0x2a706b3187db623b309cd7e8a8c15308160600d68b8eae590978a32ad6c967b2").call({'from': w3.eth.coinbase})
print(tx_hash)