我正在尝试创建自己的区块链,以了解它们的工作原理。我想知道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;
};
答案 0 :(得分:3)
你想要一个足够大的nonce,以便在这个数字范围内有一个值可以满足你的难度条件,但不要太大以至于浪费空间。
比特币使用32位值,其本身不够大。这就是为什么哈希中的其他因素可以被改变以生成更广泛的输入,以及事务块的“extranonce”部分。
设计链条时,请确保不会产生无法满足条件的要求。可能存在这样的情况:即使64位值不足以获得令人满意的散列,因此请确保可以根据需要调整,重新排序或增加其他内容。
32位值似乎真的很大,但实际上它什么都没有。现代比特币采矿硬件每秒可以超过10 terahashes 。这意味着尝试所有32位值大约需要0.4 毫秒。
如果您没有extranonce,则需要使用64位值,因为无法对其进行详尽测试,并且当与时间戳结合使用时,您应该在输入上有足够的变化,以获得满意的哈希值永远都能找到。
答案 1 :(得分:0)
4字节unsigned int
就足够了。我不知道您打算如何设计区块链,但通常不必为nonce设置太大的值,因为随着新事务的进入,您不断更改块