Cómo hacer que web3.js funcione

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.

ingrese la descripción de la imagen aquí

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>

ingrese la descripción de la imagen aquí

El HTML web3.js no puede detectar Rinkeby Test Network como proveedor.

¿Qué me he perdido? Los consejos son muy apreciados. Gracias

Respuestas (4)

El problema principal aquí es que especifica como nodo localhost:8545que 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.

OK. Gracias por el consejo. Después de leer sus comentarios. Ahora tengo la respuesta y funciona. Publicaré el código de trabajo en la publicación.

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.web3demasiado 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:

  • Usar Google Chrome
  • Metamáscara instalada
  • Usar servidor de alojamiento compartido
  • No es necesario instalar Geth u otro cliente
  • Desventaja: el usuario DEBE tener MetaMask instalado o usar MIST para interactuar con la red debido a que no hay un servidor local o no se ejecuta en su propio nodo VPS

.

<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>
Solo un aviso, su respuesta corresponde más a lo que mencionó @smarx.

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