【问题标题】:How big should be "nonce" be in a blockchain?区块链中的“nonce”应该有多大?
【发布时间】:2018-02-26 00:02:35
【问题描述】:

我正在尝试创建自己的区块链,以了解它们的工作原理。我想知道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;
};

【问题讨论】:

  • 使用uint64_t nonce; 足够大以防止重复。

标签: c blockchain cryptocurrency


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我会使用 C 内置的 rand(); 函数来生成随机数吗?
    • 通常随机数值是按顺序尝试的,因为随机选择它们没有任何好处。在设计良好的区块链算法中,任何随机数都有相同的机会满足条件。
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多