Foundry 实战手册
Foundry 实战手册如果你还在用 Hardhat 写 JS 测试,或者被 Truffle 的慢速编译折磨过,Foundry 会是你的解药。 它用 Rust 编写,底层集成 revm(一个极快的 Rust EVM 实现)。最大的卖点就一个:快,而且你可以直接用 Solidity 写测试。 不用在 JS 和 Solidity 之间来回切换心智,测试跑起来像飞一样。 四大组件:各司其职Foundry 不是单一工具,而是一套命令行全家桶。 🔨 Forge:编译、测试、部署日常干活的主力。forge test 跑 Solidity 测试,forge script 写部署脚本,forge build 编译合约。📖 官方文档 常用命令速查 123456789forge init my-project # 初始化项目forge install OpenZeppelin/openzeppelin-contracts@v5.0.0 # 装依赖forge build --sizes # 编译并显示合约体积排名forge test...
合约安全(2)
7.DOS攻击在 Web2 中,拒绝服务攻击(DoS)是指通过向服务器发送大量垃圾信息或干扰信息的方式,导致服务器无法向正常用户提供服务的现象。而在 Web3,它指的是利用漏洞使得智能合约无法正常提供服务。 先看过程: 1234567891011121314// 游戏结束,退款开始,所有玩家将依次收到退款 function refund() external { require(!refundFinished, "Game Over"); uint256 pLength = players.length; // 通过循环给所有玩家退款 for(uint256 i; i < pLength; i++){ address player = players[i]; uint256 refundETH = balanceOf[player]; (bool success, ) = player.call{value:...
合约安全(1)
1.重入攻击原理:类似递归调用,攻击者利用攻击合约的回退函数(在接受eth时自动执行的函数)递归调用目标合约的取款函数,让转账逻辑连续执行多次之后再回退执行余额调整逻辑实现资金盗窃。 攻击函数: 123456789101112131415161718// 发起攻击 function attack() external payable { require(msg.value >= 1 ether); // 先存一笔钱 bank.deposit{value: 1 ether}(); // 发起第一次 withdraw bank.withdraw(); } // fallback 函数:每次收到 ETH 时自动触发 fallback() external payable { if (address(bank).balance >= 1 ether) { attackCount++; ...
合约优化 - Gas
合约优化 - Gas 费优化指南 [!abstract] 核心概念Gas 费是执行以太坊智能合约所需的计算费用,优化 Gas 费可以大幅降低用户交互成本和合约部署成本。 📌 核心概念Gas 费是执行以太坊智能合约所需的计算费用,优化 Gas 费可以大幅降低用户交互成本和合约部署成本。 一、基础优化策略1.1 变量类型优化12345678910// ❌ 不推荐uint256 public number1 = 100;uint256 public number2 = 200;// ✅ 推荐:使用更小的类型uint128 public number1 = 100;uint128 public number2 = 200; // 打包存储,节省存储槽// 或者使用 uint8 处理小数值uint8 public status = 1; // 状态值用最小的类型 1.2 变量打包(Packing)12345678910111213141516// ❌ 不推荐 - 占用 3 个存储槽uint128 public a; // 槽 1uint128 public b; ...








