0

我正在尝试创建自己的区块链,以了解它们是如何工作的。我想知道应该有多大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;
};
4

2 回答 2

3

您需要一个足够大的随机数,以便在该数字范围内可能有一个满足您的难度条件的值,但又不能大到浪费空间。

比特币使用 32 位值,其本身不够大。这就是为什么哈希中还有其他因素可以更改以生成更广泛的输入,以及交易块的“extranonce”部分。

在设计您的链条时,请确保您不会创造不可能满足的条件。在某些情况下,即使是 64 位值也不足以获得令人满意的哈希值,因此请确保有其他可以根据需要调整、重新排序或递增的内容。

32 位的值可能看起来非常大,但实际上它什么都不是。现代比特币挖矿硬件每秒可以处理超过 10 terahashes 。这意味着尝试所有 32 位值大约需要 0.4毫秒

如果您没有 extranonce,您将需要使用 64 位值,因为这无法进行详尽的测试,并且当与时间戳结合使用时,您应该在输入上有足够的变化,以便始终可以找到令人满意的散列.

于 2018-02-26T00:18:12.480 回答
0

4 字节unsigned int就足够了。我不知道你打算如何设计你的区块链,但你通常不必为 nonce 设置太大的值,因为随着新交易的到来,你会不断改变区块

于 2018-02-26T00:07:37.403 回答