C#实现简单的区块链 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

C#实现简单的区块链

发表时间:2024-1-12

发布人:葵宇科技

浏览次数:5

 在C#中实现区块链的数据存储可以通过创建一个自定义的数据结构来表示区块链中的区块,然后使用文件或数据库来存储这些区块数据。以下是一个简单的示例,演示了如何在C#中实现一个简单的区块链数据存储:

 
```csharp
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
 
public class Block
{
    public int Index { get; set; }
    public DateTime Timestamp { get; set; }
    public string Data { get; set; }
    public string PreviousHash { get; set; }
    public string Hash { get; set; }
}
 
public class Blockchain
{
    private List<Block> chain;
 
    public Blockchain()
    {
        chain = new List<Block>();
        // 创建创世区块
        AddGenesisBlock();
    }
 
    private void AddGenesisBlock()
    {
        chain.Add(new Block
        {
            Index = 0,
            Timestamp = DateTime.Now,
            Data = "Genesis Block",
            PreviousHash = null,
            Hash = CalculateHash(0, DateTime.Now, "Genesis Block", null)
        });
    }
 
    public void AddBlock(string data)
    {
        var previousBlock = chain[chain.Count - 1];
        var newBlock = new Block
        {
            Index = previousBlock.Index + 1,
            Timestamp = DateTime.Now,
            Data = data,
            PreviousHash = previousBlock.Hash,
            Hash = CalculateHash(previousBlock.Index + 1, DateTime.Now, data, previousBlock.Hash)
        };
        chain.Add(newBlock);
    }
 
    private string CalculateHash(int index, DateTime timestamp, string data, string previousHash)
    {
        SHA256 sha256 = SHA256.Create();
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(index.ToString() + timestamp.ToString() + data + previousHash);
        byte[] outputBytes = sha256.ComputeHash(inputBytes);
        return Convert.ToBase64String(outputBytes);
    }
    
    public bool IsChainValid()
    {
        for (int i = 1; i < chain.Count; i++)
        {
            var currentBlock = chain[i];
            var previousBlock = chain[i - 1];
 
            if (currentBlock.Hash != CalculateHash(currentBlock.Index, currentBlock.Timestamp, currentBlock.Data, currentBlock.PreviousHash))
            {
                return false;
            }
 
            if (currentBlock.PreviousHash != previousBlock.Hash)
            {
                return false;
            }
        }
 
        return true;
    }
}
```
 
在这个示例中,我们创建了一个简单的`Block`类来表示区块,以及一个`Blockchain`类来表示整个区块链。在`Blockchain`类中,我们使用了一个`List<Block>`来存储区块链中的所有区块。我们还实现了添加新区块的方法`AddBlock`,以及验证区块链是否有效的方法`IsChainValid`。
 
在实际的应用中,你可以将区块链的数据存储在文件或者数据库中。例如,你可以将每个区块存储为一个文件,或者将区块链数据存储在关系型数据库或者NoSQL数据库中。这样就可以实现在C#中对区块链的数据进行存储和管理。

相关案例查看更多