第1课

去中心化市场与Remix集成开发环境

在本课中,我们将首先学习去中心化市场的基本概念及其运作原理。紧接着,我们将熟悉Remix集成开发环境,并编写一个简单的Solidity合约。

什么是去中心化市场?

在传统的电子商务市场(如亚马逊和eBay)中,存在一个中央机构促进买卖双方之间的交易。这个中央机构掌控着交易过程、维护产品列表,并管理争议解决。虽然这种中心化模式具有一些优势,但也存在审查风险、高额费用和对信任的依赖等问题。

去中心化市场则利用区块链技术实现无需中介的点对点交易。它消除了对信任的需要,因为交易是透明的,并可以由区块链上的所有参与者验证。OpenBazaar和Origin Protocol便是典型的去中心化市场案例。

Remix集成开发环境介绍

Remix集成开发环境(IDE)是一款功能强大的开源工具,专为开发以太坊智能合约而设计。它可以直接在浏览器中运行,您无需在电脑上安装任何软件。

您可以通过访问https://remix.ethereum.org来使用Remix IDE。在浏览器中打开Remix后,您会看到如下三个面板:

  1. 左侧面板:您可以在此处创建、导入和管理您的Solidity文件。此外,您还可以使用各种插件来进行合约的编译、测试、调试和部署等操作。

  2. 中间面板:这是代码编辑器,用于编写和编辑Solidity代码。

  3. 右侧面板:此面板提供了各种工具,用于编译合约,在以太坊网络(可以是真实的以太坊网络,也可以是JavaScript VM模拟环境)上部署合约,以及运行您部署的合约。

编写您的第一份Solidity合约Item

在本部分,我们将开始编写我们的第一份Solidity合约。该合约将代表我们市场中的一个基本商品(item)。

首先,在Remix中单击左侧面板顶部的第二个图标(文件图标)创建一个新文件。中间面板上将出现一个新对话框。输入Item.sol作为文件名,然后单击“OK”。

创建好文件后,就可以开始编写我们的合约了:

Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

contract Item {
    // Define an event that will be fired when a new item is created
    event NewItem(uint itemId, string itemName, uint itemPrice);

    // Each Item has an id, a name and a price
    struct ItemStruct {
        string name;
        uint price;
    }

    // Array to hold all the items
    ItemStruct[] public items;

    // Function to create a new item
    function createItem(string memory _name, uint _price) public {
        items.push(ItemStruct(_name, _price));
        emit NewItem(items.length - 1, _name, _price);
    }
}

这份合约的各个部分都代表什么含义呢?下面,我们将一步步进行探讨:

  1. SPDX License Identifier:这是一种表达合约许可证的标准方式。//SPDX-License-Identifier:MIT行表示该合约使用宽松的MIT许可。

  2. Pragma指令:pragma solidity ^0.8.6;指明合约是使用Solidity 0.8.6版本编写的。符号^表示它也将兼容任何更新的版本,但不包括0.9.0版本。

  3. 合约定义:contract Item {...}定义了一个名为Item的新合约。这是我们编写合约的状态变量和函数的地方。

  4. 事件定义:event NewItem(uint itemId, string itemName, uint itemPrice);定义了一个事件,每当创建新Item时,我们都可以发出事件。事件是智能合约记录外部各方可以监听的活动的一种方式。

  5. 结构定义:struct ItemStruct {...} 定义了一个新的数据类型ItemStruct,它表示一个带有名称价格的商品。

  6. 状态变量:ItemStruct[] public items;定义了一个状态变量item,它保存了一个ItemStruct数组,public关键字会自动创建一个getter函数,允许任何人访问商品列表。

  7. 函数定义:function createItem(string memory _name, uint _price) public {...}定义了一个公共函数,任何人都可以调用它来创建一个新商品。该函数接收名称和价格作为参数,创建一个新的ItemStruct,将其添加到item数组中,并发出一个NewItem事件。
    要编译此合约,请转到右侧面板并单击顶部的第三个图标(Solidity徽标)。在这里,您可以编译合约。单击“Compile”按钮,如果所有信息都正确,您的合约将编译成功。

此时,左侧面板可能会弹出一个问题:

关于Swarm或IPFS的问题是关于Remix将用来存储合约元数据的方法。

  1. IPFS:星际文件系统(IPFS)是一种旨在创建永久和去中心化网络的协议。它就像一个单一的BitTorrent Swarm,在一个Git存储库中交换对象。

  2. Swarm:Swarm是一个分布式存储和内容分发服务,是以太坊Web3堆栈的原生基础层服务。它允许一组节点存储和分发数据。
    在编译合约时,Solidity编译器会生成一个包含应用程序二进制接口(ABI)和字节码等信息的JSON文件,这是合约的元数据。将元数据存储在去中心化存储网络上可确保其永久可用,还可用于验证合约的源代码。

如果您不打算在Etherscan或其他区块链浏览器上验证合约,而只是出于学习目的,您可以在Swarm或IPFS中任选其一使用,或者直接忽略,并继续下一步的学习。请记住,目前的重点是了解如何编写、编译和部署合约。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第1课

去中心化市场与Remix集成开发环境

在本课中,我们将首先学习去中心化市场的基本概念及其运作原理。紧接着,我们将熟悉Remix集成开发环境,并编写一个简单的Solidity合约。

什么是去中心化市场?

在传统的电子商务市场(如亚马逊和eBay)中,存在一个中央机构促进买卖双方之间的交易。这个中央机构掌控着交易过程、维护产品列表,并管理争议解决。虽然这种中心化模式具有一些优势,但也存在审查风险、高额费用和对信任的依赖等问题。

去中心化市场则利用区块链技术实现无需中介的点对点交易。它消除了对信任的需要,因为交易是透明的,并可以由区块链上的所有参与者验证。OpenBazaar和Origin Protocol便是典型的去中心化市场案例。

Remix集成开发环境介绍

Remix集成开发环境(IDE)是一款功能强大的开源工具,专为开发以太坊智能合约而设计。它可以直接在浏览器中运行,您无需在电脑上安装任何软件。

您可以通过访问https://remix.ethereum.org来使用Remix IDE。在浏览器中打开Remix后,您会看到如下三个面板:

  1. 左侧面板:您可以在此处创建、导入和管理您的Solidity文件。此外,您还可以使用各种插件来进行合约的编译、测试、调试和部署等操作。

  2. 中间面板:这是代码编辑器,用于编写和编辑Solidity代码。

  3. 右侧面板:此面板提供了各种工具,用于编译合约,在以太坊网络(可以是真实的以太坊网络,也可以是JavaScript VM模拟环境)上部署合约,以及运行您部署的合约。

编写您的第一份Solidity合约Item

在本部分,我们将开始编写我们的第一份Solidity合约。该合约将代表我们市场中的一个基本商品(item)。

首先,在Remix中单击左侧面板顶部的第二个图标(文件图标)创建一个新文件。中间面板上将出现一个新对话框。输入Item.sol作为文件名,然后单击“OK”。

创建好文件后,就可以开始编写我们的合约了:

Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

contract Item {
    // Define an event that will be fired when a new item is created
    event NewItem(uint itemId, string itemName, uint itemPrice);

    // Each Item has an id, a name and a price
    struct ItemStruct {
        string name;
        uint price;
    }

    // Array to hold all the items
    ItemStruct[] public items;

    // Function to create a new item
    function createItem(string memory _name, uint _price) public {
        items.push(ItemStruct(_name, _price));
        emit NewItem(items.length - 1, _name, _price);
    }
}

这份合约的各个部分都代表什么含义呢?下面,我们将一步步进行探讨:

  1. SPDX License Identifier:这是一种表达合约许可证的标准方式。//SPDX-License-Identifier:MIT行表示该合约使用宽松的MIT许可。

  2. Pragma指令:pragma solidity ^0.8.6;指明合约是使用Solidity 0.8.6版本编写的。符号^表示它也将兼容任何更新的版本,但不包括0.9.0版本。

  3. 合约定义:contract Item {...}定义了一个名为Item的新合约。这是我们编写合约的状态变量和函数的地方。

  4. 事件定义:event NewItem(uint itemId, string itemName, uint itemPrice);定义了一个事件,每当创建新Item时,我们都可以发出事件。事件是智能合约记录外部各方可以监听的活动的一种方式。

  5. 结构定义:struct ItemStruct {...} 定义了一个新的数据类型ItemStruct,它表示一个带有名称价格的商品。

  6. 状态变量:ItemStruct[] public items;定义了一个状态变量item,它保存了一个ItemStruct数组,public关键字会自动创建一个getter函数,允许任何人访问商品列表。

  7. 函数定义:function createItem(string memory _name, uint _price) public {...}定义了一个公共函数,任何人都可以调用它来创建一个新商品。该函数接收名称和价格作为参数,创建一个新的ItemStruct,将其添加到item数组中,并发出一个NewItem事件。
    要编译此合约,请转到右侧面板并单击顶部的第三个图标(Solidity徽标)。在这里,您可以编译合约。单击“Compile”按钮,如果所有信息都正确,您的合约将编译成功。

此时,左侧面板可能会弹出一个问题:

关于Swarm或IPFS的问题是关于Remix将用来存储合约元数据的方法。

  1. IPFS:星际文件系统(IPFS)是一种旨在创建永久和去中心化网络的协议。它就像一个单一的BitTorrent Swarm,在一个Git存储库中交换对象。

  2. Swarm:Swarm是一个分布式存储和内容分发服务,是以太坊Web3堆栈的原生基础层服务。它允许一组节点存储和分发数据。
    在编译合约时,Solidity编译器会生成一个包含应用程序二进制接口(ABI)和字节码等信息的JSON文件,这是合约的元数据。将元数据存储在去中心化存储网络上可确保其永久可用,还可用于验证合约的源代码。

如果您不打算在Etherscan或其他区块链浏览器上验证合约,而只是出于学习目的,您可以在Swarm或IPFS中任选其一使用,或者直接忽略,并继续下一步的学习。请记住,目前的重点是了解如何编写、编译和部署合约。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。