1977 Jan 15
DES becomes FIPS 46
The U.S. standard specified a shared-key encryption algorithm for protecting sensitive computer data and placed implementation in electronic devices.
Software development
How the field of a Blockchain Developer got here: the sourced milestones from every published course of this career, on one axis.
1977 to 2025
167 milestones across 16 courses
The axis stretches toward recent years, where most milestones fall. Bars count milestones per year; dots are single milestones.
5 milestones
1977 Jan 15
The U.S. standard specified a shared-key encryption algorithm for protecting sensitive computer data and placed implementation in electronic devices.
1982 Apr 14
The standard defined general security requirements for equipment that implemented DES, extending attention from the algorithm to its operating boundary.
1983
Fischer, Lynch, and Paterson showed that deterministic consensus cannot guarantee termination in a completely asynchronous system when one process may crash. Practice separates safety guarantees from the timing assumptions needed for progress.
1988
Dwork, Lynch, and Stockmeyer formalized timing models between full synchrony and full asynchrony. Protocols could retain safety while basing eventual progress on bounds that hold only after an unknown stabilization point.
1989
Lamport's Paxos work framed agreement around numbered proposals, promises, and quorum acceptance. It supplied a durable vocabulary for preserving one chosen value across competing rounds.
4 milestones
1991
Haber and Stornetta described a method for time-stamping digital documents with hash-linked records. The idea established an auditable ordering of records before cryptocurrency networks existed.
1994 Jan 11
FIPS 140-1 set security requirements for cryptographic modules across interfaces, roles, physical security, software, key management, and self-tests.
1998
The published Paxos account made the protocol's safety argument and system model available as a citable primary description. It became a reference point for later multi-instance consensus systems.
1999
Castro and Liskov presented Practical Byzantine Fault Tolerance for replicated state machines with arbitrary faulty replicas. The work made the fault model an explicit design choice rather than an assumed extension of crash tolerance.
16 milestones
2001
Lamport's concise Paxos presentation centered promises, accepted values, and quorum intersection. It gave practitioners a direct path from a single chosen value toward repeated decisions.
2001 May 25
FIPS 140-2 replaced FIPS 140-1 and retained four qualitative security levels while updating the areas used to assess cryptographic modules.
2001 Sep
OWASP began as an informal open community focused on improving software security. It created a public home for application-security guidance and projects.
2001 Nov 26
FIPS 197 standardized AES with 128-bit blocks and three supported key sizes, creating the symmetric cipher foundation used by later key hierarchies.
2003
The first Top 10 organized prominent web application risks into an awareness document for developers and application-security work.
2004
Microsoft made its Security Development Lifecycle part of its software development process, integrating security work across design, development, and testing.
2005
MITRE grouped real CVE examples into common fault and flaw classes. The work supplied a bottom-up basis for a shared weakness taxonomy.
2005 Aug
The first final Part 1 assembled general guidance for cryptographic key types, protection, lifecycle, cryptoperiods, compromise, and recovery.
2006
The idea arose at the C Standards Committee meeting in Berlin. The project targeted actionable security guidance for C programmers.
2006
The first Common Weakness Enumeration list established community definitions and classifications for recurring software weaknesses.
2006
Graydon Hoare began the work that became Rust. Mozilla later sponsored it as a research project.
2007 Sep
The initial design discussions led Rob Pike to suggest the name Go. The project then developed compilers and a standard library before public release.
2008
Microsoft moved its internal lifecycle practices into publicly available guidance and tools for wider secure-development adoption.
2008 Oct
The Bitcoin paper specified a peer-to-peer system that combines signed transactions, proof of work, and a hash-linked chain. It made distributed agreement over an ordered transaction history the central operating model.
2008 Oct
SEI published the first official CERT C Secure Coding Standard, with rules, insecure examples, and secure alternatives for recurring C coding errors.
2009 Nov 10
The Go project launched publicly as an open-source language. This started the ecosystem around packages, tools, and community maintenance.
68 milestones
2010
The project moved into Mozilla Research and began developing in public. This supplied institutional support before Rust had stable compatibility guarantees.
2010 Oct 1
KMIP defined a common client-server protocol and profiles for managing cryptographic objects across products that had used incompatible interfaces.
2012 Jan
The first numbered source release established a public pre-stable line. Language and library compatibility could still change between releases.
2012 Feb 11
The proposal standardized deriving a full tree of keys from one seed, replacing the practice of generating and separately backing up an independent key for every address.
2012 Mar 28
Go 1 defined a language and core libraries intended as a stable foundation. The compatibility promise made long-lived Go code and documentation a practical expectation.
2013
Ongaro and Ousterhout introduced Raft with separate leader election, log replication, and safety components. Its explicit leader model made replicated-log behavior easier to inspect and teach.
2013 Sep 10
The proposal standardized converting wallet entropy into a checksummed, human-readable word sequence, turning the single backup an HD wallet needs into something a person can write down and read back correctly.
2013 Nov 27
The paper proposed a blockchain with a general programming layer, establishing the basis for application logic deployed as contracts.
2013 Dec
Go 1.2 added the race detector to the standard toolchain. Concurrent programs could then be tested for data races with a supported Go command.
2014
CWE expanded its weakness classifications with content for mobile applications as software platforms and attack surfaces changed.
2014
The Raft paper received a Best Paper Award at the 2014 USENIX Annual Technical Conference. Its publication and accompanying materials widened access to a leader-based consensus design for systems builders.
2014 Feb 28
The exchange's collapse made a single custodian's internal key-management failure concrete at scale, years before "not your keys, not your coins" became common practitioner advice.
2014 Apr 1
The formal protocol specification defined the Ethereum state transition and virtual machine that contract compilers target.
2014 Apr 1
Gavin Wood's Yellow Paper gives the EVM a formal definition, including the stack of 256-bit words and the first gas schedule that every later fork amends.
2014 Apr 24
The proposal fixed the derivation path structure almost every HD wallet still uses, letting one seed manage multiple accounts across multiple chains without key collisions.
2014 Jul 22
Vitalik Buterin outlines oracle-based execution, external data needs, and combinations with onchain verification. The post frames why contracts that need HTTP-shaped facts require offchain helpers.
2014 Jul 29
SatoshiLabs' device moved private key generation and signing into a dedicated offline unit, establishing hardware-backed self-custody as a distinct, purchasable custody model.
2014 Nov
crates.io became the central registry for discovering and downloading Rust crates. Cargo gained a shared publication and dependency source ahead of Rust 1.0.
2015 May 15
Rust began its stable compatibility commitment while retaining low-level control without a garbage collector. Stable code gained a foundation for long-lived libraries and applications.
2015 Jul
Ethereum launched Frontier as a live implementation for technical users. Smart-contract execution became a general-purpose state-transition model on a public network.
2015 Jul
The first public 0.1.0 release established Solidity as a contract-oriented language targeting the EVM, with a 0.x version line that still signals ongoing breaking change.
2015 Jul 30
Ethereum's first live release made general contract deployment and execution available on a public network with real value at risk.
2015 Jul 30
Ethereum's first live release gave technical users a network on which to deploy and execute contracts.
2015 Jul 30
Ethereum goes live with the EVM and its gas metering. Gas now has a real cost in ether, and the price list becomes a design constraint for every deployed contract.
2015 Aug 19
The compiler toolchain moved from C to Go, and the garbage collector was redesigned. The release also made the default GOMAXPROCS value match logical CPU count.
2015 Nov
ERC-20 defined a common API for balances, transfers, approvals, and delegated transfers. It gave wallets and applications a shared interface for fungible-token integration.
2015 Dec
The Linux Foundation launched Hyperledger as a collaborative effort for enterprise distributed-ledger technology. This formalized a permissioned, organization-focused branch of blockchain practice.
2016 Mar 14
The first planned production upgrade changed contract creation and added DELEGATECALL, an instruction later central to proxy designs.
2016 Jul 20
A contract exploit led to an irregular state change and a permanent network split, making governance and deployed-code risk concrete for developers.
2016 Jul 20
Exploitation of The DAO led Ethereum to apply an irregular state change through a hard fork. The event made reentrancy, governance, and immutability tradeoffs central to contract review.
2016 Sep
Version 0.4.0 opened a new breaking series used widely in early token and contract deployments, forcing pragma pins across source files.
2016 Oct 18
After denial-of-service attacks exploited underpriced operations, EIP-150 raises the gas cost of state-reading opcodes and calls and introduces the rule that a call forwards at most all but one sixty-fourth of the remaining gas.
2016 Nov 22
The second response to the attacks tunes opcode pricing further, and EIP-170 limits deployed code to 24,576 bytes, a ceiling that still shapes how large contracts are split.
2017
SatoshiLabs published a standard for splitting a seed into a threshold of shares using Shamir's secret sharing, giving self-custody a documented alternative to a single written seed phrase.
2017 Mar 15
Clearer failure primitives gave unit tests stable ways to express input checks and internal assertions in contract code under test.
2017 Mar 15
The release introduced require, assert, transfer, and revert behavior that gave developers clearer tools for input checks, internal invariants, and failed execution.
2017 May
ERC-223 specified a token-receiver callback for transfers to contracts. It addressed the difference between a token transfer and a recipient contract recognizing that transfer.
2017 Jun 22
The post "On Path Independence" sets out on-chain market makers that price trades from a reserve formula such as constant product.
2017 Jul
Fabric 1.0 provided a production release for an identified-organization ledger framework. Its architecture separates endorsement, ordering, validation, and commitment instead of using a public proof-of-work path.
2017 Sep
The Chainlink paper describes a decentralized oracle network that aggregates node observations for smart contract inputs, setting the research baseline for later Data Feeds deployments.
2017 Sep 11
The fungible-token interface standardized functions and events that wallets and other contracts could integrate against.
2017 Oct 16
REVERT, transaction receipt status, STATICCALL, and new cryptographic operations improved error handling and contract capabilities.
2017 Oct 16
REVERT lets a failing call undo its state changes while returning unused gas and error data, instead of consuming everything, and STATICCALL adds calls that cannot change state.
2017 Nov
ERC-777 defined operators and send and receive hooks while retaining ERC-20 compatibility. It made callback behavior and operator authority explicit parts of a fungible-token design.
2017 Nov 6
A reachable function let a user take ownership of, and then destroy, the shared library contract every affected Parity multisig wallet depended on, making the funds permanently unreachable without any key being stolen.
2017 Nov 7
A public library contract used through delegate calls was initialized and destroyed, freezing wallets that depended on it. Review practice expanded from one wallet to shared implementation and initialization boundaries.
2018
Gennaro and Goldfeder's paper "Fast Multiparty Threshold ECDSA with Fast Trustless Setup" gave multi-party computation custody a signing protocol efficient enough for production wallets, ahead of the first commercial MPC custody providers.
2018 Jan
ERC-721 standardized distinct token identifiers, ownership, transfers, and approvals for non-fungible assets. It separated item identity from the balance model used by fungible tokens.
2018 Jan 24
The non-fungible-token interface standardized ownership and transfer behavior for individually identified assets.
2018 Jun
ERC-1155 specified one interface for multiple token types and single or batch transfers. It made identifier-specific fungible and non-fungible models available within one contract.
2018 Jul
The project introduced a shared indexing protocol for blockchain application data and began developing Graph Node.
2018 Aug 24
Go 1.11 introduced experimental modules as an alternative to GOPATH with versioning and package distribution. Dependency requirements became explicit in the project model.
2018 Oct 19
Trail of Bits released a Solidity static-analysis framework with detectors and a programmatic intermediate representation, adding repeatable structural analysis to contract review workflows.
2018 Oct 19
Trail of Bits released a programmable Solidity analyzer that teams began running beside dynamic tests to catch structural issues early.
2018 Nov
The 0.5.0 breaking release removed many implicit behaviors and pushed projects toward explicit visibility and stricter type conversions.
2018 Nov 2
The first Uniswap contracts put a constant product pool on mainnet. Anyone could supply liquidity or trade against the reserves without an order book.
2018 Nov 13
The breaking release required explicit visibility and data locations while removing ambiguous constructs. Compiler-enforced clarity reduced several classes of review error.
2018 Dec 6
Rust 1.31 introduced the first edition after Rust 2015. Crates could opt into new idioms while remaining interoperable with crates from other editions.
2019 Jan
Developers could deploy subgraphs without operating their own Graph Node, which made the indexing model available to more applications.
2019 Jan 15
Ethereum postponed the planned fork after gas-cost changes were found to make some deployed call patterns vulnerable to reentrancy. Contract assumptions about gas behavior became an explicit protocol-upgrade concern.
2019 Feb 5
The exchange's founder had sole control of customer keys and died without sharing access; a later forensic audit found several of the wallets believed to hold customer funds had already been empty for months.
2019 Feb 28
CREATE2 enabled developers to derive deployment addresses before code was created at them, supporting counterfactual and factory patterns.
2019 Mar 22
FIPS 140-3 updated requirements for cryptographic module design, implementation, operation, sensitive-parameter management, and lifecycle assurance.
2019 May 30
Chainlink announces its Ethereum mainnet release with independent node operators and aggregated inputs for smart contracts, marking production availability of the decentralized network.
2019 Nov 10
The paper introduces an invariant that behaves like constant sum near balance and like constant product when imbalanced. It targets assets expected to trade near one price, such as two dollar stablecoins.
2019 Nov 18
Maker governance activated the Multi-Collateral Dai system, which generates Dai against several collateral types in Vaults. The CDP stablecoin pattern moved beyond a single collateral asset.
2019 Dec
Version 0.6.0 formalized inheritance keywords such as virtual and override and added try/catch for external call failure handling.
2019 Dec 8
EIP-2200 prices SSTORE by the slot's original, current, and new values, EIP-1884 raises SLOAD with a warning that fixed gas assumptions may break, and EIP-2028 cuts nonzero calldata from 68 to 16 gas per byte.
74 milestones
2020
CWE extended the list beyond software weaknesses to cover recurring hardware security issues and their classifications.
2020 Jan
Fabric 2.0 introduced a revised chaincode lifecycle that makes organizations approve and commit definitions under channel policy. Governance of contract changes became an explicit operational concern.
2020 Jan 8
The first Aave release introduced pooled lending markets on Ethereum. Suppliers deposited into shared pools that overcollateralized borrowers drew from.
2020 Feb
Go 1.14 declared module support ready for production use and encouraged migration. Modules became the default mental model for organizing and resolving dependencies.
2020 Mar 12
During an ETH price crash and network congestion, one keeper kept winning Maker collateral auctions with zero bids while other keepers stopped bidding. The system went from a surplus of about 500 thousand dollars to a shortfall of about 4 million dollars.
2020 Mar 23
Uniswap v2 added ERC-20 to ERC-20 pairs, a time-weighted price accumulator for oracles, and flash swaps. The accumulator gave protocols an alternative to reading a pool's spot price.
2020 Apr
ERC-2612 added signed permit approvals to ERC-20. It addressed the two-transaction approve then transferFrom interaction that standard ERC-20 delegated transfers require.
2020 Apr
NIST published a common set of high-level secure software development practices designed for integration into existing lifecycle models.
2020 May
Revision 5 expanded treatment of key metadata, access control, identity authentication, inventory, certificates, and current cryptographic guidance.
2020 Jul
The published Echidna work described effective property-based fuzzing for smart contracts and helped standardize fuzzer-driven campaigns in security testing.
2020 Jul
An incentivized testnet brought Indexers and Curators into the network before mainnet.
2020 Jul
The 0.7.0 line dropped finney and szabo suffixes, leaving wei, gwei, and ether as the supported denomination literals.
2020 Aug 18
The Rust Core Team and Mozilla announced plans for a Rust foundation. The plan moved legal, financial, trademark, and infrastructure responsibilities toward an independent organization.
2020 Sep
ERC-2981 standardized a way to retrieve royalty payment information for NFTs. It gave marketplaces an interoperable royalty-information interface without defining payment enforcement.
2020 Oct 22
Hardhat Network gained mainnet forking and the JS/TS testing stack became the default Node.js-oriented contract suite for many teams.
2020 Dec
The Beacon Chain began operating as a separate proof-of-stake chain. It established the validator and finality layer that later became Ethereum Mainnet consensus.
2020 Dec
Arithmetic overflow and underflow began reverting by default, with unchecked blocks for intentional wrapping, and ABI coder v2 became the default encoder.
2020 Dec
Network contracts and GRT went live, establishing the decentralized indexing and query marketplace.
2020 Dec 16
Integer overflow and underflow began reverting by default outside unchecked blocks. Review emphasis shifted from universal wrapping protection toward unchecked regions, formulas, units, and rounding.
2020 Dec 16
Arithmetic reverts on overflow unless it sits in an unchecked block, which turns removing provably unnecessary checks into a deliberate, reviewable optimization.
2020 Dec 16
Checked arithmetic became the default, so overflow and underflow revert unless code enters an unchecked block.
2021
OpenZeppelin described applying Certora specifications to reusable contract components, showing how property proofs could accompany audits and testing in a library release process.
2021 Feb 8
The Rust Foundation began as an independent nonprofit supporting the Rust language and ecosystem. Project governance remained with the Rust Project.
2021 Feb 24
OCR moves observation agreement offchain and posts a single aggregate transaction, cutting update cost for decentralized price feeds.
2021 Mar 23
Liquidity providers could place capital in chosen price ranges, and positions became non-fungible. The announcement targeted an Ethereum mainnet launch on May 5, 2021.
2021 Apr
Custom errors provided cheaper, typed revert data compared with long require strings, shaping how interfaces document failure modes.
2021 Apr 15
Gas repricing for state access changed execution-cost assumptions and reinforced the need to test contracts against the intended EVM rules.
2021 Apr 15
EIP-2929 charges 2,100 gas for the first read of a storage slot in a transaction and 100 for later reads, and EIP-2930 adds access lists that pre-warm addresses and slots.
2021 Apr 21
Errors declared with a name and parameters revert with a four-byte selector instead of a revert string, a cheaper way to report failures.
2021 May 12
Executive Order 14028 directed NIST to issue guidance for practices that enhance software supply-chain security and secure development environments.
2021 Jul
Follow-on research on diverse multicore campaigns reinforced long property fuzz runs as part of serious contract test practice.
2021 Jul
Subgraph developers gained a staging interface and a route to publish on the network, while Curators gained an interface for signaling.
2021 Aug 5
EIP-1559 changed transaction fee fields and reduced gas refunds, affecting transaction submission and some gas-optimization assumptions.
2021 Aug 5
EIP-1559 splits the fee into a burned base fee and a priority fee, and EIP-3529 caps refunds at one fifth of gas used and removes the SELFDESTRUCT refund, ending GasToken-style designs.
2021 Aug 26
Pyth opens first-party high-fidelity price feeds on Solana mainnet, expanding the production landscape beyond EVM push proxies.
2021 Oct 21
Rust 1.56 stabilized the 2021 edition. Edition migration remained opt-in per crate, preserving interoperability across editions.
2021 Dec
ERC-4626 extended ERC-20 with a standard API for vault shares over one underlying asset. It reduced the need for integrators to build protocol-specific adapters for deposits, withdrawals, and share accounting.
2021 Dec 22
The proposal defines a common deposit, withdraw, and share conversion interface for yield-bearing vaults, including rounding rules in the vault's favor.
2022 Feb
NIST SP 800-218 formalized the updated framework and its common vocabulary for secure software development and acquisition.
2022 Mar
Go 1.18 added type parameters, built-in fuzzing support, and workspace mode. The release expanded both reusable type design and the standard testing workflow.
2022 Mar
The 0.8.13 release continued maturation of the Yul IR compilation pipeline used by teams that need different optimization tradeoffs than the legacy code generator alone.
2022 Mar 16
Aave v3 first deployed on several networks other than Ethereum, adding isolation mode, efficiency mode, and supply and borrow caps. It reached the Ethereum Core market on January 27, 2023.
2022 Mar 23
Spear-phishing against a Sky Mavis employee, combined with a validator-signing allowlist grant that was never revoked, gave attackers enough validator signatures to forge withdrawals without touching any smart contract.
2022 Mar 29
Paradigm's Foundry release highlighted faster Forge runs, cheatcodes, and fuzz improvements that made Solidity-first unit and property tests a mainstream daily loop.
2022 Apr 17
An attacker used a flash loan to exploit Beanstalk's governance process, taking about 77 million dollars in non-Beanstalk user assets. Beanstalk shut off governance and paused the protocol in response.
2022 Jun
The project set out to move subgraphs from centralized hosting to the decentralized network.
2022 Aug 1
Pyth launches Pythnet to aggregate first-party prices at high frequency and deliver them to other chains, reinforcing pull-oriented cross-chain distribution.
2022 Sep
Ethereum Mainnet merged with the Beacon Chain and replaced proof-of-work with proof-of-stake consensus. Execution-layer transactions continued while validator-based block production and finality became the consensus path.
2022 Sep
The program recruited Indexers to bring additional chains to the network, starting with Gnosis Chain.
2022 Sep 15
After the Merge, block proposers are known ahead of time. Uniswap Labs later analyzed how this changes the cost of manipulating TWAP oracles across several consecutive blocks.
2022 Sep 15
Ethereum execution moved under proof-of-stake consensus and the DIFFICULTY opcode became PREVRANDAO, changing an environment value contracts could observe.
2022 Nov 1
Pyth announces permissionless consumption of its price feeds on Ethereum and Optimism mainnet via cross-chain delivery.
2023
OWASP organized recurring contract risks into a shared awareness list covering reentrancy, arithmetic, time dependence, access control, ordering, denial of service, logic, randomness, gas, and external calls.
2023
Substreams could feed subgraphs, combining parallel block processing with a GraphQL query endpoint.
2023
Wallets generated with Libbitcoin Explorer's bx seed command turned out to use a Mersenne Twister pseudorandom generator seeded with only 32 bits of system time, shrinking the practical key space enough for attackers to find and drain affected wallets.
2023 Feb
Compiler defaults tracked post-Merge EVM changes, keeping language releases aligned with network opcode availability practitioners target in pragmas and settings.
2023 Mar 1
The EntryPoint contract and bundler infrastructure went live, letting smart contract wallets implement programmable validation such as social recovery and session keys without any change to Ethereum's protocol layer.
2023 Apr 12
EIP-3855 adds a 2 gas instruction that pushes zero, and EIP-3860 charges for and limits contract creation code.
2023 May
Default EVM version targeting moved forward again, so older opcode assumptions in pinned toolchains needed explicit review.
2023 May 10
The compiler starts emitting PUSH0, and its release notes warn that deployment fails on chains that do not support the opcode yet, which makes the EVM target a deployment decision.
2023 May 16
The optional seed-backup service split an encrypted copy of a user's key material across three custodians; critics argued this contradicted the hardware-wallet premise that a key never leaves the device, and Ledger postponed the launch a week later.
2023 Aug
Go 1.21 added profile-guided optimization support and improved compiler build speed using PGO. Performance work could use production profile data in the standard toolchain.
2023 Aug 18
A production DeFi team documents push, pull, and TWAP tradeoffs, front-running mitigations, and fallback design constraints for an immutable protocol.
2023 Sep
The long-running Truffle and Ganache stack entered sunset, accelerating migrations toward Hardhat and other active frameworks for day-to-day testing.
2023 Dec 14
A phished former employee's credentials let attackers publish malicious versions of a widely used wallet-connector npm package, injecting fund-draining code into dozens of applications before Ledger pulled the versions roughly five hours later.
2024
The upgrade interface, free query plan, and broader chain support made hosted subgraphs eligible for network migration.
2024 Mar 13
EIP-1153 adds TLOAD and TSTORE at 100 gas for values that last one transaction, and EIP-5656 adds an instruction for copying memory.
2024 May
The 0.8.26 release kept the long-lived 0.8 series current with compiler fixes and features while projects remained on checked arithmetic defaults introduced in 0.8.0.
2024 Jun
Query traffic moved to The Graph Network after the hosted service shut down on June 12.
2024 Oct 9
Value-type state variables can be declared transient, so a reentrancy lock can live in transient storage without inline assembly.
2025 Jan 31
Uniswap v4 keeps the constant product model and adds hooks, plug-in contracts that run custom logic around pools, swaps, fees, and positions.
2025 Feb 20
Rust 1.85 stabilized the 2024 edition with coordinated language, standard-library, Cargo, rustdoc, and rustfmt changes. Existing crates retained their selected editions until migration.
2025 Feb 21
Attackers used a compromised Safe developer's machine to disguise a malicious transaction; Bybit's own account describes signers seeing a masked interface showing the correct address while the actual request changed control of the cold wallet, with no flaw found in the Safe contracts or frontend source code.
2025 May 7
EIP-7623 charges data-heavy transactions at least 10 gas per calldata token, raising the cost of using calldata as cheap data storage.