すべてのプロダクト
Search
ドキュメントセンター

Blockchain as a Service:geth を使用して非公開スマートコントラクトをデプロイする

最終更新日:Jan 19, 2025

  1. Quorum ノードに接続するための対話型 JavaScript コンソールを起動します。geth 対話型 JavaScript コンソールの設定を参照して、対話型 JavaScript コンソールを確立できます。

  2. 対話型 JavaScript コンソールで次の命令を入力して、Ethereum アカウントを作成します。ノードに Ethereum アカウントをすでに作成している場合は、既存のアカウントを使用して以下の手順を実行することもできます。

    // 空のパスワードを使用するアカウントを作成する
    var account = personal.newAccount("");
    // ノード内の既存のアカウントを使用する
    // var account = eth.accounts[0]
    // 空のパスワードで 300 秒間アカウントのロックを解除する
    personal.unlockAccount(account, "", 300);
    // デフォルトアカウントとして設定する
    web3.eth.defaultAccount = account;
  3. solc や truffle などのサードパーティのコンパイルツールを使用して、スマートコントラクトをコンパイルし、スマートコントラクトの ABI とバイトコードを取得します。 スマートコントラクトのコンパイルを参照して、コントラクトをコンパイルできます。

  4. 非公開コントラクトの各ノードに参加するトランザクションマネージャーの公開鍵を追加で指定する必要があります。これは、ノード構成から取得できます。対話型コンソールで次のコマンド例を入力して、quorum ネットワークにコントラクトをデプロイします。独自のコントラクトをデプロイする必要がある場合は、abibytecode をコントラクトのコンパイル結果に置き換える必要があります。

    // tx-mangager 公開鍵リスト。このリスト内のノードのみが非公開コントラクトとそのデータにアクセスできます。
    var privateFor = ["WLyCI0x1NBdy2VI4IdmxGYhRP7PKGL6wD87iN5vKp3w="];
    // コントラクトの abi
    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"}];
    // https://github.com/jpmorganchase/quorum-examples/blob/master/examples/7nodes/simplestorage.sol を使用してコンパイルされた Solidity ソースコード
    var bytecode = "0x6060604052341561000f57600080fd5b604051602080610149833981016040528080519060200190919050505b806000819055505b505b610104806100456000396000f30060606040526000357c010000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605157806360fe47b11460775780636d4ce63c146097575b600080fd5b3415605b57600080fd5b606160bd565b6040518082815260200191505060405180910390f35b3415608157600080fd5b6095600480803590602001909190505060c3565b005b341560a157600080fd5b60a760ce565b6040518082815260200191505060405180910390f35b60005481565b806000819055505b50565b6000805490505b905600a165627a7a72305820d5851baab720bba574474de3d09dbeaabc674a15f4dd93b974908476542c23f00029";
    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);
         }
     }
    });
  5. コントラクトをデプロイするトランザクションがコンセンサスノードによってパッケージ化されると、デプロイ後のコントラクトアドレスが対話型 JavaScript コンソールに表示されます。その後、そのアドレスに非公開トランザクションを送信して、非公開コントラクトを呼び出すことができます。