首先介绍一些概念,这些概念在我们的开发过程中至关重要,是合约上线的基础
forge框架
在本项目中,我将使用forge框架实现项目的部署;这里简单介绍下forge框架
Forge 框架,即 Forge,是一个区块链应用开发框架,它为开发者提供了按需创建区块链和开发去中心化应用(DApps)的最简单方法。Forge 为开发者处理底层复杂的区块链技术,让他们专注于自己更熟悉的产品和业务开发。因此,Forge 大大降低了开发部署区块链应用的难度,并且该框架使个人甚至小型团队能够独自开发足够复杂的去中心化应用。
Forge 为开发者提供了一系列在区块链上开发应用的工具。首先,开发者将拥有许多用于创建和部署自定义区块链的工具,比如 Forge CLI、Forge Patron 和 Forge Deploy。确切地说,Forge CLI 和 Forge Patron 帮助开发者建立一个工作环境,并在他们自己的计算机上创建用于编程和测试的链。最后一个,顾名思义,用于部署区块链。
我们先安装rust,再安装Foundry,最后安装forge;Foundry会安装三个框架,除了forge之外还有cast,anvil,他们的作用如下
- forge(构建 & 测试工具)
- cast(链上交互工具)
- anvil(本地模拟链)
首先我们安装rust,安装地址:https://win.rustup.rs/x86_64
rustc –version
cargo –version
如果可以看到版本输出,说明我们安装正确;
按下 win + R 键输入 cmd,并输入下面的代码
cargo install –git https://github.com/foundry-rs/foundry foundry-cli anvil chisel –bins –locked
最后验证我们安装的框架是否正确:
forge –version
cast –version
anvil –version
alchemy平台
Alchemy 是一个专注于区块链应用开发的基础设施平台。它不仅提供节点服务,还增加了许多开发工具和高级功能,使开发者能够更快、更高效地构建和调试 DApps。
主要功能:
- 提供对以太坊、Polygon、Optimism、Arbitrum 等区块链的访问。
- 高级调试工具(如用于追踪交易状态的工具)。
- 性能优化:提供更快的查询速度和更高的可靠性。
在项目中我们需要到下面的网站中去创建自己的dapp,并且复制自己在sepolia的dapp链接,步骤如下:
进入到如下地址,并且点击创建app:https://dashboard.alchemy.com/ 
一步步创建即可

最后我们可以看到自己创建的dapp已经存在,并且在页面上显示了apikey;我们选择ethereum sepolia,然后复制我们的Network URL,保存到文末项目中的.env中的RPC_URL中,后续我们部署我们的合约到测试网络时会使用到这个dapp.
demo:
https://eth-sepolia.g.alchemy.com/v2/你的API密钥

etherscan
在本项目中,我们还将使用到etherscan来访问区块链上的公共数据,比如账户余额、交易记录、合约信息等,下面是etherscan的介绍
Etherscan由一支由区块链爱好者组成的专业团队于 2015 年推出,是以太坊网络的基石区块浏览器和分析平台。它在设计上以用户为中心,是了解以太坊区块链的全面窗口,方便用户轻松浏览、验证和探索交易、地址和智能合约。
该平台超越了区块浏览器的基本功能,提供对以太坊各种活动的洞察。从追踪 ERC-20 代币交易和 NFT 铸币,到深入研究智能合约详情和监控钱包余额,Etherscan 让这些复杂的任务变得简单易用。
就像谷歌或必应等搜索引擎索引并呈现互联网海量数据一样,Etherscan 在以太坊区块链中扮演着类似的角色。它揭秘并翻译区块链的技术数据,并通过用户友好的界面呈现。这不仅简化了区块链信息的排序和筛选过程,还为普通用户和开发者开辟了丰富的可能性,增强了他们对以太坊生态系统的理解和互动。
在我们的项目中,我们使用到etherscan去验证合约,让其他人看到我们的源码,所以这里需要使用 etherscan-api-key
读者朋友可以通过如下的链接创建etherscan: https://info.etherscan.com/api-keys/
钱包私钥
你可以使用Metamask创建一个你自己的钱包,然后创建自己的账户,在账户中你可以找到自己的私钥,这个私钥将在后续部署区块链应用的过程中被使用到,对应 private-keys
代码逻辑介绍
现在,我们已经拥有了开发合约的基础工具,我们来介绍下合约具体做了些什么
看起来我们的流程十分简单,但是这里涉及到两个关键点,如何设置定时任务和获取随机数?这里我们使用到了chainlink的两个工具, Chainlink Keepers用来设置定时任务,Chainlink VRF用来获取随机数,下面我们简单介绍下他们
Chainlink Keeper
它是一组 去中心化节点,会持续监控你的智能合约并在需要时调用它们指定的函数(如 performUpkeep()),从而 实现链上自动化。
换句话说,Keeper 就是 Web3 世界里的「定时器」+「触发器」。
这里是chainlink的官方文档:chainlink autimation
Chainlink Keeper/Automation 运行方式:
大家可以使用自己的区块链账号注册一个定时任务,下面是链接 chainlink automation
Chainlink VRF
Chainlink VRF(Verifiable Random Function,可验证随机函数)是 Chainlink 提供的一项服务,用于在智能合约中生成安全、不可预测、可验证的随机数。 具体工作流程:
大家可以使用自己的区块链账号在下面的连接中注册验证器 chainlink vrf
code
我们现在已经安装了forge,使用alchemy连接sepolia testnet,并且可以通过etherscan验证我们的合约,下面来介绍下我们真正要部署的代码
// Layout of Contract:
// version
// imports
// errors
// interfaces, libraries, contracts
// Type declarations
// State variables
// Events
// Modifiers
// Functions
// Layout of Functions:
// constructor
// receive function (if exists)
// fallback function (if exists)
// external
// public
// internal
// private
// view & pure functions
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import {
VRFConsumerBaseV2Plus} from \”@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\”;
import {
