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.
¿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.
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 from
direcció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.
Román Frólov
var currentProvider = new Web3.providers.HttpProvider('http://localhost:7545');
y cambiar la primera línea avar web3 = new Web3(currentProvider);
Román Frólov
'http://localhost:7545'
asegúrese de cambiar el puerto si es necesario.usuario19510
t_io
david mihal
contract.setProvider(web3.currentProvider);
a cada contrato que creoChovy