¿Por qué la niebla arroja 'Dirección no válida no detectada'?

Estoy tratando de hacer una página web que reciba un mensaje de un simple contrato inteligente "hola mundo". Desafortunadamente, no está funcionando. Estoy viendo esto en la consola Mist.

Uncaught invalid address
v                     @ web3.min.js:2
p                     @ web3.min.js:2
(anonymous function)  @ web3.min.js:2
i.formatInput         @ web3.min.js:2
i.toPayload           @ web3.min.js:2
i.buildCall.e         @ web3.min.js:2
s.sendTransaction     @ web3.min.js:2
s.execute             @ web3.min.js:2
(anonymous function)  @ (index):26

La página web está aquí y el código fuente del contrato está aquí . No puedo entender lo que estoy haciendo mal.

Respuestas (4)

Este error aparece cuando no tiene establecida una propiedad de cuenta predeterminada en el objeto web3.eth. Intenta ejecutar esto en la consola de Javascript:

web3.eth.defaultAccount=web3.eth.accounts[0]

(asumiendo que ya tiene algunas cuentas creadas)

Acabo de probar eso. obtengo: Error: Provider not set or invalid at Object.e.exports.InvalidProvider...yUncaught TypeError: Cannot read property '0' of null at <anonymous>:2:42...
¿Cómo podría lograr esto sin configurar explícitamente la cuenta predeterminada?
Este funcionó para mí.
Niebla 9.0Uncaught Error: No callback given, sync calls are not possible anymore in Mist. Please use only async calls.

Según su error, aún debe configurar el proveedor.

web3.setProvider(new web3.providers.HttpProvider('http://localhost:8102'));

donde localhost y puerto se refieren al nodo del servidor ethereum que pretende usar con Web3.

Como respondió Alexey, el error ocurre debido a una propiedad de cuenta predeterminada no definida.

El trabajo en javascript es agregar la siguiente declaración

web3.eth.defaultAccount = ethereum._state.accounts[0]

Aquí hemos usado ethereum._state.accounts[0]en lugar de web3.eth.accounts[0]ya que está en desuso para ser utilizado por metamask como se documenta en el sitio web

https://docs.metamask.io/guide/provider-migration.html#summary-of-breaking-changes

De: https://github.com/jefflau/ens-manager/issues/36

No se permiten nuevas llamadas de sincronización en las versiones más recientes de web3.js. Como resultado, la aplicación no detectará al usuario correcto y, por lo tanto, no le permitirá administrarlo y registrará un error:

Error no capturado (en promesa): No se ha dado devolución de llamada, las llamadas de sincronización ya no son posibles en Mist. Utilice solo llamadas asíncronas.

Deberías reemplazar todo

web3.eth.accounts[0] 

con:

web3.eth.getAccounts(function(e,accounts){ // do something });