您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關私有區塊鏈Hyperledger Fabric和公共區塊鏈ARK.io怎么通過solidity智能合約結合的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
如何將公共區塊鏈(如ARK.io)的功能與私有區塊鏈(如Hyperledger)結合起來。特別是,我們將看到ARK.io上的交易如何觸發在Hyperledger Fabric + Burrow中部署的Solidity Smart Contract的執行。
刪除以前的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
安裝依賴項:
https://hyperledger-fabric.readthedocs.io/en/latest/install.html cd ~ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
設置環境變量:
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
生成網絡架構:
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語言
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
關閉網絡(如果它已啟動):
./byfn.sh -m down
重新建立網絡:
./byfn.sh -m up
docker exec -it cli bash
為PEER0設置環境變量:
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
接下來在所有對等端上安裝EVM鏈代碼:
peer chaincode install -n evmcc -l golang -v 0 -p github.com/hyperledger/fabric-chaincode-evm/evmcc
實例化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
我們將使用一個簡單存儲合約: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
請注意包含合約地址的輸出:
2018-11-10 00:15:28.257 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"7ec1f20fced5ed8d47f94cdab140644a28a85441"
要驗證你的合約是否已成功部署,你可以在evmcc中查詢合約的運行時字節碼:
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
獲取用戶帳戶地址
root@3e4b9a88b2b6:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -n evmcc -C mychannel -c '{"Args":["account"]}'
結果03F3C6F335B678F65B41820D97F01BA1151CDF62
我們已經在我們的.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
打開端口:
sudo ufw allow 5000
構建代理:
cd $GOPATH/src/github.com/hyperledger/fabric-chaincode-evm go build -o fab3 ./fabproxy/cmd
啟動代理:
cd ~/go/src/github.com/hyperledger/fabric-chaincode-evm ./fab3
應該看到:
Starting Fab Proxy on port 5000
在不同的終端窗口中:
安裝web3:
npm install web3@0.20.2
啟動node會話:
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 Relay和Hyperledger插件:
最新的插件代碼可在以下位置找到:https://github.com/Ark-Labs/ark-hyperledger-plugin
請注意,與web3集成相關的部分。首先,我們檢查一下,如果“schema”==“web3”,那么我們將執行委托給simpleStorage
:
我們通過web3和fab代理調用我們的智能合約:
確保安裝了ark-hyperledger-plugin
并且relay
正在運行。啟動后,你應該在中繼日志中看到最后一個條目:
確保fab代理正在Hyperledger實例上運行,它正在偵聽端口5000:
通過桌面錢包提交Ark交易:
觀察Ark replay日志中的輸出以及新應用的交易的詳細信息:
打開節點控制臺并檢查Smart Contract是否選擇了新值:
======================================================================
分享一些Fabric、以太坊、比特幣、EOS等區塊鏈相關的交互式在線編程實戰教程:
Hyperledger Fabric 區塊鏈開發詳解,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、權限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
Hyperledger Fabric java 區塊鏈開發詳解,課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、權限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在C#代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
php以太坊,主要是介紹使用php進行智能合約開發交互,進行賬號創建、交易、轉賬、代幣開發以及過濾器和交易等內容。
以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約代碼庫二次開發,實戰項目采用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
C#以太坊,主要講解如何使用C#開發基于.Net的以太坊應用,包括賬戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
EOS入門教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發。
深入淺出玩轉EOS錢包開發,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中集成對EOS區塊鏈的支持。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
感謝各位的閱讀!關于“私有區塊鏈Hyperledger Fabric和公共區塊鏈ARK.io怎么通過solidity智能合約結合”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。