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.
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
Cristoforus Darryl Widjaya
mirg