在传统的电子商务市场(如亚马逊和eBay)中,存在一个中央机构促进买卖双方之间的交易。这个中央机构掌控着交易过程、维护产品列表,并管理争议解决。虽然这种中心化模式具有一些优势,但也存在审查风险、高额费用和对信任的依赖等问题。
去中心化市场则利用区块链技术实现无需中介的点对点交易。它消除了对信任的需要,因为交易是透明的,并可以由区块链上的所有参与者验证。OpenBazaar和Origin Protocol便是典型的去中心化市场案例。
Remix集成开发环境(IDE)是一款功能强大的开源工具,专为开发以太坊智能合约而设计。它可以直接在浏览器中运行,您无需在电脑上安装任何软件。
您可以通过访问https://remix.ethereum.org来使用Remix IDE。在浏览器中打开Remix后,您会看到如下三个面板:
左侧面板:您可以在此处创建、导入和管理您的Solidity文件。此外,您还可以使用各种插件来进行合约的编译、测试、调试和部署等操作。
中间面板:这是代码编辑器,用于编写和编辑Solidity代码。
右侧面板:此面板提供了各种工具,用于编译合约,在以太坊网络(可以是真实的以太坊网络,也可以是JavaScript VM模拟环境)上部署合约,以及运行您部署的合约。
在本部分,我们将开始编写我们的第一份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);
}
}
这份合约的各个部分都代表什么含义呢?下面,我们将一步步进行探讨:
SPDX License Identifier:这是一种表达合约许可证的标准方式。//SPDX-License-Identifier:MIT
行表示该合约使用宽松的MIT许可。
Pragma指令:pragma solidity ^0.8.6;
指明合约是使用Solidity 0.8.6版本编写的。符号^
表示它也将兼容任何更新的版本,但不包括0.9.0版本。
合约定义:contract Item {...}
定义了一个名为Item
的新合约。这是我们编写合约的状态变量和函数的地方。
事件定义:event NewItem(uint itemId, string itemName, uint itemPrice);
定义了一个事件,每当创建新Item时,我们都可以发出事件。事件是智能合约记录外部各方可以监听的活动的一种方式。
结构定义:struct ItemStruct {...}
定义了一个新的数据类型ItemStruct
,它表示一个带有名称
和价格
的商品。
状态变量:ItemStruct[] public items;
定义了一个状态变量item
,它保存了一个ItemStruct
数组,public
关键字会自动创建一个getter函数,允许任何人访问商品列表。
函数定义:function createItem(string memory _name, uint _price) public {...}
定义了一个公共函数,任何人都可以调用它来创建一个新商品。该函数接收名称和价格作为参数,创建一个新的ItemStruct
,将其添加到item
数组中,并发出一个NewItem
事件。
要编译此合约,请转到右侧面板并单击顶部的第三个图标(Solidity徽标)。在这里,您可以编译合约。单击“Compile”按钮,如果所有信息都正确,您的合约将编译成功。
此时,左侧面板可能会弹出一个问题:
关于Swarm或IPFS的问题是关于Remix将用来存储合约元数据的方法。
IPFS:星际文件系统(IPFS)是一种旨在创建永久和去中心化网络的协议。它就像一个单一的BitTorrent Swarm,在一个Git存储库中交换对象。
Swarm:Swarm是一个分布式存储和内容分发服务,是以太坊Web3堆栈的原生基础层服务。它允许一组节点存储和分发数据。
在编译合约时,Solidity编译器会生成一个包含应用程序二进制接口(ABI)和字节码等信息的JSON文件,这是合约的元数据。将元数据存储在去中心化存储网络上可确保其永久可用,还可用于验证合约的源代码。
如果您不打算在Etherscan或其他区块链浏览器上验证合约,而只是出于学习目的,您可以在Swarm或IPFS中任选其一使用,或者直接忽略,并继续下一步的学习。请记住,目前的重点是了解如何编写、编译和部署合约。
在传统的电子商务市场(如亚马逊和eBay)中,存在一个中央机构促进买卖双方之间的交易。这个中央机构掌控着交易过程、维护产品列表,并管理争议解决。虽然这种中心化模式具有一些优势,但也存在审查风险、高额费用和对信任的依赖等问题。
去中心化市场则利用区块链技术实现无需中介的点对点交易。它消除了对信任的需要,因为交易是透明的,并可以由区块链上的所有参与者验证。OpenBazaar和Origin Protocol便是典型的去中心化市场案例。
Remix集成开发环境(IDE)是一款功能强大的开源工具,专为开发以太坊智能合约而设计。它可以直接在浏览器中运行,您无需在电脑上安装任何软件。
您可以通过访问https://remix.ethereum.org来使用Remix IDE。在浏览器中打开Remix后,您会看到如下三个面板:
左侧面板:您可以在此处创建、导入和管理您的Solidity文件。此外,您还可以使用各种插件来进行合约的编译、测试、调试和部署等操作。
中间面板:这是代码编辑器,用于编写和编辑Solidity代码。
右侧面板:此面板提供了各种工具,用于编译合约,在以太坊网络(可以是真实的以太坊网络,也可以是JavaScript VM模拟环境)上部署合约,以及运行您部署的合约。
在本部分,我们将开始编写我们的第一份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);
}
}
这份合约的各个部分都代表什么含义呢?下面,我们将一步步进行探讨:
SPDX License Identifier:这是一种表达合约许可证的标准方式。//SPDX-License-Identifier:MIT
行表示该合约使用宽松的MIT许可。
Pragma指令:pragma solidity ^0.8.6;
指明合约是使用Solidity 0.8.6版本编写的。符号^
表示它也将兼容任何更新的版本,但不包括0.9.0版本。
合约定义:contract Item {...}
定义了一个名为Item
的新合约。这是我们编写合约的状态变量和函数的地方。
事件定义:event NewItem(uint itemId, string itemName, uint itemPrice);
定义了一个事件,每当创建新Item时,我们都可以发出事件。事件是智能合约记录外部各方可以监听的活动的一种方式。
结构定义:struct ItemStruct {...}
定义了一个新的数据类型ItemStruct
,它表示一个带有名称
和价格
的商品。
状态变量:ItemStruct[] public items;
定义了一个状态变量item
,它保存了一个ItemStruct
数组,public
关键字会自动创建一个getter函数,允许任何人访问商品列表。
函数定义:function createItem(string memory _name, uint _price) public {...}
定义了一个公共函数,任何人都可以调用它来创建一个新商品。该函数接收名称和价格作为参数,创建一个新的ItemStruct
,将其添加到item
数组中,并发出一个NewItem
事件。
要编译此合约,请转到右侧面板并单击顶部的第三个图标(Solidity徽标)。在这里,您可以编译合约。单击“Compile”按钮,如果所有信息都正确,您的合约将编译成功。
此时,左侧面板可能会弹出一个问题:
关于Swarm或IPFS的问题是关于Remix将用来存储合约元数据的方法。
IPFS:星际文件系统(IPFS)是一种旨在创建永久和去中心化网络的协议。它就像一个单一的BitTorrent Swarm,在一个Git存储库中交换对象。
Swarm:Swarm是一个分布式存储和内容分发服务,是以太坊Web3堆栈的原生基础层服务。它允许一组节点存储和分发数据。
在编译合约时,Solidity编译器会生成一个包含应用程序二进制接口(ABI)和字节码等信息的JSON文件,这是合约的元数据。将元数据存储在去中心化存储网络上可确保其永久可用,还可用于验证合约的源代码。
如果您不打算在Etherscan或其他区块链浏览器上验证合约,而只是出于学习目的,您可以在Swarm或IPFS中任选其一使用,或者直接忽略,并继续下一步的学习。请记住,目前的重点是了解如何编写、编译和部署合约。