我想验证挖掘奖励事务实际上是有效的,并且它是由系统发起的。目前,我不知道如何验证系统的身份,如果不对公钥和私钥进行硬编码,这同样不安全
目前,我使用椭圆来生成密钥并验证它们。
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)
}现在,如果from地址为空,这意味着它是挖掘奖励,则事务自动为真。然而,一些人可以简单地给出一个"null“的发件人地址,然后基本上给自己钱。
我如何验证挖掘奖励是正确的,并且只有在挖掘实际上已经完成的情况下才来自系统。
发布于 2019-05-28 13:55:20
这取决于采矿奖励是如何支付的。在基于账户的模型中,头部中包含的矿工余额可以根据挖掘奖励增加。世界状态不匹配将导致块被拒绝,从而确保系统相应地增加余额。在UTXO模型中,一种方法是让挖掘器自己对空事务进行签名。这将验证他们是否控制了“收件人”地址的私钥,但这并不是真正必要的。这完全取决于您的系统的限制。在比特币中,coinbase交易的规则是它应该是区块中的第一笔交易,并且输出utxo包含的金额等于当前开采奖励+该区块包含的费用。根据BIP 34,coinbase还应包括当前块高度作为其数据的一部分。有关比特币的coinbase交易的更多信息,请参见this。
https://stackoverflow.com/questions/56308774
复制相似问题