dapp开发
一、连接插件钱包
根据EIP-1193标准协议,往window注入ethereum、okxwallet、BinanceChain等。
构造provider: provider = new ethers.providers.Web3Provider(window.ethereum): provider理解成dapp连接到区块链的入口。
然后触发用户连接钱包,选择账户: await provider.request({ method: 'eth_requestAccounts' });
获取账户对象: signer = provider.getSigner(); const address = await signer.getAddress();
获取到合约对象: contract = new ethers.Contract(contractAddress, contractABI, signer);
调用合约方法: const tx = await contract.increment();
等待上链确认: await tx.wait();
二、WalletConnect连接移动钱包
打开二维码:
const walletConnectProvider = new WalletConnectProvider.default({ rpc: { 1: "https://mainnet.infura.io/v3/INFURA_ID", // 替换为你的 Infura ID 5: "https://goerli.infura.io/v3/INFURA_ID" // 也可以改成你想链 }, chainId: 5, // Goerli 测试网 }); // 启动 WalletConnect 会自动弹出二维码 await walletConnectProvider.enable();
等待用户扫码后,构造provider: provider = new ethers.providers.Web3Provider(walletConnectProvider);
获取账户: signer = provider.getSigner(); const address = await signer.getAddress();
连接合约,构造合约对象: contract = new ethers.Contract(contractAddress, contractABI, signer);
监听断开: walletConnectProvider.on("disconnect", () => {
alert("钱包已断开连接");
location.reload();
});