在傳統的電子商務市場(如亞馬遜和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中任選其一使用,或者直接忽略,併繼續下一步的學習。請記住,目前的重點是了解如何編寫、編譯和部署合約。