简单的区块链数据验证应用程序
2019-06-27 11:25 栏目:经验之谈 来源: 查看()
简介
在本文中,我将使用示例代码来说明我所知道的最简单的区块链应用程序的数据验证问题。
想象一下下面的用例。您收到的文件已获得多方认可,但您希望确保其真实性。此文件可能是您购买的汽车的服务手册,也可能是购买文件证明您购买的房屋确实是卖家。
对数据进行数字签名以防止它们被篡改并不是什么新鲜事。您可以获取文件的内容并使用您的私钥对其进行加密,生成加密文件,并将签名与文件一起发送给另一方。
文档的收件人可以再次生成签名并验证它是否与提供的签名匹配。验证文档的内容是否已被篡改。
这是MD5校验和的结果,使用起来非常方便。缺点是您需要收到签名以验证文档的真实性。
由于从个人获取数据不容易信任,有时第三方参与提供记录保存服务以获取利润。这种利润动机是保持记录保持者诚实的原因。但不是完美的解决方案。但可怕的是,如果经济激励措施发生变化,记录保管人可能会腐败。谁由主管监督?
区块链可以为您做什么?
区块链数据存储是分散的,健壮的,不可更改的。
·权力下放意味着数据分布在不同的设备上。
·强大意味着即使一些参与者离开或停止工作,数据存储仍将继续运行。
·不可更改意味着一旦数据存储在区块链中,就无法更改。
区块链以优雅的方式解决了文档注册的问题。一旦我们在区块链注册表中输入签名,我们就不必担心签名被修改以匹配伪造的文档。要做到这一点,大多数网络参与者需要达成共识,这几乎是未知的。
在此上下文中,文档可以是任何数据集。相同的模型适用于任何商业交易,物联网数据集或用户身份的真实性,以及许多其他模式。
现在,了解如何使用此构建块来设计更复杂的解决方案非常有用。所有区块链解决方案都依赖于存储可信赖的用户生成数据,而无需依赖任何人。
用例实现
这次我没有从头开始写合同。我试图停止重新发明轮子,区块链注册表已经实施了十几个。
智能合约设计非常简单,只有一个相关的合约变量和两个功能。
1.文档映射将为文档计算的哈希链接到添加哈希的块。
2. add方法接受哈希并将其存储在地图中。
3. verifiy方法返回哈希的时间戳。
Pragma solidity ^ 0.4.18;
合同文件注册{
mapping(string=> uint256)documents;
地址contractOwner=msg.sender;
函数add(string hash)
public
返回(uint256 dateAdded)
{>
require(msg.sender==contractOwner);
var timeAdded=block.timestamp;
documents [hash]=timeAdded;
返回时间已添加;
}
函数验证(字符串哈希)
常数
public
返回(uint256 dateAdded)
{>
返回文件[哈希];
}
}
前端可以使用contract.add上传文档,并将签名计算为sha256以获取文档内容。
异步函数uploadDocument(){>
让fileReader=new FileReader();
fileReader.onload=function(){>
let documentHash=sha256(fileReader.result);
contract.add(documentHash,function(err,result){.});
}
<}
前端还可以允许使用contract.verify上传文档,以及在上传之前是否会告诉您何时上传。
函数verifyDocument(){>
让fileReader=new FileReader();
fileReader.onload=function(){>
let documentHash=sha256(fileReader.result);
contract.verify(documentHash,function(err,result){>
let contractPublishDate=result.toNumber();
if(contractPublishDate> 0){>
让displayDate=new Date(
contractPublishDate * 1000
).toLocaleString();
showInfo(
`凭证$ {documentHash}是< b>有效< b>
发布日期: $ {displayDate}`
);
}
否则
返回showError(
`凭证$ {documentHash}是< b>无效</b>
在注册表中找不到。
);
});
}
}
这是实现分布式文档注册表所需的全部操作,操作两件事:
1.签署文件
2.验证文件自签名后是否已更改。
这是因为两个不同文档具有相同签名的可能性非常接近于零。同时,时间戳可以确定您提供的文档何时在注册表中注册。
智能合约的代码可以根据实际情况进行更新和改进,但17行代码属于整个实现的核心部分。
结论
文档注册表是最具商业价值的区块链应用程序的最简单实现。如今,它们仍然是许多领域的基石之一,您可以在更复杂的解决方案中重复使用它们。
文档注册表有效地利用了区块链的分散和非可篡改属性,消除了对任何人提供的数据的真实信任。虽然这个想法很简单,但它具有革命性。
售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!