基于以太坊的DAPP实现

基于以太坊的DAPP实现

系统采用vm下ubuntu16.04

一、 以太坊介绍

       以太坊是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(“以太虚拟机” Ethereum Virtual Machine)来处理点对点合约。

       与比特币的区别:以太坊是一个公有链平台,而比特币是一个电子货币系统。以太坊提供了存储和智能合约功能,有合约账户和外部账户。

二、 开发工具介绍

(1)以太坊客户端: Geth(go语言实现)、 testrpc(Node.js语言实现)
Geth和testrpc都可以用来搭建一个测试网络,但是Geth是更加真实的网络,而testrpc只是在内存中模拟的

(2)开发框架Truffle:Truffle是一个世界级的Ethereum开发环境,测试框架以及资产管理通道,旨在使Ethereum开发更加容易。其本质是Dapp开发框架,它可以帮我们处理大量无关紧要的小事情,让我们可以迅速的开始写代码-编译-部署-测试-打包DApp这个流程。

(3) web3.js: Ethereum JavaScript API,web3.js 是一个库的集合,它允许您使用HTTP或IPC连接与本地或远程以太节点进行交互。(用来调用合约)

(4)React: React 是一个用于构建用户界面的 JAVASCRIPT 库。React主要用于构建UI。React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

(5)Solidity语言: Solidity 是一个面向合约的高级语言,其语法类似于JavaScript 。是运行在以太坊虚拟机中的代码。Solidity 是静态类型的编程语言,编译期间会检查其数据类型。支持继承、类和复杂的用户定义类型。

(6)IDE:REMIX—Solidity web IDE,可以用来开发和测试

(7)以太坊测试网络:Kovan(PoA共识算法,Proof of Authority,权威证明)

三、私有链搭建

1、安装Geth、安装nodejs、npm、truffle

(1)安装Geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
geth --help 查看是否安装成功
(2)安装nodejs、npm、truffle
cd  /opt

//下载到opt目录下
wget https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-x64.tar.xz
tar -xvf node-v6.10.2-linux-x64.tar.xz -C /usr/local/

mv –f /usr/local/node-v6.10.2-linux-x64 /usr/local/node 
sudo ln -s /usr/local/node/bin/node /usr/bin/node
sudo ln -s /usr/local/node/lib/node /usr/lib/node
sudo ln -s /usr/local/node/bin/npm /usr/bin/npm

sudo npm install -g truffle 
sudo npm install -g ethereumjs-testrpc

sudo ln -s /usr/local/node/bin/testrpc /usr/bin/testrpc
sudo ln -s /usr/local/node/bin/truffle /usr/bin/truffle

//检查是否安装成功
truffle –version
testrpc 

2、搭建以太坊私有链并启动节点互连

(1)创建存储目录
cd /opt
mkdir private-geth
cd /opt/private-geth
(2)建立创世纪区块文件
//建立创世纪区块文件,是一个json格式的文件:
sudo gedit genesis.json
{
    "config": {
        "chainId": 7,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }
}
(3)初始化创世纪节点,并设置data目录

注意:后面要用几个节点就启动几个,修改00为01、02….

sudo geth --datadir ./data/00 init genesis.json
(4)启动第一个节点(指定端口)
sudo geth --datadir ./data/00 --networkid 7 --port 30303 --rpc --rpcaddr "localhost" --rpcport 8200 	 -- "db,eth,net,web3,personal,admin,miner" console
(5)通过继续输入下面的命令获取节点实例的enode url:
admin.nodeInfo.enode
(6)启动第二个节点(指令除了修改端口号外,其他于启动第一个节点相同)
sudo geth --datadir ./data/00 --networkid 7 --port 30304 --rpc --rpcaddr "localhost" --rpcport 8201 	 -- "db,eth,net,web3,personal,admin,miner" console
(7)连接到第一个节点
admin.addPeer(enode url)
(8)每个节点检查
admin.peers
net.peerCount

3、基于Truffle框架的开发流程及请求调用流程

开发流程:
(1)cd 到工作目录,创建dir
(2)cd 到dir中创建项目
 truffle unbox react
 create-react-app my-app(项目名称,这个可以不用创建dir,它会自己创建)  
(3)下载ipfs-api(如果要用到)
	npm install –save ipfs-api
(4)写入合约
(5)cd 到项目dir,编译合约
//进入truffle控制台
truffle develop
//编译项目下合约 
compile
(6)利用web-IDE将合约部署到Kovan测试链上,这里要复制好合约地址,app.js里面会用到
(7)cd 到项目dir,启动ipfs daemon
(8)配置ipfs跨域
(9)修改App.js,引入要的内容
(10)cd 到项目dir,利用npm start启动项目
请求调用流程:
User——>UI APP->Web3.js->Dapps->P2P Network

4、代码实现

我主要实现了基于区块链的ip\域名注册,存储,变更。现在转做SDN,原先代码在旧电脑的虚拟机里面,所以不太确定有没有把虚拟机删了,有的话再贴上。

猜你喜欢

转载自blog.csdn.net/daihanglai7622/article/details/84762755