首页 > 解决方案 > 加密货币如何验证挖矿奖励是由系统发起且有效?

问题描述

我想验证挖矿奖励交易实际上是有效的,并且它是由系统发起的。目前我不知道如何验证系统的身份,没有硬编码公钥和私钥,这又不安全

目前我正在使用椭圆来生成密钥并验证它们。

  valid() {
    if (this.from === null) {
        return true;
        }
    if (!this.signature || this.signature.length === 0) {
        console.log('No signature on this transaction!\n');
        return false;
    }
    if (typeof this.amount !== 'number' || this.amount <= 0) {
        console.log('Amount must be a positive number\n');
        return false;
    }
    const publicKey = ec.keyFromPublic(this.from, "hex");
    return publicKey.verify(this.hash(), this.signature)
}

现在,如果发件人地址为空,即是挖矿奖励,则交易自动为真。然而,有人可以简单地给出一个“null”的发件人地址,然后基本上给自己钱。

我将如何验证挖矿奖励是否正确,并且仅在实际完成挖矿后才来自系统。

标签: javascriptblockchainsigning

解决方案


这取决于如何支付挖矿奖励。在基于账户的模型中,包含在标头中的矿工的余额可以根据挖矿奖励增加。世界状态不匹配将导致块被拒绝,确保系统相应地增加余额。在 UTXO 模型中,一种方法是让矿工自己签署空交易。这将验证他们控制“to”地址的私钥,但这并不是真正必要的。这一切都取决于您的系统的限制。在比特币中,coinbase 交易的规则是它应该是区块中的第一笔交易,并且输出的 utxo 包含的金额等于当前挖矿奖励 + 该区块中包含的费用。是有关比特币中coinbase交易的更多信息。


推荐阅读