设为首页 收藏本站
查看: 961|回复: 0

[经验分享] 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构

[复制链接]

尚未签到

发表于 2018-10-24 12:55:19 | 显示全部楼层 |阅读模式
第一节 简介
  欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售商品,买家可以自由地购物:
DSC0000.jpg


  •   去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用。和淘宝这样中心化的电商平台相比,一个去中心化的P2P电商应用显然有其独特的价值——至少你不用担心被平台封账户了。
  •   IPFS: 在以太坊上存储用于商品展示的图片和描述超文本十分昂贵,由于以太坊虚拟机的限制, 有时甚至是不可行的。为了解决这个问题,我们将会把商品图片和商品描述信息存储在同样去中心化的星际文件系统IPFS)中,而仅仅在链上保存这些数据的ID
  •   商品拍卖: 对于卖家而言,拍卖显然是一种非常好的提升商品利润空间的销售手段。因此我们在课程项目中将实现去中心化环境下的维科瑞(Vickery)拍卖 —— 这非常类似于eBay的自动竞价系统,而不是简单地对商品进行固定标价。
  •   资金托管: 中心化的平台有一个优点在于它天然提供了买卖双方之间的信任中介。在去中心化的环境中,我们将使用一个多方托管合约来应对买卖双方可能的风险,托管合约采用投票机制来决定买家货款的最终流向。
  • 链下数据存储: 不要被去中心化限制我们的思维,传统的技术依然有其强大之处。我们将使用MongoDB在链下做一个同步的数据备份,以便实现单纯用区块链很难实现的功能:灵活的商品查询。
第二节 去中心化,why?
  在开始构建我们的应用之前,非常值得花一分钟时间,来理解为什么要在像以太坊这样的去中心化平台上搭建在线卖场。
  eBay淘宝这样的C2C电商平台已经获得了巨大成功,因为它使得买卖双方都相当便利:
DSC0001.jpg

  在互联网成为主流之前,人们只能在小范围内、或者在邻里之间买卖商品。当越来越多的人使用互联网, 出现了像eBay这样的平台,无论来自世界的任何一个地方,你都可以在网上买卖商品。无论是商家还 是消费者,这样的平台都有其价值。
  尽管eBay这样的平台方便了大家,也改善了贸易和经济,但它也存在一些缺点:

  •   被平台束缚。参与的商家受制于拥有平台的企业。在任何时候,平台拥有者可以自行决定在是否对某个商家进行封号处理,而如果商家严重依赖于平台,那么账号被封就是一个巨大的打击。
  •   商家费用高。商家上架商品要交费,售出商品也要交佣金。收费本身并没有错,毕竟eBay这样的平台提供了服务。但是,上架费有时太高了,这导致商家最后盈利很少,或是将成本转嫁到消费者身上。
  • 数据失控。商家或消费者都无法拥有本应属于自己的数据。评论、购买历史等等所有数据都为平台拥有者所有。比如,如果一个商家想要换一个提供商,或者想要导出商品评论或是其他数据都非常不容易,甚至不可能。
  在以太坊上构建的去中心化电商平台就解决了这些问题:商家的账户不会被封;数据也是公开的,所以很容易导出数据;相对于中心化的平台,交易佣金也会低得多。
第三节  初步的功能特性
  现在你应该已经理解了为什么要构建去中心化的电商应用,也了解了我们要构建的应用是什么,现在让我们来大致看一下,在这个项目中将要实现的主要功能特性:
DSC0002.jpg


  •   商品上架:应用应该支持卖家上架商品进行销售。我们将实现让任何人自由上架商品的功能。
  •   商品浏览与搜索:应用应该支持买家方便地浏览商品列表。我们会实现浏览商品的功能,以及基于商品类别、拍卖时间等条件进行查询的功能。
  •   商品拍卖:跟eBay一样,我们会实现维科瑞拍卖方式的商品竞价销售。由于以太坊上的一切交易都是公开的,因此我们的实现将会与中心化环境下有所不同。
  •   资金托管:一旦出价结束,商品拍卖有了赢家以后,我们会创建由胜出的买方、卖方和任意第三方参与的托管合约,由托管合约来管理交易资金。
  • 托管资金保护:为了保护托管资金,我们将采用多重签名(2/3)来实现防欺诈保护,即三个参与者有两个同意时,才会将托管资金释放给卖方,或是将托管资金返还给买方。
  为了便于查询,我们会将商品数据同时存在链上和链下(数据库);同时,为了避免图片等数据占用昂贵的链上存储,我们将把图片和商品描述信息上传到同样去中心化IPFS网络。
第四节  基础知识要求
  为了顺利地完成本课程的学习,你应该对以下语言/技术有一些了解:

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


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


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

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


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


  •   (1)前端使用一个HTML表单来采集用户输入的商品细节,例如起拍价、商品图片、描述信息等。
  •   (2)(3) 前端将商品图片和介绍文本上传到IPFS,并返回所上传内容对应的链接(哈希)。
  •   (4)(5) 然后,web前端会调用电商合约将商品信息IPFS链接存储到链上。当合约成功地将商品存入区块链后,就会触发一个事件,该事件中包含了商品所有的信息。
  • (6)(7)(8) NodeJS服务器监听区块链事件,当事件被电商合约触发时,服务器读取事件内容并将商品信息插入到MongoDB数据库中。
  当开始具体实现商品上架这一特性时,我们将重温这一流程。
第七节  敏捷开发
  我们将采用敏捷开发的思想来实现去中心化电商DApp
DSC0008.jpg

  我们将全部的产品特性分别列入8个迭代周期,通过每一次的冲刺sprint),我们都将得到一个可以发布的版本:
  前两个冲刺主要集中在使用soliditytruffle框架实现电商合约方面,这包括合约的设计、开发 、编译、部署与测试

  •   sprint-1:实现电商合约的商品上架和展示方法。
  •   sprint-2:实现电商合约的商品竞价和出价揭示方法。
      在电商合约基本实现之后,接下来的三个冲刺主要集中在前端用户界面的构建方面,这包括使用web3 与合约的交互,以及通过ipfs的开发接口上传图片等数据交互,当然,还有必不可少的DOM操作:
  • sprint-3:为买家提供商品浏览界面。
  • sprint-4:为卖家提供商品上架操作界面。
  •   sprint-5:为买家提供商品详情界面、竞价表单以及出价揭示表单。在接下来的两个冲刺里,我们将首先实现资金托管合约,用来管理竞价结束后胜出买家的资金;然后实现相应的用户操作界面。
  • sprint-6:实现资金托管合约。
  •   sprint-7:基于资金托管合约,为参与托管各方提供操作界面。最后,为了便于商品的查询检索,我们将使用MongoDB来实现商品数据的链下存储。
  • sprint-8:实现链下数据的同步与数据查询。
  pc课程地址:
  http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625951-1-1.html 上篇帖子: 【mongodb】ubuntu12.04上的mongodb卸载 下篇帖子: mongodb CRUD操作-INSERT
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表