售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
本文提供了一个在实度中共享分散数据的示例解决方案,实度是区块链以太网的智能契约开发语言。
背景
最后一篇文章块链研究实验室|如何在块链中实现分散数据仓库共享-第1部分,以下是使用Datona的交互式命令行界面(datona-cli)的示例解决方案。
爱丽丝和鲍勃将在他们选择的数据仓库中共享他们的数据,并通过智能合同控制用户的访问,所有这些都通过互联网连接在一起。
使用智能合同来控制对数据仓库的访问
这不仅是一份智能合同,也是一份智能数据访问合同。
数据共享示例
这个例子旨在为爱丽丝和鲍勃提供一个解决方案。任何需要的功能都可以编码到智能合同中。
在本例中,智能合同可以由任何用户(智能合同所有者)创建。它可能是爱丽丝或鲍勃,或其他人。
在任何时候,如果合同允许,只有聪明的合同所有者可以终止合同。终止的合同将向智能合同所有者释放任何剩余资金,并删除数据仓库。
有些对象允许用户访问,但有些对象禁止用户访问。
在上图中,两个用户爱丽丝和鲍勃可以读写数据到他们自己在数据库中的文件夹。他们也可以从其他用户的文件夹中读取消息,但不能向他们写入。
合同所有者(除了爱丽丝或鲍勃)不能访问任何人的数据。
我们将在终端窗口中使用datona-cli命令来:
1.部署合同
2.创建数据仓库
3.并执行对象操作
您还可以使用该应用程序与Datona库(datona-lib)进行交互。智能合同是用实写的,部署在区块链的以太网上。
数据仓库服务器的地址是datonavault.com。其他数据仓库也是可用的。
智能合同设计
我们将帐户1和文件夹1分配给爱丽丝,帐户2和文件夹2分配给鲍勃。
这是智能契约的UML逻辑状态机图:
数据共享示例智能契约的UML逻辑状态机图
在这个例子中,只有一个操作状态:数据共享,这将使实现相对容易。通常,智能合同必须处理多个州。
除了终止之外,datavault使用显示的所有函数来确定对象上允许的操作。本例中没有用户函数。
终止只能由聪明的合同所有者使用。终止是一种逻辑状态。这不同于删除智能合同。终止后,您仍然可以访问合同并确定它是否已被终止。
每个角色都允许执行以下操作:
对象角色状态允许的操作
合同所有者股份终止
文件夹1帐户1共享所有文件(读、写、追加)
文件夹1帐户2共享读取目录,文件
文件夹2帐户2共享所有文件(读、写、追加)
文件夹2帐户1共享读取目录,文件
创建智能合同
这是我们将部署到区块链以太博物馆的SolidDataShareSDAC:
导入“SDacinterface . sol”;
合同数据共享数据是SDACinterface {
地址公共所有者=msg.sender
地址帐户1;
地址帐户2;
bool已终止;
构造函数(address _account1,address _account2)公共{
帐户1=_帐户1;
account2=_ account2
{}
函数终止()公共覆盖{
要求(msg.sender==所有者);
终止=真;
{}
函数hasExpired()公共视图重写返回(bool) {
退货终止;
{}
函数getPermissions(地址帐户,uint对象)
公共视图覆盖虚拟返回(uint) {
如果(!终止){
if (account==account1) {
if (object==1)返回DIRECTORY | ALL _ PERMISSIONS
if (object==2)返回DIRECTORY | READ _ PERMISSION
{}
if (account==account2) {
if (object==2)返回DIRECTORY | ALL _ PERMISSIONS
if (object==1)返回DIRECTORY | READ _ PERMISSION
{}
{}
返回否_权限;
{}
{}
此智能合约符合datona-lib描述的智能数据访问合约接口规范,并在SDACinterface基础智能合约(也包含普通对象权限常量(中实现为虚拟函数。
虚拟函数必须由派生的智能合约定义(使用覆盖),以启用与数据保险库的交互。在编写本文时,函数是终止、已过期和获取权限,但是请注意如果你的计划与示例不同,请查阅datona-lib获取最新规范帮助。
datavault操作由获取权限控制,getPermissions返回给定帐户和对象的适当属性(可引导、可读、可写、可附加).
部署智能合约
在混合,拜占庭v0.6.10中编译固态代码。
创建一个文件DataShare.sdac,其中包含智能合约ABI,字节码和运行时字节码,格式与达图纳持续时间_SDAC示例的相似:
DataShare.sdac
{
" abi":
复制数据共享的混音/实度编译器/ABI文本
合同在这里
,
"字节码“:
复制混音/实度编译器/编译细节/字节码
这里是数据共享合同
,
"运行时字节码“:
复制混音/实度编译器/编译细节/运行时
这里是数据共享契约的字节码
{}
按照datona-cli中的示例,我们可以将合约部署到以太坊区块链。
在终端窗口中,我们将为爱丽丝和鲍勃生成一些密钥,并以智能合约所有者的身份单独存在:
智能合同所有者终端
$ datona generateKey AliceKey
$爱丽丝Alice=` datona GetAddress Alice key
$ datona generateKey BobKey
$ Bob=`datona getAddress BobKey
$ #提供关键资金,如datona-cli示例中所述
$ contractCode=DataShare.sdac
$ datona部署区域$合同代码$爱丽丝$鲍勃-密钥所有者
0x3e 68 b5 b 74073993 f 7220 CFB 851 b 9 b 0 D3 af 8444 D8
$ contract=0x3e 68 b5 b 74073993 f 7220 CFB 851 b 9 b 0 D3 af 8444 D8
创建数据仓库
让我们配置数据仓库的访问,然后我们将能够如datona-cli中所述创建数据仓库:
智能合同所有者终端
$ VaUcultral=文件://77。68 .75 .33333333476
$ vault srvid=0x 288 b 32 f 2653 C1 d 72043d 240 a7 f 938 a 114 ab 69584
$ datona创建保险库$合同$保险库文化$ VaultsVid-密钥所有者
.响应类型: "成功".
$导出A=文件夹1
$导出B=文件夹2
有关实际的文件夹名称格式,请参见代托纳自述文件。
使用数据共享
我们可以以爱丽丝身份打开终端窗口,然后将数据写入数据仓库:
爱丽丝终端
$ export DATONA_KEY=AliceKey
$ datona writeVault $合同$文化$ VaultsVid-文件$ A/msg 11
"嗨,鲍勃,爱丽丝打来的"
这将写入文件夹名称"一美元“,文件名“msg01”,内容嗨,鲍勃,来自爱丽丝。
我们不必费心在下面的终端输出中显示响应类型: "成功"消息。
让我们为鲍勃打开一个终端窗口,并列出文件名和文件数据,然后响应:
鲍勃码头
$ export DATONA_KEY=BobKey
$ datona readVault $合同$ vau文化$ VaultsVid-文件一美元
msg01
$ datona Readvault $合同$ vaultual $ vaultSrvId-文件$ A/msg 11
嗨,鲍勃,爱丽丝打来的
$ datona writeVault $合同$文化$ VaultsVid-文件美元信息
"嗨,爱丽丝,鲍勃打来的"
$ datona writeVault $合同$文化$ VaultsVid—文件美元邀请
"咖啡?”
爱丽丝可以列出文件名,然后列出文件数据:
爱丽丝终端
$ datona readVault $合同$文化$ VaultsVid-文件$B
信息
邀请
$ datona readVault $合同$文化$ VaultsVid-文件美元信息
嗨,爱丽丝,鲍勃打来的
$ datona readVault $合同$文化$ VaultsVid-文件美元邀请
咖啡?
对话可以继续,并且可以发送和接收数据文件。
本节说明了由智能合约控制的爱丽丝和鲍勃在数据仓库上的交互操作。
数据仓库通过智能合约检查用户请求是否被允许
在某个阶段,智能合约所有者可以终止合约,并且数据保管库将被自动删除。
智能合同所有者终端
$ datona terminateContract $合同代码$合同-密钥所有者
另一个示例解决方案
当共享分散的数据时,我们将使用datona-cli为这个问题提供另一个扩展的工作解决方案。
结论
爱丽丝、鲍勃和许多其他人希望以分散的方式共享数据。这可能会使数据更安全、更私密、更可控。
我们已经演示了一个实用的解决方案,它使用智能契约和数据仓库的组合来实现这一点,所有这些都符合datona-lib中描述的接口规范。
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!