¿Cómo obtener la dirección del contrato después de implementar el contrato sin usar trufa?

Actualmente estoy usando web3 0.20.6 y planeo quedarme en web3@0.20.6 porque hay problemas con HTTP en las versiones beta de web3@1.0.0-beta.* como

El proveedor actual no admite suscripciones: HttpProvider

Ahora estoy tratando de averiguar cómo obtener la dirección del contrato después de la implementación. Porque en web3@1.0.0-beta.*, podemos usar como el ejemplo a continuación para obtener la dirección del contrato.

    contract.deploy({
        data: '0x'+bin,
        arguments: [request.body.vin, cost, request.body.buyer]
    })
    .send({
        from: request.body.dealer,
        gas: gas
    })
    .on('receipt', receipt => {
        util.log(`>>>>> contractApi - Contract sucessfully deployed @ address: ${receipt.contractAddress}`);

        data.contract_address = receipt.contractAddress;

        response.json(data);
    });

Pero, ¿cómo lo haces en web3@0.20.6? No pude encontrar las soluciones en línea sin usar trufa. No estoy planeando usar trufa también.

Lo que intenté fue,

const deployedContract = LoginContract.new ({
    data: '0x'+binLogin,
    from: '6ded1c5b448819a6cde4293e33fbe54583ef5c52',
    gas: 4700000
});

contractData = deployedContract.address;
util.log(`>>>>> setup - Login Contract sucessfully deployed @ address: ${contractData}`)

Pero el resultado en la consola es una dirección indefinida

22 de marzo 14:04:15 - >>>>> configuración - Contrato de inicio de sesión implementado con éxito @ dirección: indefinido

Luego, después de unos 5-10 segundos, apareció esto en la consola

Error: No se pudo almacenar el código de contrato, verifique su cantidad de gas.

Estoy súper confundido en este momento porque la cantidad de gas debería ser suficiente.

EDITAR 1 Gracias a la respuesta de @mirg, la implementación se realizó correctamente. Sin embargo, noté que las instrucciones debajo de la implementación del contrato:

contractData = deployedContract.address;
util.log(`>>>>> setup - Login Contract sucessfully deployed @ address: ${contractData}`)

continúa ejecutándose y no espera a que se complete/finalice la implementación del contrato.

¿Cómo haces más instrucciones para esperar y procesar el resultado de ese despliegue de contrato? En web3@1.0.0-beta.* se puede lograr usando

.on('receipt', receipt => {}

Pero no tengo idea de cómo se logra usando web3@0.20.6.

Respuestas (1)

En el segundo caso, no está pasando los parámetros del constructor a la función de implementación.

const deploymentContract = LoginContract.new (solicitud.cuerpo.vin, costo, solicitud.cuerpo.comprador, {
    datos: '0x'+binLogin,
    de: '6ded1c5b448819a6cde4293e33fbe54583ef5c52',
    gasolina: 4700000
}, function(err, miContrato){
    si (! err) {
       // NOTA: ¡La devolución de llamada se disparará dos veces!
       // Una vez que el contrato tiene establecida la propiedad transactionHash y una vez que se implementa en una dirección.

       // por ejemplo, verifique el hash tx en la primera llamada (envío de transacción)
       if(!miContrato.dirección) {
           console.log(myContract.transactionHash) // El hash de la transacción, que implementa el contrato

       // verifique la dirección en la segunda llamada (contrato implementado)
       } demás {
           console.log(myContract.address) // la dirección del contrato
       }

       // Tenga en cuenta que el "myContractReturned" devuelto === "myContract",
       // por lo que el objeto devuelto "myContractReturned" también obtendrá la dirección establecida.
    }
  }));

esto debería funcionar referencia

Gracias por la respuesta, @mirg, noté que las instrucciones después de la implementación del contrato continúan ejecutándose sin esperar a que finalice la implementación. ¿Cómo hacer que las instrucciones esperen en web3@0.20.6 como en web3@1.0.0-beta.*?
debe proporcionar una devolución de llamada (que se activará dos veces). Ver mi respuesta actualizada