发自简书
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/
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
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();
}
}
}

网友评论