如何在区块链上实现去中心化数据仓库共享(一)

本文主要讨论使用区块链智能合约和数据仓库安全共享去中心化数据。

背景

Alice和Bob想双方相互共享数据,但不是以传统集中的模式进行。集中数据存储在一个位置或一个公司,这就使数据面临着不安全,公开,不受控制(简而言之被滥用)的风险。

集中数据共享:面临数据可能丢失、被盗、出售等风险

相反Alice和Bob希望以去中心化的方式共享数据。去中心化的数据是由多个地点由多个公司持有。这可能会使数据更安全、更私密、更可控。

去中心化的数据共享:降低滥用风险

本文的其余部分讨论了此重要问题的解决方案。

讨论

Alice和Bob希望共享数据,包括消息、邮件、文档、图像和任何其他分散在云端中某处的文件。

共享数据包括存储数据和控制谁有权访问哪些数据以及何时访问。

解决这个问题的方法之一是将数据访问控制与数据存储分开。

我们想在区块链上使用智能合约来控制对数据的访问,因为智能合约非常擅长控制谁在何时何地做什么,何时何地执行,并且它们存在于去中心化平台上。

然而由于存储成本非常高的原因,区块链并不适合存储数据。存储一小部分字节的开销已经足够大了,存储一个文件的开销往往高得让人望而却步,有时甚至不可能。

我们认为,安全地存储共享数据的最佳位置是只有用户可以在数据保险存储服务器上访问这些数据,并且由用户决定使用哪个数据仓库存储服务器(或数据仓库存储服务器的组合)。

因此Alice和Bob都想在他们选择的数据仓库服务器上共享他们的数据,用户访问由智能合约控制,所有这些都通过互联网连接在一起。

智能合约和数据仓库必须提供哪些功能才能启用此解决方案?

组合功能

所需的用户角色,计算机状态和对象取决于所部署的特定智能合约。但是当智能合约与数据仓库交互时,双方必须指定和实现可能的对象和操作。

为此需要智能合约和数据仓库存储接口规范。

  • 智能合约功能

智能合约对可以在哪些对象上执行哪些操作,通过哪些角色以及在哪种计算机状态下进行编码。

某些智能合约功能可以由用户直接调用,而某些可以由数据仓库调用。

智能合约导出一个公共接口,该接口提供检查和更改当前机器状态的用户功能。

智能合约中可能的角色和机器状态包括:

智能合约还导出符合接口规范的公共接口,从而为数据仓库提供检查在当前机器状态下是否允许角色对对象执行操作的功能。

因此数据仓库操作的控制被编码在智能合约中。

  • 数据仓库功能

数据库保存加密的文件,并且必须要清楚智能合约的区块链上接口规范的地址。

每当用户向数据存储库发出对对象执行操作的请求时,数据存储库将与智能合约一起检查用户是否具有执行该操作的权限(考虑到智能合约的计算机状态),如果有,则执行该操作。

数据仓库与智能合约一起检查是否允许用户请求

数据仓库保存具有以下操作的对象:

  • 智能合约和数据仓库操作

合约所有者创建智能合约并将其部署在区块链上,然后创建一个将使用它的数据仓库。这两个组件都必须符合接口规范。

用户可以向智能合约或数据仓库发出请求。

智能合约请求检查或更改合约的机器状态。

当其中一个用户发出数据仓库请求时,数据仓库会在执行之前与智能合约检查是否允许该操作。

只有智能合约所有者可以终止智能合约,并且他们可以在智能合约允许的任何时间终止智能合约。终止的合约会将所有剩余资金释放给合约所有者,最终将导致数据保管库被删除。

示例解决方案

我们将提供一个有效的解决方案,使用datona-cli提供针对此问题的可行解决方案。下一章节会涉及到。

结论

Alice和Bob以及其他许多人都希望能够以分散的方式共享数据。这可能会使数据更安全、更私密、更可控。

结合使用智能合约和符合接口规范的数据仓库来做到这一点是很实际的。

原文作者:Julian Goddard

译者:链三丰

译文出处:http://bitoken.world