基於Java編寫第一個區塊鏈項目
前言
區塊鏈是數字加密貨幣比特幣的核心技術。
區塊鏈是一個稱為塊的記錄列表,這些記錄使用鏈表鏈接在一起並使用加密技術。
每個數據塊都包含自己的數字指紋(稱為散列)、前一個數據塊的散列、時間戳和所做事務的數據,使其在任何類型的數據泄露時都更加安全。
因此,如果一個塊的數據被改變,那麼它的散列也會改變。如果散列被更改,那麼它的散列將不同於下一個塊,下一個塊包含前一個塊的散列,影響它之後的所有塊的散列。更改哈希值,然後將其與其他塊進行比較,這允許我們檢查區塊鏈。
區塊鏈實施:以下是區塊鏈實施中使用的功能。
1. 創建塊:要創建塊,將實現塊類。在類塊中:
- hash哈希將包含塊的哈希和
- previousHash將包含上一個塊的哈希。
- 字符串數據用於存儲塊的數據和
- long timeStamp用於存儲塊的時間戳。這裡,long數據類型用於存儲毫秒數。
- calculateHash()生成散列
下面是類塊的實現:
// Java implementation for creating // a block in a Blockchain import java.util.Date; public class Block { // Every block contains // a hash, previous hash and // data of the transaction made public String hash; public String previousHash; private String data; private long timeStamp; // Constructor for the block public Block(String data, String previousHash) { this.data = data; this.previousHash = previousHash; this.timeStamp = new Date().getTime(); this.hash = calculateHash(); } // Function to calculate the hash public String calculateHash() { // Calling the "crypt" class // to calculate the hash // by using the previous hash, // timestamp and the data String calculatedhash = crypt.sha256( previousHash + Long.toString(timeStamp) + data); return calculatedhash; } }
2. 生成哈希:要生成哈希,使用SHA256算法。
下面是算法的實現。
// Java program for Generating Hashes import java.security.MessageDigest; public class crypt { // Function that takes the string input // and returns the hashed string. public static String sha256(String input) { try { MessageDigest sha = MessageDigest .getInstance( "SHA-256"); int i = 0; byte[] hash = sha.digest( input.getBytes("UTF-8")); // hexHash will contain // the Hexadecimal hash StringBuffer hexHash = new StringBuffer(); while (i < hash.length) { String hex = Integer.toHexString( 0xff & hash[i]); if (hex.length() == 1) hexHash.append('0'); hexHash.append(hex); i++; } return hexHash.toString(); } catch (Exception e) { throw new RuntimeException(e); } } }
3. 存儲塊:現在,讓我們通過調用Block類的構造函數將塊及其哈希值存儲在Block類型的ArrayList中。
// Java implementation to store // blocks in an ArrayList import java.util.ArrayList; public class GFG { // ArrayList to store the blocks public static ArrayList<Block> blockchain = new ArrayList<Block>(); // Driver code public static void main(String[] args) { // Adding the data to the ArrayList blockchain.add(new Block( "First block", "0")); blockchain.add(new Block( "Second block", blockchain .get(blockchain.size() - 1) .hash)); blockchain.add(new Block( "Third block", blockchain .get(blockchain.size() - 1) .hash)); blockchain.add(new Block( "Fourth block", blockchain .get(blockchain.size() - 1) .hash)); blockchain.add(new Block( "Fifth block", blockchain .get(blockchain.size() - 1) .hash)); } }
4. 區塊鏈有效性:最後,我們需要通過創建佈爾方法來檢查區塊鏈的有效性。此方法將在“Main”類中實現,並檢查散列是否等於計算的散列。如果所有哈希值都等於計算的哈希值,則該塊有效。
以下是有效性的實施情況:
// Java implementation to check // validity of the blockchain // Function to check // validity of the blockchain public static Boolean isChainValid() { Block currentBlock; Block previousBlock; // Iterating through // all the blocks for (int i = 1; i < blockchain.size(); i++) { // Storing the current block // and the previous block currentBlock = blockchain.get(i); previousBlock = blockchain.get(i - 1); // Checking if the current hash // is equal to the // calculated hash or not if (!currentBlock.hash .equals( currentBlock .calculateHash())) { System.out.println( "Hashes are not equal"); return false; } // Checking of the previous hash // is equal to the calculated // previous hash or not if (!previousBlock .hash .equals( currentBlock .previousHash)) { System.out.println( "Previous Hashes are not equal"); return false; } } // If all the hashes are equal // to the calculated hashes, // then the blockchain is valid return true; }
區塊鏈的優勢
- Blokchain是一個分佈式系統網絡。因此,數據泄露很難實施。
- 由於區塊鏈生成瞭每個區塊的散列,因此很難進行惡意攻擊。
- 數據篡改將改變每個塊的哈希值,從而使區塊鏈無效
區塊鏈如何工作?
區塊鏈的基本單位是塊。一個塊能封裝多個事務或者其它有價值的數據:
我們用哈希值表示一個塊。生成塊的哈希值叫做“挖掘”塊。挖掘塊通常在計算上很昂貴,因為它可以作為“工作證明”。
塊的哈希值通常由以下數據組成:
- 首先,塊的哈希值由封裝的事務組成。
- 哈希也由塊創建的時間戳組成
- 它還包括一個 nonce,一個在密碼學中使用的任意數字
- 最後,當前塊的哈希也包括前一個塊的哈希
網絡中的多個節點可以同時對數據塊進行挖掘。除瞭生成哈希外,節點還必須驗證添加到塊中的事務是否合法。先挖一個街區,就贏瞭比賽!
總結
到此這篇關於Java實現區塊鏈的文章就介紹到這瞭,更多相關Java實現區塊鏈內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!