本文主要介绍了如何在Polygon的zkEVM测试网上创建和部署一个游戏相关的智能合约,包括开发环境的设置、合约的代码实现及如何与部署的合约进行交互。文章步步详细,适合希望学习智能合约部署的开发者。
在本指南中,我们将逐步介绍在 Polygon 的 zkEVM 测试网络链上创建和部署游戏相关智能合约的过程。我们还将演示如何在智能合约部署后与其交互。
你需要准备的内容
你将要做的事情
Polygon zkEVM 是一个第二层扩展解决方案,使用零知识证明在以太坊网络上实现快速和低成本的交易。它设计为与以太坊完全兼容,使开发者能够轻松地将现有的智能合约移植到 Polygon 网络。
要了解更多关于 Polygon zkEVM 的信息,请查看此 QuickNode 指南 - 什么是 Polygon zkEVM? 和这篇 博客文章!
在开始之前,你需要为 Polygon 设置一个开发环境。请按照以下步骤操作以开始:
你需要一个非托管钱包才能在 Polygon zkEVM 部署智能合约。你可以使用浏览器扩展,例如 MetaMask 或 Coinbase Wallet。
为了本教程的目的,我们将演示使用 Coinbase Wallet。在你的浏览器上安装扩展程序,然后保存并验证你的助记词。
你不仅需要一个 Web3 钱包,还需要一些 ETH 来支付部署和合约交互的费用。要在 Polygon zkEVM 上获取一些 ETH,你需要从另一个网络(如以太坊主网络或 Goerli 测试网络)桥接资金。此指南将演示如何使用 Goerli 测试网络桥接到 Polygon zkEVM 测试网络。
首先,访问 QuickNode 多链水龙头,将其粘贴到你的钱包地址中以接收一些测试网 ETH。你还可以发推文以获取一些奖励 ETH(我建议这样做!)。
钱包充值后,请访问 主网络 或 测试网络 桥接。在连接你的钱包并查看余额后,输入你想要桥接的金额并确认(签名)交易。
你需要等待检查点,然后在提示时完成桥接转帐。请注意,你需要切换回 zkEVM 测试网络才能正确签名第二笔确认交易。
我们将通过检查区块浏览器 这里 验证我们的余额(正如他们所说,“不信任,验证” 😉)。一旦你的钱包在 Polygon zkEVM 测试网络上充值完成,你可以继续下一个部分!
对 Polygon zkEVM 测试网络的每个请求都需要一个 API 端点来连接网络。这就是 QuickNode 的作用!你可以使用公共节点,也可以部署和管理自己的基础设施;然而,如果你希望获得 8 倍的响应速度,你可以将繁重的工作留给我们。看看为什么超过 50% 的以太坊项目选择 QuickNode 并在 这里 注册一个免费帐户。请注意 QuickNode 还支持 Polygon zkEVM 主网!
你还应该将你的 QuickNode 端点添加到你的钱包中。要在 Coinbase Wallet 中执行此操作,右上角单击地球图标,然后单击“更多网络”,在右上角单击加号。然后,添加你的详细信息:
在本指南中,我们将创建一个简单的游戏相关智能合约,允许玩家对掷币的结果进行下注。导航到 Remix.IDE,点击 + 按钮创建一个空的工作区。然后,点击文档图标创建一个新文件,并将其命名为 CoinFlip.sol。
在 Remix.IDE 中创建 CoinFlip.sol 文件后,将以下代码粘贴到文件中:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract CoinFlip {
address public player1;
address public player2;
uint256 public pot;
uint256 public winner;
address public winnerAddress;
event GameStarted(address indexed player1, address indexed player2, uint256 pot);
event GameFinished(address indexed winnerAddress, string winner, uint256 pot);
function enter() public payable {
require(msg.value == .001 ether, "Must send .001 ether to enter");
if (player1 == address(0)) {
player1 = msg.sender;
} else {
require(player2 == address(0), "Both players have already entered");
player2 = msg.sender;
emit GameStarted(player1, player2, pot);
}
pot += msg.value;
winner = 0;
winnerAddress = address(0);
}
function flipCoin() public {
require(msg.sender == player1 || msg.sender == player2, "Sender is not a player");
uint256 result = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.coinbase))) % 2;
winner = result == 0 ? 1 : 2;
winnerAddress = winner == 1 ? player1 : player2;
string memory winnerName = winner == 1 ? "player1" : "player2";
emit GameFinished(winnerAddress, winnerName, pot);
payable(winnerAddress).transfer(pot);
pot = 0;
player1 = address(0);
player2 = address(0);
}
}
Remix.IDE 应该会自动编译粘贴的代码。你可以通过检查编译标签并查看是否有绿色勾号来验证这一点。
上述智能合约旨在让两个玩家参与一个赢家拿走筹码的游戏。合约包含两个主要函数,enter() 和 flipCoin()。
enter() 函数用于允许玩家通过向合约发送 0.001 ether 来进入游戏。一旦两个玩家都进入,该函数将发出包含两个玩家地址和筹码值的 GameStarted 事件。然后,该函数将每个玩家分配到 player1 或 player2,并将筹码值按玩家发送的 ether 增加。
flipCoin() 函数用于确定游戏的赢家。该函数检查发送者是否为 player1 或 player2,生成一个随机数以选择赢家,并将筹码值转移到赢家的账户。winnerAddress 变量可以被调用以查看哪个地址赢得了掷币。最后,该函数将 player1 和 player2 的值重置为零,表示游戏结束。使用这些函数及事件发出和变量更新,使 CoinFlip 合约能够为两个玩家提供一个简单透明的机会游戏。
现在我们有了一个已编译的智能合约,接下来可以将其部署到 Polygon zkEVM 测试网络。导航到 Deploy & Run Transactions 标签,确认选中了 CoinFlip.sol 合约。
然后,在环境下选择 Injected Provider并连接你的钱包。确认选中的网络正确。
点击 Deploy 按钮并在你的钱包中确认交易。交易确认后,你应该在 Remix.IDE 的控制台中看到输出:
你可以通过检查 区块浏览器 来验证合约是否已部署。请记住,如果你在 Polygon zkEVM 主网上部署,该过程是相同的。
现在 Coin flip 合约已部署,我们可以在 Remix.IDE 左下角展开 Deployed Contracts 标签。你将看到列出的函数和变量。
要进入掷币,请在值字段中输入 1000000000000000 Wei,然后点击 enter 按钮。在你的钱包中确认交易。
我们需要在掷币合约中再输入一个才能获得赢家。目前,掷币合约设置为同一地址可以两次进入(我们这样做是为了演示),然而在生产中,你会希望更改该逻辑。点击同样的 enter 按钮并确认你钱包中的交易。交易确认后,你可以点击 flipCoin 函数按钮获取赢家。你会看到其中一个输入账户的余额增加,这就是掷币的赢家。
凭借你所学的所有知识,你现在可以进一步探索。请查看这个资源列表,继续深入了解这个领域!
祝贺你!你已经成功在 Polygon zkEVM 测试网络上创建和部署了一个游戏相关的智能合约!你现在可以利用这些技能在 Polygon zkEVM 网络上创建和部署自己的智能合约。如果你在此过程中遇到问题,或有任何疑问,或只是想讨论你正在构建的内容,请通过 Discord 或 Twitter 联系我们!
如果你对本指南有任何反馈,请 告诉我们。我们很想听到你的意见!
- 原文链接: quicknode.com/guides/oth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!