javascript
我想要在香港找一个defi行业AMM相关的solidity开发的初级岗位,现在我需要如何学习,才能找2年之内找到工作
结合你的背景(网安+985+INTP研究型性格)、目标(香港DeFi-AMM方向Solidity初级开发)和2年时间线,学习计划核心是“基础打底→AMM深度聚焦→实战项目落地→香港本地化适配→求职冲刺”,既利用你的网安优势形成差异化,又精准匹配岗位核心需求,具体可分为4个阶段,每个阶段有明确目标和可落地的学习动作:
一、第一阶段:基础打底(3-4个月)—— 搞定“能写合约”的核心能力
目标:从“网安思维”切换到“开发思维”,掌握Solidity开发的底层基础,能独立写简单合约(如ERC20、简单swap功能)
核心学习内容:
- 前置编程基础(1个月)
- 补JavaScript/TypeScript:Solidity开发依赖JS/TS做测试、部署、交互,重点学ES6+语法、异步编程(async/await)、数组/对象操作,推荐看《JavaScript高级程序设计》+ 免费课程《JavaScript.info》
- 熟悉Node.js:掌握npm/yarn使用、模块导入导出,能跑简单脚本(后续部署合约要用)
- 区块链核心概念(2周)
- 搞懂DeFi底层逻辑:公链(以太坊为主,兼顾Polygon/BSC,香港DeFi项目多部署在这些链)、智能合约、Gas费、区块确认、钱包(MetaMask)使用
- 重点理解AMM的“底层逻辑雏形”:什么是流动性池、恒定乘积公式(x*y=k)的基本含义、swap交易的流程(不用深算数学,先懂“交换”的核心逻辑)
- Solidity入门到熟练(2-3个月)
- 核心语法:变量类型(uint256、address、mapping)、函数(view/pure/payable)、修饰符(modifier)、事件(event)、继承、接口(interface)、库(library,如SafeMath)
- 重点攻克:合约安全(溢出/下溢、重入攻击、权限控制)—— 这是你的网安优势!要比普通开发更懂“怎么写安全的合约”,比如用OpenZeppelin库的安全合约(ERC20、Ownable)
- 学习资源:
✅ 官方文档:Solidity Docs(最新0.8.x版本,0.8+已内置溢出检查,不用手动加SafeMath)
✅ 实战课程:Patrick Collins的《FreeCodeCamp Solidity & Blockchain Developer》(全免费,从入门到实战,DeFi方向首选)
✅ 练习平台:Remix IDE(在线写合约、编译、测试,适合入门)、Etherscan合约源码(找简单ERC20合约跟读,比如USDT的合约)
阶段产出:
- 独立用Solidity写3个基础合约:ERC20代币合约(含转账、授权)、简单的“一对一swap合约”(固定汇率交换两个ERC20代币)、带权限控制的合约(只有Owner能修改参数)
- 能在Remix中部署合约,用MetaMask测试交互(转账、swap)
二、第二阶段:AMM深度聚焦(4-5个月)—— 从“会写合约”到“懂AMM合约”
目标:吃透AMM的核心逻辑(以Uniswap V2为标杆,香港初级岗最常考),能复现AMM核心功能,理解流动性添加/移除、swap、无常损失等关键流程
核心学习内容:
AMM核心理论(1个月)
- 深入拆解Uniswap V2:恒定乘积公式(x*y=k)的数学逻辑、流动性池的创建(Pair合约)、添加/移除流动性的计算(LP代币 mint/burn)、swap的滑点计算、无常损失的成因(不用复杂数学,懂“价格波动导致LP资产缩水”的逻辑即可)
- 扩展学习:Uniswap V3的核心改进(集中流动性、费率层级)—— 不用写V3合约,但要懂概念(面试会问)
- 资源:Uniswap V2官方文档、《Uniswap V2白皮书》(简单易懂,重点看“核心机制”章节)
复现AMM核心合约(2-3个月)
- 第一步:复现Uniswap V2的核心合约(Pair合约+Factory合约)
✅ Pair合约:实现x*y=k逻辑、添加流动性(addLiquidity)、移除流动性(removeLiquidity)、swap函数(代币交换)
✅ Factory合约:创建Pair池、查询Pair地址、管理Fee(简化版,不用复杂逻辑) - 第二步:集成OpenZeppelin库,优化安全(比如用SafeTransferFrom处理代币转账,避免重入攻击)
- 工具:用Hardhat/Truffle替代Remix(实战开发必备,支持本地测试网、部署脚本、测试用例编写)
- 第一步:复现Uniswap V2的核心合约(Pair合约+Factory合约)
AMM安全与漏洞分析(1个月)
- 重点分析AMM常见漏洞:重入攻击(比如早年DAO攻击)、价格操纵、闪电贷攻击、LP代币盗窃
- 结合你的网安背景:用“攻防思维”审查自己写的AMM合约,比如添加重入锁(ReentrancyGuard)、校验代币转账返回值、限制单次swap金额上限
- 资源:Rekt.news(看DeFi项目黑客事件复盘,重点看AMM相关案例)、OpenZeppelin Security Docs
阶段产出:
- 完整的“简化版Uniswap V2”项目:包含Factory合约、Pair合约、前端简单交互页面(用React/Vue写个简单界面,能连接钱包、添加流动性、swap,不用复杂UI,能展示功能即可)
- 项目部署到测试网(Sepolia/Goerli),能公开访问、演示功能
- 一篇技术博客/项目README:拆解自己的AMM合约逻辑、安全优化点(面试时给面试官看,体现思考深度)
三、第三阶段:DeFi生态+香港本地化适配(3-4个月)—— 让简历“适配香港岗位”
目标:熟悉香港DeFi行业生态、合规要求,补充实战工具链,打造“香港雇主需要的简历亮点”
核心学习内容:
DeFi生态工具链(1个月)
- 必备工具:Hardhat/Truffle(部署测试)、Ethers.js/Web3.js(合约交互)、Chai/Mocha(写测试用例,初级岗也会要求基本测试能力)、Foundry(进阶测试工具,可选,加分项)
- 数据查询:The Graph(查询链上数据,比如AMM池的流动性、交易记录,香港DeFi项目常用)、Etherscan API
- 安全工具:Slither(静态代码分析,你的网安优势!会用Slither审计自己的AMM合约,面试时能聊“如何用工具检测漏洞”)
香港DeFi行业与合规(1个月)
- 生态了解:香港主流DeFi项目(如HashKey Exchange的DeFi板块、BC科技集团的相关业务)、香港Web3政策(VASP牌照、反洗钱AML要求)—— 初级岗不用懂太深,但要知道“香港DeFi强调合规”,比如合约要支持KYC验证、交易限额等合规逻辑
- 合规编程:学习如何在合约中加入基础合规功能(比如只有通过KYC的地址才能交易、限制单笔交易金额)—— 这是香港岗位的差异化需求,比内地项目更看重
项目优化与作品集打造(1-2个月)
- 优化第二阶段的AMM项目:添加合规功能、完善测试用例(覆盖率≥70%)、优化代码结构(符合行业规范)
- 额外加分项目:
✅ 参与开源AMM项目的Issue/PR(比如Uniswap的开源仓库,哪怕是修复文档错误、简单bug,也能体现协作能力)
✅ 做一个“AMM漏洞复现demo”(比如复现一个简单的闪电贷攻击,体现你的网安+开发复合优势) - 作品集整理:GitHub仓库(代码规范、README详细)、测试网演示链接、技术博客(发布在Medium/知乎,英文更佳,香港雇主常看)
阶段产出:
- 优化后的AMM项目(含合规功能、测试用例、前端交互)
- GitHub个人主页(整洁、重点突出AMM项目和技术栈)
- 1-2篇英文技术博客(比如《How to Build a Simplified Uniswap V2 Clone》《Common Security Risks in AMM Contracts》)
四、第四阶段:求职冲刺(2-3个月)—— 精准对接香港岗位
目标:打磨简历、积累面试经验、拓展香港本地人脉,拿下初级Solidity开发offer
核心动作:
简历与作品集优化(2周)
- 简历重点:突出“网安背景+AMM开发+香港适配”,比如:
✅ 技能栏:Solidity、JavaScript/TypeScript、Hardhat、AMM协议(Uniswap V2/V3)、区块链安全审计(Slither)、香港Web3合规基础
✅ 项目经历:详细写AMM项目(技术栈、核心功能、安全优化、合规设计、测试网部署)、网安相关经历(攻防工程师经验,强调“能写出更安全的合约”) - 格式:英文简历(香港公司优先看英文)、控制在1页内、附GitHub/技术博客链接
- 简历重点:突出“网安背景+AMM开发+香港适配”,比如:
面试准备(1-1.5个月)
- 技术面试:
✅ 刷Solidity基础题(变量类型、函数修饰符、合约安全)
✅ 刷AMM核心题(恒定乘积公式、流动性计算、swap流程、无常损失)
✅ 模拟编程题:现场写简单的AMM功能(比如添加流动性函数)、修复合约漏洞(比如重入攻击) - 行业认知:了解香港DeFi最新动态(比如香港金融管理局的Web3政策、主流项目的招聘需求)、准备“为什么选择香港DeFi”“为什么聚焦AMM”的回答
- 资源:Glassdoor(看香港Solidity开发面试经验)、GitHub《Solidity Interview Questions》
- 技术面试:
香港本地人脉与投递(1-1.5个月)
- 线上 Networking:
✅ 加入香港Web3社群:Hong Kong Blockchain Association、Discord上的Hong Kong Web3、Twitter(X)关注香港DeFi项目官方账号(如HashKey、BC Technology),参与讨论、转发技术内容
✅ 加入招聘社群:LinkedIn搜索“Hong Kong Solidity Developer”,关注招聘账号,主动私信HR(附简历+作品集) - 线下活动:参加香港Web3 Meetup(如Hong Kong Web3 Wednesday)、区块链展会(比如香港Web3 Festival),现场交流递简历(香港小圈子,内推比海投有效10倍)
- 投递渠道:LinkedIn(香港主流)、Indeed、项目官网招聘页、内推(重点!通过社群认识的行业人士内推,命中率翻倍)
- 线上 Networking:
阶段产出:
- 英文简历+作品集(GitHub+技术博客)
- 10+场面试经验(逐步优化回答)
- 拿到香港DeFi-AMM方向Solidity初级开发offer
关键优势放大+避坑提醒
1. 放大你的核心优势(网安+INTP):
- 面试时反复强调:“我有3年网安攻防经验,懂区块链漏洞原理,能写出更安全的AMM合约,这是普通开发没有的优势”
- INTP的研究型性格:面试时聊“我拆解过Uniswap V2的全部源码,发现XX安全细节”“我复现过XX AMM漏洞,总结了防范方法”,体现你的深挖能力
2. 避坑提醒:
- 不要只学语法不做项目:香港雇主极度看重实战,“能展示的AMM项目”比10个证书有用
- 不要忽视合规:香港DeFi项目比内地更看重合规,简历和项目中一定要体现“合规意识”
- 不要盲目海投:聚焦“AMM相关”岗位,不要投所有Solidity开发(比如NFT、GameFi),精准匹配才高效
- 不要等“学完再投”:第二阶段结束后(有简化版AMM项目),就可以尝试投递初级岗/实习岗,边面边学
总结
2年时间完全足够实现目标——你的网安背景是差异化王牌,AMM是香港DeFi的核心赛道,再加上高才通身份(香港雇主优先考虑),只要按“基础→AMM聚焦→本地化适配→求职”的节奏推进,每阶段产出可落地的项目/成果,面试时突出“安全+AMM+香港适配”的复合优势,拿下初级岗位的概率极高。
现在最该做的:从JavaScript和Solidity语法开始,1个月内完成前置基础,然后立刻切入AMM理论学习——不用纠结“学完所有知识再动手”,边学边写合约,实战中进步最快!
solidity开发岗位要做测试的工作吗?
我学了https://cryptozombies.io/zh/course/,里面提到了用javascript去测试合约,用truffles测试。在以前工作的时候,软件开发的测试应该是分开来的才对吧
在 Solidity 开发岗位中,测试是核心工作之一,开发者必须深度参与,甚至是测试工作的主要负责人——这和你之前接触的“开发与测试完全分开”的传统软件开发模式有明显区别,核心原因是区块链和智能合约的特殊性,具体可以从这几点详细说明:
一、为什么 Solidity 开发不能“甩锅”给专门测试岗?
传统软件开发(比如Web、App)中,测试和开发分离的前提是:代码上线后可快速迭代修复、bug 造成的损失相对可控(比如一个按钮失效,紧急发版就能修复)。但智能合约完全不同:
- 合约部署后不可逆:一旦部署到以太坊、BSC等公链,合约代码无法修改(除非设计了升级机制,但升级也有严格限制),如果带bug上线,可能直接导致用户资产被盗、资金锁死(比如The DAO事件,因重入漏洞被盗5000万美元ETH,最终只能硬分叉修复);
- 测试环境需深度匹配链上逻辑:智能合约的测试不仅要验证“功能对不对”,还要模拟链上的特殊场景(比如gas限制、区块高度、重入攻击、权限控制),这些场景只有合约开发者最清楚逻辑边界(比如某个函数的权限是否只允许管理员调用、转账时是否会触发重入);
- 安全优先级远高于普通软件:智能合约直接处理资金,“没有测试到位”=“直接暴露安全风险”,没有哪个测试岗能比开发者更懂自己写的合约逻辑细节(比如条件分支、异常处理、数据存储规则),所以开发者必须自己做“第一关测试”。
二、Solidity 开发者具体要做哪些测试?
你在 Cryptozombies 里学的「JavaScript + Truffle 测试」是基础,但实际工作中测试覆盖的范围更广,核心分为3类:
1. 功能测试(最基础,必须掌握)
- 目的:验证合约的核心逻辑是否符合预期(比如转账、铸造NFT、权限控制);
- 工具:Truffle(你学的)、Hardhat(现在更主流,支持JS/TS测试脚本)、Waffle(配合Hardhat的测试库);
- 示例:比如测试“只有管理员能暂停合约”,你需要写测试脚本:① 用普通用户账号调用暂停函数,预期失败;② 用管理员账号调用,预期成功。
2. 安全测试(核心重点,区别于传统开发)
- 目的:防御区块链特有的攻击(重入、溢出/下溢、权限漏洞、_front_running等);
- 工具:除了手动写测试脚本,还会用专门的安全工具辅助:
- Mythril、Slither(静态分析工具,自动检测常见漏洞);
- Foundry(用Solidity写测试脚本,更贴近合约逻辑,适合深度安全测试);
- 模糊测试(比如Echidna):随机生成大量输入,测试合约是否有隐藏漏洞;
- 要求:开发者必须懂常见的智能合约漏洞原理,才能针对性写测试用例(比如测试重入漏洞,需要模拟“恶意合约回调窃取资金”的场景)。
3. 边界测试 & 兼容性测试
- 边界测试:验证极端场景(比如gas耗尽、输入最大值/最小值、合约余额为0时的操作);
- 兼容性测试:如果合约依赖其他协议(比如Uniswap、OpenZeppelin库),需要测试不同版本的兼容性。
三、实际工作中,测试分工是怎样的?(不是“开发者一个人扛”,但核心责任在你)
虽然开发者要做测试,但不是完全没有分工,通常是“开发者主导测试,专业团队补充验证”:
开发者的核心责任:
- 编写单元测试(覆盖每个函数、每个条件分支);
- 编写集成测试(验证合约之间的交互,或与其他协议的交互);
- 手动进行核心场景的安全测试(比如模拟重入、权限越权);
- 用工具(Slither/Mythril)做初步漏洞扫描。
补充测试角色(大型项目才有,小型项目可能由开发者兼任):
- 安全审计团队:第三方专业团队做深度审计(形式化验证、漏洞挖掘),出具审计报告(这是项目上线前的“必备环节”,但审计是“验证”,不是“替代开发者测试”);
- 测试工程师:协助编写部分功能测试脚本,或做兼容性、性能测试(比如测试合约在高并发下的gas消耗);
- 社区白帽测试:项目上线前开启漏洞赏金计划,让全球白帽黑客找漏洞。
简单说:开发者必须保证“自己的代码在已知场景下绝对安全”,审计和白帽测试是“查漏补缺”,不能指望别人帮你发现基础逻辑漏洞。
四、对你的学习建议(结合你已经学了 Cryptozombies)
你已经掌握了“JS + Truffle 测试”的基础,接下来可以重点补充:
- 学习 Hardhat(现在行业主流,比Truffle更灵活,测试生态更完善),用JS/TS写更复杂的测试用例(比如测试重入、权限控制);
- 学习 OpenZeppelin Test Helpers(专门用于测试的工具库,简化权限、转账等测试场景);
- 了解 Foundry(用Solidity写测试,适合深度安全测试,现在很多大厂都在⽤);
- 学习智能合约常见漏洞(比如重入、溢出、权限漏洞),针对性写测试用例(比如用Hardhat模拟重入攻击);
- 尝试用 Slither 扫描自己写的合约,看能否检测出漏洞,再完善测试。
总结
Solidity 开发岗位不是“要不要做测试”,而是“必须精通测试”——测试是智能合约安全的第一道防线,也是开发者的核心职责。和传统开发的分工差异,本质是区块链“不可逆、高风险”的特性决定的。你在 Cryptozombies 里学到的测试内容,是入门的基础,实际工作中需要覆盖更全面的功能和安全场景,测试能力直接决定你能否成为一名合格的 Solidity 开发者(面试时一定会问测试方法、工具使用、漏洞防御相关的问题)。
看起来solidity开发岗位必须要精通javascript
其实不用“精通JavaScript”——Solidity开发对JS的要求是“够用就好”,核心是掌握“与合约交互相关的JS工具和场景”,而非前端/全栈级别的JS精通。很多Solidity开发者甚至不擅长前端JS(比如Vue/React),但能熟练用JS写测试、部署合约,完全不影响工作。
先明确核心结论:
- 「推荐掌握JS/TS」:因为目前行业主流的合约开发工具(Hardhat、Truffle)、测试框架(Mocha/Chai)、合约交互库(Ethers.js、Web3.js)都基于JS/TS生态,用起来最高效,面试和工作中最常用;
- 「不是必须精通」:不需要学JS的高级特性(比如闭包深度应用、设计模式、Node.js底层),也不用会前端框架(React/Vue),重点是“能用JS完成合约相关的核心操作”;
- 「有替代方案」:如果实在不想用JS,也可以用Foundry(用Solidity写测试、部署),但Foundry更偏向“深度安全测试”,生态工具不如JS/TS完善,很多项目还是会混合使用。
一、Solidity开发到底需要哪些JS能力?(划重点,不用多学)
你只需要聚焦“合约开发相关的JS场景”,核心能力就3类,难度都不高:
1. 基础语法(够用就行)
- 变量、循环、条件判断、函数、Promise/async/await(处理异步交互,比如调用合约函数是异步操作);
- 不用学原型链、继承、闭包这些复杂特性,能写简单的逻辑脚本就够。
2. 合约交互库(核心重点)
- 主要用 Ethers.js(现在行业主流,比Web3.js简洁),少数项目用Web3.js;
- 核心需求:用JS连接区块链(本地节点、测试网)、加载合约ABI、调用合约函数(读/写)、发送交易(指定gas、签名)、处理交易回执;
- 示例(Ethers.js调用合约铸造NFT):这类代码逻辑固定,多写几次就熟练,不需要复杂JS技巧。
1
2
3
4
5
6
7
8
9
10
11const { ethers } = require("hardhat");
async function mintNFT() {
// 1. 连接合约(ABI + 合约地址)
const NFTContract = await ethers.getContractAt("MyNFT", "0x123...");
// 2. 调用铸造函数(写操作,需要发送交易)
const tx = await NFTContract.mint("ipfs://xxx");
// 3. 等待交易上链
await tx.wait();
console.log("NFT铸造成功");
}
3. 测试框架(核心重点)
- 用 Mocha + Chai(Hardhat/Truffle默认集成),写合约的单元测试、集成测试;
- 核心需求:断言结果(比如判断函数返回值是否正确、交易是否失败)、模拟不同账号(管理员/普通用户)、处理异常(比如预期某操作会revert);
- 示例(测试合约权限):测试脚本的逻辑和合约逻辑强相关,你懂Solidity的话,写JS测试只是“用JS语法翻译合约的预期行为”,难度远低于前端开发。
1
2
3
4
5
6
7
8
9
10
11
12
13const { expect } = require("chai");
describe("MyContract", function () {
it("普通用户不能暂停合约", async function () {
const [owner, user] = await ethers.getSigners();
const MyContract = await ethers.getContractFactory("MyContract");
const contract = await MyContract.deploy();
// 预期普通用户调用pause会revert
await expect(contract.connect(user).pause())
.to.be.revertedWith("Only admin allowed");
});
});
二、为什么不用“精通JS”?(和前端JS的区别)
Solidity开发用到的JS,和前端/全栈JS完全是两个“应用场景”:
- 前端JS:需要懂DOM操作、框架(React/Vue)、状态管理、性能优化、浏览器兼容性,甚至TS的高级类型;
- Solidity开发的JS:只需要懂“Node.js环境下的脚本编写”,核心是和区块链、合约交互,不用碰浏览器、前端UI,语法要求也简单。
简单说:你不需要成为“JS高手”,只要能看懂、写得出上面这类“合约相关的JS脚本”,就完全满足工作需求。
三、如果实在不想用JS,怎么办?
可以学 Foundry——一个用Solidity写测试、部署合约的工具,完全不用JS:
- 测试脚本用Solidity写(比如判断交易是否revert、返回值是否正确),更贴近合约逻辑,不用切换语言思维;
- 部署、交互也可以用Solidity脚本或命令行完成;
- 缺点:生态比JS/TS弱(比如部分第三方工具、兼容性测试工具只支持JS),很多项目会“Foundry做安全测试 + JS/TS做功能测试/部署”,混合使用。
所以,Foundry是“补充方案”,不是“替代方案”,建议还是先掌握JS/TS,再按需学Foundry。
四、对你的学习建议(结合你已学的Cryptozombies)
你已经学了“JS + Truffle”的基础,接下来不用深钻JS,重点聚焦“合约相关的JS应用”:
- 优先学 Ethers.js + Hardhat(替代Truffle,现在行业主流):
- 跟着Hardhat官方文档,写几个合约的测试脚本(覆盖功能测试、权限测试、异常处理);
- 重点练“用Ethers.js调用合约、发送交易、处理回执”,这是工作中最常用的;
- 不用学JS的高级特性:比如原型链、闭包、设计模式、Node.js底层,够用就好;
- 按需学Foundry:如果觉得JS写测试别扭,或者想做深度安全测试,可以补充Foundry,不用一开始就啃;
- 目标:能独立用JS完成“合约测试 + 部署 + 简单交互”,就够应对面试和入门工作了。
总结
Solidity开发岗位「不需要精通JavaScript」,但「需要掌握合约相关的JS工具和场景」(Ethers.js、Hardhat、Mocha),这部分能力门槛不高,重点是“实用”而非“深入”。
JS/TS是目前最高效的合约开发生态,掌握它能让你更快找到工作、适配大部分项目;如果实在不想用JS,也可以用Foundry补充,但不建议完全放弃JS/TS。对你来说,最性价比的路径是:基于已学的JS基础,聚焦Hardhat + Ethers.js,练熟测试和部署脚本,不用在JS本身上花过多精力,把核心放在合约逻辑和安全上。
如何快速掌握Solidity开发所需的JavaScript知识?
要快速掌握 Solidity 开发所需的 JS 知识,核心逻辑是「聚焦核心场景、跳过冗余内容、边练边学」—— 只学“合约测试、部署、交互”相关的 JS 技能,不碰前端、Node.js 底层等无关内容,7-10 天就能达到“满足工作需求”的水平。以下是具体可落地的步骤和资源:
一、先明确:只学这些,其余全跳过(节省 80% 时间)
必学的 3 个核心场景(Solidity 开发唯一用到 JS 的地方)
- 合约测试(Mocha + Chai + Ethers.js)
- 合约部署脚本(Hardhat 环境)
- 合约交互(调用函数、发送交易、处理回执)
完全不用学的 JS 内容(直接放弃)
- 前端相关:DOM 操作、React/Vue、浏览器兼容性、CSS/HTML 结合
- JS 高级特性:原型链、闭包、继承、设计模式、Generator、Proxy
- Node.js 底层:Event Loop 原理、流(Stream)、文件系统深度操作
- TS 高级:泛型复杂用法、类型体操、装饰器
简单说:只要能写“Node.js 环境下的简单脚本,能调用 Ethers.js 与合约交互”,就够了。
二、快速学习路径(7 天版,每天 2-3 小时)
Day 1:JS 基础(只学“够用的最小集”)
不用看厚重教程,聚焦“能写测试/部署脚本”的基础语法:
- 变量/数据类型:
let/const、字符串、数字、对象(重点)、数组 - 流程控制:
if-else、for循环(遍历测试用例)、try/catch(捕获合约异常) - 函数:普通函数、箭头函数(写测试回调)
- 异步编程(核心中的核心):
Promise基础、async/await(合约交互全是异步,必须掌握)
✅ 学习资源(1-2 小时搞定):
- 菜鸟教程 JS 异步部分:https://www.runoob.com/js/js-promise.html
- 直接看这篇短文:《JS async/await 入门到够用》(百度搜索,10 分钟看懂)
✅ 小练习(巩固异步):
写一个简单的 async 函数,模拟“调用合约→等待结果”的流程:
1 | |
Day 2-3:Hardhat + Ethers.js(核心工具,Solidity 开发的 JS 核心)
Hardhat 是现在行业主流的合约开发工具,内置了 Ethers.js、Mocha/Chai,不用单独配置,直接聚焦“用工具做事”。
第一步:搭建环境(30 分钟)
- 安装 Node.js(v16+,官网下载:https://nodejs.org/)
- 初始化 Hardhat 项目:
1
2
3
4mkdir solidity-js-test && cd solidity-js-test
npm init -y
npm install --save-dev hardhat @nomiclabs/hardhat-ethers ethers chai @nomiclabs/hardhat-waffle
npx hardhat init # 选 Create a JavaScript project,一路回车 - 熟悉项目结构:重点关注
test/(测试脚本)、scripts/(部署脚本)、contracts/(合约文件)
第二步:Ethers.js 核心 API(1 天,只学常用的,不用全记)
Ethers.js 是和合约交互的库,只需要掌握以下 5 个高频操作,其余用到再查文档:
- 连接区块链(本地节点/Hardhat 内置节点)
- 获取账号(
ethers.getSigners()) - 加载合约(
getContractFactory部署时用,getContractAt已部署合约用) - 调用合约函数(读操作:直接调用;写操作:
await发送交易 +tx.wait()等上链) - 处理交易回执(
tx.hash、tx.gasUsed)
✅ 官方极简教程(直接抄代码练):https://docs.ethers.org/v5/getting-started/
✅ 常用 API 示例(直接复制到 Hardhat 脚本中运行):
1 | |
第三步:Mocha + Chai 测试语法(1 天,够用就好)
Hardhat 内置了 Mocha(测试框架)和 Chai(断言库),只需要掌握 3 个核心用法:
- 测试结构:
describe()(测试套件)、it()(测试用例) - 断言:
expect(结果).to.equal(预期)(判断值相等)、expect(操作).to.be.revertedWith("错误信息")(判断合约 revert) - 测试前置/后置:
beforeEach()(每个用例前部署合约,避免重复代码)
✅ 测试脚本示例(test/MyContract.test.js):
1 | |
✅ 运行测试:npx hardhat test,看是否全部通过,学会根据报错修改脚本。
Day 4-5:实战小项目(把 JS 技能串起来)
光看没用,必须动手练!用一个简单合约(比如“可转账的代币合约”),完成“写合约→JS 测试→JS 部署→JS 交互”全流程:
步骤 1:写一个简单合约(contracts/MyToken.sol)
1 | |
步骤 2:写 JS 测试脚本(test/MyToken.test.js)
覆盖 3 个核心场景:
- 部署后部署者余额是 1000;
- 转账功能正常(A 转 B 后余额变化正确);
- 余额不足时转账会 revert。
步骤 3:写 JS 部署脚本(scripts/deploy.js)
部署到 Hardhat 本地测试网,输出合约地址。
步骤 4:写 JS 交互脚本(scripts/interact.js)
加载已部署的合约,调用 transfer 函数,查询余额。
✅ 运行命令练手:
1 | |
通过这个小项目,你会发现“JS 与合约交互”的逻辑非常固定,练 2-3 遍就形成肌肉记忆了。
Day 6-7:补充工具和避坑指南(提升效率)
1. OpenZeppelin Test Helpers(简化测试)
很多测试场景(比如判断权限、时间锁定)不用自己写 JS 逻辑,直接用现成工具:
1 | |
示例(测试权限):
1 | |
2. 常见坑和解决方案(避免踩雷)
- 坑 1:忘记
await异步操作(比如const tx = contract.transfer(...)没加await,导致 tx 是 Promise 对象)→ 解决方案:所有合约调用、交易都加await; - 坑 2:数值单位问题(Solidity 中是 wei,JS 中直接传数字会出错)→ 解决方案:用
ethers.utils.parseEther("1.0")转 wei,ethers.utils.formatEther(balance)转 ETH; - 坑 3:测试时合约状态污染(一个用例影响另一个)→ 解决方案:用
beforeEach()每个用例前重新部署合约; - 坑 4:不知道如何模拟链上场景(比如区块高度、gas 限制)→ 解决方案:Hardhat 内置
evm_increaseTime等方法,查官方文档即可。
3. 查文档的正确姿势(不用死记硬背)
遇到不懂的 API 不用慌,直接查以下文档(不用通读,按需搜索):
- Ethers.js 文档(优先查):https://docs.ethers.org/v5/api/
- Hardhat 文档(测试/部署相关):https://hardhat.org/docs
- Chai 断言文档:https://www.chaijs.com/api/bdd/
三、判断是否“达标”的 3 个标准(能做到就够面试/工作了)
- 能独立用 JS 写测试脚本:覆盖合约所有函数,包括正常流程、异常场景(revert)、权限控制;
- 能独立用 JS 写部署脚本:部署合约到测试网(比如 Goerli),处理部署后的初始化(比如设置管理员);
- 能独立用 JS 写交互脚本:调用已部署合约的读/写函数,处理交易回执,查询结果。
四、推荐轻量资源(拒绝厚重教程)
- Hardhat 官方入门教程(必看):https://hardhat.org/tutorial
- Ethers.js 快速入门:https://docs.ethers.org/v5/getting-started/
- 测试脚本示例(直接抄):https://github.com/NomicFoundation/hardhat-examples/tree/main/testing-with-ethers
- 视频教程(可选,适合喜欢看视频的):B站“Hardhat + Ethers.js 智能合约开发”(搜关键词,找 1-2 小时的短教程,不用看长系列)
总结
快速掌握的关键是「不贪多、不深钻、重实战」—— 跳过所有和“合约交互、测试、部署”无关的 JS 内容,聚焦 Hardhat + Ethers.js + Mocha/Chai,用一个小项目把所有技能串起来,7 天就能达到“满足 Solidity 开发需求”的水平。
你已经有 Cryptozombies 的 JS 基础,现在只需要把“Truffle 换成 Hardhat”,重点练测试和部署脚本,不用在 JS 本身上花过多时间,核心还是要回归 Solidity 合约逻辑和安全,但 JS 作为工具,练熟这些就足够支撑你开展工作了。