第一节 简介
欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售商品,买家可以自由地购物:
-
去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用。和淘宝这样中心化的电商平台相比,一个去中心化的P2P电商应用显然有其独特的价值——至少你不用担心被平台封账户了。
-
IPFS: 在以太坊上存储用于商品展示的图片和描述超文本十分昂贵,由于以太坊虚拟机的限制, 有时甚至是不可行的。为了解决这个问题,我们将会把商品图片和商品描述信息存储在同样去中心化的星际文件系统(IPFS)中,而仅仅在链上保存这些数据的ID。
-
商品拍卖: 对于卖家而言,拍卖显然是一种非常好的提升商品利润空间的销售手段。因此我们在课程项目中将实现去中心化环境下的维科瑞(Vickery)拍卖 —— 这非常类似于eBay的自动竞价系统,而不是简单地对商品进行固定标价。
-
资金托管: 中心化的平台有一个优点在于它天然提供了买卖双方之间的信任中介。在去中心化的环境中,我们将使用一个多方托管合约来应对买卖双方可能的风险,托管合约采用投票机制来决定买家货款的最终流向。
-
链下数据存储: 不要被去中心化限制我们的思维,传统的技术依然有其强大之处。我们将使用MongoDB在链下做一个同步的数据备份,以便实现单纯用区块链很难实现的功能:灵活的商品查询。
第二节 去中心化,why?
在开始构建我们的应用之前,非常值得花一分钟时间,来理解为什么要在像以太坊这样的去中心化平台上搭建在线卖场。
eBay或淘宝这样的C2C电商平台已经获得了巨大成功,因为它使得买卖双方都相当便利:
在互联网成为主流之前,人们只能在小范围内、或者在邻里之间买卖商品。当越来越多的人使用互联网, 出现了像eBay这样的平台,无论来自世界的任何一个地方,你都可以在网上买卖商品。无论是商家还 是消费者,这样的平台都有其价值。
尽管eBay这样的平台方便了大家,也改善了贸易和经济,但它也存在一些缺点:
-
被平台束缚。参与的商家受制于拥有平台的企业。在任何时候,平台拥有者可以自行决定在是否对某个商家进行封号处理,而如果商家严重依赖于平台,那么账号被封就是一个巨大的打击。
-
商家费用高。商家上架商品要交费,售出商品也要交佣金。收费本身并没有错,毕竟eBay这样的平台提供了服务。但是,上架费有时太高了,这导致商家最后盈利很少,或是将成本转嫁到消费者身上。
-
数据失控。商家或消费者都无法拥有本应属于自己的数据。评论、购买历史等等所有数据都为平台拥有者所有。比如,如果一个商家想要换一个提供商,或者想要导出商品评论或是其他数据都非常不容易,甚至不可能。
在以太坊上构建的去中心化电商平台就解决了这些问题:商家的账户不会被封;数据也是公开的,所以很容易导出数据;相对于中心化的平台,交易佣金也会低得多。
第三节 初步的功能特性
现在你应该已经理解了为什么要构建去中心化的电商应用,也了解了我们要构建的应用是什么,现在让我们来大致看一下,在这个项目中将要实现的主要功能特性:
-
商品上架:应用应该支持卖家上架商品进行销售。我们将实现让任何人自由上架商品的功能。
-
商品浏览与搜索:应用应该支持买家方便地浏览商品列表。我们会实现浏览商品的功能,以及基于商品类别、拍卖时间等条件进行查询的功能。
-
商品拍卖:跟eBay一样,我们会实现维科瑞拍卖方式的商品竞价销售。由于以太坊上的一切交易都是公开的,因此我们的实现将会与中心化环境下有所不同。
-
资金托管:一旦出价结束,商品拍卖有了赢家以后,我们会创建由胜出的买方、卖方和任意第三方参与的托管合约,由托管合约来管理交易资金。
-
托管资金保护:为了保护托管资金,我们将采用多重签名(2/3)来实现防欺诈保护,即三个参与者有两个同意时,才会将托管资金释放给卖方,或是将托管资金返还给买方。
为了便于查询,我们会将商品数据同时存在链上和链下(数据库);同时,为了避免图片等数据占用昂贵的链上存储,我们将把图片和商品描述信息上传到同样去中心化的IPFS网络。
第四节 基础知识要求
为了顺利地完成本课程的学习,你应该对以下语言/技术有一些了解:
- Solidity/Truffle:课程将会深入使用solidity来编写合约。如果你还没有学过,建议你先学习一下以太坊开发DApp入门教程,这样至少写过一两个简单的合约。同时,对truffle开发框架的基本了解也会十分有助于完成本课程。
- HTML/CSS/JavaScript:相比入门课程,本课程将会有更多的HTML和CSS代码。你应该对使用HTML/CSS构建前端有基本的了解。同时,我们将会进一步使用JavaScript。它会在服务端将数据保存到数据库,查询数据库并将结果返回给前端。web3.js用于前端与区块链的交互。为了适用各种背景的学习者,我们已经保持JavaScript代码尽可能地简单。
- Database:我们会用MongoDB在链下保存产品信息。无须特别了解MongoDB,但是基本的数据库知识有助于你顺利完成本课程的。
第五节 系统架构
在开始着手具体的实现之前,先来看一下在本课程我们将要构建的去中心化电商DApp的架构。
-
Web前端:web前端使用HTML/CSS/JavaScript开发,其中大量使用了web3js来访问区块链。用户将会通过这个前端应用来访问以太坊、IPFS和NodeJS服务器。
-
以太坊区块链:这是去中心化应用的核心,所有的代码(电商合约、资金托管合约)和交易都存储在链上,这包括所有的商品信息、买家的出价信息、商品竞价结果、资金流向投票结果等。
-
MongoDB:尽管核心数据存储在区块链上,但是为了方便买家对商品的检索和查询,例如只显示某一类的商品,或者显示即将过期的商品等等,我们会用MongoDB数据库来同步地存储和检索商品信息。
-
NodeJS服务器:这是后端服务器,我们会利用它给前端提供REST风格的API来查询商品, 同时,也利用它来响应对前端静态页面的请求。
-
IPFS: 当卖家上架一个商品时,前端会商品图片文件和介绍文本上传到IPFS,并将所上传文件的哈希值存到链上。
第六节 理解架构的作用
为了帮助理解上一节谈到的那些组件的作用,让我们来看看一下卖家上架一个商品的流程:
-
(1)前端使用一个HTML表单来采集用户输入的商品细节,例如起拍价、商品图片、描述信息等。
-
(2)(3) 前端将商品图片和介绍文本上传到IPFS,并返回所上传内容对应的链接(哈希)。
-
(4)(5) 然后,web前端会调用电商合约将商品信息和IPFS链接存储到链上。当合约成功地将商品存入区块链后,就会触发一个事件,该事件中包含了商品所有的信息。
-
(6)(7)(8) NodeJS服务器监听区块链事件,当事件被电商合约触发时,服务器读取事件内容并将商品信息插入到MongoDB数据库中。
当开始具体实现商品上架这一特性时,我们将重温这一流程。
第七节 敏捷开发
我们将采用敏捷开发的思想来实现去中心化电商DApp:
我们将全部的产品特性分别列入8个迭代周期,通过每一次的冲刺(sprint),我们都将得到一个可以发布的版本:
前两个冲刺主要集中在使用solidity和truffle框架实现电商合约方面,这包括合约的设计、开发 、编译、部署与测试:
-
sprint-1:实现电商合约的商品上架和展示方法。
-
sprint-2:实现电商合约的商品竞价和出价揭示方法。
在电商合约基本实现之后,接下来的三个冲刺主要集中在前端用户界面的构建方面,这包括使用web3 与合约的交互,以及通过ipfs的开发接口上传图片等数据交互,当然,还有必不可少的DOM操作: - sprint-3:为买家提供商品浏览界面。
- sprint-4:为卖家提供商品上架操作界面。
-
sprint-5:为买家提供商品详情界面、竞价表单以及出价揭示表单。在接下来的两个冲刺里,我们将首先实现资金托管合约,用来管理竞价结束后胜出买家的资金;然后实现相应的用户操作界面。
- sprint-6:实现资金托管合约。
-
sprint-7:基于资金托管合约,为参与托管各方提供操作界面。最后,为了便于商品的查询检索,我们将使用MongoDB来实现商品数据的链下存储。
-
sprint-8:实现链下数据的同步与数据查询。
教程参考:汇智网DApp电商实战
相关推荐
【标题】"Node.js+MongoDB博客系统"是一款基于Node.js和MongoDB开发的轻量级博客平台。这个项目提供了一个快速入门的平台,适用于初学者熟悉Web开发、Node.js后端技术和NoSQL数据库MongoDB的实践应用。 【描述】...
### 区块链技术实战:以太坊DApp开发环境搭建-Ubuntu #### 一、概述 随着区块链技术的迅速发展,越来越多的开发者开始关注并投身于这一领域。以太坊作为区块链技术中的佼佼者,其智能合约功能使得开发者能够创建...
在IT行业中,Node.js和MongoDB是两个非常重要的技术组件,尤其在构建高效、可扩展的Web应用程序时。本合集主要关注这两项技术的结合使用,为开发者提供了一个宝贵的资源集合。 首先,我们来详细了解Node.js。Node....
毕业设计 基于区块链和nodejs的云笔记系统,使用了nodejs和以太坊区块链技术源码+详细文档+全部资料(高分项目).zip毕业设计 基于区块链和nodejs的云笔记系统,使用了nodejs和以太坊区块链技术源码+详细文档+全部...
**JYBlog是一个基于Node.js和MongoDB构建的博客系统,旨在提供一个高效、可定制且易于维护的个人或企业博客平台。这个系统的实现主要受到Alsotang博客教程的启发,但同时也进行了部分功能的扩展和优化,如引入富文本...
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、...基于React+Nodejs+mongodb搭建协同过滤的校园交易平台(含前端+后端源码).zip
总的来说,Node.js 和 npm 在区块链开发中扮演着不可或缺的角色,它们提供了一个强大的平台来构建、管理和部署基于以太坊的区块链应用。了解并熟练掌握这些工具的安装和使用,对于任何区块链开发者来说都是非常基础...
源代码可以自由的下载该多好,非要人去做各种无聊的任务
### 区块链技术实战:以太坊DApp开发-Geth私链环境搭建-Ubuntu #### 一、概述 本文旨在详细介绍如何在Ubuntu平台上搭建一个完整的以太坊去中心化应用(DApp)开发环境,包括Geth私链环境的配置与部署。通过本指南...
毕业设计,基于Vue+NodeJS+MongoDb开发的校园二手信息发布平台,内含NodeJS完整源代码,数据库脚本 基于Vue+Nodejs+MongoDB校园二手信息发布平台设计毕业源码案例设计 开发软件: WebStorm 开发技术: Vue + Vant ...
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...
基于nodejs+mongodb的简单报名登记+查询系统源码(课程设计).zip 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或...
本项目采用采用MongoDB数据库,它是一个基于文件的分布式非关系型数据库。它采用了类似于JSON的Binary-JSON数据存储格式,便于数据的传输和处理。 系统分为管理员端和用户端。在登录界面可以选择学生登录或者教师...
基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统代码+文档说明+数据库,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单...
毕业设计,基于Vue+NodeJS+MongoDb开发的小区社区综合治理管理系统,内含NodeJS完整源代码,数据库脚本 基于Vue+Nodejs+MongoDB小区社区综合治理管理系统毕业源码案例设计 开发软件: WebStorm 开发环境:Vue + ...
基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统+源代码+文档说明+数据库 .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够...
基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,...
在本文中,我们将深入探讨如何使用Node.js、Express、MongoDB和Multer库来构建一个功能完善的文件上传、存储和分页管理系统。首先,我们来看看每个技术的核心概念: 1. **Node.js**:Node.js是一个开放源代码、跨...
MongoDB 是一个基于分布式文件存储系统的 NoSQL 数据库,提供了高性能、可扩展的数据存储解决方案。本文将介绍如何使用 NodeJS 连接 MongoDB,实现数据的交互操作。 一、创建项目和安装依赖项 在创建 NodeJS 项目...
《NodeJS+MongoDB+AngularJS WEB开发原版》是一本深入探讨现代Web开发技术的书籍,特别关注了使用Node.js、MongoDB和AngularJS构建全栈应用的实践方法。Node.js是基于Chrome V8引擎的JavaScript运行环境,它允许...