# Alchemy的the Road to Web3第八周文本教程- 如何在 Optimism 上构建博彩游戏

By [Coinman.eth](https://paragraph.com/@coinman-eth) · 2022-08-19

---

大家好，我是帝哥（推特：@CoinmanLabs），今天我们一起来看看第八周的任务。

这是我们WEB3最后一周的课程了，后续帝哥会陆陆续续给大家分享区块链的技术，想学的可以关注帝哥推特或者+v： CoinmanLabs（社群客服微信进群）进群学习。

区块链的结构依赖于确定性。在区块链生态系统中，每个网络的状态都是公开的；完全透明。如果知道状态和输入，就可以计算输出。确定性与共识有关，共识使区块链的进展能够得到验证。如果没有这种确定性，就不可能独立验证区块链的进展，因为区块链将不再是去中心化的。

对于大多数用例，在实际使用随机数之前无法知道它们。因此，这意味着区块链的基础、透明度和共识，使得随机数的生成变得非常困难。

在本周课程中，我们将介绍如何克服为区块链生成随机数的限制。我们将介绍如何为使用随机数的赌场博彩游戏构建和测试 Solidity 合约。我们还将讨论在区块链博彩游戏中防止滥用的一些策略。

1.新建端点
------

首先我们的去[Alchemy](https://www.alchemy.com/)网站新建Optimism的端点。

![](https://storage.googleapis.com/papyrus_images/f5fa96aeb4bd80973cfe2a190671ba9de201d2e53025d992c85ab7fe5a9b492e.png)

2.clone代码
---------

帝哥已经将代码上传到了自己的[Github仓库](https://github.com/CoinmanLabs/ROAD3_WEEK08.git)，同学们可以直接在本地clone即可。地址在下面大家可以去取。

[https://github.com/CoinmanLabs/ROAD3\_WEEK08.git](https://github.com/CoinmanLabs/ROAD3_WEEK08.git)

当我们将代码clone到本地之后，因为一般代码上传不会上传依赖，所以我们去安装依赖。

    # 安装依赖
    yarn
    

![](https://storage.googleapis.com/papyrus_images/6f0d03a6f27526163e66a1267a3a9b17ae42c3456df21b09183fdf5e7166aee7.png)

3.修改配置部署合约
----------

当我们将依赖安装完毕后，我们去修改我们的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);
      }
    });
    
    // You need to export an object to set up your config
    // Go to https://hardhat.org/config/ to learn more
    
    
    // You need to export an object to set up your config
    // Go to https://hardhat.org/config/ to learn more
    
    /**
     * 切记私钥不要上传到仓库 切记 切记
     */
    
    module.exports = {
      solidity: "0.8.4",
      networks: {
        
        "optimism": {
           url: "第一步新建的Optimism的url",
           accounts: [ "你的私钥" ]
        }
      }
    };
    

修改完毕后我们在控制台输入：

    yarn  hardhat console --network optimism
    

系统会自动给我们编译合约，因为我们加了console命令，所以会进入控制台，同时我们会生成几个文件：

![](https://storage.googleapis.com/papyrus_images/597e603c642a690f91764cd9f7050aee69a7bdf6f4fb67e69f03386154c3e76b.png)

上面我们已经进入了控制台，下面的命令就在控制台输入了：

    # 查看自己的当前账户是否是你的小狐狸账户
    signer = await ethers.getSigner();
    

![](https://storage.googleapis.com/papyrus_images/d189034bf8251cf42f6ad78bffc54b8d1869d1dc5cd367d327614968bef6200b.png)

    # 查询当前账户的余额
    balance0 = await ethers.provider.getBalance((await ethers.getSigner()).address)
    BigNumber { value: "48335146483888624" }
    

![](https://storage.googleapis.com/papyrus_images/689572eb728c382c14781fbb7bc16b92eaa3f409d32a22df7866b79a04335882.png)

    
    #开始编译合约 
    factory = ethers.getContractFactory("Casino")
    # 下面这条命令会返回我们bytecode等信息
    factory = await factory
    # 部署合约 你的optimism一定要有费用，具体的可以看下面怎么给optimism充值
    casino = await factory.deploy()
    

![](https://storage.googleapis.com/papyrus_images/5d9ec412ad480b165c2ca6b2ae9b7e15e1832e3a2534c33b8ce62c227e341231.png)

找到你部署的hash去[区块浏览器](https://optimistic.etherscan.io/)进行查询，当然也可以用你的钱包查询：

![](https://storage.googleapis.com/papyrus_images/e48390b70da17d412348a0408f3c5b504c94a06d96741bbdb7d178a19c91d19d.png)

3.开始游戏
------

我们仍然在控制台输入：

    # 直接粘贴复制进去
    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})
    

![](https://storage.googleapis.com/papyrus_images/2c722b1a7e44e064187e39b40a39769a76cab1fefbdd2938b5ec6a77b9a2678b.png)

最后再来一次游戏就结束了：

    # 如果你的value和上面的不一致，会需要重新覆盖且报错
    tx2 = await casino.acceptBet(hashA, valBwin, {value: 1e5})
    

![](https://storage.googleapis.com/papyrus_images/5683f9cc5440810c68aa7514bafed273991d7f1d80ed104cac326de9415b78f3.png)

![](https://storage.googleapis.com/papyrus_images/1136e43f02af0aa0685c9bc9af1b439c297df5489bfdc5d523fca738e2ec2c66.png)

最后我们在看下区块链浏览器的结果：

![](https://storage.googleapis.com/papyrus_images/c49bf63d8d0f995a80b43e4a6bab41805b5e7093e644f62d866f564d9d547233.png)

### 当你运行命令出现了下面的情况，就说明你的钱包余额不足，所以需要我们去转下ETH到optimism

![](https://storage.googleapis.com/papyrus_images/f78f775d3deadce068233a4ad77bda7e800a3762dc3f4ebf2dbef4d363190a2b.png)

我们首先去到 [optimism](https://app.optimism.io/bridge)的网站。

![](https://storage.googleapis.com/papyrus_images/b88c7cc21eb84a1143b536a3440f58f7f91528347d9cf8c79e88b322aed36da7.png)

同时我们需要将optimism相关信息添加到小狐狸钱包，我们首先去到[chainlist](https://chainlist.org/) 添加相关的信息。

![](https://storage.googleapis.com/papyrus_images/7ae1f7454dabfa7b7a4a96cc9b9f53db7d3de8b3a20b277806c77ad5c4f79968.png)

以上就是第八周的任务了，大家别忘记了填写表格完成哦，表格页面在下方：

[https://alchemyapi.typeform.com/roadtoweek8](https://alchemyapi.typeform.com/roadtoweek8)

我是懂币帝，用技术带你领略区块链魅力，第一时间获取行业最新资讯：

推特：@CoinmanLabs

微信：CoinmanLabs（社群客服微信进群）

---

*Originally published on [Coinman.eth](https://paragraph.com/@coinman-eth/alchemy-the-road-to-web3-optimism)*
