http://www.7klian.com

如安在区块链上实现去中心化数据客栈共享-part3

Alice和Bob已经在他们选择的数据客栈中共享数据,而智能会见节制着用户会见,这些会见都通过互联网链接在一起。

某些工具答允用户会见,而其他工具则克制用户会见

}
设计
         “e4″
我们已经展示了一个实用的办理方案,它利用智能合约和数据客栈的组合来实现这一点,这些都切合datona-lib中描写的接口类型。

这是我们将要陈设到以太坊
区块链的ChessDataShareSDAC智能合约:
以下是每个脚色答允的其他操纵:
    function getPermissions( address account, uint object ) 

智能合约成果可供用户和数据存储库利用

· 利用国际象棋数据共享
在任何环境下,只有智能合约所有者可以在合约答允的环境下终止合约。终止的合约将向智能合约所有者释放任何剩余资金,并将删除数据客栈。

                    return DIRECTORY | APPEND_PERMISSION;
     Alice Terminal
contract  account2   Await1  done – move to Await1
Alice和Bob以及其他很多人都但愿可以或许以分手的方法共享数据。这大概会使数据更安详、更私密、更可控。
    }
这里我们有3个并发状态机:合约所有者可以随时终止智能合约;数据可以像[如
安在区块链上实现去中心化数据客栈共享-part2](http://bitoken.world/wp-admin/post.php?post=2134&action=edit “如安在区块链上实现去中心化数据客栈共享-part2”)中那样共享数据。用户轮番将国际象棋移动文件附加到folder3(Await1和Await2呆板状态)。
folder3   account2   Await2  read, append new file
       Smart Contract Owner Terminal
$ datona transactContract $contractCode $contract done
         “e5″
       Alice Terminal
$ datona writeVault $contract $vaultUrl $vaultSrvId –file $A/msg10

Alice和Bob也想下棋。
            if (object == 3) {
         “Nf3″
这个例子还演示了用户和智能合约之间的直接交互。

这是智能合约的UML逻辑状态机图:

         “Your go”
        }
        return DataShareSDAC.getPermissions(account, object);
他们都有属于本身的棋盘和棋子,他们只需要在数据客栈中生存一份移动记录就行。我们还可以在状态机中对轮到谁的代码举办编码,用户可以通过直接挪用智能合约来对其举办影响。
contract  account1   Await1  done – move to Await2
                if (account == (turn2 ? account2 : account1)) {
数据客栈利用图表中数据共享部门中显示的函数来确定对工具的答允操纵。
contract ChessDataShareSDAC is DataShareSDAC {
这些移动将写入到folder 3中的文件中。我们在下面为文件名提供了序号,可是在完整办理方案中将由DApp打点。
$ datona writeVault $contract $vaultUrl $vaultSrvId –file $C/move03
    DataShareSDAC(_account1, _account2) { }
配置智能合约是为了让Alice首先执行。在指定了本身的流动之后,Alice必需直接与智能合约举办通信,以奉告她已经完成了本身的流动并转换了呆板状态(利用UML和智能合约中的操纵):
· 陈设智能合约
Alice或她的DApp可以监督下一个移动文件的存在:

                } else {
        require(msg.sender == (turn2 ? account2 : account1));
                    return DIRECTORY | READ_PERMISSION;
在此示例中,智能合约可以由任何用户(智能合约所有者)建设。大概是Alice、Bob或其他人。
我们上一篇文章中的共享去中心化数据办理方案中的示例描写了数据客栈上用户之间的交互,该交互由智能合约节制。
用户还可以将一个包括棋子移动的新文件附加到上图中的共享文件夹-3中。
done函数可由任一用户(实际上,任何故太坊用户)挪用。可是,它确保只有轮到用户才气变动呆板状态,并通过require(msg.sender == turn)防备其他任何用户。该函数使turn2变量指示它是另一位用户的回合。

Object    Role       State   Permitted Operations
此智能合约包括一个函数getPermissions,该函数重写基类中同名的函数。挪用此函数,并可以选择是否挪用基类函数。它会这样做,而不是确定新棋步文件夹(工具3)的会见权限。
    public view override virtual returns (uint) {
$ datona writeVault $contract $vaultUrl $vaultSrvId –file $C/move01
假如不是合约所有者(假如不是Alice或Bob)无法会见任何人的数据。
$ datona transactContract $contractCode $contract done
建设部门请参考上一篇文章,这里就不反复操纵。

国际象棋数据共享示例智能合约的UML逻辑状态机图
国际象棋数据共享示例
         “Are you Ready for a game? I go first”
VaultError – File does not exist
    constructor( address _account1, address _account2 ) public
$ datona writeVault $contract $vaultUrl $vaultSrvId –file $B/msg21
我们将account1和folder1分派给Alice,将account2和folder2分派给Bob。

$ export C=folder13
游戏大概会以同样的方法继承。

本文提供了在Solidity中共享分手数据的另一个示例办理方案,Solidity是的智能合约的开拓语言。
            }
$ datona readVault $contract $vaultUrl $vaultSrvId –file $C/move02

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读