¿Cómo puedo recargar automáticamente la base de dapp en el estado de la cuenta de Metamask?
Deseo diseñar una autenticación basada en metamask (como la que se usa en Crypokitties), para lo cual puedo diseñar un código que identifique si Metamask está bloqueado o no. Pero el desafío es que tengo que actualizar manualmente mi página web para capturar el estado más reciente de la metamáscara si está bloqueada o desbloqueada.
Supongamos que, si un usuario cierra la sesión de metamask, quiero capturar esa instancia y cerrar la dapp al mismo tiempo sin ninguna otra acción por parte del usuario (en mi caso, esto sucede solo después de actualizar manualmente la página).
Estaré agradecido si alguien ha creado una función similar y puede guiar con lógica o fragmentos de código.
Como Metamask inyecta una instancia Web3 en window
el objeto, puede verificar la existencia del objeto. Para detectar si la metamask está desbloqueada, puede verificar en la instancia Web3 si hay alguna dirección disponible.
Para actualizar los datos automáticamente en JavaScript, puede usarlos setInterval(MyCheckingMethod,1000);
en la instancia de su aplicación principal.
Un ejemplo rápido a continuación, pero encontrará que la mayoría se toma de la página oficial . Tenga en cuenta que este es solo un ejemplo mayormente vacío pero comentado que tendrá que adaptar para su propio caso de uso y flujo de datos:
export detectWeb3 = () => {
if(typeof window.web3 !== "undefined" ){ // load metamask's provider
const w3 = window.web3;
// Calling method to retrieve accounts. Method available since Web3 v1.x.x-beta
w3.eth.getAccounts().then( r => {
if (r.length > 0) {
// some addresses found.
} else {
// No address found
}
}).catch(e => { // Error catched if method doesn't exist
const accounts = w3.eth.accounts; // We'll try to get accounts from previous versions ( up to Web3 v0.20.x)
if (accounts.length > 0) {
// some addresses found
} else {
// No address found
}
});
}else{
// Instructions to execute if no Web3 instance has been detected.
}
}
setInterval(detectWeb3,1000);
Otro descargo de responsabilidad: tomé parte del código de un montón de archivos mecanografiados míos. Es posible que deba tener esto en cuenta.
Tanmay
Como uno
Tanmay