这是一个基于 Solidity 的智能合约学习项目,包含多个课程模块,涵盖了从基础到高级的智能合约开发概念。
denglian/
├── go.mod # Go 模块文件
├── lession_1/ # 第一课:Go 基础练习
│ ├── question_1/
│ │ └── question_1.go
│ ├── question_2/
│ │ └── question_2.go
│ └── question_3/
├── lession_2/ # 第二课:基础智能合约
│ └── my_contract.sol
├── lession_3/ # 第三课:银行合约
│ └── bank.sol
├── lession_4/ # 第四课:高级银行合约系统
│ └── BigBank.sol
└── README.md
- question_1: Go 语言基础语法练习
- question_2: Go 语言进阶概念练习
- question_3: Go 语言实战应用
- my_contract.sol: 简单的智能合约示例,介绍 Solidity 基础语法和概念
- bank.sol: 基础银行合约,实现存款、取款、余额查询等功能
这是项目的核心部分,实现了一个完整的银行合约系统,包含以下特性:
- IBank 接口 - 定义银行合约的标准接口
- Bank 合约 - 基础银行合约,实现 IBank 接口
- BigBank 合约 - 继承自 Bank,添加高级功能
- Admin 合约 - 管理员合约,用于资金管理
- ✅ 存款功能 (
deposit()
) - ✅ 取款功能 (
withdraw()
) - ✅ 余额查询 (
getBalance()
) - ✅ 排行榜功能 (
getTop3()
) - ✅ 自动接收 ETH (
receive()
)
- 🔒 最小存款限制: 存款金额必须 > 0.001 ether
- 👑 管理员转移: 支持转移管理员权限
- 🛡️ 权限控制: 使用 modifier 进行权限验证
- 👤 Owner 管理: 拥有独立的 Owner 权限
- 💰 资金提取: 可以从其他银行合约提取资金
- 🔄 接口调用: 通过 IBank 接口调用其他合约
- 继承机制: BigBank 继承自 Bank 合约
- 接口实现: Bank 实现 IBank 接口
- 修饰符使用: 使用 modifier 进行权限控制
- 事件处理: 支持 ETH 自动接收
- 安全验证: 多重安全检查机制
- Solidity ^0.8.0
- 支持 EVM 的区块链网络(如 Ethereum、Polygon、BSC 等)
- Web3 开发环境(如 Remix、Hardhat、Truffle 等)
-
部署 Admin 合约
// 部署 Admin 合约,记录合约地址 Admin adminContract = new Admin();
-
部署 BigBank 合约
// 部署 BigBank 合约 BigBank bigBank = new BigBank();
-
转移管理员权限
// 将 BigBank 的管理员转移给 Admin 合约 bigBank.transferAdmin(address(adminContract));
-
模拟用户存款
// 用户存款(金额必须 > 0.001 ether) bigBank.deposit{value: 0.002 ether}();
-
提取资金到 Admin 合约
// Admin 合约的 Owner 调用 adminContract.adminWithdraw(bigBank);
-
最终资金提取
// Owner 将 Admin 合约中的资金提取到自己的地址 adminContract.withdrawAdminBalance();
// 使用 Web3.js 与合约交互
const bigBank = new web3.eth.Contract(BigBankABI, bigBankAddress);
const admin = new web3.eth.Contract(AdminABI, adminAddress);
// 存款
await bigBank.methods.deposit().send({
from: userAddress,
value: web3.utils.toWei('0.002', 'ether')
});
// 转移管理员
await bigBank.methods.transferAdmin(adminAddress).send({
from: deployerAddress
});
// 提取资金
await admin.methods.adminWithdraw(bigBankAddress).send({
from: ownerAddress
});
- ✅ 权限验证:所有关键操作都有权限检查
- ✅ 金额验证:存款金额有最小限制
- ✅ 余额检查:取款前检查合约余额
- ✅ 地址验证:确保地址有效性
- ✅ 重入攻击防护:使用 transfer 而非 call
- 测试优先: 在部署到主网前,务必在测试网进行充分测试
- 代码审计: 建议进行专业的智能合约安全审计
- 升级机制: 考虑添加合约升级机制
- 事件记录: 可以添加更多事件来记录重要操作
- Gas 优化: 优化合约代码以减少 Gas 消耗
MIT License
欢迎提交 Issue 和 Pull Request 来改进这个项目!
注意: 这是一个学习项目,在生产环境中使用前请进行充分的安全测试和审计。