¿Cómo implementar un contrato con clave privada local?

Estoy tratando de implementar mi contrato en la cadena de bloques en mi red privada con clave privada local (sin billetera: usé web3.auto.w3.account.create()).

Sé cómo enviar una transacción normal con clave privada local. Pero implementar el contrato no es fácil para mí. estoy usando web3.py

>>> from web3.auto import w3
>>> account = w3.eth.account.create()
>>> account.address
'0x653E3CE959a236278cF110E7C63052cDf94DB03B'
>>> account.privateKey
HexBytes('0x2aa62ebc701c8f075dc3755a85ddc5309025494288c408bc8e66fd095c393f91')

Obtengo la dirección y la clave privada. entonces lo que quiero hacer es...

web3 = Web3(Web3.HTTPProvider("http://127.0.0.1:8555"))

contract_src = open('Funding.sol').read()
contract_bin = compile_source(contract_src)
contract_interface = contract_bin['<stdin>:Funding']

transaction = {
    'from': <public address which I got>,
    'gas': 100000,
    'gasPrice': 0,
    'nonce': 0,
    ...
}
signed = w3.eth.account.signTransaction(transaction, <private key which I got>)
web3.eth.sendRawTransaction(signed.rawTransaction)

En la transacción, ¿qué información debo poner?

Mi contrato se ve a continuación:

contract Information {
    String str;

    function modify(String s) public {
        str = s;
    }
}

contract Bag {
    mapping(uint256 => Bag) contents;
    uint256 public i = 0;

    function create() public {
        contents[i++] = new Information();
    }
}

Respuestas (1)

Lo que está tratando de hacer es factible y debería funcionar. su contrato realmente no importa mucho más que los argumentos para finalizar la función que está llamando.

Lo que ingresa transactiones el objeto de transacción, puede encontrarlo aquí: https://web3js.readthedocs.io/en/1.0/web3-eth.html?highlight=transaction#id62

El atributo de datos del objeto de transacción es la función codificada ABI con su argumento, puede obtenerlo a través de este ejemplo: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#id31

myContract.methods.myMethod(123).encodeABI(); '0x58cf5f10000000000000000000000000000000000000000000000000000000000000007B