在Hyperledger Fabric上部署以太坊智能合约

本篇文章的重点是我们将使用Fabric-Evm在Hyperledger架构网络上部署以太坊智能合约,并对以太坊智能合约进行跨平台检查。

构成组件

1.Hyperledger Fabric EVM

Hyperledger架构peer上运行的自定义以太坊虚拟机

2.Fab3代理





EVM兼容区块链(Hyperledger)节点客户端,用于与节点进行交互。

3.Web3.js

一个用于与本地或远程区块链节点进行交互的javascript库。 在此项目场景中,它将与Fab3交互。

4.BYFN架构网络

一个简单的Byfn网络可让您创建以2个组织运行的Hyperledger Fabric网络,每个ORG具有两个peer。

工作流程

1.构建Fabric网络


2.将EVM安装在Fabric-peers上。


3.启动Fabric网络


4.安装和实例化EVM Chaincode


5.设置Fab3


6.部署Smartcontract。

先决条件

1.Go

安装Go并将其添加到您的路径

wget https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz


sudo tar -xvf go1.12.6.linux-amd64.tar.gz


sudo mv go /usr/local


export GOROOT=/usr/local/go


export GOPATH=$HOME/go #choose your prferred work directory path


export PATH=$GOPATH/bin:$GOROOT/bin:$PATH


go version #check if it is installed correctly

2.node.js 和 Npm

sudo apt-get install nodejs


sudo apt-get install npm

3.Docker

sudo apt install apt-transport-https ca-certificates curl 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 bionic stable”


sudo apt update


apt-cache policy docker-ce


sudo apt install docker-ce

操作步骤

1.构建Fabric网络

将Fabric样本复制到$ GOPATH / src / github.com / hyperledger目录。 为此我们需要先创建目录,然后进行复制。

mkdir go


cd go


mkdir src


cd $GOPATH/src


mkdir github.com


cd github.com


mkdir hyperledger


cd hyperledger


git clone https://github.com/hyperledger/fabric-samples.git


cd fabric-samples


git checkout release-1.4

文件架构

go


├─src


│  ├─github.com


│      │–hyperledger


             │–fabric-samples


             │–fabric-chaincode-evm

为fabric samples first网络下载docker的镜像

./scripts/bootstrap.sh

2.将EVM安装在Fabric-peers上

在GOPATH /目录中复制fabric-chaincode-evm到存储库。

cd $GOPATH/src/github.com/hyperledger/


git clone https://github.com/hyperledger/fabric-chaincode-evm


cd fabric-chaincode-evm


git checkout release-0.1

我们需要将fabric-chaincode-evm嵌入到我们的第一个网络docker映像中。为此请导航回fabric-samples / first-network目录。

cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network

使用存储卷更新docker-compose-cli.yaml以包含EVM。使用任何代码编辑器添加如下所示的EVM卷

cli:


    volumes:


      – ./../../fabric-chaincode-evm:/opt/gopath/src/github.com/hyperledger/fabric-chaincode-evm

3.启动fabric网络

生成证书并启动网络

./byfn.sh generate


./byfn.sh up

4.安装和实例化EVM Chaincode

现在我们需要在evm上安装并实例化chaincode。导航到docker容器的CLI

docker exec -it cli bash

添加网络所需的peer依赖项。

export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp


export CORE_PEER_ADDRESS=peer0.org1.example.com:7051


export CORE_PEER_LOCALMSPID=”Org1MSP”


export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

在所有peer节点上安装并实例化Chaincode

peer chaincode install -n evmcc -l golang -v 0 -p github.com/hyperledger/


fabric-chaincode-evm/evmcc   #Installs Chain code

peer chaincode instantiate -n evmcc -v 0 -C mychannel -c ‘{“Args”:[]}’ 


-o orderer.example.com:7050 — tls — cafile /opt/gopath/src/github.com/


hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers


/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem


 #Instantiates Chaincode on all peers

exit

5.设置Fab3

执行以下操作来设置设置Fab3所需的某些环境变量。

export FABPROXY_CONFIG=${GOPATH}/src/github.com/hyperledger/

fabric-chaincode-evm/examples/first-network-sdk-config.yaml 

# Path to a compatible Fabric SDK Go config file

export FABPROXY_USER=User1 # User identity being used for the proxy 

(Matches the users names in the crypto-config directory specified in the

 config)


export FABPROXY_ORG=Org1 # Organization of the specified user

export FABPROXY_CHANNEL=mychannel # Channel to be used for the

transactions

export FABPROXY_CCID=evmcc # ID of the EVM Chaincode deployed in your 

fabric network

export PORT=5000 # Port the proxy will listen on. If not provided 

default is 5000.

现在导航回到fabric-chaincode-evm目录构建和运行代理

cd $GOPATH/src/github.com/hyperledger/fabric-chaincode-evm/


go build -o fab3 ./fabproxy/cmd #builds the proxy with predefined 


env variables


./fab3 #starts proxy on your host

现在您的Fabric网络已启动并在http//localhost:5000上运行,并准备部署Smartcotracts

6.部署智能合约

打开另一个终端,安装web3库

npm install [email protected]

创建您选择的工作目录。 在该目录上运行npm install以安装所需的npm模块。

现在我们将进入节点控制台以设置我们的web3。 在工作目录中的命令下面运行

node

分配Web3库并使用在上一个终端中运行的fab3作为提供程序

Web3 = require(‘web3’)


web3 = new Web3(new Web3.providers.HttpProvider(‘http://localhost:5000′))

要查看您的帐户信息,请运行

web3.eth.accounts

您会看到类似于以太坊的帐户地址。将此帐户分配为defaultAccount

web3.eth.defaultAccount = web3.eth.accounts[0]

现在您可以通过以与以太坊相似的方式指向Abi和bytecode来部署智能合约。在remix或truffle编制智能合约。为部署做好abi和bytecode准备。

abi=<paste abi here>


byteCode=<paste your Byte Code here>


contract= web3.eth.contract(abi)


deployedContract= contract.new([], { data: byteCode })

您可以使用如下所示的已部署智能合约的交易哈希获取智能合约地址

web3.eth.getTransactionReceipt(deployedContract.transactionHash)

在Hyperledger Fabric上部署以太坊智能合约

相关资料链接:

1. [Hyperledger Fabric EVM](https://github.com/hyperledger/fabric-chaincode-evm “Hyperledger Fabric EVM”)
2. [Fabric-samples](https://github.com/hyperledger/fabric-samples “Fabric-samples”)
3. [Hyperledger Fabric docs](https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html “Hyperledger Fabric docs”)
4. [IBM Hyperledger-Ethereum](https://github.com/IBM/vote-hyperledger-ethereum “IBM Hyperledger-Ethereum”)
5. [web3.js](https://web3js.readthedocs.io/en/1.0/ “web3.js”)

关键词: Hyperledger  智能合约  以太坊  

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/28356

联系我们

aliyinhang@gmail.com