blastonyz/SC-Security
GitHub: blastonyz/SC-Security
Cyfrin 智能合约安全课程的审计练习项目,以 Puppy Raffle 抽奖协议为审计靶场帮助开发者学习 Solidity 合约安全审计。
Stars: 0 | Forks: 0
# Puppy Raffle
本项目旨在参与抽奖以赢得一个可爱的小狗 NFT。该协议应实现以下功能:
1. 调用 `enterRaffle` 函数并传入以下参数:
1. `address[] participants`:参与者的地址列表。你可以利用此参数让自己多次参与,或者让你和一群朋友一起参与。
2. 不允许出现重复地址。
3. 如果用户调用 `refund` 函数,允许他们退还门票及对应的 `value`。
4. 每隔 X 秒,抽奖活动将能够抽取一名获胜者,并为其随机 mint 一个小狗。
5. 协议的 owner 将设置一个 feeAddress 来抽取一部分 `value`,其余的资金将发送给小狗的获胜者。
- [Puppy Raffle](#puppy-raffle)
- [入门指南](#getting-started)
- [环境要求](#requirements)
- [快速开始](#quickstart)
- [可选的 Gitpod](#optional-gitpod)
- [使用方法](#usage)
- [测试](#testing)
- [测试覆盖率](#test-coverage)
- [审计范围详情](#audit-scope-details)
- [兼容性](#compatibilities)
- [角色](#roles)
- [已知问题](#known-issues)
# 入门指南
## 环境要求
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- 如果你能运行 `git --version` 并看到类似 `git version x.x.x` 的输出,说明你安装正确。
- [foundry](https://getfoundry.sh/)
- 如果你能运行 `forge --version` 并看到类似 `forge 0.2.0 (816e00b 2023-03-16T00:05:26.396218Z)` 的输出,说明你安装正确。
## 快速开始
```
git clone https://github.com/Cyfrin/4-puppy-raffle-audit
cd 4-puppy-raffle-audit
make
```
### 可选的 Gitpod
如果你无法或在本地运行和安装,你可以在 Gitpod 中使用此代码库。如果你这样做,可以跳过 `clone this repo`(克隆此代码库)的部分。
[](https://gitpod.io/#github.com/Cyfrin/4-puppy-raffle-audit)
# 使用方法
## 测试
```
forge test
```
### 测试覆盖率
```
forge coverage
```
以及基于覆盖率的测试:
```
forge coverage --report debug
```
# 审计范围详情
- Commit Hash: 2a47715b30cf11ca82db148704e67652ad679cd8
- 审计范围内:
```
./src/
└── PuppyRaffle.sol
```
## 兼容性
- Solc 版本: 0.7.6
- 部署合约的区块链网络: Ethereum
# 角色
Owner - 协议的部署者,有权通过 `changeFeeAddress` 函数更改接收费用的钱包地址。
Player - 抽奖活动的参与者,有权通过 `enterRaffle` 函数参与抽奖,并可通过 `refund` 函数退还资金。
# 已知问题
无