该 NIP 定义了一种为 NOSTR Notes 生成和解释工作证明的方法。工作量证明(Proof of Work,POW)是一种将计算工作量的证明添加到笔记的方法。这是一个承载证明,所有中继和客户端都可以使用少量代码进行普遍验证。这种证明可以作为垃圾邮件威慑的一种手段。
difficulty 定义为 ID 中 NIP-01 的前导零位的数量。例如,的 000000000e9d97a1ab09fc381030b346cdd7a142ad57e6df0b46dc9bef6c7e2d ID 在 36 前导 0 位上有困难 36。
采矿
要为 NIP-01 便笺生成功率, nonce 需要使用标签:
{"content": "It's just me mining my own business", "tags": [["nonce", "1", "20"]]}
挖掘时,更新 nonce 标记的第二个条目,然后重新计算 ID(请参阅)。如果 ID 具有所需数量的前导零位,则该音符已被挖掘。建议在此过程中也更新 created_at。
nonce 标签 SHOULD 的第三个条目包含目标难度。这使得客户端可以防止以较低难度为目标的批量垃圾邮件发送者幸运地匹配较高难度的情况。例如,如果你需要 40 位来回复你的线程,并且看到提交的目标为 30,则即使注释有 40 位的困难,你也可以安全地拒绝它。没有一个承诺的目标难度,你不能拒绝它。对目标难度的承诺是所有诚实的矿工都应该接受的,如果缺少难度承诺,客户 MAY 会拒绝与目标难度匹配的票据。
挖掘的注释示例
{
"id": "000006d8c378af1779d2feebc7603a125d99eca0ccf1085959b307f64e5dd358",
"pubkey": "a48380f4cfcc1ad5378294fcac36439770f9c878dd880ffa94bb74ea54a6f243",
"created_at": 1651794653,
"kind": 1,
"tags": [
[
"nonce",
"776797",
"20"
]
],
"content": "It's just me mining my own business",
"sig": "284622fc0a3f4f1303455d5175f7ba962a3300d136085b9566801bc2e0699de0c7e31e44c81fb40ad9049173742e904713c3594a1da0fc5d2382a25c11aba977"
}
正在验证
下面是一些参考 C 代码,用于计算 NOSTR 注释 ID 中的难度(即前导零位的数量):
int zero_bits(unsigned char b)
{
int n = 0;
if (b == 0)
return 8;
while (b >>= 1)
n++;
return 7-n;
}
/* find the number of leading zero bits in a hash */
int count_leading_zero_bits(unsigned char *hash)
{
int bits, total, i;
for (i = 0, total = 0; i < 32; i++) {
bits = zero_bits(hash[i]);
total += bits;
if (bits != 8)
break;
}
return total;
}