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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 第一节 简介欢迎和我们一起来用以太坊实战开发构建一个去中心化电商DApp!我们将会构建一个类似淘宝的在线电子商务应用,我将使用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台,卖家可以自由地出售商品,买家可以自由地购物:去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用。

第一节 简介

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

ebay dapp

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

IPFS: 在以太坊上存储用于商品展示的图片和描述超文本十分昂贵,由于以太坊虚拟机的限制, 有时甚至是不可行的。为了解决这个问题,我们将会把商品图片和商品描述信息存储在 同样去中心化的星际文件系统(IPFS)中,而仅仅在链上保存这些数据的ID

商品拍卖: 对于卖家而言,拍卖显然是一种非常好的提升商品利润空间的销售手段。因此我们 在课程项目中将实现去中心化环境下的维科瑞(Vickery)拍卖 —— 这非常类似于eBay 的自动竞价系统,而不是简单地对商品进行固定标价。

资金托管: 中心化的平台有一个优点在于它天然提供了买卖双方之间的信任中介。在去中心化的 环境中,我们将使用一个多方托管合约来应对买卖双方可能的风险,托管合约采用投票机制 来决定买家货款的最终流向。

链下数据存储: 不要被去中心化限制我们的思维,传统的技术依然有其强大之处。我们将使用MongoDB在 链下做一个同步的数据备份,以便实现单纯用区块链很难实现的功能:灵活的商品查询。

课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6


第二节 去中心化,why?

在开始构建我们的应用之前,非常值得花一分钟时间,来理解为什么要在像以太坊这样的 去中心化平台上搭建在线卖场。

eBay或淘宝这样的C2C电商平台已经获得了巨大成功,因为它使得买卖双方都相当便利:

c2c platform

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

尽管eBay这样的平台方便了大家,也改善了贸易和经济,但它也存在一些缺点:

  1. 被平台束缚。参与的商家受制于拥有平台的企业。在任何时候,平台拥有者可以自行决定在是否对某个 商家进行封号处理,而如果商家严重依赖于平台,那么账号被封就是一个巨大的打击。
  2. 商家费用高。商家上架商品要交费,售出商品也要交佣金。收费本身并没有错,毕竟eBay这样的平台 提供了服务。但是,上架费有时太高了,这导致商家最后盈利很少,或是将成本转嫁到消费者身上。
  3. 数据失控。商家或消费者都无法拥有本应属于自己的数据。评论、购买历史等等所有数据都为平台拥有者所有。 比如,如果一个商家想要换一个提供商,或者想要导出商品评论或是其他数据都非常不容易,甚至不可能。

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


第三节  初步的功能特性

现在你应该已经理解了为什么要构建去中心化的电商应用,也了解了我们要构建的应用是什么, 现在让我们来大致看一下,在这个项目中将要实现的主要功能特性:

ebay user case

  • 商品上架:应用应该支持卖家上架商品进行销售。我们将实现让任何人自由上架商品的功能。
  • 商品浏览与搜索:应用应该支持买家方便地浏览商品列表。我们会实现浏览商品的功能,以及 基于商品类别、拍卖时间等条件进行查询的功能。
  • 商品拍卖:跟eBay一样,我们会实现维科瑞拍卖方式的商品竞价销售。由于以太坊 上的一切交易都是公开的,因此我们的实现将会与中心化环境下有所不同。
  • 资金托管:一旦出价结束,商品拍卖有了赢家以后,我们会创建由胜出的买方、卖方和任意 第三方参与的托管合约,由托管合约来管理交易资金。
  • 托管资金保护:为了保护托管资金,我们将采用多重签名(2/3)来实现防欺诈保护,即三个参与者有两个同意时, 才会将托管资金释放给卖方,或是将托管资金返还给买方。

为了便于查询,我们会将商品数据同时存在链上和链下(数据库);同时,为了避免图片等数据占用 昂贵的链上存储,我们将把图片和商品描述信息上传到同样去中心化的IPFS网络。

课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6


第四节  基础知识要求

为了顺利地完成本课程的学习,你应该对以下语言/技术有一些了解:

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

    solidity

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

    html css js

  • Database:我们会用MongoDB在链下保存产品信息。无须特别了解MongoDB ,但是基本的数据库知识 有助于你顺利完成本课程的。

    mongodb


第五节  系统架构

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

ebay dapp architecture

  • Web前端:web 前端使用HTML / CSS / JavaScript 开发,其中大量使用了web3js来访问区块链。 用户将会通过这个前端应用来访问以太坊、IPFSNodeJS服务器。
  • 以太坊区块链:这是去中心化应用的核心,所有的代码(电商合约、资金托管合约)和交易都存储在链上, 这包括所有的商品信息、买家的出价信息、商品竞价结果、资金流向投票结果等。
  • MongoDB:尽管核心数据存储在区块链上,但是为了方便买家对商品的检索和查询,例如只显示某一类的商品, 或者显示即将过期的商品等等,我们会用MongoDB数据库来同步地存储和检索商品信息。
  • NodeJS服务器:这是后端服务器,我们会利用它给前端提供REST风格的API来查询商品, 同时,也利用它来响应对前端静态页面的请求。
  • IPFS: 当卖家上架一个商品时,前端会商品图片文件和介绍文本上传到IPFS,并将所上传文件的哈希值存到链上。


第六节 理解架构的作用

为了帮助理解上一节谈到的那些组件的作用,让我们来看看一下卖家上架一个商品的流程:

ebay list item

(1)前端使用一个HTML表单来采集用户输入的商品细节,例如起拍价、商品图片、描述信息等。

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

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

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

当开始具体实现商品上架这一特性时,我们将重温这一流程。


第七节  敏捷开发

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

scrum way

我们将全部的产品特性分别列入8个迭代周期,通过每一次的冲刺(sprint),我们都将得到一个 可以发布的版本:

前两个冲刺主要集中在使用soliditytruffle框架实现电商合约方面,这包括合约的设计、开发 、编译、部署与测试:

  • sprint-1:实现电商合约的商品上架和展示方法
  • sprint-2:实现电商合约的商品竞价和出价揭示方法。

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

  • sprint-3:为买家提供商品浏览界面。
  • sprint-4:为卖家提供商品上架操作界面。
  • sprint-5:为买家提供商品详情界面、竞价表单以及出价揭示表单。

在接下来的两个冲刺里,我们将首先实现资金托管合约,用来管理竞价结束后胜出买家的资金; 然后实现相应的用户操作界面:

  • sprint-6:实现资金托管合约。
  • sprint-7:基于资金托管合约,为参与托管各方提供操作界面。

最后,为了便于商品的查询检索,我们将使用MongoDB来实现商品数据的链下存储:

  • sprint-8:实现链下数据的同步与数据查询。

课程地址:http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6

如果想加入以太坊技术开发群可以加微信:cuixuebin2,拉你入群。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
1月前
|
存储 NoSQL JavaScript
Node.js导入MongoDB具体操作指南
通过本文,您已经学会了如何在Node.js中导入MongoDB并执行基本的CRUD操作。Node.js与MongoDB的结合使得构建高效、可扩展的后端服务变得更加容易。通过遵循本文的步骤,您可以快速设置并运行一个强大的数据存储和处理系统。希望这篇指南能为您的开发工作提供实用的帮助。
58 13
|
3月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
2月前
|
存储 NoSQL Cloud Native
MongoDB云原生化:为企业开发注入高效动力
MongoDB云原生化为企业开发注入高效动力,分为三部分:1. 介绍阿里云和MongoDB的服务;2. 阿里云MongoDB解决自建模型痛点的功能,包括隔离性、海量数据处理、弹性能力及运维操作优化;3. 客户案例展示。通过云原生架构,MongoDB实现了灵活的扩展、高效的备份恢复和快速的回档能力,显著提升了企业的业务迭代速度和数据管理效率。典型客户如吉比特、莉莉丝、掌阅等受益于这些功能,实现了更稳定和高效的数据库服务。
|
2月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
71 12
|
3月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
3月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
3月前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
3月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
3月前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
62 4