91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用java代碼實現區塊鏈

發布時間:2021-08-06 11:08:50 來源:億速云 閱讀:121 作者:小新 欄目:編程語言

小編給大家分享一下如何使用java代碼實現區塊鏈,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

概述

MerkleTree被廣泛的應用在比特幣技術中,本文旨在通過代碼實現一個簡單的MerkleTree,并計算出Merkle tree的 TreeRoot。
Merkle Tree 是一種數據結構,用于驗證在計算機之間和之間存儲,處理和傳輸的任何類型的數據。
目前,Merkle樹的主要用途是確保從對等網絡中接收的數據塊未受損和未改變,和檢查其他對等網絡沒有撒謊發送假數據塊。

如何使用java代碼實現區塊鏈

Merkle Tree應用舉例

比特幣

GitA

mazon's Dynamo

Gassandra

比特幣中的應用

比特幣中每個塊中都包含了所有交易的集合簽名,這個簽名就是用Merkle tree實現的,Merkle樹用于比特幣以匯總塊中的所有事務,產生整個事務集合的整體數字指紋,提供非常有效的過程來驗證事務是否包括在塊中。

如何使用java代碼實現區塊鏈 

Merkle樹一個很重要的用處是檢查塊中是否包含指定的交易,Merkle樹是通過遞歸哈希節點對來構造的,直到只有一個哈希。

如何使用java代碼實現區塊鏈

Merkle tree 代碼實現

哈希樹的跟節點稱為Merkle根,Merkle樹可以僅用log2(N)的時間復雜度檢查任何一個數據元素是否包含在樹中:

package test;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;
public class MerkleTrees {
  // transaction List
  List<String> txList;
  // Merkle Root
  String root;

  /**
  * constructor
  * @param txList transaction List 交易List
  */
  public MerkleTrees(List<String> txList) {
  this.txList = txList;
  root = "";
  }

  /**
  * execute merkle_tree and set root.
  */
  public void merkle_tree() {

  List<String> tempTxList = new ArrayList<String>();

  for (int i = 0; i < this.txList.size(); i++) {
   tempTxList.add(this.txList.get(i));
  }

  List<String> newTxList = getNewTxList(tempTxList);

  while (newTxList.size() != 1) {
   newTxList = getNewTxList(newTxList);
  }

  this.root = newTxList.get(0);
  }

  /**
  * return Node Hash List.
  * @param tempTxList
  * @return
  */
  private List<String> getNewTxList(List<String> tempTxList) {

  List<String> newTxList = new ArrayList<String>();
  int index = 0;
  while (index < tempTxList.size()) {
   // left
   String left = tempTxList.get(index);
   index++;
   // right
   String right = "";
   if (index != tempTxList.size()) {
   right = tempTxList.get(index);
   }
   // sha2 hex value
   String sha2HexValue = getSHA2HexValue(left + right);
   newTxList.add(sha2HexValue);
   index++;

  }

  return newTxList;
  }

  /**
  * Return hex string
  * @param str
  * @return
  */
  public String getSHA2HexValue(String str) {
   byte[] cipher_byte;
   try{
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(str.getBytes());
    cipher_byte = md.digest();
    StringBuilder sb = new StringBuilder(2 * cipher_byte.length);
    for(byte b: cipher_byte) {
     sb.append(String.format("%02x", b&0xff) );
    }
    return sb.toString();
   } catch (Exception e) {
     e.printStackTrace();
   }

   return "";
  }

  /**
  * Get Root
  * @return
  */
  public String getRoot() {
  return this.root;
  }

 }

數據準備

我們將交易的數據,放入到List中:

List<String> tempTxList = new ArrayList<String>();
tempTxList.add("a");
tempTxList.add("b");
tempTxList.add("c");
tempTxList.add("d");
tempTxList.add("e");

實現過程

準備交易數據
計算出每個數據的hash值,從左到右逐步組成樹的左右節點
執行循環知道最后只剩下一個數據

如何使用java代碼實現區塊鏈

private List<String> getNewTxList(List<String> tempTxList) {
 List<String> newTxList = new ArrayList<String>();
 int index = 0;
 while (index < tempTxList.size()) {
  // left
  String left = tempTxList.get(index);
  index++;
  // right
  String right = "";
  if (index != tempTxList.size()) {
   right = tempTxList.get(index);
  }
  // sha2 hex value
  String sha2HexValue = getSHA2HexValue(left + right);
  newTxList.add(sha2HexValue);
  index++;
 }

測試

package test;
import java.util.ArrayList;
import java.util.List;
public class App {
   public static void main(String [] args) {
    List<String> tempTxList = new ArrayList<String>();
    tempTxList.add("a");
    tempTxList.add("b");
    tempTxList.add("c");
    tempTxList.add("d");
    tempTxList.add("e");

    MerkleTrees merkleTrees = new MerkleTrees(tempTxList);
    merkleTrees.merkle_tree();
    System.out.println("root : " + merkleTrees.getRoot());
   }
  }

執行結果

如何使用java代碼實現區塊鏈

以上是“如何使用java代碼實現區塊鏈”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苍南县| 滦平县| 西乌| 百色市| 定州市| 哈尔滨市| 铜梁县| 离岛区| 陕西省| 开阳县| 景德镇市| 南京市| 酒泉市| 宾阳县| 寻乌县| 额济纳旗| 洱源县| 页游| 灵宝市| 丰台区| 鹤峰县| 吴忠市| 林口县| 连平县| 佛学| 成安县| 新民市| 嘉定区| 承德县| 青阳县| 青田县| 五大连池市| 保康县| 德州市| 舟山市| 徐水县| 花垣县| 依安县| 新和县| 永城市| 德昌县|