Soy un nuevo aprendiz. Estoy confuso sobre cómo hacer que web3.js funcione en un alojamiento compartido. El usuario que utilice la función debe tener instalado Metamask.
Como uso alojamiento compartido, no puedo instalar el nodo o geth en el alojamiento compartido.
Descargué web3.js de https://github.com/ethereum/web3.js/ y cargué los archivos en el alojamiento compartido y luego los vinculé al archivo HTML.
<script src="assert/dist/web3.js></script>
Sigo la guía en esta publicación. ¿Es posible usar métodos API web3.js para interactuar con un contrato implementado en Rinkeby?
y agrega el código a la etiqueta
Estoy usando un dominio con https://
Estoy usando el navegador Google Chrome.
Instalé Metamask e inicié sesión, me conecté a Rinkeby Test Network.
Subí el siguiente archivo HTML al servidor de alojamiento compartido y lo ejecuté, pero obtuve el error
A continuación se muestra el código HTML completo que utilicé para las pruebas.
<!doctype>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Project</title>
<script src="assets/dist/web3.js"></script>
<script>
var Web3 = require('web3');
var web3 = window.web3;
if(typeof web3 !== 'undefined') {
console.log("Using web3 detected from external source like Metamask");
web3 = new Web3(web3.currentProvider);
} else {
console.log("Using localhost");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
var account = web3.eth.accounts[0];
console.log(account);
</script>
</head>
<body><p>Hello Project</p></body>
</html>
El HTML web3.js no puede detectar Rinkeby Test Network como proveedor.
¿Qué me he perdido? Los consejos son muy apreciados. Gracias
El problema principal aquí es que especifica como nodo localhost:8545
que debe corresponder a un nodo local en su máquina.
Si su usuario tiene metamask, no necesita instanciar un objeto Web3 usted mismo, Metamask ya lo hace al inyectar en su navegador la instancia web3 en formato window.web3
. Luego, Metamask detectará las transacciones cuando use esta instancia para realizar llamadas y confiará la transacción, si el usuario la acepta, a la red actualmente conectada.
Supongo que tiene MetaMask instalado y ejecutándose en el navegador que está usando para la prueba.
Si es así, es difícil decirlo con certeza, pero supongo que lo está comprobando window.web3
demasiado pronto (antes de que MetaMask haya tenido la oportunidad de inyectarlo).
Esperaría el evento de carga de la ventana antes de buscar window.web3
.
Gracias Smarx y Asone por el consejo. Ahora lo tengo funcionando usando el siguiente código:
.
<html>
<head>
<title>Hello Project</title>
<script src="assets/dist/web3.js"></script>
</head>
<body>
<p>Hello Project</p>
<div id="err_msg_box"></div>
<script>
window.onload = function(){
if (typeof web3 === 'undefined'} {
$('#err_msg_box').html('You need <a href="htps://metamask.io">MetaMask</a> browser plugin to run this example');
} else {
// Here the code to execute the project
// No need to set Provider, use web3.eth directly
// web3.eth.getAccounts(function(err,res){ console.log(res);});
}
}
</script>
<script src="assets/js/jquery-1.10.2.min.js"></script>
</body>
</html>
en el proveedor http, puede usar infura.io: brindan acceso a la máquina virtual ethereum, solo necesita registrarse allí y obtener sus claves de URL
david evony