Estoy tratando de descubrir cómo compartir el firmante entre varios archivos js. Tengo un archivo walletConnect.js donde me conecto a Metamask y obtengo el contrato de token ERC20. Esto funciona bien.
async function connect(){ try{ const accounts = await ethereum.request({ method: "eth_requestAccounts", }); const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); // ERC20 token contract const tokenContract = new ethers.Contract( tokenAddress, tokenAbi, signer ); } catch (e) { console.log(e); } }y luego tengo otro archivo stake.js donde deposito un token en un contrato
async function stakeToken() { try { const stakingContract = new ethers.Contract( contractAddress, contractAbi, signer ); // approve contract await tokenContract.approve(stakingContract.address, maxAmount); // stake tokens await stakingContract.stakeTokens( tokenContract.address, amount ); } catch (e) { console.log(e); } }Todo funciona bien si tengo todo el código en un archivo. Uso el gancho useState y todo está bien. Sin embargo, tendré múltiples contratos de participación que me gustaría mantener en archivos javascript separados. ¿Cómo lo hago cuando tengo varios archivos?
He creado un hook contracts.js como este
import { ethers } from "ethers"; export const useContract = (address, abi) => { try { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); const contract = new ethers.Contract(address, abi, signer); return contract; } catch (e) { console.log(e); return false; } };Ahora solo llamo a useContract desde cualquier script y devuelve un contrato
const stakingContract = useContract(someAddress, someAbi);de esta manera me ahorro mucho código redundante