游客发表
去年帮一个朋友调他的目技门教 NFT 铸造页面,钱包连上了,术入合约也部署了,目技门教点 mint 就是术入没反应。查了两小时,目技门教发现是术入 ethers.js 的 provider 用了默认节点,请求被限流了。目技门教Web3 开发里这种坑遍地都是术入——不是逻辑难,是目技门教环境碎。
如果你打算从零做一个 DApp,术入先把技术栈理清楚。目技门教前端用 React 或 Next.js 都行,术入跟做普通网站没本质区别。目技门教真正多出来的术入是三样东西:钱包连接、链上交互、目技门教合约本身。
连接 MetaMask 不需要你写 private key 管理,那是钱包的事。你只需要请求用户授权,拿到账户地址。window.ethereum 是 MetaMask 注入的全局对象,但用户可能没装钱包,也可能装了多个。所以实际项目里基本都会用 RainbowKit 或 ConnectKit 这类库,它们帮你处理了多钱包兼容和 UI。我一开始觉得引库太重,手写了一个连接按钮,结果在 Brave 浏览器上直接挂了——Brave 内置钱包和 MetaMask 抢 window.ethereum,你得处理 provider 冲突。这种兼容性问题不值得自己扛。
一个最简 ERC-20 合约大概 50 行。核心就是 mapping(address => uint256) balances 加上 transfer 函数。Solidity 语法接近 TypeScript,有 require 做断言,有 event 做日志。难点不在语言,在于理解 gas 和状态变更的成本。每次写 storage 都要花 gas,读不花。所以合约里能 view 的函数就别写成 pure 之外的交易。
部署用 Hardhat。写个脚本,npx hardhat run scripts/deploy.js --network sepolia 就跑完了。测试网 ETH 去水龙头领,别用主网真金白银试。
ethers.js v6 和 viem 是目前两个主流选择。viem 更 TypeScript 友好,类型推导做得好,但学习曲线陡一点。ethers.js 文档全,社区大,遇到问题好搜。我建议新手先用 ethers.js,等熟悉了再换 viem。核心操作就三个:contract.balanceOf(address) 读数据,contract.transfer(to, amount) 发交易,contract.on("Transfer", callback) 监听事件。
有个细节容易忽略:读操作返回的是 BigNumber 或 bigint,不是普通数字。前端展示要格式化,ethers.formatUnits(balance, 18)。我第一次做的时候直接 balance.toString() 扔到页面上,用户看到一长串零,以为我骗他。
Hardhat 自带本地节点,npx hardhat node 启动后给你 20 个测试账户,每个 10000 ETH。前端切换到这个本地网络,交易秒确认,不用等出块。调试合约用 console.log——Hardhat 支持在 Solidity 里打日志,跟 JS 一样用。这个功能救过我很多次。
区块浏览器上验证合约也值得做。Etherscan 的 verify 功能让你上传源码,之后用户能在链上直接看到你的合约逻辑。不验证的话,别人调用你的合约心里没底。
Web3 开发最劝退的不是技术,是信息过载。每天有新链、新标准、新工具。但你做一个 DApp,核心就那几样:连接钱包、调用合约、展示数据。把这条链路跑通一次,后面都是在这个骨架上加东西。别被那些花哨的概念带跑,先让一个按钮能成功调用合约函数,比什么都实在。
友情链接