Envío de transacción firmada para crear un contrato

Mi objetivo es enviar una transacción firmada para crear un contrato inteligente, sin embargo, me enfrento a un problema que no he podido resolver durante algunos días:

Cuando envío la transacción (en una cadena privada), hay dos finales diferentes:

- 1 Web3js me dice que funcionó, puedo ver la transacción en el bloque. Sin embargo, al intentar contactar con el contrato, tengo el siguiente resultado:

Error: no se pudo decodificar uint256 de ABI: 0x

Cuando trato de correr eth.getCode(contractAddress)en Geth, regresa0x

- 2 Web3js me dice que la transacción no ha sido minada por 50 bloques (el nodo no tuvo tiempo de minar 50 bloques). Pero puedo ver la transacción en el bloque (en geth).

Aquí está el código que uso:

web3g = result;
getContractInstance(function (error, instance) {
    if (error) {
        console.log(error);
    } else {
        let newContract = instance;
        let deploy = newContract.deploy({
            data: bytecode,
            arguments: [MY ARGS]
        }).encodeABI();
        let gas = web3g.utils.toHex(3000000);
        let gasPrice = web3g.utils.toHex(21000000000);
        let gasLimit = web3g.utils.toHex(4000000);
        let nonce;
        web3g.eth.getTransactionCount(req.body.sender_address)
            .then(function (result) {
                nonce = result;
                nonce = web3g.utils.toHex(nonce);
                let transactionObject = {
                    gas: gas,
                    gasPrice: gasPrice,
                    gasLimit: gasLimit,
                    data: deploy,
                    from: req.body.sender_address,
                    nonce: nonce
                };

                web3g.eth.accounts.signTransaction(transactionObject, req.body.private_key, function (error, signedTx) {
                    if (error) {
                        console.log(error);
                    } else {
                        console.log(signedTx);
                        web3g.eth.sendSignedTransaction(signedTx.rawTransaction)
                            .on('confirmation', function (number, receipt) {
                                if (number == 1) {
                                        // do stuff

¿Alguien puede indicarme qué estoy haciendo mal?

Nota: puedo enviar una transacción firmada utilizando el método anterior para transferir ether entre direcciones.

Editar: la estimación de gas devuelve lo siguiente: error: error devuelto: el gas requerido excede la asignación o siempre falla la transacción

Respuestas (1)

Enfrenté problemas similares al crear transacciones firmadas y terminé desarrollando este paquete. https://www.npmjs.com/package/web3js-raw . Debería resolver tu problema.

Gracias por su respuesta. sin embargo, usar una biblioteca no oficial no es una opción para mí, ya que es para fines profesionales y es posible que no sigas actualizando tu biblioteca. Pero, ¿podrías explicar cuál es el problema?
No tiene que usar la biblioteca, porque el código fuente está disponible públicamente en git repo ( github.com/fidenz-chim/web3js-raw ). Hay tantas partes móviles cuando intenta firmar una transacción. Todo lo que he hecho es empaquetar las funciones de web3.js de una manera fácil de usar en sendRawTransaction. Si está dispuesto a compartir el contrato, podría implementarlo y ver qué sucede.
Lo comprobaré cuando pueda. ¡Volveremos a ti lo antes posible!
Bueno, tu solución parece ser bastante buena. Intentaré implementarlo de mi lado. Si hay demasiadas dificultades, lo bifurcará. ¡Gracias!
El uso de web3js ^ 0.17.0 no me permite conectarme al nodo: ERROR DE CONEXIÓN: no se pudo conectar al nodo. Pero funciona bien con web3js ^1.0.0-beta.26. Sam =e en mi propia implementación o con la tuya
Pude confirmar que web3js ^0.17.0 funciona sin problemas por mi parte. Funciona para mí y mi colega también.
¿Lo estás ejecutando contra tu propio nodo? En caso afirmativo, ¿cuál es la versión de geth? (estoy en 1.7.3)
He estado probando con infura.io, al igual que mi colega.