ralexandrec/vrf-lotto
GitHub: ralexandrec/vrf-lotto
基于 Solidity 和 Chainlink VRF v2.5 构建的去中心化智能合约彩票,利用可验证随机函数确保开奖过程透明且不可篡改。
Stars: 0 | Forks: 0
# 可审计的投注彩票 (Chainlink VRF v2.5)
本项目是一个去中心化的彩票/投注智能合约,使用 **Solidity** 和 **Hardhat** 构建,并利用 **Chainlink VRF v2.5 (可验证随机函数)** 来确保开奖过程具备安全的随机性,在区块链上可审计,且完全无法被第三方或合约管理员操纵。
本项目默认配置为 **Base Sepolia Testnet**,但也可以轻松适配至 Ethereum Sepolia、BNB Chain、Polygon 或主网 (Mainnets)。
## 🚀 功能
* **去中心化投注:** 任何钱包都可以通过发送为该次抽奖设定的准确金额来购买彩票。
* **可验证随机性:** 原生集成 Chainlink VRF v2.5,通过链下生成随机数,并由链上的密码学证明进行验证。
* **自动奖金分配:**
* 累积奖金的 **95%** 将直接发送给获胜者。
* **5%** 作为管理费转交给管理员。
* **完整的测试套件:** 包含单元测试和集成测试,使用 Chainlink 的 mock 模拟完整的开奖流程。
## 🛠️ 前置条件
* [Node.js](https://nodejs.org/) (版本 >= 18)
* Web3 钱包(例如:MetaMask),需备有用于支付测试 gas 的余额以及用于 Chainlink VRF 的 LINK。
## 📦 安装与编译
1. 安装项目的所有依赖项:
./scripts.sh install
2. 编译智能合约:
./scripts.sh compile
## 💻 本地测试
要执行模拟 Chainlink oracle 的本地测试(单元测试和集成测试):
```
npm test
```
要在模拟节点上运行并测试本地 deploy:
1. 在一个终端中,启动 Hardhat 节点:
./scripts.sh node
2. 在另一个终端中,执行本地 deploy:
./scripts.sh deploy-local
## 🌐 在测试网部署 (Base Sepolia / Sepolia)
### 1. 配置 `.env`
将 `.env.example` 文件复制为 `.env` 并填写环境变量:
```
# 与网络连接的 RPC URL(例如:Base Sepolia)
SEPOLIA_RPC_URL=https://sepolia.base.org
# 将执行 Deploy 的 Wallet 私钥
PRIVATE_KEY=0x...
# 所选网络的 Chainlink VRF Coordinator (v2.5) 数据
VRF_COORDINATOR=0x5c210ef41cd1a72de73bf76ec39637bb0d3d7bee
VRF_KEY_HASH=0x9e1344a1247c8a1785d0a4681a27152bffdb43666ae5bf7d14d24a5efd44bf71
VRF_SUBSCRIPTION_ID=SeuIDCompletoDaSuaInscricaoChainlink
```
### 2. 创建订阅 (Chainlink)
1. 访问 [Chainlink VRF Subscription Manager](https://vrf.chain.link/) 面板。
2. 在所需网络上创建版本为 **2.5** 的订阅。
3. 为您的订阅充值 **LINK**。
4. 将完整的 ID 保存在 `.env` 的 `VRF_SUBSCRIPTION_ID` 变量中。
### 3. 部署
执行发布命令:
```
./scripts.sh deploy-sepolia
```
### 4. 添加 Consumer
deploy 后,**复制生成的智能合约地址**,并在 Chainlink VRF 面板中将其作为 **Consumer** 添加到您的订阅中。这将授权该合约消耗随机数。
## 🧪 在 Testnet 上进行交互式测试
在完成 deploy 和 Chainlink 授权后,您可以简单地测试购买投注和实际抽奖:
1. 在您的终端中设置合约地址:
export CONTRACT_ADDRESS=0xEndereçoDoContratoDeployado
2. 执行交互脚本:
npm run interact-sepolia
*该脚本将购买一张彩票,请求开奖,并等待 Base Sepolia 上的 oracle 回调。*
## 📄 许可证
本项目采用 [MIT](LICENSE) 许可协议。
标签:Chainlink VRF, Hardhat, MITM代理, Solidity, Web3, 区块链, 抽奖合约, 智能合约, 自定义脚本