> For the complete documentation index, see [llms.txt](https://jayjiang.gitbook.io/web3book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jayjiang.gitbook.io/web3book/alchemy-road-to-web3/di-ba-zhou-sui-ji-shu.md).

# 第八周 随机数

关注我的推特(<https://twitter.com/SoullessL>) ，及时获取Alchemy 教程的最新信息。

### 准备

由于 <https://optimismfaucet.xyz> OP测试网的测试代币需要github注册满1个月才能获取，估计大家都没有满1个月，所以就在以太坊Goerli测试网做这个任务，如果你有OP测试网的代币，你也可以把涉及到的以太坊Goerli测试网的地址改成OP测试网就行。

如果你实在想在OP上做，那么你可以去<https://app.optimism.io/bridge> 把你在以太坊Goerli测试网的ETH跨链到OP的Goerli测试网，跨链需要等待好几分钟。

OP测试链信息 <https://chainlist.org/zh/chain/420>，你可以直接加到Metamask。

<figure><img src="/files/ilCZZEzn7i0f0NBpIlok" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/DqV3kVhvy9eBS0zrYygy" alt=""><figcaption></figcaption></figure>

<https://github.com/qbzzt/qbzzt.github.io/tree/master/LogRocket/20220615-random> 进入下面的网址，点击fork，把代码复制到我们自己的github，Repository name可以随意修改。

<figure><img src="/files/E0tQB2IJ8wLlmksGHLpF" alt=""><figcaption></figcaption></figure>

复制完以后我们会进入我们自己的Github代码地址，我们复制这个地址

<figure><img src="/files/YLtlrcxEES3kjrnBSTPp" alt=""><figcaption></figcaption></figure>

然后进入 <https://gitpod.io/workspaces> ，点击新建WorkSpace，输入我们刚才复制的地址，新建space

<figure><img src="/files/uFqcKbXhyqksv14CnGYq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/YRjdsoktOAyhIZlZRvZu" alt=""><figcaption></figcaption></figure>

进入代码编辑器以后，我们点击左上角，然后在弹出的窗口里选择File->Open Folder，然后在弹出的窗口输入 /workspace/week8/LogRocket/20220615-random/ （其中的week8是我的Repository name，你们如果新建的名字不是这个，则替换为你们自己的Repository name），然后点击OK按钮，切换文件目录。

<figure><img src="/files/IutN9vxWnC3CP6b8cuzE" alt=""><figcaption></figcaption></figure>

然后我们进入Terminal模块，点击右边的加号按钮，然后选择bash，新增一个Terminal，然后我们查看Terminal的命令行路径，如果已经切换到/workspace/week8/LogRocket/20220615-random文件夹下面，那就ok了。

&#x20;然后我们输入命令 npm i，安装依赖包。

```
npm i
```

<figure><img src="/files/kkm4yrX3Nsi0yLopBAe0" alt=""><figcaption></figcaption></figure>

然后我们找到hardhat.config.js文件，将里面的内容替换为

```
require("@nomiclabs/hardhat-waffle");
require('dotenv').config()

// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => {
  const accounts = await hre.ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

module.exports = {
  solidity: "0.8.4",

  networks: {
    "goerli": {
       url: "https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
       accounts: ["{你的以太坊钱包私钥}"]
    }
  }

};

```

其中{你的以太坊钱包私钥}需要替换为你自己的key，私钥用完以后记住删除，防止泄露，也可以用新账号的私钥。这边的url不建议修改成Alchemy的url，最近有点不稳定。

如果你是在OP上做的，那么你的url需要改成OP的测试网 [https://goerli.optimism.io/](<https://goerli.optimism.io/	>)

### 执行

<figure><img src="/files/Ky8WQNzaDeJbWBWQNXQG" alt=""><figcaption></figcaption></figure>

然后我们在Terminal里面输入下面的命令部署合约到测试网

```
yarn hardhat console --network goerli
```

<figure><img src="/files/BErdWQxW0yisLzp2e46J" alt=""><figcaption></figcaption></figure>

如果你想重新使用上面的命令（yarn hardhat console --network goerli）开始部署合约，记得把artifacts/cache这两个文件夹删掉（<mark style="color:red;">**正常流程请不要删除**</mark>）。

我们等待合约部署完成，然后输入下面命令

```
signer = await ethers.getSigner();
```

<figure><img src="/files/EMXLgZO4bkLeChlasqs1" alt=""><figcaption></figcaption></figure>

完成以后接着输入下面命令

```
balance0 = await ethers.provider.getBalance((await ethers.getSigner()).address)
```

成功以后输入下面命令

```
factory = await ethers.getContractFactory("Casino")
```

接着输入

```
casino = await factory.deploy()
```

<figure><img src="/files/G3I6UQfuEXePmmeUkLkd" alt=""><figcaption></figcaption></figure>

然后分别（一条条输入）输入下面命令

```
const valA = ethers.utils.keccak256(0xBAD060A7)
const hashA = ethers.utils.keccak256(valA)
const valBwin = ethers.utils.keccak256(0x600D60A7)
tx1 = await casino.proposeBet(hashA,{ value: 1e5})
```

稍微等待一段时间，需要等proposeBet执行完成，再输入命令

```
tx2 = await casino.acceptBet(hashA, valBwin, {value: 1e5})
```

<figure><img src="/files/0klSPfJ87AK3jAWIjNgp" alt=""><figcaption></figcaption></figure>

等待一段时间以后，进入 <https://goerli.etherscan.io/address/{私钥对应地址}> 查看你的交易记录，如果有如图所示的交易记录，就说明成功了。

<figure><img src="/files/ZSftBk546Pobm9ARrNdm" alt=""><figcaption></figcaption></figure>

如果你使用的是OP的测试网，那么你需要去<https://blockscout.com/optimism/goerli/address/> 来查询你的交易记录。

### 填表

填表地址： <https://forms.gle/Ztv2nLqsV158XEaeA>

<figure><img src="/files/tDxCm66c2orbWZAcmbCl" alt=""><figcaption></figcaption></figure>

填表的证明可以用<https://goerli.etherscan.io/address/{私钥对应地址}> 用你地址交易记录里面创建合约的记录点进去就是合约地址，用合约地址提交。OP 测试网请用OP的测试合约地址提交。
