Blockchain 工作证明的临时凭证如何确保区块中的有效交易记录?
我是区块链新手,在理解事物的同时学习用javascript实现它。我有一个问题,我试着寻找了很多,没有得到任何明确的解释 问题:假设我有3条事务记录和以前的块散列。我还发现了Nonce值。加起来,我在前面得到了所需的4'0散列。现在我读到的每一篇文章都说这证明了block的有效性。但是怎么做?!我的意思是,如果在找到散列之前,我(或某人)篡改了这3个事务。我可以再次找到一个4'0's的散列,但这次我更改了这3笔交易中的金额(使它们出错) 我们如何才能确保这些交易金额是合法的。考虑到这是最新的块,我关心这3个交易记录的有效性。 如果工作证明不能保证关键信息(交易记录),那么这又有什么意义呢。什么东西验证块中的事务记录没有错误?(矿商在向区块链添加区块之前,没有对其进行篡改) JS中的工作证明和哈希块函数:Blockchain 工作证明的临时凭证如何确保区块中的有效交易记录?,blockchain,cryptocurrency,Blockchain,Cryptocurrency,我是区块链新手,在理解事物的同时学习用javascript实现它。我有一个问题,我试着寻找了很多,没有得到任何明确的解释 问题:假设我有3条事务记录和以前的块散列。我还发现了Nonce值。加起来,我在前面得到了所需的4'0散列。现在我读到的每一篇文章都说这证明了block的有效性。但是怎么做?!我的意思是,如果在找到散列之前,我(或某人)篡改了这3个事务。我可以再次找到一个4'0's的散列,但这次我更改了这3笔交易中的金额(使它们出错) 我们如何才能确保这些交易金额是合法的。考虑到这是最新的块,
//散列单个块
Blockchain.prototype.hashBlock=函数(previousBlockHash、currentBlockData、nonce){
const dataAsString=previousBlockHash+
nonce.toString()+
stringify(currentBlockData);
常量散列=sha256(数据串);
返回散列;
};
//工作证明
Blockchain.prototype.proofwork=函数(previousBlockHash,currentBlockData){
设nonce=0;
让hash=this.hashBlock(previousBlockHash、currentBlockData、nonce);
while(hash.substr(0,4)!='0000'){
nonce++;
hash=this.hashBlock(previousBlockHash、currentBlockData、nonce);
//console.log(散列);
}
返回当前值;
};
交易记录本身由最初创建交易的一方进行数字签名。只有他/她具有生成事务的私钥。当您更改事务记录中的一个值时,数字签名将无效,因此事务本身将无效。您可以更改事务记录数据,但是其他节点不会接受此事务(或挖掘的块),因为它包含无效数据
检查交易记录本身是否有效与挖掘新区块所需的工作证明无关。我将尝试给出一个简单的答案,因为理解解决方案不需要很多细节 首先,让我们看看事务由什么组成:
- 钱来自的地址
- 钱要寄到的地址
- 金额
- “发件人”地址指以前的交易
- 上一笔交易中的金额需要完全支出。因此,如果里面有太多的内容,你将有第二个“收件人”地址,它在你的控制之下,基本上把其余的内容转移回你自己
- 在一个事务中可以有多个“发件人”地址和“收件人”地址。每个“发件人”地址都需要公钥和签名
- 该事务实际上包含一个脚本,说明如何验证地址和签名。如果您扩展该脚本中使用的语言,那么您正在谈论智能合约
- 有一些私钥可以生成多个公钥,因此可以生成多个地址,因此您不必管理多个私钥
- 无法验证“收件人”地址是否有效。所以你可以把钱转移到一个没有人有私钥的地址
您可以在此处找到交易内容的复杂细节:谢谢,伙计,问题:其他节点如何检查交易的数字签名是否有效?@krupeshAnadkat,这取决于区块链/交易的实施和规范。在比特币区块链的情况下,如何检查,节点如何检查(我相信网络中的物理计算机)验证这些交易的数字签名?@krupeshAnadkat您可以阅读比特币脚本引擎如何用于验证交易的签名是否有效。谢谢:)很久以来我一直对此感到困惑。这真是一个很好的解释,我想在添加了您的答案之后,我所有的拼图都适合了:)