簡単に学習ブロックチェーン4 - ブロック連鎖ブラウザ人間とコンピュータの相互作用

MiniBCブロック鎖V003 - ブロック連鎖ブラウザ人間とコンピュータの相互作用

目標

ブロック鎖は、ブラウザを介してすべての情報をブロック鎖を表示するブラウザユーザです。このセクションで私たちの目標は、この機能を実現することです。
私たちは見ていないだけで提供するだけでなく、管理機能を提供します。実際のブロックチェーン・プロジェクトでは、通常、最終的にブロック鎖のRPCサーバーで統一されたサービスを提供するので、クライアントのコマンドラインモード、のWebSocketの方法とを提供するなどのインタラクティブ、さまざまな方法を提供します。私たちは、ブラウザの方法を実現する必要があり、それが徐々に拡大していきます。

HTTPサーバ

非常に単純なを書くgolangにHTTPサーバは、数行のコードを達成することができます。

http.HandleFunc("/", handleIndex)
http.ListenAndServe(":8080", nil)

私たちのブロック鎖golangブラウザは、http完了し、サービスの標準パッケージを使用することです。使用することは非常に簡単で、NewBlockBrowerはチェーンブロックのブラウザオブジェクトを作成し、Startメソッドが動作することができます呼び出して呼び出します。

//启动区块链浏览器,您可以通过浏览器 http://SERVER_ADDR:8080 访问
NewBlockBrower(bc).Start()

ブロック鎖ブラウザ

ブロック鎖構造は、比較的単純なブラウザ、チャネル及び現在のブロック鎖オブジェクトBlockChainの離脱通知です。

type BlockBrower struct {
	//中止BrowserServer通道
	chanQuit chan bool

	//当前区块链
	blockChain *BlockChain
}

開始するブロックチェーンブラウザの道を開始します。
「/」、「/:現時点では、全ブロック鎖サーバが4つのURL扱うことができますシャットダウン」、「/ getblocks」 ポート8080でリスニング、および「/ generateblockを」。
MiniBCが実行する場合は、機械を通してブラウザを開くと、直接入力することができます:HTTP:// localhostを:8080

func (bb *BlockBrower) Start() {
	fmt.Println("=========================================================================")
	fmt.Println("MiniBC 区块链浏览器已经启动,请通过浏览器http://" + SERVER_ADDR + ":8080访问....")
	fmt.Println("=========================================================================")

	http.HandleFunc("/", bb.handleIndex)
	http.HandleFunc("/shutdown", bb.handleShutdown)
	http.HandleFunc("/getblocks", bb.handleGetBlocks)
	http.HandleFunc("/generateblock", bb.handleGenerateBlock)

	go http.ListenAndServe(":8080", nil)

	//只有接到退出通知,才能结束
	select {
		case <-bb.chanQuit:
	}
}

4 URLハンドラを実現します:

// SERVER_ADDR:8080 /リクエスト、ブラウザのホームページの表示ブロックチェーン情報処理URLはhttpです

func (bb *BlockBrower) handleIndex(response http.ResponseWriter, request *http.Request) {
	content := "<html><br>"
	content = content + "<b>&nbsp;&nbsp;&nbsp;&nbsp;MiniBC区块链区块浏览器</b><br><br>"
	content = content + "&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"shutdown\">关闭MiniBC</a>"
	content = content + "&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"getblocks\">查看区块链</a>&nbsp;&nbsp;&nbsp;&nbsp;"
	content = content + "</html>"

	response.Write([]byte(content))
}

処理のURLはhttp:// SERVER_ADDR:8080 /シャットダウン要求のブロック鎖は、システムを終了するには、ブラウザを閉じました

func (bb *BlockBrower) handleShutdown(response http.ResponseWriter, request *http.Request) {
	fmt.Println("")
	fmt.Println("")
	fmt.Println("=========================================================================")
	fmt.Println("MiniBC 区块链和远程管理结束,谢谢使用!")
	fmt.Println("=========================================================================")

	bb.chanQuit <- true
}

処理のURLはhttp:// SERVER_ADDR:8080 getblocks要求/印刷すべてのブロックチェーン情報

func (bb *BlockBrower) handleGetBlocks(response http.ResponseWriter, request *http.Request) {

	//获取区块链高度
	blockHeight := strconv.Itoa(bb.blockChain.Iterator().GetCount())

	content := "<html><br>"
	content = content + "<a href=\"/\">返回首页</a>&nbsp;&nbsp;&nbsp;&nbsp;"
	content = content + "<a href=\"generateblock\">生成新区块</a>&nbsp;&nbsp;&nbsp;&nbsp;<br>"
	content = content + "<br><b>&nbsp;&nbsp;&nbsp;&nbsp;当前MiniBC区块链高度:" + blockHeight + "</b><br><br>"

	//遍历区块链,打印每一个区块的详细信息
	iterator := bb.blockChain.Iterator()
	for {
		block := iterator.Next()
		if block == nil {
			break
		}
		content = content + "当前区块哈希值:0x" + BytesToHex(block.GetHash()) + "<br>"
		content = content + "当前区块内容为:" +  string(block.Data) + "<br>"
		content = content + "前一区块哈希值:0x" +  BytesToHex(block.HashPrevBlock) + "<br>"
		content = content + "=============================================" + "<br>"
	}

	content = content + "</html>"
	response.Write([]byte(content))
}

// URLをプロセスとしてhttp:// SERVER_ADDR:リクエスト8080 / generateblockは新しいタイルを生成します

func (bb *BlockBrower) handleGenerateBlock(response http.ResponseWriter, request *http.Request) {

	//获取区块链高度
	height := bb.blockChain.Iterator().GetCount()

	//创建新的区块
	bb.blockChain.AddBlock("Mini block " + strconv.Itoa(height))

	blockHeight := strconv.Itoa(bb.blockChain.Iterator().GetCount())

	content := "<html><br>"
	content = content + "<a href=\"/\">返回首页</a>&nbsp;&nbsp;&nbsp;&nbsp;"
	content = content + "<a href=\"generateblock\">生成新区块</a>&nbsp;&nbsp;&nbsp;&nbsp;<br>"
	content = content + "<br><b>&nbsp;&nbsp;&nbsp;&nbsp;当前MiniBC区块链高度:" + blockHeight + "</b><br><br>"

	//遍历区块链
	iterator := bb.blockChain.Iterator()
	for {
		block := iterator.Next()
		if block == nil {
			break
		}
		content = content + "当前区块哈希值:0x" + BytesToHex(block.GetHash()) + "<br>"
		content = content + "当前区块内容为:" +  string(block.Data) + "<br>"
		content = content + "前一区块哈希值:0x" +  BytesToHex(block.HashPrevBlock) + "<br>"
		content = content + "=============================================" + "<br>"
	}

	content = content + "</html>"
	response.Write([]byte(content))
}

出力を実行した後:

ここに画像を挿入説明

我々は達成して達成されます

私たちは、単純なブロックチェーンを構築し、簡単なデータベースとブロックチェーンKVブラウザを実装している、ワークロードを実装するための次のステップは、捕虜コンセンサスアルゴリズムを証明しました。

交流や質問

私たちは、V001から徐々に綿密な調査研究を開始することができ、それぞれのソースファイルが完全な手順とコメントしています。ご質問、提案、質問を理解していないを持っている場合、あなたは私に連絡することができます。

:MiniBCブロックチェーンは交換QQグループに参加することができます777 804 802開発者の楽園を行く、
私のマイクロ手紙の:bkra50
のGitHubの住所:https://github.com/wangshizebin/minibc

また、志を同じくする、一般的なメンテナンス項目のグループの採用は、共同でプロジェクトを推進するために、オープンソースの世界に貢献し、フック歓迎。

行こう~~~~~~~~~~~~~~~~~~~~~~~~~~~~

おすすめ

転載: blog.csdn.net/wanghao72214/article/details/90349561