第八周 随机数

原文链接:https://blog.logrocket.com/build-random-number-generator-blockchain/ 参考: https://mirror.xyz/0xB564F52A97720F277016B4CD2F59caF403EDfc16/LPviN4PphhtPD3rOea_8D0-mV8fpX2AvocTF-dv1DFE

关注我的推特(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。

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

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

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

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

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

然后我们输入命令 npm i,安装依赖包。

npm i

然后我们找到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/

执行

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

yarn hardhat console --network goerli

如果你想重新使用上面的命令(yarn hardhat console --network goerli)开始部署合约,记得把artifacts/cache这两个文件夹删掉(正常流程请不要删除)。

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

signer = await ethers.getSigner();

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

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

成功以后输入下面命令

factory = await ethers.getContractFactory("Casino")

接着输入

casino = await factory.deploy()

然后分别(一条条输入)输入下面命令

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})

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

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

填表

填表地址: https://forms.gle/Ztv2nLqsV158XEaeA

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

最后更新于