2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
每个在 2022–2023 年间构建的生产级去中心化应用都面临同一个问题,这个问题就存在于其 package.json 文件中:
"wagmi": "^1.4.12",
"ethers": "^5.7.2",
"@rainbow-me/rainbowkit": "^1.3.5"
这三个库紧密耦合。Wagmi v2 完全弃用了 Ethers,转而支持 Viem。RainbowKit v2 要求使用 Wagmi v2。如果只迁移其中一个而不迁移其他,会导致整个项目崩溃。
我所见过的每一个处理此迁移的团队都采用同样痛苦的方式:手动逐个文件进行,耗时数天或数周,并且引入错误的风险不容忽视。
我构建了一个代码修改工具,只需一条命令即可完成迁移。
方法
核心洞察在于,这些迁移并非相互独立——它们是一个技术栈。因此,工具需要将它们视为一个协调的工作流,而不是三个单独运行且希望不会冲突的工具。
该工作流分为三个阶段:
第一阶段 — 检测
读取 package.json 并设置标志以确定运行哪些迁移。如果你已经在使用 Wagmi v2 但仍在使用 Ethers v5,它只会运行 Ethers 迁移。不会执行不必要的转换。
第二阶段 — 确定性转换
jssg(JavaScript ast-grep)处理所有具有唯一正确答案的模式:
对于 Wagmi v1 → v2:
-
useContractRead→useReadContract -
useContractWrite→useWriteContract -
usePrepareContractWrite→useSimulateContract -
useWaitForTransaction→useWaitForTransactionReceipt -
WagmiConfig→WagmiProvider(导入 + JSX 开始和结束标签) -
createClient→createConfig - 导入路径:
wagmi/chains→viem/chains
对于 Ethers v5 → v6:
-
ethers.providers.Web3Provider→ethers.BrowserProvider -
ethers.providers.JsonRpcProvider→ethers.JsonRpcProvider - 完整扁平化
ethers.utils命名空间 —parseEther、formatEther、keccak256、arrayify→getBytes、hexZeroPad→zeroPadValue,等等 -
ethers.BigNumber.from(x)→BigInt(x) -
.callStatic.method()→.method.staticCall()
对于 RainbowKit v1 → v2:
-
<RainbowKitProvider chains={chains}>→<RainbowKitProvider> -
getDefaultWallets移除链条参数 -
configureChains标记有待办事项注释,以便人工智能清理
第三阶段 — 针对边缘情况的人工智能技能
内置的 Claude 技能处理约 20% 无法确定性处理的情况:
-
getSigner()现在是异步的 — 同步用法需要添加await - BigNumber 算术链(
.add().mul())→ 原生大整数运算符 -
configureChains移除 — 将链条重构到createConfig中 -
QueryClientProvider包裹在WagmiProvider和RainbowKitProvid免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。