Как отправить транзакцию с помощью bytes32 из python в частную сеть ethereum? - PullRequest
0 голосов
/ 13 сентября 2018

Я сгенерировал следующий код для транзакции с моей частной сетью и реализовал следующий скрипт на 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)
...