创建和部署合约

我们来了解一下基本的工作流程:

  • 创建一个新的文件

  • 在文件中编写合约代码

  • 编译一个合约

  • 将其部署到本地模拟区块链(Remix虚拟机)上。

  • 与部署的合约函数进行交互

创建一个新文件

在文件资源管理器中,点击新建文件图标创建一个新文件,并给它命名。在 Remix 中,默认的文件扩展名是 .sol ,如果文件名没有扩展名,将会自动添加 .sol扩展名。

注意: 关于模板或工作空间的信息,请参阅文件资源管理器文档(file_explorer.html)。

在编辑器中,将以下合约粘贴到空白文件中:

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.18;

contract testContract {

    uint256 value;

    constructor (uint256 _p) {
        value = _p;
    }

    function setP(uint256 _n) payable public {
        value = _n;
    }

    function setNP(uint256 _n) public {
        value = _n;
    }

    function get () view public returns (uint256) {
        return value;
    }
}

在粘贴代码时,请确保您理解代码内容,并在部署或与其交互之前进行检查。不要上当受骗!

编译合约

将上面的合约作为编辑器中的活动选项卡,编译该合约。快速编译的方法是按下Ctrl + S。您还可以通过在Solidity编译器中点击编译按钮、右击文件资源管理器中的文件或点击编辑器顶部的播放按钮来进行编译。

获取更多信息,请查阅 Solidity 编译器(compile.html)的文档。

部署合约

进入Deploy & Run Transactions插件。

在此插件的顶部是环境选择框。在这里,您可以选择要部署合约的位置。有许多选择。有关这些选项的更多信息,请参阅文档中的此部分(run.html#environment) 。

简要概述:

Injected Provider 将 Remix 与浏览器钱包(例如 Metamask)连接,通常用于部署到公共网络。

Remix VM 是在浏览器中的测试区块链。有很多不同的 Remix VM 的 “flavors” 可供选择。每个 “Remix VM” 的 “flavor” 都与一个不同的硬分叉(用括号括起来的名称)相关联,例如 Remix VM(上海),或者用于选择要分叉到 Remix VM 中的链。

**Remix VM **非常方便,因为它是在浏览器中运行的区块链,无需安装其他任何内容即可运行它。

Dev 将 Remix 连接到在您计算机上运行的本地区块链。

**L2 **通过浏览器钱包将 Remix 连接到 Optimism 或 Abritrum。它与 Injected Provider 基本相同,但它会使用指定 L2 的配置设置钱包。

(有关详细信息,请参见 Running transactions

选择 Remix VM环境

在下拉菜单中选择第一个 Remix 虚拟机。

Remix虚拟机带有10个账户,每个账户都有100个以太币。

注意: 当您处于** Remix VM** 环境并重新加载浏览器时,Remix VM 也会重新启动到其初始和默认状态。为了获得更真实的测试环境,请使用公共测试网络。

部署合约

testContract的构造函数需要一个类型为uint256的参数。输入一个uint256并点击部署

创建交易以部署testContract实例。

在更真实的区块链环境中,您需要批准交易,然后等待交易被打包和确认。然而,由于我们使用的是 Remix VM ,将立即执行。

终端将提供有关交易的信息。

新创建的实例显示在已部署合约部分

与部署的实例进行交互

点击 TESTCONTRACT 实例左侧的三角形图标将展开该实例,以显示其函数。

这个新实例包含了三个函数(setPsetPNget)。

点击 setP setPN 将会创建一个新的合约。

setP 是一个payable函数(payable函数有红色按钮)。使用payable函数,可以向合约发送价值(ETH)。ETH 的数量可以在 VALUE 输入字段中选择,ETH 的单位可以在右侧的框中选择。

setPN函数不接受支付(一个橙色按钮 - 根据主题而定)。无法向此函数发送价值(以太币)。

get 是一个视图函数(一个蓝色按钮 - 根据主题而定)。它不执行交易,因为 get 不会修改状态(它只返回变量 value 的值)。

返回值会显示在“获取”按钮的正下方。