模拟多方参与的智能合约验证

开发者可以在沙箱环境中模拟一个基于区块链的简单商业网络:多个参与方按照共同协定的契约,履行各自的责任。

术语

参与方:模拟商业网络中组织或机构的某个角色。 智能合约:一套以数字形式定义的承诺,参与方可以在上面执行这些承诺的协议。
ABI:合约接口,包括变量、事件和可以调用的方法。

入门案例

本文将通过一个入门案例,介绍多方参与的智能合约交互过程。
参与方:用户A和用户B。
场景:A和B共同维护数据Data,初始值为5。
契约:只有A可以增加Data值,只有B可以查询Data值。

参与方

首先,添加两个参与方userA(orgA),userB(orgB)。
img

添加完成后,参与方会在区块链上获得对应的账户地址和对应的私钥。
img

如果某个参与方违反了契约,可以通过冻结操作,将其列入黑名单;激活操作,将其从黑名单中解除。
img

智能合约

目前仅支持用solidty语言编写的智能合约代码。关于solidity语言可以参考:https://solidity.readthedocs.io/en/develop/。

示例代码:

pragma solidity ^0.4.10;
contract SampleContract {
    int data;

    function SampleContract(int x) {
        data = x;
    }

    function addData(int x) {
        data += x;
    }

    function getData() constant returns (int retVal) {
        return data;
    }

}

将上述示例代码复制粘贴到:https://remix.ethereum.org。

其中,Bytecode是合约编译后的十六进制码: 6060604052341561000c57fe5b6040516020806100ce83398101604052515b60008190555b505b609a806100346000396000f300606060405263ffffffff60e060020a600035041663323352d68114602a5780633bc5de3014603c575bfe5b3415603157fe5b603a600435605b565b005b3415604357fe5b60496067565b60408051918252519081900360200190f35b60008054820190555b50565b6000545b905600a165627a7a723058201b8cf6a86104ce85378c1abc4c4ee74887ef284346b702863a565eafdbefec2c0029

Interface是合约的接口定义(ABI)
[{"constant":false,"inputs":[{"name":"x","type":"int256"}],"name":"addData","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getData","outputs":[{"name":"retVal","type":"int256"}],"payable":false,"type":"function"},{"inputs":[{"name":"x","type":"int256"}],"payable":false,"type":"constructor"}]

添加合约时,初始化参数输入5;ABI输入上面的Interface;合约代码为上面的Bytecode。
img

权限控制

设置userA可以调用addData方法,userB可以调用getData方法。
img img img

调用合约

首先,userB调用getData方法执行读操作,返回data初始值5。
img

然后,userA调用addData方法执行写操作(增加3),返回交易哈希码。
img

写操作需要共识等待,约3秒后,userB通过getData方法执行读操作,返回data值8。
img

userB试图调用addData方法,被拒绝。
img

结论

通过上述的入门案例,介绍了多方参与,权限控制和合约验证的操作过程。开发者可以在安链云上,尝试创建更多合约应用,实现简单商业网络。

如果您对区块链和智能合约应用于商业有合作意向或技术探讨,请联系:anlink@zhongan.io。

补充说明

使用限制:一个安链云账户只允许添加10个参与方和200份合约。