主页 > imtoken钱包下载app > Ethereum+IPFS+WEB电商平台开发详解
Ethereum+IPFS+WEB电商平台开发详解
CSDN:
Github:
邮箱:alextanbz@gmail.com
一、介绍:
本教程主要讲解接口实现及相关概念。 具体实现请期待后续教程。
以太坊:以太坊是一个基于区块链技术的去中心化应用平台。 它允许任何人在平台中构建和使用运行在区块链技术上的去中心化应用程序。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写一个区块链应用是这样的:复制一份比特币代码,然后更改加密算法、共识机制、网络协议等底层代码(SGD)。 以太坊平台封装了区块链底层技术,允许区块链应用开发者直接基于以太坊平台进行开发。 开发者只需要专注于应用本身的开发,大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
智能合约:以太坊上的程序称为智能合约,是代码和数据(状态)的集合。 智能合约默认的编程语言是Solidity,文件扩展名以.sol结尾。 一个合约对象相当于一个Class(类)。 Solidity 是一种类似于 JavaScript 的语言,用于开发合约并将其编译成以太坊虚拟机字节码。
智能合约可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。
更多关于以太坊的介绍,推荐博客:什么是以太坊
IPFS: InterPlanetary File System IPFS(InterPlanetary File System)是一个全球性的、点对点的分布式版本文件系统,目标是补充(甚至取代)目前统治互联网的超文本传输协议(HTTP),并整合所有链接在一起的计算设备的文件系统。 其原理是使用基于内容的地址,而不是基于域名的地址,即用户要查找的不是地址,而是存放在某个地方的内容。 不需要验证发件人的身份以太坊编程语言,只需验证内容的哈希值即可。 通过这个可以让网页更快、更安全、更健壮、更持久。
2. 使用:
项目架构:
阐明:
以太坊:该电商平台主要使用以太坊实现用户和支付功能,以及一些小商品数据的存储。 IPFS:这个电商平台主要是用IPFS来存储一些大文件。 (目前IPFS免费提供云存储,ps:IPNS也可以免费建博客)
后台和数据库:用于存储一些商品数据,减少以太坊智能合约gas费的消耗(可选,注意:如果使用这部分,完全去中心化的平台会变成半中心化的平台,会失去一些特性区块链本身,例如以太坊编程语言,安全性会降低等)
较传统WEB项目而言,就以电商平台来说,如果说做完全去中心化的平台,那么则可以完全省去后台以及数据库的开发。账户就用以太坊的账户,商品的简单属性可以通过合约存放在以太坊区块链中(这样会消耗更多的gas费),商品的具体描述、图片等大文件可以存放在ipfs中,支付等过程也可以完全通过合约来实现,不过具体运行效率还有待测试。
3.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属性的函数,可以发送以太币给合约,然后通过合约中的函数将以太币转给其他用户。 当然你也可以自己实现一个token,这样函数就不需要payable属性,但是调用函数transfer的过程需要额外支付少量的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); })
访问文件:
直接访问链接::8080/ipfs/ + hash地址即可。
关于安装开始:
下载链接:
下载解压后,运行install.sh脚本进行安装。
安装完成后,运行:ipfs init 创建一个ipfs节点
然后运行:ipfs daemon start server
启动浏览器后输入以下网址:
打开:5001/webui,你会看到漂亮的UI界面,证明你启动成功了。