使用 Infura 和 Truffle 在 Linea 上部署 ERC-721 智能合约
以太坊有一个众所周知的问题:交易缓慢、昂贵且扩展性差。L2s(第二层)是建立在以太坊之上的新一代区块链来解决这个问题。在这些新的第二层解决方案中,零知识汇总(或 zk 汇总)Linea 是最有前途的解决方案之一。
在本文中,我们将探讨Linea以及它为何会成为 L2 的未来。我们将逐步完成创建智能合约并将其部署到 Linea 的教程。为此,我们将使用您可能已经知道的用于在以太坊网络上构建的所有行业标准工具:Infura、MetaMask、Solidity、OpenZeppelin 和 Truffle。让我们开始吧!
Linea:领先的 zkEVM Rollup
zkEVM 是 web3 中最受关注的技术之一。它们解决了公共区块链的许多最关键问题:成本、速度和可扩展性。zkEVM 通过使用称为 ZK rollup 的巧妙的加密和扩展技术来实现这一点。ZK-rollups使用零知识证明,以安全且易于验证的方式将繁重的计算转移到链下,从而实现更高的吞吐量和更低的成本。
让 zkEVM 特别令人兴奋的是它们在默认情况下与 EVM 兼容。这意味着您可以使用为以太坊创建的所有工具、合约和库来在 zkEVM 上工作,几乎无需修改。这些低成本、高速度和易于使用的特性使 zkEVM 成为 2023 年要掌握的 web3 技术。
Linea 是一个开发人员优先的 zkEVM,这意味着它是通过与现有工具的本地集成构建的。如果您知道常见的以太坊开发者工具(MetaMask、Solidity、Infura、Truffle 等),那么您已经知道如何使用 Linea!
让我们来看看如何在 Linea 上创建和部署智能合约。
在 Linea 上部署 ERC-721 智能合约
第一步:安装钱包并获取LineaETH
为了将合约部署到 Linea,我们需要签署交易并支付汽油费。为此,我们需要一个能够容纳天然气货币的加密钱包。
MetaMask 是当今市场上最受欢迎的自托管钱包解决方案。它免费、安全且易于使用。您可以下载 MetaMask作为浏览器的扩展。
如果这是你第一次使用 MetaMask,它会提示你完成一系列步骤来设置你的钱包。最后,MetaMask 将为您提供保护钱包的选项。确保你这样做并保存你钱包的秘密助记词。我们将在未来的步骤中需要它。
在 MetaMask 窗口的右上角,单击网络下拉菜单并切换显示/隐藏测试网络。选择查看测试网络后,您应该会在下拉列表中看到 Linea Goerli。这是 Linea 的测试网络(我们将使用测试网而不是主网——截至本文撰写时主网尚未上线——这样我们就不必在交易费用上花费实际资金)。
正如您可能已经猜到的那样,MetaMask 会自动配置 Linea 测试网。我们不需要做任何额外的配置。
如果这是您第一次使用 Linea,您会看到余额为 0 lineaETH。让我们通过从Linea Faucet获取一些免费的 ETH 来改变这种情况。
一旦你有了 lineaETH,你应该会看到一个看起来像这样的余额:
第 2 步:获取 Infura Linea RPC 端点
为了将合约部署到 Linea,我们需要一个 RPC 端点。最近,Infura 添加了对 Linea 的支持,因此通过使用Infura 创建一个免费帐户,我们将自动获得对 Linea RPC 端点的访问权限。
创建 Infura 帐户后,从仪表板创建一个新的 API 密钥。
对于网络,选择 Web3 API。您可以随意命名项目。
创建密钥后,您将被导航到项目的仪表板,其中包含一个名为 Endpoints 的部分。在这里,您会找到适用于 Linea 的 RPC。它将采用 <> 形式。
保持此 URL 安全。我们将在未来的步骤中需要它。
第三步:安装 NPM 和 Node
为了创建一个 Truffle 项目,我们需要在本地机器上安装 NPM 和 Node。您可以免费下载两者。
完成后,通过运行以下命令检查它们是否已正确配置。如果一切顺利,您应该会看到每个命令的版本号输出。
第 4 步:创建一个 Truffle 项目
安装 NPM 和 Node 后,我们准备创建一个 Truffle 项目并安装所有必要的包和库。
我们将在终端上运行一系列命令,这些命令将按顺序执行以下操作:
-
创建一个空节点存储库
-
安装松露
-
初始化一个基本的 Truffle 项目
-
安装必要的软件包,例如 dotenv、openzeppelin 和 HD wallet provider。
$ mkdir linea-test && cd linea-test $ npm init -y $ npm install -g truffle $ truffle init $ npm install @openzeppelin/contracts @truffle/hdwallet-provider dotenv
在第 4 步中,我们安装 OpenZeppelin 以访问 ERC-721 标准的基本实现(支持不可替代的令牌或数字收藏品)。
Dotenv 是一个有助于秘密管理的软件包。它将确保敏感信息(例如我们钱包的助记词)不会公开。
最后,HD 钱包提供商是一个方便的软件包,它允许我们将我们的 MetaMask 钱包集成到我们的 Truffle 项目中,并无缝地支付 gas/sign 交易。
第 5 步:配置 Truffle 项目
在我们开始编写我们的合约之前,让我们配置我们的项目以确保它可以使用我们在前面的步骤中设置的 MetaMask 钱包,并使用 Infura RPC 向 Linea 测试网发出请求。
在项目的根文件夹中,创建一个名为 .env 的新文件并添加以下内容:
MNEMONIC = "< YOUR METAMASK WALLET RECOVERY PHRASE >" INFURA_RPC = “< INFURA LINEA RPC URL >”
这是我们不想公开的信息。dotenv 包将确保上述文件就是这种情况。
现在让我们将这些值导入 域名 并将其配置为与 Linea 一起使用。
require('dotenv').config(); const HDWalletProvider = require('@truffle/hdwallet-provider'); const { MNEMONIC, INFURA_RPC } = 域名; 域名rts = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" }, linea: { provider: () => new HDWalletProvider(MNEMONIC, INFURA_RPC), network_id: '59140', } }, compilers: { solc: { version: "域名", } } };
第 6 步:创建您的 ERC-721 智能合约
我们现在可以写我们的合同了。
我们的合同非常简单。部署后,它会铸造一个数字收藏品并将所有权分配给部署合约的钱包。
我们的数字收藏品将需要一些元数据与之相关联。在本教程中,我们将使用以下代表可爱熊猫的元数据:
ipfs://QmUyZoK21qb8YknXGfDB34RTY8vMqPb6Bsj9U9iLEnyrZR
当您在支持 Linea ERC-721s 的钱包或市场中查看收藏品时,您会看到以下内容:
随意用您选择的元数据替换它。如果您有兴趣了解如何格式化元数据,请查看文档。
在项目的 contracts 文件夹中,创建一个名为 域名 的新 Solidity 文件并添加以下代码:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/域名"; import "@openzeppelin/contracts/utils/域名"; contract LineaContract is ERC721URIStorage { using Counters for 域名ter; 域名ter private _tokenIds; string private _metadataUrl; constructor() ERC721("Linea Contract", "LCON") { // Set metadata _metadataUrl = "ipfs://QmUyZoK21qb8YknXGfDB34RTY8vMqPb6Bsj9U9iLEnyrZR"; // Mint _mint(); } function _mint() private { 域名ement(); uint256 newItemId = 域名ent(); _mint(域名er, newItemId); _setTokenURI(newItemId, _metadataUrl); } }
让我们通过编译我们的合约来确保一切正常。
第 7 步:将智能合约部署到 Linea 测试网
在编译我们的合约并配置我们的 Truffle 项目之后,我们准备编写一个部署脚本,在 Linea 测试网上启动我们的合约。
在项目的 migrations 文件夹中,创建一个名为 域名 的新文件并添加以下代码:
// Get instance of the Linea contract const lineaContract = 域名ire("LineaContract"); 域名rts = function (deployer) { // Deploy the contract to Linea 域名oy(lineaContract); };
我们都准备好了!通过运行以下单个命令将合约部署到 Linea 和 mint:
$ truffle migrate -–network linea
如果一切顺利,您应该会看到如下所示的输出:
Starting migrations... ====================== > Network name: 'linea' > Network id: 59140 > Block gas limit: 61000000 (0x3a2c940) 域名 ==================== Deploying 'LineaContract' -------------------- > transaction hash: 0x528016684927c412b1761e2029e5e7d39862f3ac3716e6b214ab8c105dd144fc > Blocks: 2 Seconds: 17 > contract address: 0xD5B63A037FfF90ca3a73506e9856E543dE42CAA1 > block number: 849147 > block timestamp: 1685960558 > account: 0xc361Fc33b99F88612257ac8cC2d852A5CEe0E217 > balance: 域名90609510837606 > gas used: 2245875 (0x2244f3) > gas price: 域名00008 gwei > value sent: 0 ETH > total cost: 域名14687517967 ETH > Saving artifacts ------------------------------------- > Total cost: 域名14687517967 ETH Summary ======= > Total deployments: 1 > Final cost: 域名14687517967 ETH
第八步:在 Linea Block Explorer 上确认智能合约
我们可以在Linea Block Explorer上查看我们的合约。您所要做的就是搜索您的合约地址。
一旦你这样做了,你应该能够看到关于你的合约的详细信息,包括 ERC-721 名称、代码、交易数据等。
你可以在这里查看我在创建这个项目时部署的合约。
继续扩展你的 Dapp
恭喜!您已成功将 ERC-721 合约部署到 Linea。
如果您有在以太坊区块链和其他 EVM 兼容区块链上构建的经验,您可能会注意到我们在本教程中所做的与您在正常工作流程中所做的相同。您可以使用您当前的技能组合获得 Linea 的速度、低交易成本和安全性。如果你可以在以太坊上构建,你也可以在 Linea 上构建。