使用geth发送私密交易

  1. 启动一个连接到节点的交互控制台,您可以参考文档开启geth交互控制台来建立一个交互控制台

  2. 创建一个以太坊账户,如果您已经在节点上创建了以太坊账户,可以使用已有账户完成后续操作

    1. // create a account that use empty password
    2. var account = personal.newAccount("");
    3. // using an existing account in node
    4. // var account = eth.accounts[0]
    5. // unlock account for 300 seconds with empty password
    6. personal.unlockAccount(account, "", 300);
    7. // set it as default account
    8. web3.eth.defaultAccount = account;
  3. 指定私有智能合约的地址、参与私有智能合约节点的公钥和ABI,并发起调用。您可以参考部署私有智能合约中的步骤来部署智能合约,并获取智能合约的地址和ABI。

    注意:发送私有交易的privateFor参数必须与您部署私有智能合约时的参数保持一致,否则会导致智能合约终态不一致。

    1. // tx-mangager public key list; it should be same with the list that when your deploy the private contract
    2. var privateFor = ["WLyCI0x1NBdy2VI4IdmxGYhRP7PKGL6wD87iN5vKp3w="];
    3. // your private contract address that you want to call
    4. var address = "0x0000000";
    5. // your contarct ABI that address corresponds to
    6. 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"}];
    7. var contract = eth.contract(abi).at(address)
    8. // call get method of demo contract
    9. contract.get()
    10. // call set method of demo contract, and create a new private transaction
    11. contract.set(999, {from: account, privateFor: privateFor })