区块链研究实验室|在Hyperledger Fabric上部署以太坊智能合约

  • 时间:
  • 浏览:53
  • 来源:区块链技术网

本篇文章的重点是我们将使用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/Admin@org1.example.com/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 web3@0.20.2

创建您选择的工作目录。 在该目录上运行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)

相关资料链接:

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")

猜你喜欢

如何在本地以太坊测试网络hardhat中使用pancakeswap?

笔者将pancake前端工程pancake-frontend[4]配置成本地的hardhat[5]测试网环境,方便大家一起学习

2022-01-11

NFT诈骗横行,明星们的以太砸起盘了一点面子不给

NFT熄火后,链游火了。链游熄火后,NFT又被炒了起来。风水轮流转谁也别瞧不起谁。币圈行情不好,不抄币,大家改去炒NFT了。毕竟NFT不受算力的影响,有热度就有炒作的点。

2022-01-11

一文说透以太坊上TVL最大的二层网络:Arbitrum

截至今日最新数据统计,以太坊扩容网络Arbitrum作为以太坊上TVL最大的二层网络,锁仓价值达到2.74亿美元。且在去年九月,Arbitrum宣布已部署以太坊主网测试Arbitrum One,超过250个团队申请接入开发者测试网。

2022-01-06

区块链红利吃饱后,这个巨头又想"征服"元宇宙?

据12月26日消息,百度与英伟达(NVIDIA)已达成协议,双方合作共建AI元宇宙。另外,在今日举行的百度AI开发者大会上,英伟达全球副总裁暨亚太区总裁 Raymond Teh将受邀出席,并发表主题演讲。

2021-12-27

以太坊伦敦升级后随之生效的以太坊EIP-1559是什么?

如何降低 ETH 手续费成为亟待解决的问题,除了 Layer 2 等解决方案, EIP-1559也引起行业关注。那么EIP 1559 究竟是什么,以及有什么用?让我们一探究竟!

2021-12-24