启动一个连接到Quorum节点的交互控制台,您可以参考文档开启geth交互控制台来建立一个交互控制台
在交互控制台输入以下指令,创建一个以太坊账户。如果您已经在节点上创建了以太坊账户,您也可以使用已有账户完成后续操作。
// create a account that use empty password
var account = personal.newAccount("");
// using an existing account in node
// var account = eth.accounts[0]
// unlock account for 300 seconds with empty password
personal.unlockAccount(account, "", 300);
// set it as default account
web3.eth.defaultAccount = account;
使用solc或truffle等第三方编译工具,编译智能合约,获取智能合约的ABI和字节码(bytecode)。您可以参考编译智能合约编译您的智能合约。
您需要额外指定参与到私有智能合约的各个节点的 transaction manager 的公钥,您可以在节点配置中获取到该值。在交互控制台输入以下示例命令,在Quorum网络中部署智能合约。在您需要部署自己的智能合约时,您需要将
abi
和bytecode
替换为您智能合约的编译结果。// tx-mangager public key list; only node in this list that can access private contract and it's data
var privateFor = ["WLyCI0x1NBdy2VI4IdmxGYhRP7PKGL6wD87iN5vKp3w="];
// abi for contract
var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"initVal","type":"uint256"}],"payable":false,"type":"constructor"}];
// compiled solidity source code using https://github.com/jpmorganchase/quorum-examples/blob/master/examples/7nodes/simplestorage.sol
var bytecode = "0x6060604052341561000f57600080fd5b604051602080610149833981016040528080519060200190919050505b806000819055505b505b610104806100456000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605157806360fe47b11460775780636d4ce63c146097575b600080fd5b3415605b57600080fd5b606160bd565b6040518082815260200191505060405180910390f35b3415608157600080fd5b6095600480803590602001909190505060c3565b005b341560a157600080fd5b60a760ce565b6040518082815260200191505060405180910390f35b60005481565b806000819055505b50565b6000805490505b905600a165627a7a72305820d5851baab720bba574474de3d09dbeaabc674a15f4dd93b974908476542c23f00029";
var address = ""
var simpleContract = web3.eth.contract(abi);
var simple = simpleContract.new(42, {
from: account,
data: bytecode,
gas: 0x47b760,
privateFor: privateFor
}, function(e, contract) {
if (e) {
console.log("err creating contract", e);
} else {
if (!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
address = contract.address
console.log(contract);
}
}
});
当部署智能合约的交易被共识节点打包,您可以在交互控制台看到您部署的合约地址,后续您可以向该地址发起交易,调用私密智能合约。
文档内容是否对您有帮助?