如何在Polygon zkEVM上创建和部署智能合约 - Quicknode

  • QuickNode
  • 发布于 2025-01-30 20:58
  • 阅读 166

本文主要介绍了如何在Polygon的zkEVM测试网上创建和部署一个游戏相关的智能合约,包括开发环境的设置、合约的代码实现及如何与部署的合约进行交互。文章步步详细,适合希望学习智能合约部署的开发者。

概述

在本指南中,我们将逐步介绍在 Polygon 的 zkEVM 测试网络链上创建和部署游戏相关智能合约的过程。我们还将演示如何在智能合约部署后与其交互。

你需要准备的内容

你将要做的事情

  • 了解 Polygon zkEVM
  • 在 Remix.IDE 上创建并部署一个 Coin Flip 智能合约
  • 与已部署的智能合约进行交互

什么是 Polygon zkEVM

Polygon zkEVM 是一个第二层扩展解决方案,使用零知识证明在以太坊网络上实现快速和低成本的交易。它设计为与以太坊完全兼容,使开发者能够轻松地将现有的智能合约移植到 Polygon 网络。

要了解更多关于 Polygon zkEVM 的信息,请查看此 QuickNode 指南 - 什么是 Polygon zkEVM? 和这篇 博客文章

开发环境设置

在开始之前,你需要为 Polygon 设置一个开发环境。请按照以下步骤操作以开始:

获取 Web3 钱包

你需要一个非托管钱包才能在 Polygon zkEVM 部署智能合约。你可以使用浏览器扩展,例如 MetaMask 或 Coinbase Wallet。

为了本教程的目的,我们将演示使用 Coinbase Wallet。在你的浏览器上安装扩展程序,然后保存并验证你的助记词。

Coinbase Wallet 和 QuickNode 页面

为你的钱包充值

你不仅需要一个 Web3 钱包,还需要一些 ETH 来支付部署和合约交互的费用。要在 Polygon zkEVM 上获取一些 ETH,你需要从另一个网络(如以太坊主网络或 Goerli 测试网络)桥接资金。此指南将演示如何使用 Goerli 测试网络桥接到 Polygon zkEVM 测试网络。

首先,访问 QuickNode 多链水龙头,将其粘贴到你的钱包地址中以接收一些测试网 ETH。你还可以发推文以获取一些奖励 ETH(我建议这样做!)。

QuickNode 多链水龙头

钱包充值后,请访问 主网络测试网络 桥接。在连接你的钱包并查看余额后,输入你想要桥接的金额并确认(签名)交易。

zkEVM 桥

你需要等待检查点,然后在提示时完成桥接转帐。请注意,你需要切换回 zkEVM 测试网络才能正确签名第二笔确认交易。

zkEVM 签名桥

我们将通过检查区块浏览器 这里 验证我们的余额(正如他们所说,“不信任,验证” 😉)。一旦你的钱包在 Polygon zkEVM 测试网络上充值完成,你可以继续下一个部分!

获取对 Polygon zkEVM 测试网络的访问权限

对 Polygon zkEVM 测试网络的每个请求都需要一个 API 端点来连接网络。这就是 QuickNode 的作用!你可以使用公共节点,也可以部署和管理自己的基础设施;然而,如果你希望获得 8 倍的响应速度,你可以将繁重的工作留给我们。看看为什么超过 50% 的以太坊项目选择 QuickNode 并在 这里 注册一个免费帐户。请注意 QuickNode 还支持 Polygon zkEVM 主网!

QuickNode Polygon zkEVM 端点

将 QuickNode 详细信息添加到 Web3 钱包

你还应该将你的 QuickNode 端点添加到你的钱包中。要在 Coinbase Wallet 中执行此操作,右上角单击地球图标,然后单击“更多网络”,在右上角单击加号。然后,添加你的详细信息:

Polygon zkEVM(主网)
Polygon zkEVM 测试网

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 事件。然后,该函数将每个玩家分配到 player1player2,并将筹码值按玩家发送的 ether 增加。

flipCoin() 函数用于确定游戏的赢家。该函数检查发送者是否为 player1 或 player2,生成一个随机数以选择赢家,并将筹码值转移到赢家的账户。winnerAddress 变量可以被调用以查看哪个地址赢得了掷币。最后,该函数将 player1 和 player2 的值重置为零,表示游戏结束。使用这些函数及事件发出和变量更新,使 CoinFlip 合约能够为两个玩家提供一个简单透明的机会游戏。

部署智能合约

现在我们有了一个已编译的智能合约,接下来可以将其部署到 Polygon zkEVM 测试网络。导航到 Deploy & Run Transactions 标签,确认选中了 CoinFlip.sol 合约。

然后,在环境下选择 Injected Provider并连接你的钱包。确认选中的网络正确。

点击 Deploy 按钮并在你的钱包中确认交易。交易确认后,你应该在 Remix.IDE 的控制台中看到输出:

QuickNode 部署的合约

你可以通过检查 区块浏览器 来验证合约是否已部署。请记住,如果你在 Polygon zkEVM 主网上部署,该过程是相同的。

与智能合约交互

现在 Coin flip 合约已部署,我们可以在 Remix.IDE 左下角展开 Deployed Contracts 标签。你将看到列出的函数和变量。

要进入掷币,请在值字段中输入 1000000000000000 Wei,然后点击 enter 按钮。在你的钱包中确认交易。

Remix.IDE 进入函数调用

我们需要在掷币合约中再输入一个才能获得赢家。目前,掷币合约设置为同一地址可以两次进入(我们这样做是为了演示),然而在生产中,你会希望更改该逻辑。点击同样的 enter 按钮并确认你钱包中的交易。交易确认后,你可以点击 flipCoin 函数按钮获取赢家。你会看到其中一个输入账户的余额增加,这就是掷币的赢家。

Remix.IDE getWinner 函数调用

额外资源

凭借你所学的所有知识,你现在可以进一步探索。请查看这个资源列表,继续深入了解这个领域!

最后想法

祝贺你!你已经成功在 Polygon zkEVM 测试网络上创建和部署了一个游戏相关的智能合约!你现在可以利用这些技能在 Polygon zkEVM 网络上创建和部署自己的智能合约。如果你在此过程中遇到问题,或有任何疑问,或只是想讨论你正在构建的内容,请通过 DiscordTwitter 联系我们!

我们 ❤️ 反馈!

如果你对本指南有任何反馈,请 告诉我们。我们很想听到你的意见!

  • 原文链接: quicknode.com/guides/oth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。