Skip to content

My own tailored roadmap, to my web3 / smart contract auditor knowledge.

License

Notifications You must be signed in to change notification settings

mattaereal/my-web3-security-roadmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

My personal roadmap (out of date)

My own tailored roadmap, to my web3 / smart contract auditor knowledge.

The primary purpose of this road map is to document the resources that piqued my interest throughout the studies of the security perspective and the underlying technologies of this ecosystem.

Disclaimer

This is not in any way the ultimate roadmap, nor the best, neither a good one. It's just what I considered while I was studying my way through web3 security, particularly evm-based content. I'm in need to clarify this because there has been at least more than 20 "ultimate roadmaps++" since I, at least, started learning, and each one of them are clearly subjective, so you need to create your own roadmap according what you want to learn. Wat you need to do first is learn the minimum necessary to have an idea of what you want to learn following your needs or objectives.

⭐ → highlighted article

👌🏽 → personal liking

♦️ → mandatory to read / check out / save for later

Table of contents

Main road-map

  1. Introduction to Blockchain
  2. Introduction to Solidity
    1. Quick start
    2. Ideal
    3. Additional
  3. Introduction to the EVM
    1. Quick start
    2. Strongly recommended
    3. Further reading
  4. Skim through / read a bit of / know that this exists and is important
  5. Road-maps / general guides / classes / courses
    1. Quick reading
    2. Will take a while
    3. Buckle up
    4. Alternative
  6. Security specific content
  7. Play a bit with
  8. Create content on your own
    1. Quick start
      • Post on forum / social network about something you’ve found useful
      • Post your solution for a challenge
    2. A step further
      • Create a challenge and share it!
      • Create a post sharing something you’ve found useful
  9. Bounties
  10. Projecting jobs? Go back to 2. as well

Tools

Utilities

Toolkits

Tracers

Disassembly

Decompilers

Static analysis / Symbolic exec / Fuzzing

  • Slither - Static analysis from Trail of Bits.
  • Echidna - Fuzzing from Trail of Bits.
  • Manticore - Symbolic execution tool from Trail of Bits.
  • MythX - Paid service for smart contract security from Consensys.
  • Mythrill - MythX free edition.

VSCode extensions

  • tintinweb.vscode-ethover — ethereum account address hover info and actions
  • esbenp.prettier-vscode — prettify all the things!
  • NomicFoundation.hardhat-solidity — Solidity and Hardhat support
  • tintinweb.vscode-solidity-flattener — flatten your projects
  • tintinweb.vscode-solidity-language — language support, highlighting, and themes
  • tintinweb.solidity-visual-auditor — source exploration and visual linting, among others
  • tintinweb.vscode-decompiler — decompile the $h*! out of things

Bundles

Misc

Develpment tools

CTFs / Challenges

Newsletters & feeds

People (WIP)

Security related

@tinchoabbate, @samcszun, @0xZachxBT, @officer_cia, and me @mattaereal.

General purpose

@smsunarto, @austingriffith, @0xcygaar, @programmersmart, @web3isgreat.

Fun / Parody

@jomaoppa

Other sources of information

Further reading

DeFi

Finance / economics

Tokens

Tokenomics

Link compilation credits to CIA Officer

NFTs

MEV

Optimization (WIP)

  • Optimizers guide to Solidity
  • Up to 4 functions are ordered by their function selector when calling. After 4 functions, it’s done by binary search.
  • Using custom errors consumes less gas than other options.
  • extcodecopy codecopy are cheaper than ssload sstore.
  • (bool success, bytes memory returnData) = target.call() automatically copies the return data to memory even if you omit the returnData variable. If a relayer executes transactions with such calls it can lead to a gas-griefing attack. The proper way to handle this is to do a low-level Yul "call" instead, with "out" and "outsize" argument values are zero. It looks like success := call(gas, target, value, add(calldata, 0x20), mload(calldata), 0, 0) where the last 2 args are "out" & "outsize" and are both 0 — by pashov
  • In cases where you don’t need to use 32 bytes variables, in order to save gas, you should pack multiple variables inside the same slot using bit manipulation. Caveats: losing type safety.

Zero Knowledge proofs

ZK Class: Introduction to ZKP

Take a test!

Secureum

https://github.com/x676f64/secureum-mind_map

👢🏕️ bootcamp: when, how & where

About

My own tailored roadmap, to my web3 / smart contract auditor knowledge.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published