【发布时间】:2018-04-24 22:28:20
【问题描述】:
这个应用程序应该是一种区块链如何工作的演示。我有一个块链类和一个块类,程序类是主要的。在区块链类中,我在 createGenesisBlock() 方法中创建了一个名为 gensis 块的初始块。在我的区块链类的构造函数中,我调用 createGenesisBlock() 方法并将对象插入我的链表中,该链表称为链。我遇到的问题是当对象被添加到我的区块链类中的链表时,我无法访问该对象或方法。我想要完成的是在区块链类中使用我的 getLatestBlock() 方法来检索放入链中的最后一个对象的哈希值。因此能够在区块链中调用我的 addBlock 方法,将 previousHash 的值设置为链表中对象的哈希值
namespace BlockChainProject
{
class Program
{
static void Main(string[] args)
{
Blockchain blockChain = new Blockchain();
blockChain.addBlock();
blockChain.display();
Console.ReadKey();
}
}
}
namespace BlockChainProject
{
class Block
{
private int index;
private string timeStamp;
private string data;
private string previousHash;
private string hash;
public Block(int index, string timeStamp, string data, string previousHash) {
this.index = index;
this.timeStamp = timeStamp;
this.data = data;
this.previousHash = previousHash;
this.hash = this.calculateHash();
}
public string calculateHash() {
SHA256Managed hashString = new SHA256Managed();
byte[] dataArray = hashString.ComputeHash(Encoding.UTF8.GetBytes(index.ToString() + previousHash + timeStamp + data));
StringBuilder stringBuilder = new StringBuilder();
foreach (byte x in dataArray)
{
stringBuilder.AppendFormat("{0:X2}", x);
}
string hashed = stringBuilder.ToString();
return hashed;
}
public string getHash() {
return hash;
}
}
}
namespace BlockChainProject
{
class Blockchain
{
LinkedList<object> chain;
private int index = 0;
private string time = DateTime.Now.ToString();
public Blockchain(){
chain = new LinkedList<object>();
chain.AddLast(createGenesisBlock());
}
private object createGenesisBlock() {
index++;
return new Block(index, time, "Genesis Block", "0"); ;
}
public object getLatestBlock() {
return chain.Last.Value;
}
public void addBlock() {
string data = Console.ReadLine();
//string previousHash = <The hash of linked lists last object here>;
chain.AddLast(new Block(index, time, data, previousHash));
index++;
}
public void display() {
foreach (var item in chain)
{
Console.WriteLine(item);
}
}
}
}
【问题讨论】:
标签: c# hash linked-list blockchain