Método de contrato: Error: Proveedor no configurado o no válido

Estoy construyendo un Dapp usando MetaMask. Sin embargo, recibo un error cuando intento llamar a un método en mi contrato.

Aquí está el código simplificado:

var web3 = new Web3(web3.currentProvider);
var contract = new web3.eth.Contract(contractData.abi);
contract.options.address = address;
contract.methods.getName().call().then(name => console.log(name))

Esto arroja el siguiente error:

Unhandled rejection Error: Provider not set or invalid

Excavando a través del depurador, parece que RequestManager no tiene un conjunto de proveedores. Sin embargo, no puedo entender cómo se debe configurar ese proveedor.

Intenta agregar var currentProvider = new Web3.providers.HttpProvider('http://localhost:7545');y cambiar la primera línea avar web3 = new Web3(currentProvider);
'http://localhost:7545'asegúrese de cambiar el puerto si es necesario.
@RomanFrolov Está usando MetaMask.
@DavidMihal ¿Encontró una solución para esto? Tengo el mismo problema.
@t_io No realmente, pero solucioné el problema llamando contract.setProvider(web3.currentProvider);a cada contrato que creo
¿Podría deberse a que no se instaló metamask?

Respuestas (2)

¿Ha configurado MetaMask en cualquier red de prueba que esté utilizando? Si testrpc, seleccione en Metamask que desea conectarse a LocalHost 8545, y si usa Ganache, puede crear un RPC personalizado para conectarse a LocalHost 7545. A partir de ahí, use la frase inicial proporcionada por testrpc o Ganache para "restaurar"/conectar . Esto debería activar sus cuentas y permitirle conectarse correctamente a un proveedor.

MetaMask parece estar funcionando bien, he podido solucionar el problema llamando contract.setProvider(web3.currentProvider);a cada contrato que creo. El problema parece ser un error o una API confusa con web3.

Parece que no has configurado la fromdirección. Consulte las propiedades del contrato . Con MetaMask puede obtener la dirección seleccionada actual convar account = web3.eth.accounts[0];

Si agregas algo así, contract.options.from = account;debería funcionar.