运行 Quorum-examples 中的 7 nodes

2020-02-07  本文已影响0人  eftales

特别提醒

  1. 本文写于 2020/2/7,相比于官方教程增加了环境配置等相关内容,未来可能失效,因此我把文中提到的代码备份到百度云了,需要的自取。

    链接: https://pan.baidu.com/s/1EyLi0Fb-0dNB6I9mV6fAMA 提取码: 7wk7
    将 quorum+quorum-example+tessera代码.rar 解压就可以得到各自的代码。

  1. 运行 7 nodes 有三种方法,用 Vagrant 运行,用 docker 运行,本地编译运行,我只试过 docker 和本地编译。docker 的话就很简单,几乎不需要任何配置,如果只是运行一遍的话比较推荐;本地编译的话坑也不是很多。

  2. 本教程基于 ubuntu 16.04,需要 5G 内存和 i5 7 代及以上的 CPU。若满足不了,则可能会卡死。

  3. 官方教程地址https://github.com/jpmorganchase/quorum-examples

用 docker 运行

安装 docker 和 docker-compose

  1. 安装 docker,来源https://docs.docker.com/install/linux/docker-ce/ubuntu/
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 安装 docker-compose,来源https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
newgrp docker #更新docker用户组
systemctl start docker

运行环境

git clone https://github.com/jpmorganchase/quorum-examples # 可以使用我提供的代码
cd quorum-examples
QUORUM_CONSENSUS=raft docker-compose up -d

执行 docker ps 查看是否有 14 个docker容器在运行。

进行交易

docker-compose 跑起来就有了 7 个节点,但是他们没有发生交易。
执行 docker exec -it quorum-examples_node1_1 geth attach /qdata/dd/geth.ipc 进入节点 1 的控制台。
此时会输出:

Welcome to the Geth JavaScript console!

instance: Geth/node1-istanbul/v1.7.2-stable/linux-amd64/go1.9.7
coinbase: 0xd8dba507e85f116b1f7e231ca8525fc9008a6966
at block: 70 (Thu, 18 Oct 2018 14:49:47 UTC)
 datadir: /qdata/dd
 modules: admin:1.0 debug:1.0 eth:1.0 istanbul:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> 

输入 loadScript('/examples/private-contract.js'),节点 1 就向节点7发送了一笔交易。

后文将说明如何查看有关这笔交易的信息。

本地编译运行

安装 Golang

https://golang.org/dl/

安装 Quorum

git clone https://github.com/jpmorganchase/quorum # 建议使用我提供的代码
cd quorum
make
GETHDIR=`pwd`; export PATH=$GETHDIR/build/bin:$PATH
cd ..

安装 Tessera

该步骤可以自行编译,也可以使用官方编译好的 jar 包,不过都需要安装 java 11。

安装 java 11

  1. 下载 java 11 并安装
    如果你有安装的 java,先卸载 sudo apt remove java-common
    从这个网站下载 java 11https://www.oracle.com/technetwork/java/javase/downloads/index.html
    解压安装:
tar -zxvf jdk-11.0.6_linux-x64_bin.tar.gz
sudo rm jdk-11.0.6_linux-x64_bin.tar.gz
sudo mv jdk* /usr
sudo update-alternatives --install /usr/bin/java java /usr/jdk-11.*/bin/java 2
sudo update-alternatives --config java # 交互界面,设置默认 java
  1. 配置 JAVA 相关的环境变量
sudo nano  /etc/profile
# 在文件最后加
export PATH=$PATH:/usr/jdk-11.0.6/bin
export JAVA_HOME=/usr/jdk-11.0.6
export J2SDKDIR=/usr/jdk-11.0.6

重启一下。

直接调用 tessera-app-0.11-app.jar (未测试)

https://github.com/jpmorganchase/tessera/releases
下载 tessera-app-0.11-app.jar ,放到某个你可以找到的位置,配置环境变量 TESSERA_JAR 为 tessera-app-0.11-app.jar 的路径。

最好按着我给的代码进行编译

git clone https://github.com/jpmorganchase/tessera.git # 建议使用我给的源码
cd tessera
mvn install

配置环境变量 TESSERA_JAR 为 /home/eftales/tessera/tessera-dist/tessera-app/target/tessera-app-0.11-SNAPSHOT-app.jar

下载 quorum-examples

git clone https://github.com/jpmorganchase/quorum-examples

运行

  1. 启动 7 个节点
cd ./quorum-examples/examples/7nodes
./raft-init.sh
./raft-start.sh tessera 
  1. 发送一笔交易,执行完命令之后会输出 TransactionHash
./runscript.sh private-contract.js # 如果出现 timeout 错误,就多执行几遍

TransactionHash :


  1. 连接到 node 1
geth attach ipc:qdata/dd1/geth.ipc

查看某个交易的详情,需要输入 TransactionHash

eth.getTransaction("你的TransactionHash ")
交易详情

查看合同信息,需要输入合同地址,合同地址可以通过函数 eth.getTransactionReceipt("你的TransactionHash ")来得到。

eth.getTransactionReceipt("你的TransactionHash ")
var address = "你的 contract address "; 
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"initVal","type":"uint256"}],"type":"constructor"}];
var private = eth.contract(abi).at(address)
private.get()
# 输出 42
contract address
  1. 更新合同状态

输入

private.set(4,{from:eth.accounts[0],privateFor:["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]});
private.get()
# 输出 4
上一篇 下一篇

猜你喜欢

热点阅读