DeFi Smart Contract Patterns - Solidity Reference (2026)

DeFi Smart Contract Patterns - Solidity Reference (2026)

DevTools Store

DeFi Smart Contract Patterns - Solidity Reference (2026)

Common DeFi patterns in Solidity. Staking, lending, AMM, yield farming. Copy-paste ready.

7 dev products for $1+ (pay ETH): https://rentry.co/dev-tools-pay-what-you-want

Staking Contract

mapping(address => uint256) public staked; mapping(address => uint256) public stakeTime;

function stake() public payable { staked[msg.sender] += msg.value; stakeTime[msg.sender] = block.timestamp; }

function unstake() public { require(block.timestamp >= stakeTime[msg.sender] + 30 days); uint256 amount = staked[msg.sender]; staked[msg.sender] = 0; payable(msg.sender).transfer(amount); }

Simple Swap (AMM)

uint256 public reserveA; uint256 public reserveB;

function swapAtoB(uint256 amountA) public returns (uint256 amountB) { amountB = (amountA * reserveB) / (reserveA + amountA); reserveA += amountA; reserveB -= amountB; }

Lending Pattern

mapping(address => uint256) public deposits; mapping(address => uint256) public borrows;

function deposit() public payable { deposits[msg.sender] += msg.value; }

function borrow(uint256 amount) public { require(deposits[msg.sender] * 2 >= amount, 'Need 50% collateral'); borrows[msg.sender] += amount; payable(msg.sender).transfer(amount); }

Yield Distribution

uint256 public totalStaked; mapping(address => uint256) public rewardDebt;

function updateReward(address user) internal { uint256 reward = (staked[user] * accRewardPerShare) - rewardDebt[user]; // distribute reward }

ERC20 Token

string public name = 'MyToken'; string public symbol = 'MTK'; uint8 public decimals = 18; uint256 public totalSupply; mapping(address => uint256) public balanceOf;

function mint(address to, uint256 amount) public { totalSupply += amount; balanceOf[to] += amount; }

Security Checklist

- Use Checks-Effects-Interactions pattern

- Add reentrancy guards

- Use SafeERC20 for token transfers

- Test with forge test -vvvv

- Audit before mainnet deploy

- Use OpenZeppelin contracts as base

---

More Web3 guides: https://rentry.co/pgib9826

Report Page