溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

發(fā)布時(shí)間:2021-12-07 09:21:39 來(lái)源:億速云 閱讀:230 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關(guān)私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

如何將公共區(qū)塊鏈(如ARK.io)的功能與私有區(qū)塊鏈(如Hyperledger)結(jié)合起來(lái)。特別是,我們將看到ARK.io上的交易如何觸發(fā)在Hyperledger Fabric + Burrow中部署的Solidity Smart Contract的執(zhí)行。

安裝Hyperledger Fabric

刪除以前的Hyperledger Docker鏡像(如果有):

docker kill $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images dev-* -q)

安裝先決條件:

https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html

安裝依賴(lài)項(xiàng):

https://hyperledger-fabric.readthedocs.io/en/latest/install.html
cd ~
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0

設(shè)置環(huán)境變量:

vi ~/.profile

PATH="$HOME/bin:$HOME/.local/bin:$PATH"
GOPATH="$HOME/go"
FABRIC_CFG_PATH="$GOPATH/src/github.com/hyperledger/fabric-samples/config"
PATH="$GOPATH/bin:/usr/lib/go-1.10/bin:$GOPATH/src/github.com/hyperledger/fabric-samples/bin:$PATH"

export FABPROXY_CONFIG=$GOPATH/src/github.com/hyperledger/fabric-chaincode-evm/examples/first-network-sdk-config.yaml
FABPROXY_USER=User1
FABPROXY_ORG=Org1
FABPROXY_CHANNEL=mychannel
FABPROXY_CCID=evmcc
PORT=5000

source ~/.profile

生成網(wǎng)絡(luò)架構(gòu):

https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html
git clone https://github.com/hyperledger/fabric-samples.git
cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
./byfn.sh generate

安裝go語(yǔ)言

sudo apt-get remove golang-go 
sudo apt-get remove --auto-remove golang-go
sudo add-apt-repository ppa:gophers/archive
sudo apt-get update
sudo apt-get install golang-1.10-go

安裝Hyperledger go SDK:

go get -u github.com/hyperledger/fabric-sdk-go
go get -u github.com/cloudflare/cfssl/cmd/cfssl

go get -u github.com/golang/mock/gomock
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/ptypes
go get -u github.com/golang/protobuf/ptypes/timestamp

安裝EVM Chaincode

cd ~
git clone https://github.com/hyperledger/fabric-chaincode-evm.git $GOPATH/src/github.com/hyperledger

cd fabric-samples/first-network/
vi docker-compose-cli.yaml

添加:

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

關(guān)閉網(wǎng)絡(luò)(如果它已啟動(dòng)):

./byfn.sh -m down

重新建立網(wǎng)絡(luò):

./byfn.sh -m up

構(gòu)建并啟動(dòng)EVM

docker exec -it cli bash

為PEER0設(shè)置環(huán)境變量:

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

接下來(lái)在所有對(duì)等端上安裝EVM鏈代碼:

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

實(shí)例化evmcc:

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

部署智能合約

我們將使用一個(gè)簡(jiǎn)單存儲(chǔ)合約:https://solidity.readthedocs.io/en/v0.4.24/introduction-to-smart-contracts.html

peer chaincode invoke -n evmcc -C mychannel  -c '{"Args":["0000000000000000000000000000000000000000","608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a723058203dbaed52da8059a841ed6d7b484bf6fa6f61a7e975a803fdedf076a121a8c4010029"]}' -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

請(qǐng)注意包含合約地址的輸出:

2018-11-10 00:15:28.257 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"7ec1f20fced5ed8d47f94cdab140644a28a85441"

要驗(yàn)證你的合約是否已成功部署,你可以在evmcc中查詢(xún)合約的運(yùn)行時(shí)字節(jié)碼:

root@3e4b9a88b2b6:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -n evmcc -C mychannel -c '{"Args":["getCode","7ec1f20fced5ed8d47f94cdab140644a28a85441"]}'
6080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a723058203dbaed52da8059a841ed6d7b484bf6fa6f61a7e975a803fdedf076a121a8c4010029

與已部署的合約交互

peer chaincode invoke -n evmcc -C mychannel -c '{"Args":["7ec1f20fced5ed8d47f94cdab140644a28a85441","60fe47b1000000000000000000000000000000000000000000000000000000000000000a"]}' -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

2018-11-10 00:25:31.005 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

peer chaincode query -n evmcc -C mychannel -c '{"Args":["7ec1f20fced5ed8d47f94cdab140644a28a85441","6d4ce63c"]}' --hex

獲取用戶(hù)帳戶(hù)地址

root@3e4b9a88b2b6:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -n evmcc -C mychannel -c '{"Args":["account"]}'

結(jié)果03F3C6F335B678F65B41820D97F01BA1151CDF62

使用Web3

設(shè)置Fab代理

我們已經(jīng)在我們的.profile中定義了這些:

export FABPROXY_CONFIG=$GOPATH/src/github.com/hyperledger/fabric-chaincode-evm/examples/first-network-sdk-config.yaml
export FABPROXY_USER=User1
export FABPROXY_ORG=Org1
export FABPROXY_CHANNEL=mychannel
export FABPROXY_CCID=evmcc
export PORT=5000

打開(kāi)端口:

sudo ufw allow 5000

構(gòu)建代理:

cd $GOPATH/src/github.com/hyperledger/fabric-chaincode-evm
go build -o fab3 ./fabproxy/cmd

啟動(dòng)代理:

cd ~/go/src/github.com/hyperledger/fabric-chaincode-evm
./fab3

應(yīng)該看到:

Starting Fab Proxy on port 5000
與先前部署的合約交互

在不同的終端窗口中:

安裝web3:

npm install web3@0.20.2

啟動(dòng)node會(huì)話(huà):

node

Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider('http://159.89.146.143:5000'))
web3.eth.defaultAccount = web3.eth.accounts[0]

simpleStorageABI = [
    {
        "constant": false,
        "inputs": [
            {
                "name": "x",
                "type": "uint256"
            }
        ],
        "name": "set",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "get",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ]
SimpleStorage = web3.eth.contract(simpleStorageABI)

myContract = SimpleStorage.at('7ec1f20fced5ed8d47f94cdab140644a28a85441')
myContract.set(10)
 
myContract.get().toNumber()

ARK.io插件觸發(fā)智能合約

如果你還沒(méi)有這樣做,請(qǐng)按照這篇文章安裝Ark Relay和Hyperledger插件:

最新的插件代碼可在以下位置找到:https://github.com/Ark-Labs/ark-hyperledger-plugin

請(qǐng)注意,與web3集成相關(guān)的部分。首先,我們檢查一下,如果“schema”==“web3”,那么我們將執(zhí)行委托給simpleStorage

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

我們通過(guò)web3和fab代理調(diào)用我們的智能合約:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

通過(guò)ARK.io桌面錢(qián)包觸發(fā)智能合約

確保安裝了ark-hyperledger-plugin并且relay正在運(yùn)行。啟動(dòng)后,你應(yīng)該在中繼日志中看到最后一個(gè)條目:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

確保fab代理正在Hyperledger實(shí)例上運(yùn)行,它正在偵聽(tīng)端口5000:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

通過(guò)桌面錢(qián)包提交Ark交易:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

觀(guān)察Ark replay日志中的輸出以及新應(yīng)用的交易的詳細(xì)信息:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

打開(kāi)節(jié)點(diǎn)控制臺(tái)并檢查Smart Contract是否選擇了新值:

私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合

======================================================================

分享一些Fabric、以太坊、比特幣、EOS等區(qū)塊鏈相關(guān)的交互式在線(xiàn)編程實(shí)戰(zhàn)教程:

  • Hyperledger Fabric 區(qū)塊鏈開(kāi)發(fā)詳解,本課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書(shū)與MSP服務(wù)、權(quán)限策略、信道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、nodejs鏈碼與應(yīng)用開(kāi)發(fā)的操作實(shí)踐,是Nodejs工程師學(xué)習(xí)Fabric區(qū)塊鏈開(kāi)發(fā)的最佳選擇。

  • Hyperledger Fabric java 區(qū)塊鏈開(kāi)發(fā)詳解,課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書(shū)與MSP服務(wù)、權(quán)限策略、信道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、java鏈碼與應(yīng)用開(kāi)發(fā)的操作實(shí)踐,是java工程師學(xué)習(xí)Fabric區(qū)塊鏈開(kāi)發(fā)的最佳選擇。

  • java比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。

  • php比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。

  • c#比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在C#代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是C#工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。

  • java以太坊開(kāi)發(fā)教程,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的web3j詳解。

  • python以太坊,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。

  • php以太坊,主要是介紹使用php進(jìn)行智能合約開(kāi)發(fā)交互,進(jìn)行賬號(hào)創(chuàng)建、交易、轉(zhuǎn)賬、代幣開(kāi)發(fā)以及過(guò)濾器和交易等內(nèi)容。

  • 以太坊入門(mén)教程,主要介紹智能合約與dapp應(yīng)用開(kāi)發(fā),適合入門(mén)。

  • 以太坊開(kāi)發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。

  • ERC721以太坊通證實(shí)戰(zhàn),課程以一個(gè)數(shù)字藝術(shù)品創(chuàng)作與分享DApp的實(shí)戰(zhàn)開(kāi)發(fā)為主線(xiàn),深入講解以太坊非同質(zhì)化通證的概念、標(biāo)準(zhǔn)與開(kāi)發(fā)方案。內(nèi)容包含ERC-721標(biāo)準(zhǔn)的自主實(shí)現(xiàn),講解OpenZeppelin合約代碼庫(kù)二次開(kāi)發(fā),實(shí)戰(zhàn)項(xiàng)目采用Truffle,IPFS,實(shí)現(xiàn)了通證以及去中心化的通證交易所。

  • C#以太坊,主要講解如何使用C#開(kāi)發(fā)基于.Net的以太坊應(yīng)用,包括賬戶(hù)管理、狀態(tài)與交易、智能合約開(kāi)發(fā)與交互、過(guò)濾器和交易等。

  • EOS入門(mén)教程,本課程幫助你快速入門(mén)EOS區(qū)塊鏈去中心化應(yīng)用的開(kāi)發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶(hù)與錢(qián)包、發(fā)行代幣、智能合約開(kāi)發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開(kāi)發(fā)。

  • 深入淺出玩轉(zhuǎn)EOS錢(qián)包開(kāi)發(fā),本課程以手機(jī)EOS錢(qián)包的完整開(kāi)發(fā)過(guò)程為主線(xiàn),深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開(kāi)發(fā),課程內(nèi)容即涵蓋賬戶(hù)、計(jì)算資源、智能合約、動(dòng)作與交易等EOS區(qū)塊鏈的核心概念,同時(shí)也講解如何使用eosjs和eosjs-ecc開(kāi)發(fā)包訪(fǎng)問(wèn)EOS區(qū)塊鏈,以及如何在React前端應(yīng)用中集成對(duì)EOS區(qū)塊鏈的支持。課程內(nèi)容深入淺出,非常適合前端工程師深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開(kāi)發(fā)。

  • tendermint區(qū)塊鏈開(kāi)發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開(kāi)發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開(kāi)發(fā)模型中的核心概念,例如ABCI接口、默克爾樹(shù)、多版本狀態(tài)庫(kù)等,也包括代幣發(fā)行等豐富的實(shí)操代碼,是go語(yǔ)言工程師快速入門(mén)區(qū)塊鏈開(kāi)發(fā)的最佳選擇。

感謝各位的閱讀!關(guān)于“私有區(qū)塊鏈Hyperledger Fabric和公共區(qū)塊鏈ARK.io怎么通過(guò)solidity智能合約結(jié)合”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI