Linea合约开发与部署

在本文中, 了解 Linea 以及为什么它可能成为 L2 的未来,并逐步完成创建智能合约并将其部署到 Linea 的教程。

Linea合约开发与部署
一键发币: SOLANA | BNB | ETH | POLYGON | HECO | OKEX

以太坊有一个众所周知的问题:交易速度慢、成本高,而且扩展性不好。 L2(第二层)是建立在以太坊之上的新一代区块链,旨在解决这个问题。 在这些新的第二层解决方案中,零知识汇总(或 zk 汇总)Linea 是最有前途的解决方案之一。

在本文中,我们将了解 Linea 以及为什么它可能成为 L2 的未来。 我们将逐步完成创建智能合约并将其部署到 Linea 的教程。 我们将使用你可能已经知道的在以太坊网络上构建的所有行业标准工具来实现这一目标:Infura、MetaMask、Solidity、OpenZeppelin 和 Truffle。

让我们开始吧!

0、Linea:新的 zkEVM

zkEVM 是 web3 中最受关注的技术之一。 它们解决了公共区块链的许多最关键的问题:成本、速度和可扩展性。 zkEVM 通过使用一种巧妙的密码学和扩展技术(称为 ZK rollup)来实现这一点。 ZK-rollups 使用零知识证明,通过以安全且易于验证的方式将繁重的计算移至链下,从而实现更高的吞吐量和更低的成本。

zkEVM 特别令人兴奋的是它们默认与 EVM 兼容。 这意味着您可以使用为以太坊创建的所有工具、合约和库来在 zkEVM 上运行,几乎不需要任何修改。 这些低成本、高速度和易于使用的特性使 zkEVM 成为 2023 年需要掌握的 web3 技术。

Linea 是一款开发人员优先的 zkEVM,这意味着它是通过与现有工具的原生集成构建的。 如果你了解常见的以太坊开发工具(MetaMask、Solidity、Infura、Truffle 等),那么你已经知道如何使用 Linea!

让我们逐步了解如何在 Linea 上创建和部署智能合约。

1、安装钱包并获取lineaETH

为了将合约部署到 Linea,我们需要签署交易并支付 Gas 费。 为此,我们需要一个能够保存gas货币的加密钱包。

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。 你可以为该项目命名任何您喜欢的名称。

创建密钥后,你将导航到项目的仪表板,其中包含名为“端点”的部分。 在这里将找到 Linea 的 RPC。

确保此 URL 的安全。 我们在以后的步骤中将需要它。

3、安装NPM和Node

为了创建 Truffle 项目,我们需要在本地计算机上安装 NPM 和 Node。 您可以免费下载两者。

完成此操作后,请通过运行以下命令检查它们是否已正确配置。 如果一切顺利,你应该会看到每个命令的版本号输出。

$ node -v
$ npm -v

4、创建Truffle项目

安装 NPM 和 Node 后,我们准备创建一个 Truffle 项目并安装所有必需的包和库。

我们将在终端上运行一系列命令,这些命令将按顺序执行以下操作:

  • 创建一个空的节点存储库
  • 安装Truffle
  • 初始化一个简单的 Truffle 项目
  • 安装必要的软件包,例如 dotenv、openzeppelin 和 HD 钱包提供商。
$ mkdir linea-nft && cd linea-nft 
$ npm init -y 
$ npm install -g truffle 
$ truffle init 
$ npm install @openzeppelin/contracts @truffle/hdwallet-provider dotenv

在步骤 4 中,我们安装 OpenZeppelin 以访问 ERC-721 标准的基本实现(为不可替代代币或 NFT 提供支持)。

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 包将确保上述文件也是如此。

现在让我们将这些值导入 truffle.config.js 并将其配置为与 Linea 一起使用。

require('dotenv').config();
const HDWalletProvider = require('@truffle/hdwallet-provider');
const { MNEMONIC, INFURA_RPC } = process.env;

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*"
    },
    linea: {
      provider: () => new HDWalletProvider(MNEMONIC, INFURA_RPC),
      network_id: '59140',
    }
  },
  compilers: {
    solc: {
      version: "0.8.19",
    }
  }
};

6、创建合约

我们现在处于签订合约的好地方。

我们的合约非常简单。 部署后,它会铸造一个 NFT,并将所有权分配给部署该合约的钱包。

我们的 NFT 需要一些元数据与之关联。 为了本教程的目的,我们将使用以下代表可爱熊猫的元数据:

ipfs://QmUyZoK21qb8YknXGfDB34RTY8vMqPb6Bsj9U9iLEnyrZR

当你在支持 Linea NFT 的钱包或市场中查看 NFT 时,会看到以下内容:

请随意将其替换为你选择的 NFT 元数据。 如果你有兴趣了解如何格式化 NFT 元数据,请查看文档

在项目的 Contracts 文件夹中,创建一个名为 LineaNft.sol 的新 Solidity 文件并添加以下代码:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract LineaNft is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    string private _metadataUrl;

    constructor() ERC721("Linea NFT", "LNFT") {

        // Set metadata of the NFT
        _metadataUrl = "ipfs://QmUyZoK21qb8YknXGfDB34RTY8vMqPb6Bsj9U9iLEnyrZR";

        // Mint NFT
        _mintNFT();
    }

    function _mintNFT() private {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, _metadataUrl);
    }
}

让我们通过编译合约来确保一切正常。

$ truffle compile

7、将合约部署到 Linea 测试网

编译合约并配置 Truffle 项目后,我们准备编写一个部署脚本,在 Linea 测试网上启动我们的合约。

在项目的迁移文件夹中,创建一个名为 1_deploy_contract.js 的新文件并添加以下代码:

// Get instance of the Linea NFT contract
const lineaNftContract = artifacts.require("LineaNft");

module.exports = function (deployer) {
    // Deploy the contract to Linea
    deployer.deploy(lineaNftContract);
};

我们都准备好了! 通过运行以下单个命令将合约部署到 Linea 并铸造 NFT:

$ truffle migrate -–network linea

如果一切顺利,你应该看到如下所示的输出:

Starting migrations...
======================
> Network name:    'linea'
> Network id:      59140
> Block gas limit: 61000000 (0x3a2c940)


1_deploy_contract.js
====================

   Deploying 'LineaNft'
   --------------------
   > transaction hash:    0x528016684927c412b1761e2029e5e7d39862f3ac3716e6b214ab8c105dd144fc
   > Blocks: 2            Seconds: 17
   > contract address:    0xD5B63A037FfF90ca3a73506e9856E543dE42CAA1
   > block number:        849147
   > block timestamp:     1685960558
   > account:             0xc361Fc33b99F88612257ac8cC2d852A5CEe0E217
   > balance:             0.180090609510837606
   > gas used:            2245875 (0x2244f3)
   > gas price:           2.500000008 gwei
   > value sent:          0 ETH
   > total cost:          0.005614687517967 ETH

   > Saving artifacts
   -------------------------------------
   > Total cost:     0.005614687517967 ETH

Summary
=======
> Total deployments:   1
> Final cost:          0.005614687517967 ETH

8、在 Linea Block Explorer 上查看合约

我们可以在 Linea 区块浏览器上查看我们的合约。 你所要做的就是搜索您的合约地址。

完成此操作后,你应该能够看到有关合约的详细信息,包括 NFT 名称、符号、交易数据等。

可以在此处查看我在创建此项目时部署的合约。

9、结束语

恭喜! 你已成功将 ERC-721 合约部署到 Linea。

如果你有在以太坊区块链和其他与 EVM 兼容的区块链上构建的经验,你可能会注意到我们在本教程中所做的操作与你在正常工作流程中所做的操作相同。 你可以利用当前的技能来享受 Linea 的速度、低交易成本和安全性。 如果可以在以太坊上构建,那么也可以在 Linea 上构建。