处理网络中的变化(例如 Görli vs Mainnet)是非常复杂的,一个轻微的故障最多会让你的应用程序看起来很混乱,最坏的情况下会导致资金的损失、隐私数据的泄露或错误传导一个请求要所执行的内容。
幸运的是,正常用户应该永远不会改变他们的网络,除非他们被欺骗或者弄错了。
这是开发人员主要需要担心的问题,大多数开发人员应该理解在应用程序操作期间,会引起页面的重载(这已经是许多客户端的默认行为)和网络的变化,这会引起很多问题。
因此,发生网络变化时,最佳实践是简单地刷新页面。这应该会让你所有的UI组件重置到一个已知的安全状态,包括横幅组件(banners),如果他们在一个不受支持的网络,就可以警告提示你的用户。
这可以通过使用以下函数来完成:
网络变化时自动刷新
// 网络变化时强制页面刷新
{
// "any" 参数表示允许任何自发的网络变化
const provider = new ethers.providers.Web3Provider(window.ethereum, "any");
provider.on("network", (newNetwork, oldNetwork) => {
// 当 Provider 建立初始连接时,它会 emits 一个 "network" 事件,并且 oldNetwork 为空
// 一旦 oldNetwork 不为空,就表示网络发生了变化
if (oldNetwork) {
window.location.reload();
}
});
}
The content of this site is licensed under the Creative Commons License. Generated on January 11, 2023, 9:24pm.