以太坊+IPFS+WEB 电商平台开发讲解
以太坊+IPFS+WEB 电商平台开发讲解
作者: AlexTan
CSDN: http://blog.csdn.net/alextan_
Github: https://github.com/AlexTan-b-z
e-mail: alextanbz@gmail.com
一、介绍:
本教程主要讲解接口实现以及相关概念,具体实现请期待后续教程
以太坊:以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
智能合约:以太坊上的程序称之为智能合约, 它是代码和数据(状态)的集合。智能合约的默认的编程语言是Solidity,文件扩展名以.sol结尾。一个合约对象就相当于一个Class(类)。Solidity是和JavaScript相似的语言,用它来开发合约并编译成以太坊虚拟机字节代码。
智能合约可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。
关于以太坊的更多介绍,推荐博客:以太坊是什么
IPFS:星际文件系统IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。
二、使用:
项目架构:
说明:
以太坊: 本电商平台主要用以太坊来实现用户、支付功能,以及一些小商品数据的存储。IPFS:本电商平台主要用IPFS来存储一些大文件。(目前IPFS是免费提供云存储的,ps:还可以用IPNS来免费搭建博客)
后台以及数据库:用来存储一些商品数据,减少以太坊智能合约gas费的消耗(可选,注:如果用上这一部分,那么完全去中心化的平台将变成一个半中心化的平台,会失去一些区块链本身的一些特性,比如说安全性将会降低等)
较传统WEB项目而言,就以电商平台来说,如果说做完全去中心化的平台,那么则可以完全省去后台以及数据库的开发。账户就用以太坊的账户,商品的简单属性可以通过合约存放在以太坊区块链中(这样会消耗更多的gas费),商品的具体描述、图片等大文件可以存放在ipfs中,支付等过程也可以完全通过合约来实现,不过具体运行效率还有待测试。
三、JS接口:
ps:笔者用的truffle开发,还请读者自行百度安装开发环境。
以太坊:
首先引入相关包:
import { default as Web3 } from 'web3'; import { default as contract } from 'truffle-contract'; import my_contract from contract_path; //引入你编译好的合约文件,truffle的是在'../../build/contract'目录下
具体web3以及truffle-contract可以通过npm安装。
连接到以太坊节点(加载web3):
initWeb3: function() { // 检查用户是否装有类似matemask的插件,如果装了则可以直接通过插件链接至以太坊节点 if (typeof web3 !== 'undefined') { App.web3Provider = web3.currentProvider; } else { // 如果没有,则连接至本地测试网络,实际运行环境中则是提示用户安装钱包插件 // App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545'); alert('尊敬的用户,您没有安装钱包插件,请安装后再进行操作!') } web3 = new Web3(App.web3Provider); },
加载合约:
var myContract = contract(my_contract); //获取合约对象 myContract.setProvider(web3.currentProvider); let myAddress = ''; //你部署的合约地址 var contractInstance = MyContract.at(myAddress); //合约实例化 //如果是在本地测试,则可以用以下命令: var contractInstance = MyContract.deployed(); //本地环境的合约实例化
合约实例化后,然后就可以调用合约里的方法了。
关于以太坊如何实现支付问题:
调用合约中的有payable属性的函数,可以发送以太币给合约,然后通过合约里的函数可以把以太币转给其他用户。当然,也可以自己实现一个代币,那样就不需要用函数有payable属性了,不过这些调用函数转账的过程都是需要额外交少量的gas费的。
IPFS:
引入相关包:
const ipfsAPI = require('ipfs-api'); //ipfs-api可以通过npm下载
连接ipfs节点:
const ipfs = ipfsAPI({ host: 'localhost', port: '5001', protocol: 'http' });
上传文件到ipfs:
ipfs.add(buffer) .then((response) => { //response为ipfs返回的hash,即文件所存储的位置 console.log(response) resolve(response[0].hash); }).catch((err) => { console.error(err) reject(err); })
访问文件:
直接访问链接:http://localhost:8080/ipfs/ + hash地址 就ok了。
关于安装启动:
下载地址:https://ipfs.io/docs/install/
下载解压后,运行install.sh 脚本就可以安装啦。
待安装完成后 运行:
ipfs init
创建ipfs节点然后运行:
ipfs daemon
启动服务器启动后浏览器输入下面的网址:
打开http://localhost:5001/webui会看到一个漂亮的UI界面,那么证明你已经启动成功了。
以太坊+IPFS+WEB 电商平台开发讲解相关推荐
- 【session】Java电商平台开发技能图谱,探秘双十一百万PV
您将学习 Java电商平台开发技能图谱,探秘双十一百万PV 分享内容 企业级Java开发技能图谱 从宏观到微观,Java到底怎么学 为了支撑双十一,我们对Java程序做了什么 你将认识 热爱分享的常乐 ...
- 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该如何来预估其并发量?如何根据并发量来合理配置JVM参数呢?
1. 需求分析 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该如何来预估其并发量?如何根据并发量来合理配置JVM参数呢? 假设,现在有一个场景,一个电商平台,比如京东,需要承担每天上亿的 ...
- 直播电商平台开发,点击让窗口抖动动画效果
直播电商平台开发,点击让窗口抖动动画效果 css代码 .shake {animation: shake 800ms ease-in-out;} @keyframes shake {10%, 90% { ...
- 直播电商平台开发,video组件实现视频弹幕功能
直播电商平台开发,video组件实现视频弹幕功能 发送弹幕 WXML文件代码如下: <!--pages/video/video.wxml--> <video class=" ...
- 直播电商平台开发,点击查看更多显示所有内容
直播电商平台开发,点击查看更多显示所有内容 实现代码: mainactivity.xml: <?xml version="1.0" encoding="utf-8& ...
- 直播电商平台开发,RecyclerView实现item图片放大缩小
直播电商平台开发,RecyclerView实现item图片放大缩小 ((ShopDetailsViewHolder) holder).img_list.setOnClickListener(new V ...
- 某电商平台开发记要——客服系统
假如网站需要提供客服功能,如果只是简单的聊天咨询可以考虑营销QQ.百度商桥等(目前大部分网站采用此方式,包括一些知名行业电商):如果需要更精细化的管理,比如客服人员安排.各项数据统计汇总,那么需要对接 ...
- 从0到1构建一个电商平台 – 开发篇(转)
2019独角兽企业重金招聘Python工程师标准>>> 文章来自 在外企和互联网碰撞的猴子 的微信公共账号.是我们跨境电商项目的架构师写的.我们项目的每个点读提到了,方便记录查找,我 ...
- 大健康产业B2B2C多用户电商平台开发,开启数字化消费新蓝海
近年来,得益于医疗消费需求的释放与相关行业政策对医疗体系的引导,我国大健康市场得到了迅猛的发展,已跃居全球第二大市场.数据显示,我国大健康产业市场规模由2017年6.5万亿元增至2020年10.1万亿 ...
最新文章
- vb excel 整行删除_6个Excel表格制作技巧,熟练掌握工作效率加倍,再也不用加班...
- 提高页面载入速度简单易行的四个办法。
- Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
- MySQL主键学习总结
- 四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...
- parser.add_argument验证格式
- LDAP命令介绍---dstune
- css3 3D动画 200303
- 查看oracle 用户执行的sql语句历史记录
- IA-32 System-Level Registers and Data Structures
- 三维激光LiDAR点云数据处理,我帮您!
- iic协议 c语言,IIC协议-C语言
- hermite插值c语言程序,张艳-埃尔米特Hermite 插值逼近的C语言程序.doc
- word中的特殊文本符号
- MySQL系统认识与使用-----最全MySQL应用
- 【通信原理】第四章 -- 信道
- matlab单级齿轮减速器设计
- AutoIt上路03-添加工具栏
- 苹果手机sim卡无效怎么办_苹果手机存储空间不足怎么办
- 计算机系学生的梦想,编写我们的梦想——北大计算机系学生生活掠影-北京大学网络与信息.ppt...
热门文章
- FPGA集成开发环境
- 数学分析-换底公式证明
- oracle remap schema,impdp的remap_schema选项的另一个schema是否要重建
- C++ XML操作类
- win10电脑部分软件不能连接网络,只有QQ和微信可以连接网络,浏览器不能上网
- 网络监控cacti1.2.12邮件报警(三)
- 【不定期更新】游戏开发中的一些良好习惯与技术技巧
- 惠普局域网共享打印机设置_Windows7局域网共享打印机教程,HP M1136 MFP打印机共享方法...
- 作为APIcaller识别发票信息
- 第一个 Spark Steaming 程序