iT邦幫忙

2024 iThome 鐵人賽

DAY 26
1
佛心分享-SideProject30

未來IT將來系列 第 26

未來IT將來2024.26「區塊鏈(Blockchain)實作」

  • 分享至 

  • xImage
  •  

一、引言
區塊鏈技術作為一種去中心化的分佈式帳本技術,自2008年比特幣誕生以來,迅速成為了數位貨幣、供應鏈管理、數據隱私保護等領域的關鍵技術。區塊鏈技術的核心優勢在於其不可篡改、透明且具備高度安全性,這使得其應用範疇日益擴展。本文將探討區塊鏈技術的基本原理,並介紹如何實作一個簡單的區塊鏈應用。
區塊鏈(Blockchain)作為Web3.0的基礎技術,其實就是hash加密技術的加強版,也可視為電子病歷等簽章技術的延伸,本文將經由實作來了解其運作原理。

二、區塊鏈技術的基本原理

  1. 區塊鏈的結構
    區塊鏈由一系列按時間順序相連的區塊(Block)組成,每個區塊包含數據(如交易記錄)、區塊頭(包括前一區塊的哈希值)以及一個唯一的哈希值。這些區塊通過加密技術鏈接在一起,形成一條不可篡改的區塊鏈。
  2. 共識機制
    區塊鏈的去中心化特性依賴於共識機制來確保資料的可靠性和一致性。目前常見的共識機制包括:
    • 工作量證明(Proof of Work, PoW):礦工通過計算哈希值來競爭解鎖下一個區塊,這種方式需要大量的計算資源。
    • 權益證明(Proof of Stake, PoS):根據持有的代幣數量和持有時間來決定誰有權生成下一個區塊,節省了大量的能源。
    • 授權股權證明(Delegated Proof of Stake, DPoS):選舉代表進行區塊生成,這是一種更高效的共識機制。
  3. 智能合約
    智能合約是自動執行合約條款的計算機程式,這些程式在區塊鏈上執行並保證無需中介即可實現交易。智能合約的執行完全依賴於事先編寫好的代碼,因此一旦部署,便難以篡改或撤回。
    三、區塊鏈的實作步驟
  4. 架構區塊鏈網絡
    區塊鏈網絡的搭建通常包括節點的建立和共識機制的選擇。在這裡,我們將使用以太坊(Ethereum)作為區塊鏈平台來進行簡單的實作。
    步驟:
    1. 安裝Geth:Geth是以太坊的官方命令行工具,用於運行以太坊節點。
       sudo apt-get install software-properties-common
       sudo add-apt-repository -y ppa:ethereum/ethereum
       sudo apt-get update
       sudo apt-get install ethereum
       ```
    2. 初始化區塊鏈:使用Geth創建一個新的區塊鏈。
   geth --datadir ./blockchain init genesis.json
   ```
  1. 部署智能合約
    智能合約的部署可以使用Solidity編寫合約代碼,並通過Remix IDE進行編譯和部署。
    Solidity範例:
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 data;

    function set(uint256 x) public {
        data = x;
    }

    function get() public view returns (uint256) {
        return data;
    }
}

在Remix IDE中編譯合約並部署到以太坊區塊鏈上。成功部署後,可以通過合約地址與其互動,執行set和get操作來存儲和檢索數據。
3. 測試區塊鏈應用
部署完成後,可以使用Truffle框架來進行測試。Truffle是一個開發環境和測試框架,用於建立區塊鏈應用。
步驟:
1. 安裝Truffle:

       npm install -g truffle
       ```
    2. 初始化項目:
   truffle init
   ```
3. 撰寫測試代碼: 創建一個測試腳本,檢查合約功能是否如預期運行。
       const SimpleStorage = artifacts.require("SimpleStorage");
       
       contract("SimpleStorage", () => {
           it("should store the value 89", async () => {
               const simpleStorage = await SimpleStorage.deployed();
               await simpleStorage.set(89);
               const result = await simpleStorage.get();
               assert(result.toString() === '89');
           });
       });
       ```
    4. 運行測試:
   truffle test
 ```  

四、區塊鏈應用案例

  1. 金融交易系統
    在金融交易中,區塊鏈技術可以確保交易的透明性和安全性,降低欺詐風險。智能合約可以用來自動執行金融合約,確保合約各方的權利和義務得到履行。
  2. 供應鏈管理
    區塊鏈技術可以用來追踪產品在供應鏈中的流動,確保產品的真實性和來源的可追溯性。例如,食品供應鏈中使用區塊鏈技術可以追踪食品從農場到消費者手中的每一個環節,確保食品的安全。
  3. 數位身份認證
    區塊鏈技術可以用來管理數位身份,確保個人身份信息的安全性和隱私性。去中心化的身份認證系統可以防止身份竊取和欺詐,並為個人提供更大的數據控制權。
    五、結語
    區塊鏈技術已經從比特幣的基礎技術,發展成為多領域應用的核心技術。通過區塊鏈技術,我們可以構建更加安全、透明和高效的系統。本文介紹了區塊鏈技術的基本原理和實作步驟,並展示了其在金融、供應鏈管理和身份認證等領域的應用前景。隨著技術的進一步發展,區塊鏈必將在未來的數位經濟中扮演越來越重要的角色。

😱附件.以B4X的B4J實作「區塊鏈(Blockchain)實作」
(https://www.b4x.com/android/forum/threads/b4x-blockchain-example-create-your-own-cryptocurrency-part-1-2.87237/#content)

Sub Process_Globals
End Sub

Sub AppStart (Args() As String)
	
	'Create a Blockchain of 10 blocks
	Blockchain.Create
	For i = 0 To 10
		Blockchain.AddBlock
	Next
	
	'Integrity Check vs block tampering
	Dim b = Blockchain.GetBlock(4) As Block
	Log("Before tampering : " & b.Data)
	Blockchain.VerifyBlockIntegrity(4)
	
	b.Data = "Hi! I'm block 23! ;)"
	Log("After tampering  : " & b.Data)
	Blockchain.VerifyBlockIntegrity(4)

End Sub

Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
	Return True
End Sub

模組Block.bas

Private Sub Class_Globals
	Dim Index         As Int
	Dim Timestamp     As Long
	Dim Data          As String
	Dim Previous_Hash  As String
End Sub

Public Sub Initialize(blockIndex As Int, blockTimestamp As Long, blockData As String, previousBlock_hash As String)
	Index         = blockIndex
	Timestamp     = blockTimestamp
	Data          = blockData
	Previous_Hash = previousBlock_hash	
End Sub

Sub getHash As String
	Return HashLib.Sha256( _
		Index            & _
		Timestamp        & _
		Data             & _
		Previous_Hash      _
	)	
End Sub

模組HashLib.bas

Private Sub Process_Globals	
	Private md As MessageDigest
	Private bc As ByteConverter
End Sub

Public Sub Sha256(data As String) As String	
	Dim hash() = md.GetMessageDigest(data.GetBytes("UTF8"),"SHA-256") As Byte
	Return bc.HexFromBytes(hash).ToLowerCase	
End Sub

模組BlockGen.bas

Private Sub Process_Globals	
End Sub

'Generate genesis block
Sub Genesis_Block As Block
  	'Manually construct a block with
  	'index zero and arbitrary previous hash
  	Dim genesisBlock As Block
  	genesisBlock.Initialize(0, DateTime.now, "Genesis Block", "0")
	Return genesisBlock
End Sub

'Generate all later blocks in the blockchain
Sub Next_Block(previousBlock As Block) As Block
	Dim index = previousBlock.Index + 1 As Int
	Dim nextBlock As Block
	nextBlock.Initialize(               _
		index,                          _
		DateTime.Now,                   _
		"Hi! I'm block " & index & ".", _
		previousBlock.Hash              )
	Return nextBlock
End Sub

模組Blockchain.bas

#IgnoreWarnings: 12
Private Sub Process_Globals
	Private bc As List
End Sub

Sub Create
	bc.Initialize
	bc.Add(BlockGen.Genesis_Block)
End Sub

Sub LastBlock As Block
	If bc.Size == 0 Then Return Null
	'-------------------------------
	Return bc.Get(bc.Size - 1)
End Sub

Sub AddBlock As Boolean
	Dim b = LastBlock As Block
	If b == Null Then Return False
	'-----------------------------
	bc.Add(BlockGen.Next_Block(b))
	'Tell everyone about it!
	Log("Block #" & b.Index & " has been added to the blockchain!")
	Log("Hash: " & b.Hash & "=>" & b.Hash.Length)
	Log("bc: " & bc)
	Log("----------------------------------------------------------------------")
	Return True
End Sub

Sub GetBlock(index As Int) As Block
	Return bc.Get(index)
End Sub

Sub VerifyBlockIntegrity(index As Int) As Boolean
	If index >= bc.Size - 1 Then
		Log("This block cannot be verified.")
	End If
	Dim thisBlock = bc.Get(index    ) As Block
	Dim nextBlock = bc.Get(index + 1) As Block
	If thisBlock.Hash == nextBlock.Previous_Hash Then
		Log("Block #" & index & ": OK")
		Return True
	End If
	Log("Block #" & index & ": CORRUPT")
	Return False
End Sub

參考網址
•[B4X] 區塊鏈範例 - 創建您自己的加密貨幣(https://www.b4x.com/android/forum/threads/b4x-blockchain-example-create-your-own-cryptocurrency-part-1-2.87237/#content)
• 以太坊官方網站(https://ethereum.org/)
• Truffle 框架(https://archive.trufflesuite.com/)
• Solidity 智能合約編程(https://soliditylang.org/)


上一篇
未來IT將來2024.25「物聯網(IoT)已來就用MQTT來實作」
下一篇
未來IT將來2024.27「App內建關聯式資料庫管理系統」實作
系列文
未來IT將來31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言