¿Mi dApp puede usar cuentas de Metamask con proveedor dado, pero no cuando configura el objeto Web3 en la URL del proveedor de Rinkeby?

Hoy es el primer día que implementé una red de prueba ( Rinkeby ) y no mi red local de clientes de Ganache. Creo que necesito una aclaración sobre las cuentas cuando se trata de Metamask y Rinkeby.

Si inicializo el objeto Web3 en el momento de la creación en el lado del cliente a la propiedad giveProvider , puedo acceder a mis cuentas de Metamask cuando ejecuto una llamada al método getAccounts() desde el código Javascript de mi página web. Sin embargo, si en cambio inicializo el objeto Web3 usando la URL de Rinkeby decorada con la API de Infura, obtengo un resultado vacío cuando hago la llamada a getAccounts() . Supongo que esto se debe a que las cuentas no están "en Rinkeby" ( no estoy seguro de cómo decir eso ) sino que son mantenidas por la billetera Metamask.

Mi objetivo general es poder hacer que el servidor especifique la red deseada en lugar de confiar en que Metamask se configure en la red Ethereum deseada cuando se ejecuta la página web de mi dApp.

Además, ¿alguien sabe cómo inicializar el objeto Web3 sin tener la clave API de Infura visible para alguien que rastree el código en el depurador del navegador?

// This is how I get a valid accounts result.  Metamask is currently set to Rinkeby.
const Web3 = require('web3');   
const localWeb3 = new Web3(Web3.givenProvider); 

localWeb3.eth.getAccounts()
.then(function (result) {}

// This results in an empty accounts result.
const Web3 = require('web3');   
const localWeb3 = new Web3("https://rinkeby.infura.io/<redacted>"); 

localWeb3.eth.getAccounts()
.then(function (result) {}
Creo que la segunda parte de tu pregunta no está relacionada con la primera pregunta, tal vez pueda llenar otra publicación.

Respuestas (1)

Sucede porque cuando llama usando el Web3.givenProvidernunca llegará al nodo Ethereum para consultar las cuentas, en cambio, solo están devolviendo sus cuentas Metamasky las llamadas a Rinkeby usando Infura no devuelven nada, porque no hay una cuenta registrada allí. Quizás Infura no proporciona el backend para getAccountsel método.

Infura no proporciona funcionalidades relacionadas con la cuenta, como la creación de nuevas cuentas. Entonces, para getAccounts(), no devolverá nada.