Solidity Bootcamp
The RareSkills Solidity Bootcamp helps busy engineers carve out time to upskill on smart contract developing and auditing as well as maximize ROI on time spent.
How It Works
Highly structured curriculum
10 students per cohort
Daily assignments that can be finished in under 1 hour
11 x weekly live classes (group sessions)
11 x weekly 1-1 calls with the instructor (15 - 30 mins)
Total time commitment is less than 7 hours per week
Solidity Bootcamp Curriculum
Review of Intermediate Syntax
ERC-20 Security Drills
Token Contract Drills 1
Token Contract Drills 2
Solidity DeFi Math 1
Solidity DeFi Math 2
Flash Loans
Vaults and How They Break
Uniswap V2 Exercises
Uniswap V2 Math Derivation
Hacking Uniswap V2 Forks
More about this course
Our topic selection process
A lot of courses like to cram as many impressive-looking topics into a syllabus to create an impression that the student will learn a lot of material. Obviously, it is not possible to “master” (in any sense of the word) 10 topics over the course of 10 weeks. In fact, if you spend so little time on a subject, you will probably just forget it the week after - and you don't waste time! Our heuristic for what to include is simple: build the underlying skills that enable developers to easily understand large production-level DeFi codebases.
DeFi will feel easy after this
Fundamentally, all DeFi protocols have:
1.A mechanism for investors to deposit liquidity (with the expectation of a profit)
2.A mechanism for traders to use the liquidity (such as for swapping, borrowing, or leveraged trading)
3.An accounting mechanism to track profit share for the investors
If you master these three components, then you will be able to make sense of any DeFi protocol.
Let’s examine what the Tokens to DeFi course covers and see how they fit into this learning goal:
Solidity SyntaxAfter teaching hundreds of developers, we’ve seen that some knowledge gaps in the Solidity language are surprisingly common. For example, we’ve seen a lot of developers don’t know the exact mechanics behind low-level calls and interface calls or how exactly try catch works. This part of the course focuses on aspects of Solidity that seem to not be covered well in existing online materials. If you have gaps in your understanding of Solidity, you will have a harder time reading production codebases and understanding how DeFi protocols work.
After teaching hundreds of developers, we’ve seen that some knowledge gaps in the Solidity language are surprisingly common. For example, we’ve seen a lot of developers don’t know the exact mechanics behind low-level calls and interface calls or how exactly try catch works. This part of the course focuses on aspects of Solidity that seem to not be covered well in existing online materials. If you have gaps in your understanding of Solidity, you will have a harder time reading production codebases and understanding how DeFi protocols work.
ERC-20 UsageA good Solidity developer must be able to code an ERC-20 from scratch from memory and be fluent in creating fundamental token mechanisms such as tracking staking rewards, conducting an auction, or splitting up tokens among multiple parties. We’ve found that many Solidity devs take several minutes to write token routines that ought to be second nature. This part of the course ensures that token mechanics become second nature. Why? Tokens are everywhere in DeFi, even “token-like” mechanics recur frequently. However, not all tokens behave exactly the same way. It must be second nature for a developer to know how a token should behave and where there may be some variation in the behavior.
A good Solidity developer must be able to code an ERC-20 from scratch from memory and be fluent in creating fundamental token mechanisms such as tracking staking rewards, conducting an auction, or splitting up tokens among multiple parties. We’ve found that many Solidity devs take several minutes to write token routines that ought to be second nature. This part of the course ensures that token mechanics become second nature. Why? Tokens are everywhere in DeFi, even “token-like” mechanics recur frequently. However, not all tokens behave exactly the same way. It must be second nature for a developer to know how a token should behave and where there may be some variation in the behavior.
MathMath is fundamental to DeFi (finance and math go together!) but few learn how to use Solidity math properly. For example, one might compute the “average” of x, y, and z by computing (x + y + z) / 3, but this fails because the code will revert for some inputs (cases where x + y + z overflows). Similarly, how does one go about computing an exponent of Euler’s constant e (which appears in several financial formulas)? What is the difference between a fixed-point number and a Q-number? Students must master these subjects through repeated hands-on application as without knowing how math is done in Solidity, reading and writing production codebases in DeFi will be extremely challenging.
Math is fundamental to DeFi (finance and math go together!) but few learn how to use Solidity math properly. For example, one might compute the “average” of x, y, and z by computing (x + y + z) / 3, but this fails because the code will revert for some inputs (cases where x + y + z overflows). Similarly, how does one go about computing an exponent of Euler’s constant e (which appears in several financial formulas)? What is the difference between a fixed-point number and a Q-number? Students must master these subjects through repeated hands-on application as without knowing how math is done in Solidity, reading and writing production codebases in DeFi will be extremely challenging.
VaultsAny non-trivial DeFi application needs a way to track which depositors are owed what based on when they deposited and how much the protocol has gained or lost. It isn’t feasible to loop through each account and update each one. Optimizations that allow all accounts to be updated simultaneously have subtle gotchas that must be understood fully to develop safe code. Additionally, understanding vaults makes understanding rebase tokens (another common accounting mechanism) far easier. Almost every DeFi protocol has a vault or vault-like mechanism built in. If you don’t deeply understand vaults, you will struggle to read large codebases.
Any non-trivial DeFi application needs a way to track which depositors are owed what based on when they deposited and how much the protocol has gained or lost. It isn’t feasible to loop through each account and update each one. Optimizations that allow all accounts to be updated simultaneously have subtle gotchas that must be understood fully to develop safe code. Additionally, understanding vaults makes understanding rebase tokens (another common accounting mechanism) far easier. Almost every DeFi protocol has a vault or vault-like mechanism built in. If you don’t deeply understand vaults, you will struggle to read large codebases.
Flash LoansA flash loan is the simplest possible mechanism for traders to “use” the liquidity provided by investors. Therefore, we use this as the starting point for showing how liquidity is “used” and how profits ought to be distributed. We teach the ERC-3156, but also the way other protocols implement flash loans, notably Uniswap V2.
A flash loan is the simplest possible mechanism for traders to “use” the liquidity provided by investors. Therefore, we use this as the starting point for showing how liquidity is “used” and how profits ought to be distributed. We teach the ERC-3156, but also the way other protocols implement flash loans, notably Uniswap V2.
Uniswap V2Uniswap V2 has been forked into over 600 protocols—more than any other DeFi protocol. It is not possible to understand Uniswap V3 without understanding Uniswap V2—and Uniswap V3 has been forked into over a hundred protocols. By deeply understanding Uniswap V2, you are positioned to quickly learn hundreds of other protocols. The knowledge gained will serve you many times over. Someone who deeply understands Uniswap V2 can immediately understand hundreds of other codebases. As you can see, we want to get you to a point of NOT being intimidated by large DeFi codebases, but rather to understand the recurring patterns they rely on so you can read DeFi codebases in “chunks” rather than try to reverse-engineer them line-by-line. It is not possible to understand a moderately complex DeFi protocol without having a strong mastery of the subjects above—it’s like trying to learn calculus while having major knowledge gaps with algebra. Consider that the Uniswap V2 codebase depends on the following topics (and more!):
- Fee-On-Transfer Tokens
- Rebasing Tokens
- The Safetransfer Pattern
- Fixed-Point Numbers And Fixed-Point Arithmetic
- Accumulator Accounting
- LP Tokens And Vault Design Patterns
- Fee-By-Dilution
- Flash Loans
- Factory Pattern And Create2
If you try to learn Uniswap V2 without mastering those topics first, the design choices of Uniswap V2 will seem random. If you deeply understand the topics above—and you will if you do the assignments leading up to the Uniswap V2 section of the course—then the Uniswap V2 codebase will feel easy and obvious.
Uniswap V2 has been forked into over 600 protocols—more than any other DeFi protocol. It is not possible to understand Uniswap V3 without understanding Uniswap V2—and Uniswap V3 has been forked into over a hundred protocols. By deeply understanding Uniswap V2, you are positioned to quickly learn hundreds of other protocols. The knowledge gained will serve you many times over. Someone who deeply understands Uniswap V2 can immediately understand hundreds of other codebases. As you can see, we want to get you to a point of NOT being intimidated by large DeFi codebases, but rather to understand the recurring patterns they rely on so you can read DeFi codebases in “chunks” rather than try to reverse-engineer them line-by-line. It is not possible to understand a moderately complex DeFi protocol without having a strong mastery of the subjects above—it’s like trying to learn calculus while having major knowledge gaps with algebra. Consider that the Uniswap V2 codebase depends on the following topics (and more!): - Fee-On-Transfer Tokens - Rebasing Tokens - The Safetransfer Pattern - Fixed-Point Numbers And Fixed-Point Arithmetic - Accumulator Accounting - LP Tokens And Vault Design Patterns - Fee-By-Dilution - Flash Loans - Factory Pattern And Create2 If you try to learn Uniswap V2 without mastering those topics first, the design choices of Uniswap V2 will seem random. If you deeply understand the topics above—and you will if you do the assignments leading up to the Uniswap V2 section of the course—then the Uniswap V2 codebase will feel easy and obvious.
Topics we do not cover
Let’s consider some topics we did not include and our rationale for not including them:
OraclesAlthough oracles are critical to DeFi, there is not much to learn about them, and the documentation provided by oracle providers is already very good. Everything you need to know contained, or linked to, in our oracle tutorial. Learning how an oracle works does not “unlock” further skills. It’s one and done.
Although oracles are critical to DeFi, there is not much to learn about them, and the documentation provided by oracle providers is already very good. Everything you need to know contained, or linked to, in our oracle tutorial. Learning how an oracle works does not “unlock” further skills. It’s one and done.
Proxies and upgradable contractsProxies can be learned passively if one has the correct foundations and the explanation is clear. Interested students can read our Book of Proxy Patterns which is far more extensive than any other resource on the topic. We’ve seen from experience that developers and auditors have no trouble understanding upgradeable contracts even if they haven’t coded a proxy before, provided they studied the underlying mechanics.
Proxies can be learned passively if one has the correct foundations and the explanation is clear. Interested students can read our Book of Proxy Patterns which is far more extensive than any other resource on the topic. We’ve seen from experience that developers and auditors have no trouble understanding upgradeable contracts even if they haven’t coded a proxy before, provided they studied the underlying mechanics.
DAOs and GovernanceGovernance is similar to proxies; it can be learned passively if one has the correct foundations and a good explanation. Furthermore, excellent tooling for implementing governance protocols exists, so reinventing the wheel is usually not the right choice. See our Solidity governance tutorial if interested. Governance matters in the sense that protocols use it, but protocols do not depend on it. Governance is essentially a more decentralized version of a multisignature wallet, so when trying to understand DeFi protocols, developers and auditors can frequently treat governance and DAOs as an abstraction.
Governance is similar to proxies; it can be learned passively if one has the correct foundations and a good explanation. Furthermore, excellent tooling for implementing governance protocols exists, so reinventing the wheel is usually not the right choice. See our Solidity governance tutorial if interested. Governance matters in the sense that protocols use it, but protocols do not depend on it. Governance is essentially a more decentralized version of a multisignature wallet, so when trying to understand DeFi protocols, developers and auditors can frequently treat governance and DAOs as an abstraction.
Unit testingThorough unit testing is rather straightforward nowadays with A.I. While obviously developers should not blindly trust the output of a chat bot, A.I. is very good at “boilerplate” code which unit tests tend to be. If you are unfamiliar with unit testing in Solidity, our article on Foundry Unit Tests is an industry classic. Furthermore, our exercises come with professionally crafted unit tests, so you’ll learn by exposure the best way to write them, as opposed to writing tests with delayed feedback on whether you did it correctly or not.
Thorough unit testing is rather straightforward nowadays with A.I. While obviously developers should not blindly trust the output of a chat bot, A.I. is very good at “boilerplate” code which unit tests tend to be. If you are unfamiliar with unit testing in Solidity, our article on Foundry Unit Tests is an industry classic. Furthermore, our exercises come with professionally crafted unit tests, so you’ll learn by exposure the best way to write them, as opposed to writing tests with delayed feedback on whether you did it correctly or not.
Invariant Testing / Formal VerificationInvariant testing is important! However, we’ve found it counterproductive to teach invariant testing before the student has strong mastery of at least one DeFi protocol. Otherwise, they don’t know how to come up with invariants, and invariants become more of an academic exercise for the student. By mastering the topics in this course, you will be better equipped to use invariant testing to its full potential. Again, we have an invariant testing tutorial for those interested.
Invariant testing is important! However, we’ve found it counterproductive to teach invariant testing before the student has strong mastery of at least one DeFi protocol. Otherwise, they don’t know how to come up with invariants, and invariants become more of an academic exercise for the student. By mastering the topics in this course, you will be better equipped to use invariant testing to its full potential. Again, we have an invariant testing tutorial for those interested.
NFTs (ERC-721)The NFT market is quite dead! Besides, anyone launching an NFT doesn’t need a developer to do it, as there is robust tooling to accomplish this. A developer who wishes to integrate with an NFT can learn everything they need to know in our ERC-721 tutorial and ERC-721 Enumerable tutorial. Additionally, anyone who has mastered ERC-20s to degree this bootcamp trains, ERC-721 will be a walk in the park. With few exceptions, NFTs tend to exist in isolation. So “mastering” NFTs does not set the student up for mastering further topics, as very few topics depend on understanding NFTs. However, picking the right topics to study is only the first step - the second step is making sure you actually learn these topics.
The NFT market is quite dead! Besides, anyone launching an NFT doesn’t need a developer to do it, as there is robust tooling to accomplish this. A developer who wishes to integrate with an NFT can learn everything they need to know in our ERC-721 tutorial and ERC-721 Enumerable tutorial. Additionally, anyone who has mastered ERC-20s to degree this bootcamp trains, ERC-721 will be a walk in the park. With few exceptions, NFTs tend to exist in isolation. So “mastering” NFTs does not set the student up for mastering further topics, as very few topics depend on understanding NFTs. However, picking the right topics to study is only the first step - the second step is making sure you actually learn these topics.
How we design our assignments
We learned through experience that “project-based learning” is an inefficient use of time. We replaced it with “exercise-driven training”.
Many educators mistakenly confuse “learning by doing” with “project based learning”. It’s better to work on exercises that are designed to give rapid feedback rather than leave students to explore on their own and get delayed feedback as to whether they understood a concept correctly or not.
Here is why project-based learning is suboptimal
To get a project to function, there is a strong temptation is to copy working code from Stack Overflow or an LLM without understanding how it works. This is fine for a job or hackathon where you are evaluated on shipping features rather than knowing what you are doing. But it is counterproductive for efficient learning as your time is spent expertly crafting your Google search or LLM prompt instead of internalizing a design pattern.
People learn faster when they get direct feedback on their mistakes. A “functional” project doesn’t give as much feedback as targeted exercises do. We design our course to maximize feedback. Our exercises are designed to “bite-back” quickly even if a small mistake is made.
Instead, we ask engineers to write code we have already prepared aggressive unit tests for. When the engineer forgets to include a safety feature or deviates from best-practices, the unit tests will give rapid feedback for the engineer to course correct. On top of that, we have 1-1 code reviews with the instructor, but a pre-existing unit test will always provide faster feedback than an instructor can. In our course, you get the best of both worlds.
Even professional code reviewers (aka auditors) miss issues in large codebases; it’s very hard to reliably catch every mistake a coder makes. If an engineer learns by creating several projects, but makes more than a few uncaught mistakes, this can lead to engineers creating several projects while also unconsciously enforcing bad habits. That’s why we scope our exercises down to where the number of mistakes that could be made are limited and easy to catch.
Your Instructor

Jeffrey Scholz
Jeffrey Scholz, founder of RareSkills, was Yahoo’s youngest senior engineering manager, building its video machine learning team and earning two AI patents. His work at RareSkills has helped 100s of engineers land roles at top blockchain companies, and the author of the popular The RareSkills Book of ZK. He holds a Master's degree in computational theory from Columbia University.
Solidity Bootcamp Pricing
$3,000
/ Upfront$1,125 × 3
/ Monthly- 11 × Weekly Live Classes
- Small Class Size (10 students)
- 11 × 1-on-1 Code Reviews & Mentoring Sessions
- Pre-course Material
- Course Material (Lifetime Access)
- Access to the RareSkills Slack and Discord Community (Lifetime Access)
Traditional Methods
- Delayed feedback on mistakes
- Important topics can be missed
- Random exploration
- Waste time on less important knowledge
RareSkills Method
- Instant feedback on mistakes
- Guaranteed to drill the important subject
- Practice subjects from multiple angles
- Concentrate on high-impact knowledge
Frequently Asked Questions
Our Impressive Alumni
Job Opportunities
Smart Contract Engineer
Category Labs is looking for a Smart Contract Engineer to join the core engineering team to build at the application layer.
Zero-Knowledge Cryptography Expert
We are seeking a candidate with a passion for cryptography and blockchain, a deep understanding of the zero-knowledge protocols, and expertise in the Ethereum Virtual Machine (EVM) and security.
Blockchain Security Engineer (Solidity / Rust / Golang)
We are seeking a Junior Blockchain Security Engineer with a strong security mindset and foundational technical expertise across smart contracts, blockchain nodes, and decentralized infrastructure.
Senior Protocol Engineer
Join us as a Senior Protocol Engineer at Sorella Labs, where you will be instrumental in architecting and engineering a first-of-its-kind decentralised trading system at the forefront of MEV-aware application design.