第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讚同其觀點或證實其描述。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.