我正在尝试创建我自己的区块链,以便了解它们是如何工作的。我想知道nonce应该有多大(例如8位或类似的数字)。我在我的区块链中使用了PoW (工作证明)算法。此区块链使用SHA256散列算法。
我使用C编程语言来实现这个区块链。
下面是代码中代码块的样子:
struct Block
{
/*Block structure*/
char* hash;
char* prev_hash;
char* from;
char* to;
long long int nonce;
double amount;
time_t timestamp;
};发布于 2018-02-26 08:18:12
您需要一个足够大的nonce,以便在该数字范围内可能有一个值满足您的难度条件,但又不会太大,从而浪费空间。
比特币使用的是一个32位的值,这个值本身并不够大。这就是为什么散列中还有其他因素,可以更改这些因素以生成更大范围的输入,以及事务块的"extranonce“部分。
在设计你的链条时,要确保你不会创造不可能满足的条件。可能存在这样的情况,即使是64位的值也不足以得到令人满意的散列结果,因此请确保有其他内容可以根据需要进行调整、重新排序或递增。
32位的值可能看起来真的很大,但实际上它并不算什么。现代比特币挖掘硬件每秒可以处理超过10万亿次的数据。这意味着尝试所有32位值大约需要0.4毫秒。
如果你没有extranonce,你将需要使用64位的值,因为它不能被详尽的测试,并且当和时间戳结合使用时,你应该有足够的输入变化,这样总能找到令人满意的哈希值。
发布于 2018-02-26 08:07:37
4字节的unsigned int就足够了。我不知道您计划如何设计您的区块链,但您通常不需要为nonce设置太大的值,因为随着新事务的到来,您会不断更改区块
https://stackoverflow.com/questions/48979792
复制相似问题