美文网首页
hyperledger fabric快速开始

hyperledger fabric快速开始

作者: d24b5d9a8312 | 来源:发表于2019-08-26 19:08 被阅读0次

发自简书
Ubuntu 18.04.2

安装 cURL Docker Docker Compose Go

Docker version 17.06.2-ce
Docker Compos1.14.0
Go version 1.12.x

Binaries and Docker Images

因作者水平有限,Binaries和Docker Images用源码编译一直报错......

curl -sSL https://bit.ly/2ysbOFE | bash -s 

不出意外的话是下载失败,curl下载了一个脚本bootstrap.sh,打开之后可以找到文件下载的地址。bootstrap.sh脚本主要作用有三个:



镜像和二进制文件版本这里有点坑。

编译好的二进制文件

都下2.0.0-alpha的

VPN 用IDM下载,解压后为bin和config
https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/

configtxgen,
configtxlator,
cryptogen,
discover,
idemixgen
orderer,
peer,
token, and
fabric-ca-client


You may want to add that to your PATH environment variable so that these can be picked up without fully qualifying the path to each binary. e.g.:

export PATH=<path to download location>/bin:$PATH
加权限
chmod -R 777 fabric
镜像
//默认配置文件
vim /etc/docker/daemon.json

{
"registry-mirrors":["https://registry.docker-cn.com"]
}

systemctl daemon-reload
systemctl restart docker
//查看是否生效
docker info

查询镜像
https://hub.docker.com/

docker pull hyperledger/fabric-peer:2.0.0-alpha
docker pull hyperledger/fabric-zookeeper
docker pull hyperledger/fabric-kafka
docker pull hyperledger/fabric-couchdb
docker pull hyperledger/fabric-baseos
docker pull hyperledger/fabric-ca:2.0.0-alpha
docker pull hyperledger/fabric-tools
docker pull hyperledger/fabric-orderer:2.0.0-alpha
docker pull hyperledger/fabric-ccenv
docker pull hyperledger/fabric-javaenv
查询当前镜像
docker images
删除镜像
docker rmi <image id>

docker ps -a -q
docker kill $(docker ps -a -q)
docker rm $(docker ps -a -q)

把镜像tag换成latest
docker tag <image id> repository:tag

启动区块链网络

有了Binaries 和 Docker Images我们可以自己生成网络,可以修改docker-peer01.yaml搭建一个orderer多个peer网络,建议VMWare中orderer单核500mb内存,peer单核1800mb内存。kafka和raft没搭过。
配置文件:
https://gitee.com/njupt4145438/FabricDemo/tree/master/src/main/resources
一、Generate Network Artifacts

链码
cp -r /home/njupt4145438/Downloads/demo/ /opt/gopath/src/github.com/hyperledger/fabric/test/chaincode/go
cd /opt/gopath/src/github.com/hyperledger
加权限
chmod -R 777 fabric
全在test目录下完成
cd  fabric/test

生成证书文件

./bin/cryptogen generate --config=./crypto-config.yaml

设置环境变量

export FABRIC_CFG_PATH=$PWD
echo $PWD
mkdir channel-artifacts

configtx.yaml中的 Capabilities有坑总是版本对不上,删掉了Capabilities
根据configtx.yaml生成创始区块及频道认证文件

./bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel

现在应该是有这些文件



二、Bring Up the Network

将docker-peer01.yaml中ca两处xx_sk替换为
/crypto-config/peerOrganizations/org1.example.com/ca
下的xx_sk,host IP也得改

启动order
docker-compose -f docker-orderer.yaml up -d
docker-compose -f docker-peer01.yaml up -d
docker ps -a 

CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS              PORTS                                        NAMES
1fdfe2d5510a        hyperledger/fabric-tools     "/bin/bash"              About a minute ago   Up About a minute                                                cli
d4e62bbd8def        hyperledger/fabric-peer      "peer node start"        About a minute ago   Up About a minute   0.0.0.0:7051-7053->7051-7053/tcp             peer0.org1.example.com
2af906036217        hyperledger/fabric-ca        "sh -c 'fabric-ca-se…"   About a minute ago   Up About a minute   0.0.0.0:7054->7054/tcp                       ca
7c10560d2703        hyperledger/fabric-orderer   "orderer"                About a minute ago   Up About a minute   0.0.0.0:7050->7050/tcp                       orderer.example.com
675f386b6c1d        hyperledger/fabric-couchdb   "tini -- /docker-ent…"   38 minutes ago       Up 38 minutes       4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp   couchdb
docker exec -it cli bash

生成mycahnnel.block,其他节点加入时需要把mycahnnel.block从虚拟机docker cp复制到宿主机再scp到加入的节点,最后复制到虚拟机里。channel相当于一个讨论组,微信群,节点只有加入了才能获得隐私的数据。

peer channel create -o orderer.example.com:7050 -c mychannel  -f ./channel-artifacts/mychannel.tx
加入通道
peer channel join -b mychannel.block
合约可以自己找一个
安装智能合约
peer chaincode install -n myaaa -p github.com/hyperledger/fabric/test/chaincode/go/demo -v 1.0
实例化
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n myaaa -c '{"Args":[]}' -P "OR('Org1MSP.member','Org2MSP.member')" -v 1.0
Invoke
peer chaincode invoke -C mychannel -n myaaa -v 1.0 -c '{"Args":["createFarm","1","1","1","1"]}'
Query
peer chaincode query -C mychannel -n myaaa -c '{"Args":["queryFarm","1"]}'

java-fabric-sdk

参考aberic的FSN,样例在上面的gitee里。可以兼容最新版本的sdk。最重要的是私钥加密文件


import java.util.HashMap;
import java.util.Map;

public class MyFabricManager {

    // 获取智能合约对象
    public static FabricManager getFabricManager() throws Exception {


        OrgManager orgManager = new OrgManager();
        orgManager
                .init(1,false,false)
                .setCA("ca", "http://192.168.179.133:7054")
                .setUser("Admin", getCryptoConfigPath(), getChannleArtifactsPath())
                .setPeers("Org1","Org1MSP", "org1.example.com")
                .addPeer("peer0.org1.example.com", "peer0.org1.example.com", "grpc://192.168.179.133:7051", "grpc://192.168.179.133:7053", true)
                .setOrderers("example.com")
                .addOrderer("orderer.example.com", "grpc://192.168.179.133:7050")
                .setChannel("mychannel")
                .setChainCode("myaaa", "/opt/gopath/", "github.com/hyperledger/fabric/blockchains/chaincode/go/chaincode_example02", "1.0", 90000, 120)
                .add();
        return orgManager.use(1);
    }

    private static String getChannleArtifactsPath() {
        return "D:\\channel-artifacts";
    }

    private static String getCryptoConfigPath() {
        return "D:\\crypto-config";
    }
    public static void main(String[] args) throws Exception {
        Map<String,String> map = new HashMap<String, String>();
        try {
            FabricManager fabricManager = MyFabricManager.getFabricManager();

            map = fabricManager.query("queryFarm",new String[]{"1"});
            for(String k : map.keySet()){
                System.out.println(k + " "+ map.get(k));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

相关文章

网友评论

      本文标题:hyperledger fabric快速开始

      本文链接:https://www.haomeiwen.com/subject/xdxrectx.html