当前位置: 首页 > 后端技术 > Node.js

以太坊开发DApp实战教程——利用区块链、星际文件系统(IPFS)、Node.js和MongoDB搭建电商平台

时间:2023-04-03 15:34:10 Node.js

第一节介绍电商DApp!我们将构建一个类似于淘宝的在线电子商务应用,卖家可以自由销售商品,买家可以自由购物:完全分散的应用程序。与淘宝这样的中心化电商平台相比,去中心化的P2P电商应用显然有其独特的价值——至少不用担心被平台封杀。IPFS:在以太坊上存储用于产品展示的图片和描述超文本是非常昂贵的,有时甚至由于以太坊虚拟机的限制而无法实现。为了解决这个问题,我们将产品图片和产品描述信息存储在同一个去中心化的星际文件系统(IPFS)中,链上只保存这些数据的ID。商品拍卖:对于卖家来说,拍卖显然是一种非常好的提高商品利润率的销售方式。因此,在课程项目中,我们将在去中心化的环境中实施维克里拍卖——这与eBay的自动竞价系统非常相似,而不是简单地为产品设定一个固定的价格。资金托管:中心化平台的优势之一是它天然地提供了买卖双方之间的信任中介。在去中心化的环境下,我们会使用多方托管合约来应对买卖双方可能存在的风险。托管合约使用投票机制来决定买方付款的最终流向。链下数据存储:不要被去中心化所限制,传统技术还是有优势的。我们将使用MongoDB做一个链下数据同步备份,以实现一个纯区块链难以实现的功能:灵活的商品查询。课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6Section2Decentralization,为什么?在开始构建我们的应用程序之前,花一分钟时间了解为什么在线市场建立在像以太坊这样的去中心化平台上是非常值得的。像eBay或淘宝这样的C2C电子商务平台之所以取得巨大成功,是因为它们为买卖双方提供了便利:在互联网成为主流之前,人们只能在小范围内或社区之间买卖商品。当越来越多的人使用互联网时,出现了像eBay这样的平台,无论你来自世界的哪个角落,都可以在网上买卖商品。无论是商家还是消费者,这样的平台都有它的价值。虽然像eBay这样的平台使每个人都可以轻松使用并改善贸易和经济,但它也有一些缺点:与平台绑定。参与的商家受拥有该平台的企业的约束。任何时候,平台主都可以决定是否封停某个商户的账号,而如果商户对平台的依赖度很高,那么封号是一个巨大的打击。商家收费高。商家要为产品listing支付费用,还要为销售产品支付佣金。收费没有错,毕竟eBay这样的平台是提供服务的。但有时listing费用过高,导致商家最终利润微薄,或者将成本转嫁给消费者。数据失控。商家和消费者都不能拥有本应属于他们的数据。评论、购买记录等。所有数据均归平台所有者所有。比如商家要换供应商,或者要导出商品评论等数据,就非常困难甚至不可能。建立在以太坊上的去中心化电商平台解决了这些问题:商户账户不会被封;数据也是公开的,所以很容易导出数据;与中心化平台相比,交易佣金也会低很多。Section3初步功能特点现在你应该明白为什么我们需要构建一个去中心化的电子商务应用程序,以及我们想要构建什么。现在让我们大致看看这个项目将实现什么主要特点:产品列表:该应用程序应支持卖家列出待售产品。我们将实现任何人都可以自由发布产品的功能。产品浏览和搜索:该应用程序应允许买家轻松浏览产品列表。我们将实现浏览商品的功能,以及根据商品类别、拍卖时间等条件进行查询的功能。商品拍卖:和eBay一样,我们会在VickoryAuction中实现商品的竞价。由于以太坊上的所有交易都是公开的,我们的实施将不同于中心化环境。资金托管:一旦竞价结束且商品拍卖有获胜者,我们将创建一个涉及中标买家、卖家和任何第三方的托管合约,托管合约将管理交易资金。托管资金保护:为了保护托管资金,我们会使用多重签名(2/3)来实现反欺诈保护,即只有当三个参与者中的两个同意时,托管资金才会被释放给卖家,否则托管资金将被释放并退还给买方。为了方便查询,我们会将产品数据存储在链上和链下(数据库);同时,为了避免图片等数据占用昂贵的链上存储,我们会将图片和产品描述信息上传到同一个去中心化的IPFS网络。课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6第四节基础知识要求为了顺利完成本课程,你应该对以下语言/技术有一定的了解:Solidity/Truffle:课程将在-depth使用solidity编写合约。如果你还没有学过,我建议你先学习以太坊DApp开发入门教程,这样你至少会写一两个简单的合约。同时,对truffle开发框架有一个基本的了解,对于完成本课程也会有很大的帮助。HTML/CSS/JavaScript:与入门课程相比,本课程将包含更多的HTML和CSS代码。您应该对使用HTML/CSS构建前端有基本的了解。同时,我们将进一步使用JavaScript。它将数据保存到服务器端的数据库中,查询数据库并将结果返回给前端。web3.js用于前端与区块链的交互。我们为所有背景的学习者保持了尽可能简单的JavaScript代码。数据库:我们将使用MongoDB在链下存储产品信息。不需要MongoDB的特定知识,但基本的数据库知识将帮助您成功完成本课程。Section5系统架构在开始具体实现之前,我们先看一下本课程要搭建的去中心化电商DApp的架构。Web前端:Web前端使用HTML/CSS/JavaScript开发,广泛使用web3js接入区块链。用户将通过这个前端应用程序访问以太坊、IPFS和NodeJS服务器。以太坊区块链:这是去中心化应用的核心。所有代码(电商合约、资金托管合约)和交易都存储在链上,包括所有商品信息、买家投标信息、商品投标结果、资金流向投票结果等。MongoDB:虽然核心数据存储在链上区块链,为了方便买家检索和查询商品,比如只展示某一类商品,或者展示即将过期的商品等,我们会使用MongoDB数据库同步Store和检索商品信息.NodeJS服务器:这是后端服务器。我们将使用它为前端提供一个REST风格的API来查询产品。同时,我们也会用它来响应前端静态页面的请求。IPFS:卖家上架商品时,前端将商品图片文件和介绍文字上传到IPFS,并将上传文件的哈希值保存到链上。Section6了解架构的作用为了帮助理解上一节提到的组件的作用,让我们看一下卖家列出产品的过程:(1)前端使用HTML表单收集产品用户输入的详情,例如起拍价、商品图片、描述信息等。(2)(3)前端将商品图片和介绍文字上传到IPFS,并返回上传对应的链接(hash)内容。(4)(5)然后,web前端会调用电商合约将商品信息和IPFS链接存储在链上。当合约成功将商品存入区块链后,会触发一个事件,其中包含商品的所有信息。(6)(7)(8)NodeJS服务器监控区块链事件。当电子商务合约触发事件时,服务器读取事件内容并将产品信息插入MongoDB数据库。当我们开始详细实现列出产品的功能时,我们将重新审视这个过程。Section7AgileDevelopment我们将采用敏捷开发的思想来实现去中心化电商DApp:我们将把所有的产品特性列为8个迭代周期,通过每一次冲刺(sprint),我们会得到一个Release版本:前两个sprint主要针对使用solidity和truffle框架实现电子商务合约,包括合约设计、开发、编译、部署和测试:sprint-1:实现电子商务合约的上市展示方法。sprint-2:实现电子商务合同的商品竞价和出价方式。电商合约基本实现后,接下来的三个冲刺主要集中在前端用户界面的构建,包括使用web3与合约进行交互,通过ipfs开发接口上传图片等数据交互。必不可少的DOM操作:sprint-3:为买家提供商品浏览界面。sprint-4:为卖家提供商品listing操作界面。sprint-5:为采购商提供产品详情界面、出价表、出价表。在接下来的两个冲刺中,我们将首先实现资金托管合约,对拍卖后中标买家的资金进行管理;然后实现相应的用户界面。sprint-6:实施资金托管合约。sprint-7:基于资金托管合约,为托管各方提供操作接口。最后,为了方便商品的查询和检索,我们将使用MongoDB实现商品数据的链下存储。sprint-8:实现链下数据同步和数据查询。课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6