您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(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 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
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
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
我們已經(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()
如果你還沒(méi)有這樣做,請(qǐng)按照這篇文章安裝Ark Relay和Hyperledger插件:
最新的插件代碼可在以下位置找到:https://github.com/Ark-Labs/ark-hyperledger-plugin
請(qǐng)注意,與web3集成相關(guān)的部分。首先,我們檢查一下,如果“schema”==“web3”,那么我們將執(zhí)行委托給simpleStorage
:
我們通過(guò)web3和fab代理調(diào)用我們的智能合約:
確保安裝了ark-hyperledger-plugin
并且relay
正在運(yùn)行。啟動(dòng)后,你應(yīng)該在中繼日志中看到最后一個(gè)條目:
確保fab代理正在Hyperledger實(shí)例上運(yùn)行,它正在偵聽(tīng)端口5000:
通過(guò)桌面錢(qián)包提交Ark交易:
觀(guān)察Ark replay日志中的輸出以及新應(yīng)用的交易的詳細(xì)信息:
打開(kāi)節(jié)點(diǎn)控制臺(tái)并檢查Smart Contract是否選擇了新值:
======================================================================
分享一些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ò),可以把它分享出去讓更多的人看到吧!
免責(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)容。