小編給大家分享一下Hyperledger Fabric如何實現Fabric node SDK樣例之投票DAPP,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
韶山網站制作公司哪家好,找創(chuàng)新互聯!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、響應式網站建設等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯成立于2013年到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯。
參考 fabric-samples 下的 fabcar 加以實現
目錄結構
.
├── app
│ ├── controllers
│ │ └── index.js
│ ├── enrollAdmin.js
│ ├── index.js
│ ├── package.json
│ ├── README.md
│ ├── registerUser.js
│ ├── routers
│ │ └── index.js
│ ├── startFabric.sh
│ └── views
│ └── index.ejs
├── basic-network
│ └── ...
├── chaincode
│ └── vote.go
└── README.md
basic-network -- fabric-samples基礎網絡
app -- sdk 代碼實現
controllers 控制器目錄
routers 路由目錄
views 頁面目錄
enrollAdmin.js 登記管理員
registerUser.js 注冊用戶
index.js app程序入口
chaincode -- 鏈碼 , 其中 vote.go 的代碼
package main import ( "fmt" "bytes" "encoding/json" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" ) type VoteChaincode struct { } type Vote struct { Name string `json:"name"` VoteNum int `json:"votenum"` } func (t * VoteChaincode) Init (stub shim.ChaincodeStubInterface) peer.Response { return shim.Success(nil) } func (t * VoteChaincode) Invoke (stub shim.ChaincodeStubInterface) peer.Response { fn , args := stub.GetFunctionAndParameters() if fn == "voteUser" { return t.voteUser(stub, args) } else if fn == "getUserVote" { return t.getUserVote(stub) } return shim.Error("調用方法不存在!") } func (t *VoteChaincode) voteUser (stub shim.ChaincodeStubInterface, args []string) peer.Response { if len(args) != 1 { return shim.Error("參數出錯") } name := args[0] // 判斷當前用戶是否存在 userAsBytes , err := stub.GetState(name) if err != nil { return shim.Error(err.Error()) } vote := Vote{} if userAsBytes != nil { err = json.Unmarshal(userAsBytes , &vote) if err != nil { return shim.Error(err.Error()) } vote.VoteNum += 1 } else { vote = Vote{Name: name, VoteNum: 1} } voteJsonAsBytes , err := json.Marshal(vote) if err != nil { return shim.Error(err.Error()) } err = stub.PutState(name, voteJsonAsBytes) if err != nil { return shim.Error(err.Error()) } // 通知監(jiān)聽器,事件 eventInvokeVoteUser 已被執(zhí)行,投票成功事件 err = stub.SetEvent("eventInvokeVoteUser", []byte(name)) if err != nil { return shim.Error(err.Error()) } return shim.Success(nil) } func (t *VoteChaincode) getUserVote( stub shim.ChaincodeStubInterface) peer.Response { //獲取投票列表 resultIterator, err := stub.GetStateByRange("","") defer resultIterator.Close() if err != nil { return shim.Error(err.Error()) } var buffer bytes.Buffer buffer.WriteString("[") isFrist := true for resultIterator.HasNext() { queryResponse , err := resultIterator.Next() if err != nil { return shim.Error(err.Error()) } //第一個不加, if !isFrist { buffer.WriteString(",") } isFrist = false buffer.WriteString(string(queryResponse.Value)) } buffer.WriteString("]") return shim.Success(buffer.Bytes()) } func main() { if err := shim.Start(new(VoteChaincode)); err != nil { fmt.Println("chaincode start error") } }
在 app 的目錄下操作
運行啟動網絡 ./startFabric.sh
安裝依賴: npm install
注冊節(jié)點管理員: node enrollAdmin.js
注冊用戶:node registerUser.js
運行程序:node index.js
在瀏覽器訪問:localhost:8080
以上是“Hyperledger Fabric如何實現Fabric node SDK樣例之投票DAPP”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!
當前名稱:HyperledgerFabric如何實現FabricnodeSDK樣例之投票DAPP
文章位置:http://jinyejixie.com/article46/gggoeg.html
成都網站建設公司_創(chuàng)新互聯,為您提供面包屑導航、定制開發(fā)、全網營銷推廣、軟件開發(fā)、網站導航、企業(yè)網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯