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

本文主要是介绍以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一节 简介

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

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

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

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

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

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

第二节 去中心化,why?

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

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

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

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

  1. 被平台束缚。参与的商家受制于拥有平台的企业。在任何时候,平台拥有者可以自行决定在是否对某个商家进行封号处理,而如果商家严重依赖于平台,那么账号被封就是一个巨大的打击。

  2. 商家费用高。商家上架商品要交费,售出商品也要交佣金。收费本身并没有错,毕竟eBay这样的平台提供了服务。但是,上架费有时太高了,这导致商家最后盈利很少,或是将成本转嫁到消费者身上。

  3. 数据失控。商家或消费者都无法拥有本应属于自己的数据。评论、购买历史等等所有数据都为平台拥有者所有。比如,如果一个商家想要换一个提供商,或者想要导出商品评论或是其他数据都非常不容易,甚至不可能。

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

第三节 初步的功能特性

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

  1. 商品上架:应用应该支持卖家上架商品进行销售。我们将实现让任何人自由上架商品的功能。

  2. 商品浏览与搜索:应用应该支持买家方便地浏览商品列表。我们会实现浏览商品的功能,以及基于商品类别、拍卖时间等条件进行查询的功能。

  3. 商品拍卖:跟eBay一样,我们会实现维科瑞拍卖方式的商品竞价销售。由于以太坊上的一切交易都是公开的,因此我们的实现将会与中心化环境下有所不同。

  4. 资金托管:一旦出价结束,商品拍卖有了赢家以后,我们会创建由胜出的买方、卖方和任意第三方参与的托管合约,由托管合约来管理交易资金。

  5. 托管资金保护:为了保护托管资金,我们将采用多重签名(2/3)来实现防欺诈保护,即三个参与者有两个同意时,才会将托管资金释放给卖方,或是将托管资金返还给买方。

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

第四节 基础知识要求

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

  1. Solidity/Truffle:课程将会深入使用solidity来编写合约。如果你还没有学过,建议你先学习一下以太坊开发DApp入门教程,这样至少写过一两个简单的合约。同时,对truffle开发框架的基本了解也会十分有助于完成本课程。
  1. HTML/CSS/JavaScript:相比入门课程,本课程将会有更多的HTML和CSS代码。你应该对使用HTML/CSS构建前端有基本的了解。同时,我们将会进一步使用JavaScript。它会在服务端将数据保存到数据库,查询数据库并将结果返回给前端。web3.js用于前端与区块链的交互。为了适用各种背景的学习者,我们已经保持JavaScript代码尽可能地简单。
  1. Database:我们会用MongoDB在链下保存产品信息。无须特别了解MongoDB,但是基本的数据库知识有助于你顺利完成本课程的。
第五节 系统架构

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

  1. Web前端:web前端使用HTML/CSS/JavaScript开发,其中大量使用了web3js来访问区块链。用户将会通过这个前端应用来访问以太坊IPFSNodeJS服务器。

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

  3. MongoDB:尽管核心数据存储在区块链上,但是为了方便买家对商品的检索和查询,例如只显示某一类的商品,或者显示即将过期的商品等等,我们会用MongoDB数据库来同步地存储和检索商品信息。

  4. NodeJS服务器:这是后端服务器,我们会利用它给前端提供REST风格的API来查询商品, 同时,也利用它来响应对前端静态页面的请求。

  5. IPFS: 当卖家上架一个商品时,前端会商品图片文件和介绍文本上传到IPFS,并将所上传文件的哈希值存到链上。

第六节 理解架构的作用

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

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

第七节 敏捷开发

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

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

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

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

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

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

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

  • sprint-5:为买家提供商品详情界面、竞价表单以及出价揭示表单。在接下来的两个冲刺里,我们将首先实现资金托管合约,用来管理竞价结束后胜出买家的资金;然后实现相应的用户操作界面。

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

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

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

参考资料

风火源码网 国内顶尖开放源码网站!找源码资源就上风火源码网站!平台涵盖了网站源码,盲盒源码,源码分享,商业源码,游戏源码,精品源码,游戏源码,免费源码,莎莎源码,PHP源码莎莎源码论坛,破解版源码,商业版源码等!同时提供Dedecms织梦模版,Wordpress模板帝国模板,视频教程等优质的建站资源!icon-default.png?t=N7T8https://www.wxbjb.cn/

这篇关于以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985352

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window