我正在尝试创建自己的区块链,以了解它们是如何工作的。我想知道
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;
};
您想要一个足够大的随机数,以便该数字范围内可能有一个值满足您的难度条件,但又不能太大,以免浪费空间。
比特币使用 32 位值,其本身并不够大。这就是为什么哈希中还有其他因素可以更改以生成更广泛的输入,以及交易块的“extranonce”部分。
设计链条时,请确保不会创造无法满足的条件。在某些情况下,即使 64 位值也不够大,无法获得令人满意的哈希值,因此请确保还有其他可以根据需要进行调整、重新排序或递增的内容。
32 位值可能看起来很大,但实际上没什么。现代比特币挖矿硬件每秒可以处理超过 10 terahashes。这意味着尝试所有 32 位值大约需要 0.4 毫秒。
如果您没有额外随机数,则需要使用 64 位值,因为它无法进行详尽的测试,并且当与时间戳结合使用时,您应该在输入上有足够的变化,以便始终可以得到令人满意的哈希值找到了。
4 个字节
unsigned int
就足够了。我不知道你打算如何设计你的区块链,但你通常不必为随机数设置太大的值,因为当新交易进入时你会不断更改块
最大无符号 8 字节,但 4 字节就足够了