区块链数据验证是怎样实现的

简介

在本文中,我将用示例代码来讲述我所知道的最简单的区块链应用程序的数据验证问题。

想象一下下面的用例。您收到一份经过多方认可的文件,但是又希望确保其的真实性。该文件可能是您正在购买的汽车的服务手册,也可能是一份购房文件,证明您正在购买的房子确实属于卖方。

 区块链数据验证是怎样实现的_设计制作_接口/总线/驱动

对文件进行数字签名以防止被篡改,这已经不是什么新鲜事。您可以获取文件的内容并使用你的私钥进行加密,生成一个加密文件,将该签名与文件一起发送给对方。

文档的接收者可以再次生成签名,并验证它是否与所提供的签名匹配。验证文档内容是否被篡改。

这是MD5校验和的结果,使用起来非常方便。它的缺点是您需要接收签名来验证文档的真实性。

由于从个人获取数据并非易于信任,因此有时第三方会介入提供记录保存服务以获取利润。这种利润动机是保持记录保持者诚实的原因。但不是一个完美的解决方案。但是可怕的是,如果经济激励措施改变,记录保管人可能会发生腐败。监管之人,谁人监管?

区块链可以为你做什么?

区块链数据     存储   是分散的、健壮的和不可更改的。

· 分散意味着数据分布式存储在不同的设备上。

· 健壮意味着即使某些参与者离开或停止合作,数据存储也将继续运行。

· 不可更改意味着一旦数据存储在区块链中,就不能更改。

区块链以优雅的方式解决文档注册问题。一旦我们在区块链注册表中输入一个签名,我们就不必担心签名会被修改以匹配被篡改的文档。要做到这一点,需要大部分网络参与者一致达到共识,这使得它几乎不为人所知。

在此上下文中,文档可以是任何数据集。同样的模式也适用于证明任何商业交易、物联网数据集或用户身份的真实性,以及其他许多模式。

现在,了解如何使用这个构建区块来设计更复杂的解决方案是非常有用的。所有区块链解决方案都依赖于存储用户生成的数据,这些数据可以在不依赖任何人的情况下被信任。

用例实施

这次我没有从头开始编写合同。我正试图停止重新发明轮子,区块链注册表已由十几个实施。

智能合约设计非常简单,只有一个相关的合同变量和两个函数。

1. 文档映射将为文档计算的哈希与添加该哈希的区块相链接。

2. add方法接受哈希并将其存储在映射中。

3. ver     if   iy方法返回哈希的时间戳。

pragma solidity ^0.4.18;

contract DocumentRegistry {

map     pi   ng (string =》 uint256) documents;

address contractOwner = msg.sender;

func     ti   on add(string hash)

public

returns (uint256 da     te   Added)

{

require (msg.sender == contractOwner);

var  TI meAdded = block.  TI mestamp;

documents[hash] =  TI meAdded;

return  TI meAdded;

}

function verify(string hash)

constant

public

returns (uint256 dateAdded)

{

return documents[hash];

}

}

前端可以使用contract.add上载文档,并将签名计算为文档内容的sha256。

async function uploadDocument() {

let fileReader = new FileReader();

fileReader.onload = function() {

let documentHash = sha256(fileReader.result);

contract.add(documentHash, function(err, result) {…});

}

《}

前端还可以允许上载带有contract.verify的文档,以及是否在上载之前,它将告知您大约何时上载。

function verifyDocument() {

let fileReader = new FileReader();

fileReader.onload = function() {

let documentHash = sha256(fileReader.result);

contract.verify(documentHash, function(err, result) {

let contractPublishDate = result.toNumber();

if (contractPublishDate 》 0) {

let displayDate = new Date(

contractPublishDate * 1000

).toLocaleString();

showInfo(

`Document ${documentHash} is 《b》valid《b》,

date published: ${displayDate}`

);

}

else

return showError(

`Document ${documentHash} is 《b》invalid《/b》:

not found in the registry.`

);

});

}

}

这就是实现一个分布式的文档注册表所需要的全部内容,操作两件事情:

1.签署文件

2.验证文件签名后是否发生了更改。

这是因为两个不同的文档具有相同签名的可能性非常接近于零。同时时间戳可以确定您提供的文档是在什么时候注册到注册表的。

智能合约的代码可以根据实际情况进行更新和改进,但这17行代码属于整个实现的核心部分。

结论

文档注册表是最具有商业价值的区块链应用程序的最简单实现。今天,它们在许多领域仍然是有相关的构建块之一,您可以在更复杂的解决方案中反复使用它们。

文档注册中心有效地利用区块链的分散性和不可篡改的属性,消除了信任任何人所提供的数据都是真实的。虽然这个想法很简单,但是具有革命性。

来源: 区块链研究实验室

32
8
0
3

相关资讯

  1. 1、Win7电脑怎么更改桌面背景图片?教你两招快速更改2210
  2. 2、Win1020H2系统睡眠模式变自动关机怎么回事?532
  3. 3、格式工厂怎么设置输出码率和大小?教你设置格式工厂输出配置的方法4021
  4. 4、支付宝怎么免押金租充电宝?支付宝免押金租充电宝的方法184
  5. 5、百度网盘、Winrar等解压文件解压出错怎么办?1017
  6. 6、Win7旗舰版如何设置默认网关4907
  7. 7、Win7电脑收藏夹不能用怎么解决?Win7电脑收藏夹不能用解决方法2427
  8. 8、Soul怎么添加表情?Soul添加表情的方法4805
  9. 9、如何解决Win10/Win11硬盘时常写入100%甚至电脑假死问题?4501
  10. 10、Win10系统admin忘记密码怎么办?找回admin密码的方法211
全部评论(0)
我也有话说
0
收藏
点赞
顶部