Living threads
Every card is a real thread. Every tag filters the board live. Find your answer before you consider signing up.
12 threads in the forest
After the Curve exploit I went back and rewrote all my reentrancy tests. Standard checks-effects-interactions isn't enough when you're dealing with ERC-777 callbacks. Here's the pattern I've been using...
function testReentrancy() public { // attacker deploys malicious receiver Attacker atk = new Attacker(vault); vm.expectRevert("ReentrancyGuard"); atk.attack{value: 1 ether}(); }
Cheap off-chain signaling or expensive on-chain finality? We've been running a hybrid model at Arbor DAO for six months. The gas costs alone changed how we think about quorum...
No condescension please โ I'm trying to understand why my bridge contract keeps flagging on Slither. The warning says "reentrancy-eth" but I thought I had the pattern right...
Posting results from three weeks of profiling our sequencer. The trick isn't in the contract logic โ it's in how you pack your calldata before submission. ABI encoding leaves a lot of zeros on the table...
// Before: naive ABI encoding bytes calldata = abi.encode( addr, amount, nonce ); // 96 bytes, lots of zeros // After: custom tight packing bytes packed = abi.encodePacked( bytes20(addr), uint96(amount) ); // 32 bytes
Everyone's been sleeping on 7702. It's not as flashy as 4337 but for teams building on existing EOA infrastructure, the migration path is dramatically simpler...
Current treasury: $4.2M in ETH and stables. The core team hasn't had a dedicated grant round in 14 months. I'm drafting a proposal for 630k over 12 months. Feedback before I post on Snapshot...
The hooks architecture opens up price oracle designs that weren't possible before. I've been building a manipulation-resistant TWAP using the afterSwap hook...
function afterSwap( address sender, PoolKey calldata key, SwapParams calldata, BalanceDelta delta, bytes calldata ) external override returns (bytes4) { _updateOracle(key.toId(), delta); return BaseHook.afterSwap.selector; }
I keep reading the docs but the execution context explanation isn't clicking. Is there a mental model that makes this intuitive for someone coming from Solidity basics?
After six months of running Geth I switched to Reth. The sync time difference alone was worth it. Here's my full config for a 32-core machine with NVMe RAID...
If you're upgrading from OZ 4.x and using AccessControl, the role hash changes will silently break your admin functions. This isn't in the migration guide clearly enough...
Not all MEV is equal. Sandwich attacks, JIT liquidity, backrunning โ each requires a different mitigation strategy. I've been cataloging approaches across 40+ protocols...
Reading the yellow paper and I'm confused about what actually changed. The refund mechanism for SSTORE is still there in some form but the cap changed?
Navigate the canopy
Five distinct zones, each with its own depth, its own vocabulary, its own regulars who know every root system by heart.
24,800
threads
Solidity patterns, security audits, EVM internals, and upgrade strategies. The densest canopy in the forest.
8,400
threads
DAO mechanics, proposal frameworks, treasury management, and the philosophy of on-chain coordination.
15,600
threads
No question too basic. The forest starts somewhere.
6,200
threads
Node operation, sequencers, indexers, RPC providers, and the substrate everything else runs on.
19,300
threads
AMMs, lending protocols, MEV, liquidations, and the fluid mechanics of on-chain markets.
Join 14,200+ engineers who read the threads others don't. No noise, no hype โ just accumulated knowledge composting into something useful.
No spam. No tokens. No Discord invites unless you ask.