成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

HyperledgerFabric如何實現FabricnodeSDK樣例之投票DAPP

小編給大家分享一下Hyperledger Fabric如何實現Fabric node SDK樣例之投票DAPP,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

韶山網站制作公司哪家好,找創(chuàng)新互聯!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、響應式網站建設等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯成立于2013年到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯

Fabric node SDK 樣例 - 投票DAPP

參考 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

  • 在 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)新互聯

成都網站建設
黄龙县| 建德市| 衡阳市| 库伦旗| 治多县| 连平县| 武乡县| 宁乡县| 洛浦县| 汤阴县| 吴旗县| 隆安县| 舟曲县| 泰宁县| 松滋市| 社会| 雷州市| 瑞丽市| 肇东市| 焦作市| 泰顺县| 锡林郭勒盟| 马关县| 临泽县| 皋兰县| 西华县| 新昌县| 阿城市| 阿克苏市| 永泰县| 塔城市| 宣恩县| 叶城县| 江门市| 家居| 若尔盖县| 大关县| 铁岭市| 连州市| 陇南市| 临漳县|