Smart Contract Security Glossary

Definitions, examples, and audit checks for Solidity, EVM, and DeFi security terms.

Browse by topic.

All glossary terms.

Vulnerabilities

24

Reentrancy

Reentrancy is a smart contract vulnerability where external code calls back into a contract before the first call finishes, often before balances, ownership, or other state has been updated.

Read-Only Reentrancy

Read-only reentrancy happens when a view function returns stale or inconsistent state during an unfinished state transition, and another contract relies on that value.

Access Control Vulnerability

An access control vulnerability lets an unauthorized caller perform privileged actions such as moving funds, changing roles, upgrading contracts, or changing protocol settings.

Signature Replay

Signature replay happens when a valid signature can be reused more than once or reused in a different context than the signer intended.

Unchecked Return Value

An unchecked return value bug happens when code ignores whether a low-level call or token operation succeeded.

Weak Randomness

Weak randomness is predictable or manipulable randomness used for security-critical smart contract decisions.

Gas Griefing

Gas griefing is an attack or failure mode where a caller, receiver, or loop structure causes execution to fail by controlling gas usage.

NFT Smart Contract Vulnerabilities

NFT smart contract vulnerabilities are bugs that affect NFT ownership, minting, transfers, approvals, metadata, royalties, or marketplace integrations.

Governance Attack

A governance attack is an exploit where an attacker gains or abuses proposal, voting, execution, or admin power in a governance system.

Flash Loan Governance Attack

A flash loan governance attack uses borrowed voting power to influence or execute governance actions before the loan is repaid.

Bridge Exploit

A bridge exploit is an attack against bridge custody, message validation, validator signatures, minting logic, or replay protection.

Replay Attack

A replay attack reuses a valid transaction, signature, message, or proof in a context where it should only be valid once.

Reinitialization

Reinitialization is calling an initializer or versioned reinitializer after deployment or upgrade to set new contract state.

Signature Malleability

Signature malleability is the ability to transform a valid signature into another valid signature for the same message.

Upgrade Authorization

Upgrade authorization is the access-control logic that decides who can change a proxy implementation.

ERC4626 Inflation Attack

An ERC4626 inflation attack manipulates an empty or low-supply vault's asset-to-share rate so a victim receives too few shares.

Donation Attack

A donation attack manipulates protocol accounting by transferring tokens directly to a contract without using the intended deposit path.

Share Price Manipulation

Share price manipulation changes the calculated value of vault, pool, or receipt-token shares to exploit deposits, withdrawals, collateral, or rewards.

Exchange Rate Manipulation

Exchange rate manipulation changes a conversion rate between assets, shares, wrappers, or collateral tokens to exploit protocol accounting.

Stale Oracle Price

A stale oracle price is an old oracle value that is still returned but no longer reflects current market or protocol conditions.

Oracle Decimal Mismatch

Oracle decimal mismatch happens when code scales an oracle answer with the wrong decimal precision.

Denial of Service

Denial of service is a bug or attack that makes a contract function or protocol path unusable.

Unbounded Loop

An unbounded loop is a loop whose iteration count can grow with user input or contract state instead of a safe fixed limit.

Dust Attack

A dust attack introduces tiny unwanted balances or positions to trigger accounting edge cases.

EVM

17

Delegatecall

Delegatecall executes code from another contract while reading and writing the caller's storage, preserving the original caller context.

Function Selector

A function selector is the first 4 bytes of calldata that tells an EVM contract which function should handle a call.

Storage Collision

A storage collision happens when two variables or contracts use the same storage slot, corrupting state in upgradeable or delegatecall-based systems.

SELFDESTRUCT (Solidity/EVM)

selfdestruct is an EVM operation that can force-send Ether and historically removed contract code and storage under older semantics.

Calldata

Calldata is the read-only input data sent to a contract call, usually containing the function selector and ABI-encoded arguments.

CREATE2

CREATE2 is an EVM opcode that deploys contracts to deterministic addresses based on the deployer, salt, and init-code hash.

Storage Slot

A storage slot is a 32-byte indexed location in EVM contract storage used to hold state variables and derived storage data.

Nonce

A nonce is a value used once, commonly to prevent replay of signatures, orders, permits, withdrawals, or messages.

Chain ID

Chain ID is the blockchain network identifier used to separate transactions, signatures, and domains across chains.

Event Logs

Event logs are EVM records emitted by contracts that off-chain systems can read, but contracts cannot query during execution.

Assembly

Assembly is inline Yul or EVM-level code inside Solidity that can directly manipulate memory, storage, calldata, and calls.

Low-Level Call

A low-level call is a Solidity call such as call, delegatecall, staticcall, or send that returns success and data instead of using typed function checks.

staticcall

staticcall is a low-level EVM call that allows reading data from another contract but reverts if the callee attempts to modify state.

callcode

callcode is a deprecated EVM instruction that executes another account's code in the caller's storage context with legacy call semantics.

Selector Collision

A selector collision happens when two function signatures share the same 4-byte selector or when routing code maps a selector to the wrong function.

Multicall

Multicall is a pattern that batches multiple calls into one transaction, often by calling functions on the same contract or multiple targets.

Batched Execution

Batched execution runs multiple calls in one transaction or smart account operation.

Solidity

36

Checks-Effects-Interactions

Checks-Effects-Interactions is a Solidity pattern that validates inputs first, updates contract state second, and performs external calls last to reduce reentrancy risk.

Reentrancy Guard

A reentrancy guard is a lock that prevents a protected function from being entered again while it is already executing.

Proxy Initialization

Proxy initialization is the setup step that assigns initial state for an upgradeable proxy, usually through an initializer function instead of a constructor.

Integer Overflow

An integer overflow occurs when arithmetic produces a value larger than the maximum value an integer type can represent.

Upgradeable Proxy

An upgradeable proxy is a smart contract pattern where users call a stable proxy address while execution is delegated to replaceable implementation logic.

Initializer Function

An initializer is a one-time setup function used instead of a constructor when a smart contract is deployed behind an upgradeable proxy.

External Call

An external call is an interaction where one smart contract calls another address, creating a trust boundary and possible control-flow risk.

Commit-Reveal

Commit-reveal is a two-step pattern where users first submit a hidden commitment and later reveal the original value to reduce front-running.

tx.origin

tx.origin is a Solidity global variable that returns the original externally owned account that started the transaction.

Fallback Function

A fallback function is a Solidity function that runs when calldata does not match any function selector or when Ether is sent without a matching receive function.

Receive Function

A receive function is a Solidity function that runs when a contract receives plain Ether with empty calldata.

abi.encodePacked

abi.encodePacked is a Solidity encoding function that tightly packs values without the padding, offsets, and dynamic-length delimiters used by abi.encode.

Integer Underflow

Integer underflow happens when a subtraction goes below the minimum value a type can represent and wraps or reverts depending on compiler behavior.

Timelock

A timelock is a smart contract mechanism that delays execution of queued actions until a minimum waiting period has passed.

Multisig

A multisig is a wallet or account that requires approval from multiple signers before executing a transaction.

msg.sender

msg.sender is the address that directly called the current Solidity function in the current EVM call context.

ecrecover

ecrecover is Solidity's interface to the EVM precompile for recovering an Ethereum address from a secp256k1 signature over a 32-byte hash.

Merkle Proof

A Merkle proof is a list of sibling hashes used to prove that a leaf belongs to a Merkle tree with a known root.

UUPS Proxy

A UUPS proxy is an upgradeable proxy pattern where upgrade logic lives in the implementation contract instead of the proxy contract.

Transparent Proxy

A transparent proxy is an upgradeable proxy pattern where admin calls are handled by the proxy while non-admin calls are delegated to the implementation.

Diamond Proxy

A diamond proxy is an EIP-2535 upgradeable proxy pattern that routes function selectors to multiple facet contracts.

Role-Based Access Control

Role-based access control is a permission model where sensitive actions are gated by roles assigned to accounts or contracts.

Pausable

Pausable is an emergency-control pattern that lets authorized accounts temporarily disable selected contract functions.

Ownable

Ownable is an access-control pattern where one owner address can call privileged functions, usually through an onlyOwner modifier.

Ownable2Step

Ownable2Step is an ownership-transfer pattern where the current owner nominates a pending owner and the pending owner must accept.

Function Modifier

A function modifier is Solidity code that wraps a function to run checks or logic before or after the function body.

Storage vs Memory vs Calldata

Storage, memory, and calldata are Solidity data locations that decide whether data is persistent state, temporary mutable data, or read-only external input.

Mapping

A mapping is a Solidity key-value storage structure that returns a default value for keys that have never been written.

Custom Error

A custom error is a Solidity error type declared with error Name(args) and used to revert with structured, gas-efficient data.

Storage Gap

A storage gap is reserved unused storage in an upgradeable contract, often an array, kept so future versions can add variables safely.

Timelock Controller

A timelock controller is a governance or admin contract that queues operations and allows execution only after a configured delay.

Proxy Admin

Proxy admin is the account or contract authorized to upgrade a proxy or manage its implementation address.

Pull Payment

Pull payment is a payout pattern where a contract records owed funds and lets recipients withdraw later.

Push Payment

Push payment is a payout pattern where a contract sends funds to a recipient during another operation.

Rounding Direction

Rounding direction is the choice to round a division or fixed-point result down, up, or toward zero.

Deadline

A deadline is an expiry timestamp or block condition after which a signed action, swap, permit, or operation is no longer valid.

DeFi

32

Flash Loan Attack

A flash loan attack uses same-transaction borrowing to amplify an existing DeFi vulnerability, usually in pricing, collateral, governance, or accounting.

Oracle Manipulation

Oracle manipulation occurs when an attacker distorts a data source that a smart contract trusts, causing the contract to make decisions from unsafe data.

Price Manipulation

Price manipulation is the intentional movement of an asset, pool, share, or collateral price so a protocol values assets incorrectly.

Front-Running

Front-running is a transaction-ordering attack where an attacker observes a pending transaction and submits their own transaction so it executes first.

Sandwich Attack

A sandwich attack is a front-running pattern where an attacker places one transaction before and one after a victim trade to profit from the victim's price impact.

MEV

MEV, or maximal extractable value, is value that can be extracted from transaction inclusion, exclusion, or ordering beyond normal block rewards and fees.

Slippage

Slippage is the difference between the expected trade price and the actual execution price, often caused by liquidity, volatility, or transaction ordering.

ERC-20 Approval Race Condition

The ERC-20 approval race condition is a token allowance issue where a spender can use an old allowance before a new allowance change takes effect.

TWAP Oracle

A TWAP oracle reports a time-weighted average price over a chosen window instead of relying on a single spot price.

Liquidation

Liquidation is a protocol action that repays or closes an undercollateralized borrow position and transfers collateral according to the protocol's rules.

Health Factor

A health factor is a lending-risk metric that compares a borrower's adjusted collateral value against their debt.

Precision Loss

Precision loss happens when integer arithmetic drops fractional value during division, scaling, or fixed-point conversions.

Rounding Error

A rounding error is the difference between the mathematically exact result and the integer-rounded result returned by smart contract math.

Fee-on-Transfer Token

A fee-on-transfer token deducts a fee during transfer, so the recipient receives less than the amount requested by the sender.

Rebasing Token

A rebasing token changes account balances automatically when supply is adjusted, without requiring each holder to send or receive a normal transfer.

Liquidity Pool

A liquidity pool is a smart contract reserve of assets used for swaps, lending, liquidations, pricing, or vault accounting.

AMM

An AMM, or automated market maker, is a decentralized exchange design where smart contracts quote trades from liquidity and formulas instead of an order book.

Concentrated Liquidity

Concentrated liquidity is AMM liquidity provided only within selected price ranges instead of across all possible prices.

Impermanent Loss

Impermanent loss is the difference between holding assets in an AMM pool and holding the same assets outside the pool after relative prices move.

Collateral Ratio

Collateral ratio is the ratio of collateral value to debt value in a lending, borrowing, or minting system.

DAO Governance

DAO governance is an on-chain or hybrid decision process where token holders, delegates, multisigs, or members control protocol actions.

Cross-Chain Bridge

A cross-chain bridge transfers value or messages between blockchains using locks, burns, mints, validators, relayers, proofs, or messaging protocols.

Merkle Airdrop

A Merkle airdrop is a token distribution where eligible claims are compressed into a Merkle root and users prove inclusion with Merkle proofs.

Flash Swap

A flash swap is an AMM feature where a user receives tokens before paying for them, as long as repayment or equivalent value happens before the transaction ends.

Chainlink Oracle

A Chainlink oracle integration reads price or rate data from Chainlink Data Feeds, usually through AggregatorV3Interface.

Bad Debt

Bad debt is debt a protocol cannot fully recover from collateral, liquidations, reserves, insurance, or backstop mechanisms.

Loan-to-Value

Loan-to-value is the maximum borrow value allowed against collateral value in a lending system.

Liquidation Bonus

Liquidation bonus is the extra collateral value paid to liquidators for repaying unhealthy debt.

Interest Rate Model

An interest rate model calculates borrow and supply rates from protocol state, usually utilization.

Dust Position

A dust position is a very small residual balance, debt, share amount, liquidity amount, or collateral amount left after protocol actions.

Minimum Shares

Minimum shares is the least acceptable number of vault, pool, or receipt-token shares a user is willing to receive.

Slippage Tolerance

Slippage tolerance is the maximum execution difference a user accepts between an expected quote and the actual on-chain result.

Testing

5

Audit Tools

9

Standards

40

ERC-4626 Vaults

ERC-4626 is the tokenized vault standard where users deposit an asset and receive vault shares that represent a claim on the vault's assets.

EIP-712

EIP-712 is a standard for signing typed structured data so a signature is bound to a specific message type and domain.

Permit2

Permit2 is Uniswap's shared approval and signature transfer system that lets users authorize token spends through structured signatures or managed allowances.

Token Decimals

Token decimals are ERC-20 metadata that describe how raw integer balances should be displayed, not a guarantee that every token uses 18 decimals.

Non-Standard ERC-20

A non-standard ERC-20 is a token that behaves differently from common ERC-20 assumptions, such as missing return values, fees, rebases, pauses, blacklists, or unusual decimals.

SafeERC20

SafeERC20 is an OpenZeppelin library that wraps ERC-20 calls to handle tokens that revert, return false, or return no value.

ERC-777 Hooks

ERC-777 hooks are callback functions that can run during token transfers, giving sender or recipient contracts a chance to execute code.

ERC721

ERC721 is the Ethereum token standard for non-fungible tokens where each token ID represents a unique asset with one owner.

ERC1155

ERC1155 is a multi-token standard that supports many fungible and non-fungible token IDs in one contract.

Account Abstraction

Account abstraction lets smart contract accounts define their own validation rules instead of relying only on externally owned account transaction rules.

ERC-4337

ERC-4337 is an Ethereum account abstraction standard that uses UserOperations, bundlers, paymasters, and an EntryPoint contract without changing Ethereum consensus.

UserOperation

A UserOperation is the ERC-4337 data structure that describes a smart account action, including sender, nonce, calldata, gas fields, optional paymaster data, and signature.

Bundler

A bundler is an ERC-4337 actor that receives UserOperations, simulates validation, bundles valid operations, and submits them to the EntryPoint contract.

Paymaster

A paymaster is an ERC-4337 contract that can sponsor gas for a UserOperation when its validation rules pass.

EntryPoint Contract

The EntryPoint contract is the ERC-4337 contract that validates and executes bundles of UserOperations and manages account and paymaster deposits.

ERC-20 Permit (EIP-2612)

ERC20 permit lets a token owner approve an ERC20 allowance with a signature instead of sending an on-chain approve transaction.

EIP-2612

EIP-2612 is the ERC20 permit standard that defines signature-based allowance approvals through permit, nonces, and DOMAIN_SEPARATOR.

Allowance

Allowance is the ERC20 amount an owner permits a spender to transfer from the owner's balance through transferFrom.

Approval for All

Approval For All is an ERC721 and ERC1155 operator approval that allows one address to transfer all of an owner's tokens for that contract.

Safe Transfer

Safe transfer is an NFT transfer flow that checks whether a recipient contract explicitly accepts the token through the correct receiver hook.

safeTransferFrom

safeTransferFrom is the ERC721 and ERC1155 transfer function that moves tokens and checks recipient contract acceptance.

onERC721Received

onERC721Received is the ERC721 receiver hook that a contract must implement to accept safe ERC721 transfers.

onERC1155Received

onERC1155Received is the ERC1155 receiver hook called when a contract receives a single ERC1155 token transfer.

Token URI

Token URI is the metadata pointer for an NFT, usually returned by ERC721 tokenURI or ERC1155 uri.

ERC165

ERC165 is the Ethereum standard for interface detection through supportsInterface(bytes4).

supportsInterface

supportsInterface is the ERC165 function that returns whether a contract claims support for a given interface ID.

ERC1271

ERC1271 is the standard for validating signatures from smart contracts through isValidSignature.

ERC2771

ERC2771 is a meta-transaction standard where a trusted forwarder calls a recipient contract and appends the original signer to calldata.

Trusted Forwarder

A trusted forwarder is the ERC2771 contract a recipient trusts to verify signed requests and relay calls with the original signer appended.

EIP-7702

EIP-7702 lets an externally owned account set delegated smart contract code while keeping its address.

ERC1967

ERC1967 defines standard proxy storage slots for implementation, admin, and beacon addresses.

ERC6909

ERC6909 is a minimal multi-token standard for managing many token IDs in one contract.

ERC2981

ERC2981 is the NFT royalty standard that reports royalty receiver and amount for a given token ID and sale price.

ERC721A

ERC721A is a gas-optimized ERC721 implementation designed for cheaper batch minting.

Permit Signature

A permit signature authorizes an on-chain action through signed data instead of a direct transaction from the signer.

Domain Separator

A domain separator is the EIP-712 value that binds signed data to a specific app, version, chain, and verifying contract.

Meta-Transaction

A meta-transaction is an action signed by a user off-chain and submitted on-chain by a relayer or forwarder.

Session Key

A session key is a limited key authorized by a wallet or smart account to perform constrained actions for a limited time or scope.

Smart Account Module

A smart account module is a plug-in that adds validation, execution, recovery, hooks, or other behavior to a smart account.

ERC20 Return Value

ERC20 return value refers to the boolean returned by transfer, transferFrom, and approve, and the real-world problem that some tokens return false or no data.