如何在Polygon zkEVM上构建和部署智能合约?

  • zeeve_io
  • 发布于 2023-11-09 22:16
  • 阅读 178

本文介绍了如何在Polygon zkEVM上构建和部署智能合约的步骤。首先,需要配置Polygon zkEVM网络,然后使用测试代币为Metamask钱包充值。接下来,使用Remix IDE创建一个纸牌游戏相关的智能合约,并将其部署到Polygon zkEVM测试网上。最后,通过调用合约中的函数来测试已部署的智能合约。

如何在 Polygon zkEVM 上构建和部署智能合约?

Sankalp Sharma

如何在 Polygon zkEVM 上构建和部署智能合约

Polygon zkEVM 是 QuickSwap、Celer cBridge 和 Coinstats 等知名 dApp 的首选,因为它能够提供完全以太坊等效的零知识生态系统,实现近乎无限的可扩展性、降低 gas 费用和互操作性。如果你计划在 Polygon zkEVM 生态系统上构建你的 dApp,本文提供了在 Polygon zkEVM 上部署智能合约的循序渐进的过程。

为什么为你的 dApp 选择 Polygon zkEVM?

Polygon zkEVM 是一种基于零知识的 Layer-2 Rollup 扩展解决方案,旨在提供大规模的可扩展性,同时保持企业级的安全性、互操作性以及在其生态系统上运行的去中心化应用程序的快速最终性。在加密 zk 证明的支持下,Polygon zkEVM 在链下计算所有交易,生成有效性证明,并在主网上发布它们。通过这种创新的方法,Polygon zkEVm 允许 dApp 保持 EVM 等效性,继承底层 Layer-1 的安全性,并利用 ZKP 支持的可扩展性。

了解更多:Polygon zkEVM 如何成为去中心化应用程序的游戏规则改变者?

在 Polygon zkEVM 上构建和部署智能合约

有多种方法可以在 Polygon zkEVM 生态系统上部署智能合约。例如,你可以使用 HardhatFoundry 和 Remix 进行部署。在本指南中,让我们考虑基于 Remix IDE 的部署。

前提条件

系统要求:

RAM:最低 32 GB,推荐 64 GB。

CPU:最低 8 核,推荐 16 核。

存储:至少-最低 2.5TB SSD,推荐 5TB SSD

推荐带宽-1Gbit/s

节点– zkEVM 全节点。

钱包– 任何与 Polygon zkEVM 兼容的钱包,例如 Metamask 或 Coinbase 钱包。

工具– 用于 Polygon zkEVM 智能合约的开发、测试、调试和部署的 Remix.IDE。Polygon zkEVM 区块链浏览器用于检查交易。

假设你已满足所有前提条件,让我们开始部署过程。

请注意,这些步骤代表 Polygon zkEVM 测试网的部署。你可以按照完全相同的步骤在 Polygon zkEVM 主网上部署智能合约。

步骤 1:配置 Polygon zkEVM 网络

要在 Polygon zkEVM 上部署你的 dApp,你首先需要访问该网络。为此,你需要一个 RPC 端点,你可以通过传统的基于编程的过程或无代码方式部署它。

Zeeve 允许你通过低代码部署 Polygon zkEVM 节点,通过几次点击即可完成自助方法。此外,Zeeve 的节点基础设施经过高度优化,可实现负载平衡、10 倍更快的响应时间、快速同步和 99.95% 的正常运行时间。

部署节点后,你将获得一个公共 RPC url 和链 ID。将所有这些详细信息添加到你的 Metamask 钱包中,包括测试网浏览器 url;https://testnet-zkevm.polygonscan.com

单击“保存”以将 Polygon zkEVM 网络添加到你的钱包网络列表中。重新加载页面并从钱包导航到“选择网络”选项。将出现一个包含所有已添加网络的下拉菜单。选择 Polygon zkEVM 测试网并切换到该网络。

步骤 2:使用测试代币为你的 Metamask 钱包注资

现在你已经配置了 Polygon zkEVM 网络,现在是时候使用一些测试代币为你的钱包注资了。这些代币将用于在部署过程中支付智能合约交易费用。在你请求代币之前,请确保你是 Polygon Discord 服务器的成员,因为它需要身份验证。现在,要获取测试代币,请导航到 Polygon zkETH 水龙头,选择 Polygon zkEVM 作为网络,选择代币类型,然后添加钱包地址。

单击“提交”。现在,水龙头将要求你再次确认详细信息。之后,ETH 将在 5 分钟内转移到你的钱包。如果你愿意,你可以在浏览器上查看交易详情

步骤 3:构建智能合约

下一步是创建智能合约。在本指南中,让我们构建一个与纸牌游戏相关的合约,类似于 Blackjack 或 21 等流行的游戏。在这里,玩家的目标是获得一手牌,其总价值接近 21 而不会超额呼叫。

我们的智能合约代码的关键功能包括:

  • CardValue Struct:定义扑克牌的属性,例如其花色(suit)、牌面(rank)和权重(数值)。

  • 映射和数组:合约有一个映射——“deck”,它将每个牌索引与其 CardValue 相关联。此外,它还包括牌面数组、其关联的权重值和花色。

  • 牌组初始化:合约通过迭代牌面数组和花色来初始化牌组,创建一副包含 52 张牌及其权重值的牌组。

  • pickCardFromDeck 函数:此函数基于调用者的地址和当前区块的时间戳的组合生成一个随机牌索引。因此,它返回一个介于 0 和 51 之间的随机牌索引。

  • hit 函数:此函数表示玩家从牌组中抽牌。它使用 pickCardFromDeck 函数选择一张随机牌,将其添加到玩家的手牌数组中,并记录抽出的牌的牌面和花色。此外,此函数还确定玩家手牌的当前总价值,并记录玩家是否获胜(达到 21)、失败(超过 21)或应继续游戏。

  • readHandValue 函数:此函数通过确定手牌中牌的权重值来计算并返回玩家手牌的总权重。它还记录手牌中的总权重。

以下智能合约只是一个示例。你可以编写自己的 dApp 特定的智能合约,例如用于 DeFi 应用程序、加密游戏应用程序、桥梁、钱包等,并使用相同的方法将其部署到 Poygon zkEVM,只需更改合约代码。

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

import "hardhat/console.sol";

contract Casino {

    struct CardValue {
        string symbol;
        string card;
        uint8 weightage;
    }

    mapping (uint => CardValue) deck;

    string[] cards = ["ace", "king", "queen", "jack", "10", "9", "8", "7", "6", "5", "4", "3", "2"];
    uint8[13] weightage = [10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2];
    string[] suits = ["spades", "hearts", "diamonds", "clubs"];

    CardValue[] hand;

    constructor() {
        uint16 DeckIndex=0;
        for (uint16 cardIndex = 0; cardIndex < cards.length; cardIndex++)
        {
            for (uint16 suitIndex = 0; suitIndex < suits.length; suitIndex++)
            {
                deck[DeckIndex] = CardValue(
                    {
                        symbol: suits[suitIndex],
                        card: cards[cardIndex],
                        weightage: weightage[cardIndex]
                    }
                );
                DeckIndex++;
            }
        }
    }

    function pickCardFromDeck() internal view returns(uint) {
        uint randNo = 0;
        randNo = uint (keccak256(abi.encodePacked (msg.sender, block.timestamp)))%52;
        return randNo;
     }

    function hit() public {
        CardValue memory drawnCard = deck[pickCardFromDeck()];
        hand.push(drawnCard);
        console.log("Your new card is -", drawnCard.card, "of", drawnCard.symbol);
        // 你的新牌是 - 牌面 of 花色
        if (readHandValue() == 21) {
            console.log("You've won");
            // 你赢了
        } else if (readHandValue() > 21) {
            console.log("You have lost");
            // 你输了
        } else {
            console.log("Would you like to hit again?");
            // 你想再来一次吗?
        }
    }

    function readHandValue() public view returns(uint16) {
        uint16 cardWeightage = 0;
        for (uint16 cardIndex = 0; cardIndex < hand.length; cardIndex++)
        {
            cardWeightage += hand[cardIndex].weightage;
        }
        console.log("Total Weightage =", cardWeightage);
        // 总权重 =

        return cardWeightage;
    }

}

打开 Remix IDE,单击 WORKSPACES,然后单击 +create 选项创建一个新的工作区。在此工作区中,创建一个新文件,我们将其命名为 Newcardgame.sol。

接下来,将上面的智能合约代码粘贴到文件中。

请注意,上面的代码尚未完全编译。因此,让我们首先在 Solidity 中编译它。将整个代码粘贴到 Remix 控制台中,运行“Solidity Compiler”(你可以在下面的图像中看到)。成功编译后,你将看到一个绿色的复选标记。

步骤 4:在 Polygon zkEVM 上部署智能合约

最后,让我们在 Polygon zkEVM 测试网上部署编译后的 Solidity 智能合约。通过 Remix 上的“部署和运行交易”选项卡导航,并添加所有必要的详细信息,例如环境、帐户地址、Gas 限制配置等。

在我们的设置中,我们添加了以下详细信息:

  • 环境:注入提供程序 - MetaMask。
  • 帐户地址:0x218d2Ab3152e29227d0CCc11764F9666f5d97faC。
  • Gas 限制设置为默认值,3M。
  • 合约名称将自动显示,在我们的例子中为“Casino-New card game. Sol”。

单击“部署”并从你的 Metamask 钱包确认交易。确认后,合约将在几秒钟内部署。此外,正如你在下面的图像中看到的,一个表示智能合约交易成功的输出将出现在 Remix 控制台的底部,并带有一个绿色的复选标记。

这样就完成了!祝贺你成功地在 Polygon zkEVM 上部署了智能合约。为了进一步验证部署,你可以在 Polygon zkEVM 区块链浏览器上查看交易。

步骤 5:从已部署的智能合约中调用函数

让我们通过调用它的一些函数来测试我们的 Polygon zkEVM 智能合约。例如,我们正在调用 Remix.IDE 控制台底部列出的“hit”和“readHandvalue”函数。

单击hit以调用此函数。它将抽取额外的牌并检查你是赢还是输。结果将显示在控制台中。

同样,单击readHandvalue以调用此函数。这通过检查总权重来确定游戏的结果。如果手牌值达到 21,则获胜;如果超过 21,则失败。同样,结果将显示在控制台中。

正如你所看到的,我们只是通过调用它的一些函数与我们的 Polygon zkEVM 智能合约进行了交互!你可以调用更多函数,更改代码,或重新部署此合约以提供更特定的 dApp 功能。

总结

正如所讨论的,你可以使用相同的步骤在 Polygon zkEVM 上为你的项目特定 dApp 构建和部署智能合约。并且,如果你遇到任何挑战或有任何问题,请随时与 Zeeve 的区块链专家联系。我们致力于通过可扩展的节点、安全的 RPC 端点、现成的插件、多云支持和 24*7 资源监控来简化你基于 Polygon zkEVM 的部署。有关 Zeeve 如何实现 Polygon zkEVM dApp 的无缝部署的更多详细信息,请给我们发送电子邮件或安排一对一的通话以进行详细讨论。

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

0 条评论

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