如何在区块链上签署矿工奖励?
How to sign miners rewards on a blockchain?
如果我要问一些愚蠢的问题,请不要杀了我。但我对整个加密世界都非常菜鸟,而且我对它的技术非常着迷。
因此,出于教育目的,我决定按照或多或少的比特币原则构建我自己的区块链(使用 secpbk1 曲线生成 ECC 密钥对, SHA256 作为哈希算法,基于前一个块的时间戳的动态差异,p2p 连接等。)。但我已经到了对区块链钱包本身感到非常困惑的地步。
据我目前所知,每笔交易 都必须 由钱包签名。所以我的交易基本上有三个字段:input、outputs 和 id。由于用户的钱包签署了交易的 outputs 字段,因此如果不使用属于包含在 public 密钥的同一私钥再次签名,则无法再更改input字段,如何奖励矿工?
如果我做对了,矿工会创建一个由链使用 outputs 字段中的费用以某种方式签署的交易,或者要求链本身生成并签署一个该矿工的特殊 奖励 交易。
我遵循的指南使用的是第二种方法,每次在客户端上执行程序时都会生成一个区块链钱包。这种方法让我感到困惑:
每次重新上线时,客户不会为“他的”区块链生成一个新钱包吗?如果是这样,这不会对链上签署的交易造成混乱吗?因为每个签署自己奖励的矿工(因此是同行)将使用与其他同行不同的区块链钱包?这不会导致任何问题吗?
我第一个可能想到的是,如果我们生成一个新的区块链钱包,为矿工签署奖励,每个节点都会创建一个不同的钱包,这样会不会导致很多“幽灵”钱包从无处吐出奖励代币的链条?这应该发生吗?
因为我认为用手续费金额奖励矿工肯定更直接,但这根本不能解决我的疑虑。由于交易的输出是在创建时签署的,发起交易的节点如何预先知道可能找到区块的矿工?如果他不知道,矿工怎么可能在不篡改交易本身的情况下“提取”奖励呢?当然它可以创建一个新的交易,并将其添加到区块中。但谁会签署该交易?这些奖励代币从何而来?
如果答案不是每次都生成一个新钱包,那么您可以在哪里存储链钱包的第一个私钥,在没有人可以看到的情况下,但仍然可以使用它,而无需把服务器放在中间?
在我看来,这打破了整个去中心化的概念,并且会增加单点故障。
我还实现了一个交易池,它会自动过滤掉无效(篡改)的交易,每当矿工请求其中的一个子集在一个块中标记时。但这是否意味着唯一例外的矿工可以篡改交易,因为它将在区块中“伪造”?那么,如果它一旦进入链中就被篡改了,谁会在乎呢? MEEEEEH 听起来一点都不好听。
我很困惑,晚上梦见密钥对。请帮助我。
wouldn't a client generate a new wallet for "his" blockchain each time it goes back online? If so, wouldn't this create a mess on the transactions signed on the chain? Since each miner (therefore peer) signing its own reward would use a different blockchain wallet than the other peers? Wouldn't this lead to any problems?
你不说你认为这会导致什么问题。想不出来了。
For what I think is definitively more straightforward to use the fee amount to reward the miner, but this doesn't solve my doubts at all. Since the outputs of the transactions are signed upon creation, how could the peer initiating the transaction know upfront the possible miner who finds the block? And if he can't know it, how could possibly the miner "extract" its reward without tampering the transaction itself?
对此最简单的解决方案是交易本身只包含其输入和输出。费用是总输入与总输出之间的差额。
矿工只是将交易包含在他们开采的交易区块中。他们还向区块中添加了一笔额外的交易,向自己发送奖励。显然,他们知道自己的目的地地址。每个收到新开采的区块的参与者都会检查以确保此交易有效(就像他们检查其他交易一样)并且不会要求超过允许的奖励。
And if the answer is not to generate a new wallet each time, where could you possibly store that very first private key of the chain's wallet where no one can see it, but still be able to use it, without having to put a server in the middle?
通常在本地磁盘上的文件中。私钥并不是真正需要的——你只需要它来发送。你不需要它来挖掘或报告。因此只有在实际需要时才可以提示或解密。
Of course it could create a new transaction, and add that to the block. But who would sign that transaction? From where those reward tokens come?
通常的规则是奖励交易没有输入,一个输出,没有签名。这些代币来自无人认领的矿工奖励代币池,根据区块链的设计,这些代币可以是有限的或无限的。 (对于比特币,这个矿池是有限的。)
如果我要问一些愚蠢的问题,请不要杀了我。但我对整个加密世界都非常菜鸟,而且我对它的技术非常着迷。
因此,出于教育目的,我决定按照或多或少的比特币原则构建我自己的区块链(使用 secpbk1 曲线生成 ECC 密钥对, SHA256 作为哈希算法,基于前一个块的时间戳的动态差异,p2p 连接等。)。但我已经到了对区块链钱包本身感到非常困惑的地步。
据我目前所知,每笔交易 都必须 由钱包签名。所以我的交易基本上有三个字段:input、outputs 和 id。由于用户的钱包签署了交易的 outputs 字段,因此如果不使用属于包含在 public 密钥的同一私钥再次签名,则无法再更改input字段,如何奖励矿工?
如果我做对了,矿工会创建一个由链使用 outputs 字段中的费用以某种方式签署的交易,或者要求链本身生成并签署一个该矿工的特殊 奖励 交易。
我遵循的指南使用的是第二种方法,每次在客户端上执行程序时都会生成一个区块链钱包。这种方法让我感到困惑:
每次重新上线时,客户不会为“他的”区块链生成一个新钱包吗?如果是这样,这不会对链上签署的交易造成混乱吗?因为每个签署自己奖励的矿工(因此是同行)将使用与其他同行不同的区块链钱包?这不会导致任何问题吗?
我第一个可能想到的是,如果我们生成一个新的区块链钱包,为矿工签署奖励,每个节点都会创建一个不同的钱包,这样会不会导致很多“幽灵”钱包从无处吐出奖励代币的链条?这应该发生吗?
因为我认为用手续费金额奖励矿工肯定更直接,但这根本不能解决我的疑虑。由于交易的输出是在创建时签署的,发起交易的节点如何预先知道可能找到区块的矿工?如果他不知道,矿工怎么可能在不篡改交易本身的情况下“提取”奖励呢?当然它可以创建一个新的交易,并将其添加到区块中。但谁会签署该交易?这些奖励代币从何而来?
如果答案不是每次都生成一个新钱包,那么您可以在哪里存储链钱包的第一个私钥,在没有人可以看到的情况下,但仍然可以使用它,而无需把服务器放在中间?
在我看来,这打破了整个去中心化的概念,并且会增加单点故障。
我还实现了一个交易池,它会自动过滤掉无效(篡改)的交易,每当矿工请求其中的一个子集在一个块中标记时。但这是否意味着唯一例外的矿工可以篡改交易,因为它将在区块中“伪造”?那么,如果它一旦进入链中就被篡改了,谁会在乎呢? MEEEEEH 听起来一点都不好听。
我很困惑,晚上梦见密钥对。请帮助我。
wouldn't a client generate a new wallet for "his" blockchain each time it goes back online? If so, wouldn't this create a mess on the transactions signed on the chain? Since each miner (therefore peer) signing its own reward would use a different blockchain wallet than the other peers? Wouldn't this lead to any problems?
你不说你认为这会导致什么问题。想不出来了。
For what I think is definitively more straightforward to use the fee amount to reward the miner, but this doesn't solve my doubts at all. Since the outputs of the transactions are signed upon creation, how could the peer initiating the transaction know upfront the possible miner who finds the block? And if he can't know it, how could possibly the miner "extract" its reward without tampering the transaction itself?
对此最简单的解决方案是交易本身只包含其输入和输出。费用是总输入与总输出之间的差额。
矿工只是将交易包含在他们开采的交易区块中。他们还向区块中添加了一笔额外的交易,向自己发送奖励。显然,他们知道自己的目的地地址。每个收到新开采的区块的参与者都会检查以确保此交易有效(就像他们检查其他交易一样)并且不会要求超过允许的奖励。
And if the answer is not to generate a new wallet each time, where could you possibly store that very first private key of the chain's wallet where no one can see it, but still be able to use it, without having to put a server in the middle?
通常在本地磁盘上的文件中。私钥并不是真正需要的——你只需要它来发送。你不需要它来挖掘或报告。因此只有在实际需要时才可以提示或解密。
Of course it could create a new transaction, and add that to the block. But who would sign that transaction? From where those reward tokens come?
通常的规则是奖励交易没有输入,一个输出,没有签名。这些代币来自无人认领的矿工奖励代币池,根据区块链的设计,这些代币可以是有限的或无限的。 (对于比特币,这个矿池是有限的。)