{"id":50496190,"url":"https://github.com/davidweb3-ctrl/bank-foundry","last_synced_at":"2026-06-02T07:04:00.230Z","repository":{"id":316922016,"uuid":"1064268447","full_name":"davidweb3-ctrl/bank-foundry","owner":"davidweb3-ctrl","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-27T14:56:07.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-27T16:27:56.806Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidweb3-ctrl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-25T19:33:43.000Z","updated_at":"2025-09-27T14:56:11.000Z","dependencies_parsed_at":"2025-09-27T16:28:02.908Z","dependency_job_id":null,"html_url":"https://github.com/davidweb3-ctrl/bank-foundry","commit_stats":null,"previous_names":["davidweb3-ctrl/bank-foundry"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/davidweb3-ctrl/bank-foundry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidweb3-ctrl%2Fbank-foundry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidweb3-ctrl%2Fbank-foundry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidweb3-ctrl%2Fbank-foundry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidweb3-ctrl%2Fbank-foundry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidweb3-ctrl","download_url":"https://codeload.github.com/davidweb3-ctrl/bank-foundry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidweb3-ctrl%2Fbank-foundry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33810345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T07:03:58.719Z","updated_at":"2026-06-02T07:04:00.218Z","avatar_url":"https://github.com/davidweb3-ctrl.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bank Smart Contract\n\n一个基于以太坊的银行智能合约，支持存款、管理员提取和排行榜功能。\n\n## 功能特性\n\n### Bank合约 (基础版)\n- ✅ **存款功能**: 用户可以通过Metamask等钱包直接向合约地址发送ETH进行存款\n- ✅ **余额记录**: 合约记录每个地址的累计存款金额\n- ✅ **管理员提取**: 仅合约所有者可以提取合约中的资金\n- ✅ **排行榜**: 实时维护存款金额前3名的用户列表\n- ✅ **安全保护**: 包含重入攻击防护和访问控制\n\n### BigBank合约 (增强版)\n- ✅ **最小存款限制**: 仅支持 ≥0.001 ether 的存款，使用modifier权限控制\n- ✅ **继承Bank功能**: 完全兼容Bank合约的所有功能\n- ✅ **Admin合约管理**: 支持Admin合约调用withdraw()方法\n- ✅ **双重管理权限**: 合约owner和Admin合约都可以提取资金\n\n### Admin合约 (管理系统)\n- ✅ **独立所有权**: Admin合约有自己的Owner\n- ✅ **BigBank管理**: 可以接收BigBank合约的管理权并操作\n- ✅ **adminWithdraw功能**: 实现adminWithdraw(IBank bank)方法\n- ✅ **IBank接口调用**: 通过IBank接口调用withdraw方法\n- ✅ **资金转移**: 将Bank合约资金转移到Admin合约地址\n\n## 技术栈\n\n- **Solidity**: ^0.8.19\n- **Foundry**: 开发和测试框架\n- **Forge**: 编译和测试工具\n- **Anvil**: 本地测试网络\n\n## 项目结构\n\n```\nbank-foundry/\n├── src/\n│   ├── Bank.sol              # 基础Bank合约(实现IBank接口)\n│   ├── BigBank.sol           # 增强版BigBank合约(继承Bank + 最小存款限制)\n│   ├── Admin.sol             # Admin管理合约(adminWithdraw功能)\n│   └── interfaces/\n│       └── IBank.sol         # Bank合约接口定义\n├── test/\n│   ├── Bank.t.sol            # Bank合约单元测试\n│   ├── BankFuzz.t.sol        # Bank合约模糊测试\n│   ├── NewWorkflow.t.sol     # 完整工作流程测试\n│   └── utils/\n│       └── TestHelper.sol    # 测试辅助工具\n├── script/\n│   ├── Deploy.s.sol          # Bank合约部署脚本\n│   ├── DeployLatestRequirements.s.sol  # 最新需求部署脚本\n│   └── interactions/\n│       ├── Deposit.s.sol     # 存款交互脚本\n│       └── Withdraw.s.sol    # 提取交互脚本\n├── foundry.toml              # Foundry配置\n├── Makefile                  # 构建和部署工具\n├── GITHUB_SETUP.md           # GitHub集成指南\n└── README.md                 # 项目文档\n```\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\n# 安装Foundry (如果尚未安装)\ncurl -L https://foundry.paradigm.xyz | bash\nfoundryup\n\n# 克隆项目\ngit clone \u003crepository-url\u003e\ncd bank-foundry\n\n# 安装依赖 (如果需要)\nforge install\n```\n\n### 2. 编译合约\n\n```bash\nforge build\n```\n\n### 3. 运行测试\n\n```bash\n# 运行所有测试\nforge test\n\n# 运行特定测试文件\nforge test --match-contract BankTest\n\n# 运行模糊测试\nforge test --match-contract BankFuzzTest\n\n# 运行完整工作流程测试\nforge test --match-contract NewWorkflowTest -vv\n\n# 查看测试覆盖率\nforge coverage\n\n# 查看Gas报告\nforge test --gas-report\n\n# 使用Makefile命令 (推荐)\nmake test              # 运行所有测试\nmake test-workflow     # 运行工作流程测试\nmake build             # 编译合约\nmake deploy-local      # 本地部署\n```\n\n### 4. 本地部署测试\n\n```bash\n# 启动本地测试网络\nanvil\n\n# 在新终端中部署Bank合约\nforge script script/Deploy.s.sol --rpc-url http://localhost:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80\n\n# 或部署最新需求的完整合约组合(BigBank + Admin)  \nforge script script/DeployLatestRequirements.s.sol --rpc-url http://localhost:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80\n```\n\n### 5. 环境配置\n\n复制环境变量模板：\n```bash\ncp env.example .env\n```\n\n编辑 `.env` 文件，填入真实的配置：\n```bash\n# 网络RPC URLs\nSEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/your-api-key\nMAINNET_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/your-api-key\n\n# 私钥 (请使用测试私钥，不要使用真实资金的私钥)\nPRIVATE_KEY=your-private-key\nADMIN_PRIVATE_KEY=your-admin-private-key\nUSER_PRIVATE_KEY=your-user-private-key\n\n# Etherscan API密钥\nETHERSCAN_API_KEY=your-etherscan-api-key\n```\n\n## 部署到测试网\n\n### Sepolia测试网部署\n\n```bash\n# 部署到Sepolia测试网\nforge script script/Deploy.s.sol --rpc-url $SEPOLIA_RPC_URL --broadcast --verify\n\n# 验证合约\nforge verify-contract \u003cCONTRACT_ADDRESS\u003e src/Bank.sol:Bank --etherscan-api-key $ETHERSCAN_API_KEY --chain sepolia\n```\n\n## 最新需求工作流程\n\n### 完整的BigBank + Admin工作流程\n\n按照最新需求，项目实现了以下架构：\n\n1. **Bank合约** - 实现IBank接口的基础合约\n2. **BigBank合约** - 继承Bank，添加≥0.001 ether最小存款限制\n3. **Admin合约** - 有自己的Owner，实现adminWithdraw(IBank bank)功能\n\n#### 工作流程步骤：\n\n```bash\n# 1. 部署所有合约\nforge script script/DeployLatestRequirements.s.sol --rpc-url http://localhost:8545 --broadcast\n\n# 2. BigBank合约管理权自动转移给Admin合约(部署脚本中完成)\n\n# 3. 用户向BigBank存款(必须≥0.001 ether)\n# 可以通过直接转账或调用deposit()函数\n\n# 4. Admin合约Owner调用adminWithdraw()提取BigBank资金\n# Admin合约通过IBank接口调用BigBank的withdraw()方法\n# 资金被转移到Admin合约地址\n\n# 5. Admin Owner可以进一步将资金提取到个人地址\n```\n\n#### 架构关系图：\n\n```\nIBank (interface)\n    ↑\nBank (implements IBank)  \n    ↑\nBigBank (inherits Bank + MIN_DEPOSIT = 0.001 ether)\n    ↓ (transferOwnership)\nAdmin (owner + adminWithdraw(IBank bank))\n```\n\n#### 核心特性验证：\n\n- ✅ Bank实现IBank接口\n- ✅ BigBank继承Bank并添加最小存款限制\n- ✅ BigBank支持管理权转移\n- ✅ Admin有独立的Owner\n- ✅ Admin通过IBank接口调用withdraw方法\n- ✅ 完整的工作流程测试通过\n\n## 合约交互\n\n### 存款操作\n\n```bash\n# 设置环境变量\nexport BANK_CONTRACT_ADDRESS=\u003cdeployed-contract-address\u003e\nexport DEPOSIT_AMOUNT=1000000000000000000  # 1 ETH in wei\n\n# 执行存款\nforge script script/interactions/Deposit.s.sol --rpc-url $SEPOLIA_RPC_URL --broadcast\n```\n\n### 管理员提取\n\n```bash\n# 设置提取金额\nexport WITHDRAW_AMOUNT=500000000000000000  # 0.5 ETH in wei\n\n# 执行提取 (仅管理员)\nforge script script/interactions/Withdraw.s.sol --rpc-url $SEPOLIA_RPC_URL --broadcast\n```\n\n## 合约API\n\n### Bank合约 (IBank接口)\n\n- `deposit()`: 存款函数\n- `withdraw(uint256 amount)`: 管理员提取函数  \n- `getBalance(address user)`: 查询用户余额\n- `getTopDepositors()`: 获取前3名存款用户\n- `getTotalDeposits()`: 获取总存款额\n- `getContractBalance()`: 获取合约余额\n- `transferOwnership(address newOwner)`: 转移所有权\n\n### BigBank合约 (继承Bank)\n\n- `MIN_DEPOSIT`: 最小存款常量(0.001 ether)\n- `deposit()`: 存款函数(增强版，带最小金额限制)\n- `getMinDeposit()`: 获取最小存款要求\n- `meetsMinDeposit(uint256 amount)`: 检查金额是否满足最小存款要求\n- `transferOwnership(address newOwner)`: 转移所有权(可转给Admin合约)\n\n### Admin合约\n\n- `adminWithdraw(IBank bank)`: 从指定Bank合约提取所有资金\n- `adminWithdrawAmount(IBank bank, uint256 amount)`: 从Bank合约提取指定金额\n- `withdrawToOwner(uint256 amount)`: 将Admin合约资金提取给Owner\n- `withdrawAllToOwner()`: 提取Admin合约所有资金给Owner\n- `transferOwnership(address newOwner)`: 转移Admin合约所有权\n- `getAdminInfo()`: 获取Admin合约信息\n- `getBankInfo(IBank bank)`: 获取指定Bank合约信息\n\n### 事件\n\n- `Deposit(address indexed user, uint256 amount, uint256 newBalance)`\n- `Withdraw(address indexed admin, uint256 amount)`\n- `TopDepositorsUpdated(address[3] topUsers, uint256[3] topAmounts)`\n- `OwnershipTransferred(address indexed previousOwner, address indexed newOwner)`\n- `AdminWithdrawal(address indexed bankContract, uint256 amount, address indexed owner)`\n- `FundsReceived(address indexed from, uint256 amount)`\n\n## 安全特性\n\n1. **访问控制**: \n   - Bank/BigBank: 只有合约所有者可以提取资金\n   - Admin: 只有Admin Owner可以操作\n2. **重入保护**: 所有资金操作都使用nonReentrant修饰符\n3. **输入验证**: \n   - 验证存款和提取金额\n   - BigBank强制最小存款限制\n   - 地址零值检查\n4. **溢出保护**: Solidity 0.8+内置溢出保护\n5. **接口隔离**: Admin通过IBank接口操作，降低耦合\n6. **权限分离**: BigBank管理权可转移给Admin合约\n\n## 测试覆盖\n\n### Bank合约测试\n- ✅ 基本存款和提取功能\n- ✅ 排行榜更新逻辑\n- ✅ 权限控制测试\n- ✅ 边界条件测试\n- ✅ 模糊测试\n- ✅ Gas优化测试\n- ✅ 安全性测试\n\n### BigBank合约测试\n- ✅ 继承Bank功能验证\n- ✅ 最小存款限制测试\n- ✅ modifier权限控制测试\n- ✅ 管理权转移测试\n\n### Admin合约测试\n- ✅ adminWithdraw功能测试\n- ✅ IBank接口调用测试\n- ✅ 权限控制测试\n- ✅ 资金转移测试\n\n### 完整工作流程测试\n- ✅ Bank实现IBank接口验证\n- ✅ BigBank继承Bank验证\n- ✅ 端到端工作流程测试\n- ✅ 错误场景测试\n- ✅ 架构关系验证\n\n## Gas优化\n\n合约已经过Gas优化：\n- 高效的排行榜算法\n- 最小化状态变量读写\n- 优化的排序逻辑\n\n## 开发指南\n\n### 添加新功能\n\n#### 扩展Bank功能\n1. 在 `src/Bank.sol` 中实现新功能\n2. 在 `src/interfaces/IBank.sol` 中添加接口(如需要)\n3. 在 `test/Bank.t.sol` 中添加测试\n4. 如果BigBank需要继承新功能，更新 `src/BigBank.sol`\n\n#### 扩展BigBank功能\n1. 在 `src/BigBank.sol` 中实现BigBank特有功能\n2. 在 `test/NewWorkflow.t.sol` 中添加相关测试\n3. 确保最小存款限制得到正确应用\n\n#### 扩展Admin功能\n1. 在 `src/Admin.sol` 中实现新的管理功能\n2. 确保通过IBank接口进行Bank合约操作\n3. 在 `test/NewWorkflow.t.sol` 中添加相关测试\n\n### 测试策略\n\n1. **单元测试**: 测试单个合约的功能\n2. **集成测试**: 测试合约间的交互\n3. **工作流程测试**: 测试完整的业务流程\n4. **模糊测试**: 测试边界条件和异常情况\n\n### 提交流程\n\n1. 运行所有测试: `forge test`\n2. 运行工作流程测试: `forge test --match-contract NewWorkflowTest -vv`\n3. 检查代码覆盖率: `forge coverage`\n4. 检查Gas使用: `forge test --gas-report`\n5. 确保编译无警告: `forge build`\n6. 提交代码\n\n## 许可证\n\nMIT License\n\n## 贡献\n\n欢迎提交Issue和Pull Request！\n\n## 注意事项\n\n⚠️ **重要提醒**:\n- 这是一个演示项目，不建议在主网上使用真实资金\n- 部署前请进行充分的安全审计\n- 私钥管理请遵循最佳实践\n- 测试网部署建议使用测试ETH\n\n### 最新需求相关注意事项\n\n1. **BigBank最小存款限制**: 所有存款必须≥0.001 ether，否则交易会失败\n2. **管理权转移**: BigBank部署后应将管理权转移给Admin合约\n3. **Admin操作**: Admin合约通过IBank接口操作，确保了合约间的松耦合\n4. **测试环境**: 建议使用NewWorkflow测试验证完整工作流程\n5. **合约升级**: 如需修改需求，建议重新部署而非尝试升级合约\n\n### 部署顺序\n\n推荐的部署顺序：\n1. 部署Bank合约(可选，用于对比)\n2. 部署BigBank合约  \n3. 部署Admin合约\n4. 将BigBank管理权转移给Admin合约\n5. 测试完整工作流程","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidweb3-ctrl%2Fbank-foundry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidweb3-ctrl%2Fbank-foundry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidweb3-ctrl%2Fbank-foundry/lists"}