基於Ethereum & IPFS的去中心化Ebay區塊鏈專案開發實戰
轉載於:黎躍春老師
1. 介紹
1.1 eBay簡介
eBay
,(EBAY
,中文電子灣、億貝、易貝)是一個管理可讓全球民眾上網買賣物品的線上拍賣及購物網站。ebay
於1995年9月4日
由Pierre Omidyar
以Auctionweb
的名稱創立於加利福尼亞州聖荷西。人們可以在ebay
上通過網路出售商品。
1.2 本課程介紹
這是一箇中級水平的課程,您可以建立一個類似eBay
的市場,在這個市場上賣家可以拍賣他們的產品,買家也可以通過拍賣來購買。
因為我們會將所有的業務邏輯和資料儲存在以太坊區塊鏈上,所以這將是一個完全去中心化的應用程式。與此同時,如果我們將所有的圖片和大量文字都儲存在以太坊區塊鏈上,這將非常昂貴,甚至由於以太坊EVM
的一些限制,我們根本不可能將大量的圖片和文字儲存到區塊鏈。為了解決這個問題,我們將在IPFS(Inter Planetary File System)
上儲存大量的文字和影像。我們將更多地瞭解IPFS
並將其融入到本課程的應用中。
1.3 為什麼要去中心化
在我們開始構建應用程式之前,花一分鐘的時間來了解在像Ethereum
這樣的去中心化平臺上構建產品的動機。
eBay
取得了巨大的成功,因為它使得買賣非常有效率。在網際網路成為主流之前,人們只能在當地社群購買和出售商品,當然也可以在一定的地理範圍內購物。隨著越來越多的人上網,像eBay
這樣的公司完全可以體驗整個線下購物拍賣的場景,任何人都可以在網際網路上從世界任何地方買賣任何東西。 eBay
對於消費者和商人都具有劃時代的意義。
儘管這對大家都有好處,並且總體上改善了貿易和經濟,但是它有一些缺點。
參與的商人都在受到公司的相關限制:公司可以隨時決定是否阻止商家自行處理交易,這對商人來說可能是一個巨大的打擊。
商家支付費用列出他們的產品,並支付銷售佣金。付費本身並不是那麼糟糕,因為
eBay
提供服務。然而,上市費有時太高,商家要麼保證金很高,要麼把這筆費用交給消費者。商家/消費者不擁有他們的任何資料。評論、購買歷史等都是這些公司所有。例如,如果商家想將自己的操作轉移到另一個提供商,那麼匯出她的評論或其他資料是幾乎不可能的。
在以太坊這樣的平臺上構建產品解決了這些問題。商戶的賬戶不能被封鎖,資料是公開的,所以它可以很容易匯出,交易費用比中心化的公司少很多很多。
1.4 專案詳情
現在,您已經瞭解了構建此應用程式的原因以及為什麼要構建這個應用程式,接下來我們來看一個高階別的,我們將在此專案中實現的所有功能。
專案展示:一個網站應該允許商家列出他們的專案。我們將為任何人建立免費列出他們的專案的功能。我們會將這些專案都儲存在區塊鏈和非區塊鏈的資料庫中,以方便查詢。
將檔案新增到IPFS:我們將新增將產品影像和產品描述(大文字)上傳到IPFS的功能。
瀏覽產品:我們將新增根據類別、拍賣時間等過濾和瀏覽產品的功能。
拍賣:就像
eBay
,我們將實現維克裡拍賣(Vickrey auction),即次價密封投標拍賣(Second-price sealed-bid auction)對物品進行投標。因為以太坊上的一切都是公開的,不像中心化應用程式,所以我們的實現將有所不同。我們的實現將非常類似於ENS
的招標流程。託管合約:一旦投標結束,產品有贏家,我們將在買方,賣方和第三方仲裁人之間建立一個託管合同。
2-of-3 數字簽名:我們將通過實施
2-of-3 數字簽名
解決方案來增加欺詐保護,其中3名
參與者中的2名
必須投票將資金釋放給賣方或將金額退還給買方。
1.5 技術需求
要成功完成本課程,您應該對以下語言/技術有基本的瞭解:
Solidity物件導向程式設計:在講解這個專案之前,我們會先給大家講解
Solidity
物件導向程式設計基礎,如何編寫簡單合約,部署合約,合約簡單互動。HTML/CSS/React:您應該對構建前端的
HTML / CSS
有基本的瞭解。Javascript:我們在這個過程中廣泛使用
JavaScript
。它在伺服器端用於將資料儲存到資料庫並查詢資料庫並將結果返回到前端。前端使用Web3.js
與區塊鏈
進行互動。我們盡力保持javascript
程式碼儘可能簡單,以迎合不同背景的學生。Database:我們將在本課程中使用
MongoDB
來儲存產品資訊。沒有必要特別瞭解MongoDB
的知識,但是對這個過程需要對資料庫有基本的瞭解。
2. 專案架構
在我們開始執行程式碼之前,讓我們來看看我們將在本課程中構建的Dapp的體系結構。
Web前端:
Web
前端是HTML
,CSS
和Javascript
的組合(大量使用web3js
)。使用者將通過這個前端應用程式
與區塊鏈
,IPFS
和nodeJS伺服器
互動。區塊鏈:這是所有程式碼和交易所在的應用程式的心臟。商店中的所有產品、使用者出價和託管都寫在區塊鏈上。
MongoDB:儘管產品儲存在區塊鏈中,但是查詢區塊鏈展示產品和應用各種過濾器(僅顯示特定類別的產品,顯示即將過期的產品等)效率並不高。我們將使用
MongoDB
資料庫來儲存產品資訊並查詢它以展示產品。NodeJS伺服器:這是前端通過其與資料庫進行通訊的後端伺服器。我們將公開一些簡單的API來為前端查詢和從資料庫中檢索產品。
IPFS:當使用者在商店中列出商品時,前端會將產品檔案和描述上傳到
IPFS
,並將上傳檔案的雜湊HASH儲存到區塊鏈中。
3. 應用程式流
為了理解我們在前面部分中看到的所有元件,讓我們看看使用者列出專案時的應用程式流程。這將使您更好地瞭解所有元件如何協同工作。
Web
前端將包含一個HTML
表單,使用者可以在其中輸入產品詳細資訊(名稱,起始價格,影像,說明等)並點選儲存 ①。網路前端將產品影像和產品描述上傳到
IPFS
,並獲取這些上傳資料的連結。 ② 和 ③。網頁前端然後呼叫合約將產品資訊 + IPFS連結儲存到區塊鏈上。在成功將產品新增到區塊鏈中時,合約會觸發事件,該事件會返回所有產品資訊。 ④ 和 ⑤。
NodeJS
伺服器設定為監聽這些事件,當事件被合約觸發時,伺服器讀取事件的內容並將產品插入到MongoDB
中。 ⑥,⑦ 和 ⑧。
當我們實現這些功能時,我們將繼續討論剩下的應用程式流程。
4. 實現步驟
先通過
truffle framework
和Solidity
實現合約程式碼,並將其部署到truffle develop
自帶的測試網路中,並且在truffle console
中可以自由互動。然後我們將學習
IPFS
,通過命令列安裝並與之互動。在後端實現完成後,我們將構建
Web
前端以與合約和IPFS
進行互動。我們也會實現招標,揭示前端的拍賣功能。我們將安裝MongoDB並設計資料結構來儲存產品。
資料庫啟動並執行後,我們將實現監聽合約事件的NodeJS伺服器端程式碼,並將請求記錄到控制檯。然後我們將執行程式碼將產品插入資料庫。
我們將更新我們的前端,從資料庫而不是區塊鏈中查詢產品。
我們將實現託管合同和相應的前端,參與者可以向買方/賣方發放或退款。
5. 以太坊智慧合約(Ethereum Contract)
- Truffle Project
- 電子商務產品(Ecommerce Product)智慧合約
- 從區塊鏈中新增和檢索產品
- 控制檯互動
- eBay拍賣
- 密封拍賣
- 揭標
- Contract Code
- 控制檯互動
6. IPFS
-
IPFS
安裝配置 -
API
介紹ipfs
ipfs-api
interface-ipfs-core
-
demo
演示- 直接在終端和
IPFS
互動 - 建立一個節點並向
IPFS
新增一個檔案 - 部署個人獨立部落格到
IPFS
- 建立一個瀏覽器
APP
來在節點之間交換檔案 dag API
IPFS + Ethereum BlockChain
- 如何使用
IPFS PubSub Room
構建應用程式 - 如何使用
CRDT
與IPFS
建立協作編輯應用程式
- 直接在終端和
7. Web前端 - Product
- 概述
- 設定上傳到區塊鏈的種子資料
- HTML/React 設定
- 渲染產品
- 展示產品列表
- 實現產品提交表單
- 上傳表單資料到IPFS
- 儲存
8. Web前端 - 拍賣
- React 前端
- JS 實現拍賣邏輯
- 鎖定和顯示出價
9. 託管服務(Escrow Service)
- 概述
- 託管智慧合約(Escrow Contract)
- 宣告獲勝者
- 發行資金
10. 產品離線(Products Offchain)
- 概述
- MongoDB設定
- 產品定義
- NodeJS app 設定
- Solidity Events
- 儲存產品
- 檢視產品
11. 專案效果
12. 技術交流
相關文章
- 區塊鏈不只有去中心化:基於 IPFS 加密的去中心化資料應用落地分析區塊鏈中心化加密
- 區塊鏈去中心化和傳統去中心化的區別區塊鏈中心化
- 區塊鏈去中心化交易所原始碼|去中心化交易系統開發區塊鏈中心化原始碼
- [譯] Dweb: 基於 IPFS 的去中心化 Web 檔案系統 (中英)Web中心化
- 去中心化區塊鏈錢包支付系統開發模式中心化區塊鏈模式
- 基於區塊鏈技術的網際網路將再次去中心化、去寡頭化區塊鏈中心化
- 區塊鏈去中心化等特點區塊鏈中心化
- 海南區塊鏈交易所開發。去中心化交易所開發區塊鏈中心化
- ProTradex(PRT)普瑞緹基於區塊鏈技術的去中心化金融平臺開發構建區塊鏈中心化
- 為什麼區塊鏈提倡去中心化?區塊鏈中心化
- 程式設計師如何切入區塊鏈去中心化應用開發程式設計師區塊鏈中心化
- 區塊鏈去中心化DAPP系統開發技術(成熟技術)區塊鏈中心化APP
- 世鏈財經|區塊鏈專案開發指南,如何開發一款區塊鏈專案區塊鏈
- 談談GIFTO(GTO)區塊鏈的去中心化設計區塊鏈中心化
- 區塊鏈錢包系統去中心化錢包模式開發案例詳情區塊鏈中心化模式
- 區塊鏈去中心化錢包系統開發功能定製邏輯分析區塊鏈中心化
- 區塊鏈去中心化技術詳細介紹區塊鏈中心化
- 4.3 IPFS+區塊鏈區塊鏈
- 區塊鏈公鏈“三元悖論”專題系列之去中心化(Decentralization)區塊鏈中心化
- 區塊鏈DApp開發模式詳情 | 去中心化應用開發原始碼規則解析區塊鏈APP模式中心化原始碼
- 區塊鏈DAPP去中心繫統開發技術程式碼流程區塊鏈APP
- 【Longhash資料分析】區塊鏈的去中心化是謊言嗎?區塊鏈中心化
- 區塊鏈要去中心化麼區塊鏈中心化
- 去中心化只是手段 區塊鏈目的是點對點交易中心化區塊鏈
- 區塊鏈零擼專案系統開發|挖礦專案開發區塊鏈
- 基於區塊鏈的身份認證系統開發區塊鏈
- 基於區塊鏈底層技術的分散式雲端儲存專案招聘go開發區塊鏈分散式Go
- 區塊鏈專案實戰視訊課程(Java版)區塊鏈Java
- IPFS/Filecoin去中心化網路目標中心化
- Brave瀏覽器開始支援區塊鏈IPFS瀏覽器區塊鏈
- 區塊鏈,中心去,何曾著眼看君王?用Go語言實現區塊鏈技術,透過Golang秒懂區塊鏈區塊鏈Golang
- 區塊鏈技術應用場景思考-去中心化儲存區塊鏈中心化
- 區塊鏈鼻祖比特幣之2:可分割與去中心化區塊鏈比特幣中心化
- 關於區塊鏈代幣DAPP專案系統開發(Demo)區塊鏈APP
- 區塊鏈趣步DAPP合約模式系統開發丨去中心化DAPP系統開發方案區塊鏈APP模式中心化
- 闡述“區塊鏈系統開發”專案方案區塊鏈
- 【區塊鏈專案招聘】Golang 開發工程師區塊鏈Golang工程師
- 以太坊開發DApp實戰:用區塊鏈,星際檔案系統(IPFS),Nodejs,MongoDB構建電商平臺APP區塊鏈NodeJSMongoDB