主页 > imtoken官方版下载安卓最新版 > 从零开始玩转基于以太坊的联盟链Quorum系列02
从零开始玩转基于以太坊的联盟链Quorum系列02
从零开始玩转基于以太坊的联盟链Quorum系列02
注:上一节没有完成本地3节点网络的搭建,基于raft共识模型。 本节主要讲解智能合约在3节点网络上的部署和测试
Smart Contract 一个简单的智能合约实现
pragma solidity ^0.4.17;
contract SimpleStorage {
uint public storedData;
function SimpleStorage(uint initVal) public {
storedData = initVal;
}
function set(uint x) public {
storedData = x;
}
function get() public constant returns (uint retVal) {
return storedData;
}
}
Truffle 部署智能合约 创建一个新的 Truffle 项目
注:truffle是目前以太坊开发的主要工具链之一,由CONSENSYS开发。
mkdir test
cd test
truffle init
完成以上操作后,目录结构如下:
将上面的智能合约示例保存到 test/contracts 目录中作为 SimpleContract.sol
编译智能合约
truffle compile --all
执行后会生成build目录,内容如下:
编写部署文件migrations/2_deploy_simplestorage.js
var simple_storage = artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(simple_storage, 42, {privateFor:["3znvmFqqc63FyiW/bhxIlTHfAZ6xnuhMgPaxTchgJlg="]});
};
注意:privateFor表示这是一个私有合约,对所有节点不可见
修改 truffle.js 文件
module.exports = {
networks: {
development: {
host: "localhost",
port: 22000,
network_id: "*",
gas: 4600000,
gasPrice: 0
},
second_node: {
host: "localhost",
port: 22001,
network_id: "*",
gas: 4600000,
gasPrice: 0
},
third_node: {
host: "localhost",
port: 22002,
network_id: "*",
gas: 4600000,
gasPrice: 0
}
}
};
注意:端口号必须对应你本地实验网络中每个节点的端口号
将智能合约部署到链上
truffle migrate --reset
输出如下所示:
验证私人合同仅对允许的同行可见
var abi = 智能合约编译生成的abi
var private = eth.contract(abi).at(智能合约的地址)
在三个节点分别执行以上命令。 我们在node1上指定只有node3可以通过privateFor字段看到智能合约。 因此,通过private访问智能合约时以太坊是联盟链还是私有链,只有node1和node2可以看到数据状态。 执行效果如下:
在私有合约的基础上验证只有privateFor节点可以接收
在node1上发布一个privateFor["node2", "node3"]智能合约以太坊是联盟链还是私有链,然后在node1中执行
private.set(199, {from:eth.coinbase, privateFor:["3znvmFqqc63FyiW/bhxIlTHfAZ6xnuhMgPaxTchgJlg="]})
上面的意思是这个交易只对node3可见,虽然node2和node3对智能合约都是可见的
在node3中执行private.get()的结果如下:
在node2中执行private.get()的结果如下:
下一篇:下篇文章将完成一个基于这个本地测试网的完整示例:积分联盟系统