javascript - 加密货币如何验证挖矿奖励是由系统发起且有效?
问题描述
我想验证挖矿奖励交易实际上是有效的,并且它是由系统发起的。目前我不知道如何验证系统的身份,没有硬编码公钥和私钥,这又不安全
目前我正在使用椭圆来生成密钥并验证它们。
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”的发件人地址,然后基本上给自己钱。
我将如何验证挖矿奖励是否正确,并且仅在实际完成挖矿后才来自系统。
解决方案
这取决于如何支付挖矿奖励。在基于账户的模型中,包含在标头中的矿工的余额可以根据挖矿奖励增加。世界状态不匹配将导致块被拒绝,确保系统相应地增加余额。在 UTXO 模型中,一种方法是让矿工自己签署空交易。这将验证他们控制“to”地址的私钥,但这并不是真正必要的。这一切都取决于您的系统的限制。在比特币中,coinbase 交易的规则是它应该是区块中的第一笔交易,并且输出的 utxo 包含的金额等于当前挖矿奖励 + 该区块中包含的费用。这是有关比特币中coinbase交易的更多信息。
推荐阅读
- spring-boot - 在 CORS spring security + webFlux 中启用通配符
- javascript - 如何有效地将数组中的每个值与其他值进行比较?
- javascript - 如何使用 ReactJS 避免递归方法中的许多重新渲染
- mysql - PowerApps MySl - 下拉问题
- reactjs - 从 HashRouter 更改为 browserRouter 后,React router 4 路由停止工作
- r - R中不同行中相同字符串的总和
- php - 在父子类别中显示父子类别的其他子类别
- python - 对齐可迭代:错误“字符串无法从手动字段规范切换到自动字段编号”
- facebook - 使用 Fb SDK 使用 Facebook 进行 Cognito 登录
- typescript - 如何从 index.d.ts 中的@types 导入接口?