主页 > imtoken钱包安卓版手机下载 > 以太坊DAPP实战电商平台(转)

以太坊DAPP实战电商平台(转)

来源:

第一节 引言

欢迎使用以太坊与我们一起开发构建去中心化电商DApp! 我们将使用区块链、星际文件系统(IPFS)、Node.js和MongoDB搭建一个类似于淘宝在线电子商务应用的电子商务平台,卖家可以自由销售商品,买家可以自由购物:

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

去中心化:与淘宝或eBay不同,我们将所有业务逻辑和核心数据放在以太坊区块链上,这使其成为一个完全去中心化的应用。 与淘宝这样的中心化电商平台相比,去中心化的P2P电商应用显然有其独特的价值——至少不用担心被平台封杀。

IPFS:在以太坊上存储用于产品展示的图片和描述超文本是非常昂贵的,有时甚至由于以太坊虚拟机的限制而无法实现。 为了解决这个问题,我们将产品图片和产品描述信息存储在同一个去中心化的星际文件系统(IPFS)中,链上只保存这些数据的ID。

商品拍卖:对于卖家来说,拍卖显然是一种非常好的提高商品利润率的销售方式。 因此,我们将在课程项目中实现去中心化环境下的 Vickery 拍卖——这与 eBay 的自动竞价系统非常相似,而不是简单地为产品设定一个固定的价格。

资金托管:中心化平台的优势之一是它天然地提供了买卖双方之间的信任中介。 在去中心化的环境下,我们会使用多方托管合约来应对买卖双方可能存在的风险。 托管合约使用投票机制来决定买方付款的最终流向。

链下数据存储:不要被去中心化所局限,传统技术还是有优势的。 我们将使用MongoDB做一个链下数据同步备份,以实现一个纯区块链难以实现的功能:灵活的商品查询。

第二部分是去中心化的,为什么?

在开始构建我们的应用程序之前,花一分钟时间了解为什么在线市场建立在像以太坊这样的去中心化平台上是非常值得的。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

易趣、淘宝等C2C电子商务平台取得了巨大的成功,是因为它给买卖双方都带来了极大的便利:

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

在互联网成为主流之前,人们只能在小范围内或邻里之间买卖商品。 当越来越多的人使用互联网时,出现了像eBay这样的平台,无论你来自世界的哪个角落,都可以在网上买卖商品。 无论是商家还是消费者,这样的平台都有它的价值。

虽然像 eBay 这样的平台让每个人的生活变得更轻松,并改善了贸易和经济,但它们也有一些缺点:

受平台约束。 参与的商家受拥有该平台的企业的约束。 任何时候,平台主都可以决定是否封停某个商户的账号以太坊贸易平台,而如果商户对平台的依赖度很高,那么封号是一个巨大的打击。

商家收费高。 商家要为产品listing支付费用,还要为销售产品支付佣金。 收费没有错,毕竟eBay这样的平台是提供服务的。 但有时listing费用过高,导致商家最终利润微薄,或者将成本转嫁给消费者。

数据失控。 商家和消费者都不能拥有本应属于他们的数据。 评论、购买记录等。所有数据均归平台所有者所有。 比如商家要换供应商,或者要导出商品评论等数据,就非常困难甚至不可能。

建立在以太坊上的去中心化电商平台解决了这些问题:商户账户不会被封; 数据也是公开的,所以很容易导出数据; 与中心化平台相比,交易佣金也会低很多。

第三节 初步功能特点

现在你应该明白为什么要构建一个去中心化的电子商务应用,以及我们要构建什么。 现在让我们来看看这个项目将实现的主要功能:

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

以太坊贸易赚钱_以太坊贸易平台_site163.com 以太坊贸易跑路

产品列表:该应用程序应支持卖家列出待售产品。 我们将实现任何人都可以自由发布产品的功能。

产品浏览和搜索:该应用程序应允许买家轻松浏览产品列表。 我们将实现浏览商品的功能,以及根据商品类别、拍卖时间等条件进行查询的功能。

商品拍卖:和eBay一样,我们会在Vickory Auction中实现商品的竞价。 由于以太坊上的所有交易都是公开的,我们的实施将不同于中心化环境。

资金托管:一旦竞价结束且商品拍卖有获胜者,我们将创建一个涉及中标买家、卖家和任何第三方的托管合约,托管合约将管理交易资金。

托管资金保护:为了保护托管资金,我们会使用多重签名(2/3)来实现反欺诈保护,即只有当三个参与者中的两个同意时,托管资金才会被释放给卖家,否则托管资金将被释放并退还给买方。

为了方便查询,我们会将产品数据存储在链上和链下(数据库); 同时,为了避免图片等数据占用昂贵的链上存储空间,我们会将图片和产品描述信息上传到同一个去中心化的 IPFS 互联网上。

第四节 基础知识要求

要成功完成本课程,您应该具备以下语言/技术的一些知识:

Solidity/Truffle:课程将深入使用solidity来编写合约。 如果你还没有学过,我建议你先学习以太坊DApp开发入门教程,这样你至少会写一两个简单的合约。 同时,对truffle开发框架有一个基本的了解,对于完成本课程也会有很大的帮助。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

HTML/CSS/JavaScript:与入门课程相比,本课程将包含更多的 HTML 和 CSS 代码。 您应该对使用 HTML/CSS 构建前端有基本的了解。 同时,我们将进一步使用JavaScript。 它将数据保存到服务器端的数据库中,查询数据库并将结果返回给前端。 web3.js用于前端与区块链的交互。 我们为所有背景的学习者保持了尽可能简单的 JavaScript 代码。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

数据库:我们将使用 MongoDB 在链下存储产品信息。 不需要 MongoDB 的特定知识以太坊贸易平台,但基本的数据库知识将帮助您成功完成本课程。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

第五节系统架构

在开始具体实现之前,我们先看一下本课程要搭建的去中心化电商DApp的架构。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

Web前端:Web前端使用HTML/CSS/JavaScript开发,广泛使用web3js接入区块链。 用户将通过这个前端应用程序访问以太坊、IPFS 和 NodeJS 服务器。

以太坊区块链:这是去中心化应用的核心。 所有代码(电商合约、资金托管合约)和交易都存储在链上,包括所有商品信息、买家竞价信息、商品竞价结果、资金流向投票结果等。

MongoDB:虽然核心数据存储在区块链上,但是为了方便买家检索和查询商品,比如只展示某类商品,或者展示即将过期的商品等,我们会使用MongoDB 数据库同步存储和检索项目信息。

NodeJS 服务器:这是后端服务器。 我们将使用它为前端提供一个 REST 风格的 API 来查询产品。 同时,我们也会用它来响应前端静态页面的请求。

IPFS:卖家上架商品时,前端将商品图片文件和介绍文字上传到IPFS,并将上传文件的哈希值保存到链上。

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

第 6 节了解架构的作用

为了帮助理解上一节中提到的那些组件的作用,让我们看一下卖家列出产品的过程:

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

(1)前端使用HTML表单收集用户输入的商品详情,如起拍价、商品图片、描述信息等。

(2)(3) 前端将商品图片和介绍文字上传到IPFS,返回上传内容对应的链接(hash)。

(4)(5) 然后,web前端会调用电商合约将商品信息和IPFS链接存储在链上。 当合约成功将商品存入区块链后,会触发一个事件,其中包含商品的所有信息。

(6)(7)(8) NodeJS 服务器监控区块链事件。 当电子商务合约触发事件时,服务器读取事件内容并将产品信息插入MongoDB数据库。

当我们开始详细实现列出产品的功能时,我们将重新审视这个过程。

第七节 敏捷开发

我们将采用敏捷开发的思想来实现去中心化电商DApp:

以太坊贸易平台_以太坊贸易赚钱_site163.com 以太坊贸易跑路

以太坊贸易赚钱_site163.com 以太坊贸易跑路_以太坊贸易平台

我们将所有产品特性列为 8 个迭代周期,通过每个 sprint,我们将得到一个可发布的版本:

前两个sprint主要侧重于使用solidity和truffle框架实现电子商务合约,包括合约设计、开发、编译、部署和测试:

sprint-1:实现电子商务合约的商品列表展示方法。

sprint-2:实现电子商务合同的商品竞价和出价方式。

电商合约基本实现后,接下来的三个冲刺主要集中在前端用户界面的构建,包括使用web3与合约进行交互,通过ipfs开发接口上传图片等数据交互。 必不可少的 DOM 操作:

sprint-3:为买家提供产品浏览界面。

sprint-4:为卖家提供商品listing操作界面。

sprint-5:为采购商提供产品详情界面、出价表、出价表。 在接下来的两个冲刺中,我们将首先实现资金托管合约,对拍卖后中标买家的资金进行管理; 然后实现相应的用户界面。

sprint-6:实施资金托管合约。

sprint-7:基于资金托管合约,为托管各方提供操作接口。 最后,为了方便商品的查询和检索,我们将使用MongoDB实现商品数据的链下存储。

sprint-8:实现链下数据同步和数据查询。

教程参考: