Azure 上に Ethereum Proof-of-Authority Consortium ソリューションをデプロイするDeploy Ethereum proof-of-authority consortium solution template on Azure

Ethereum Proof-of-Authority Consortium (プレビュー) Azure ソリューション テンプレートを使用すると、Azure と Ethereum の最小限の知識で、マルチメンバー コンソーシアム型 Proof-of-Authority Ethereum ネットワークをデプロイ、構成、管理できます。You can use the Ethereum Proof-of-Authority Consortium preview Azure solution template to deploy, configure, and govern a multi-member consortium proof-of-authority Ethereum network with minimal Azure and Ethereum knowledge.

ソリューション テンプレートにより、各コンソーシアム メンバーは、Microsoft Azure コンピューティング、ネットワーク、およびストレージ サービスを使用してブロックチェーン ネットワーク フットプリントをプロビジョニングできます。The solution template can be used by each consortium member to provision a blockchain network footprint using Microsoft Azure compute, networking, and storage services. 各コンソーシアム メンバーのネットワーク フットプリントは、一連の負荷分散型検証ノードで構成されます。アプリケーションまたはユーザーはそれらのノードと対話して、Ethereum トランザクションを送信できます。Each consortium member's network footprint consists of a set of load-balanced validator nodes that an application or user can interact with to submit Ethereum transactions.

Azure Blockchain ソリューションの選択Choose an Azure Blockchain solution

Ethereum Proof-of-Authority Consortium ソリューション テンプレートを使用する前に、利用可能な Azure Blockchain オプションの一般的なユース ケースと実際のシナリオを比較してください。Before choosing to use the Ethereum proof-of-authority consortium solution template, compare your scenario with the common use cases of available Azure Blockchain options.

オプションOption サービス モデルService model 一般的なユース ケースCommon use case
ソリューション テンプレートSolution templates IaaSIaaS ソリューション テンプレートは、完全に構成されたブロックチェーン ネットワーク トポロジのプロビジョニングに使用できる Azure Resource Manager テンプレートです。Solution templates are Azure Resource Manager templates you can use to provision a fully configured blockchain network topology. これらのテンプレートでは、特定のブロックチェーン ネットワークの種類に対応する Microsoft Azure コンピューティング、ネットワーク、およびストレージ サービスをデプロイして構成します。The templates deploy and configure Microsoft Azure compute, networking, and storage services for a given blockchain network type.
Azure Blockchain ServiceAzure Blockchain Service PaaSPaaS Azure Blockchain Service (プレビュー) により、コンソーシアム ブロックチェーン ネットワークの構成、管理、ガバナンスが簡素化されます。Azure Blockchain Service Preview simplifies the formation, management, and governance of consortium blockchain networks. Azure Blockchain Service は、PaaS、コンソーシアム管理、またはコントラクトとトランザクションのプライバシーを必要とするソリューションに使用します。Use Azure Blockchain Service for solutions requiring PaaS, consortium management, or contract and transaction privacy.
Azure Blockchain WorkbenchAzure Blockchain Workbench IaaS および PaaSIaaS and PaaS Azure Blockchain Workbench プレビューは、ブロックチェーン アプリケーションを作成してデプロイし、ビジネス プロセスやデータを他の組織と効果的に共有できるよう設計された、Azure サービスと機能のコレクションです。Azure Blockchain Workbench Preview is a collection of Azure services and capabilities designed to help you create and deploy blockchain applications to share business processes and data with other organizations. Azure Blockchain Workbench は、ブロックチェーン ソリューションまたはブロックチェーン アプリケーションの概念実証のプロトタイプを作成する際に使用します。Use Azure Blockchain Workbench for prototyping a blockchain solution or a blockchain application proof of concept.

ソリューションのアーキテクチャSolution architecture

Ethereum ソリューション テンプレートを使用して、単一または複数リージョンベースのマルチメンバー Ethereum Proof-of-Authority Consortium ネットワークをデプロイできます。Using the Ethereum solution template, you can deploy a single or multi-region based multi-member Ethereum proof-of-authority consortium network.

デプロイ アーキテクチャ

各コンソーシアム メンバーのデプロイには以下が含まれます。Each consortium member deployment includes:

  • PoA バリデーターを実行するための Virtual MachinesVirtual Machines for running the PoA validators
  • RPC、ピアリング、およびガバナンス DApp の要求を分散するための Azure Load BalancerAzure Load Balancer for distributing RPC, peering, and governance DApp requests
  • バリデーター ID をセキュリティで保護するための Azure Key VaultAzure Key Vault for securing the validator identities
  • 永続的なネットワーク情報をホストし、リースを調整するための Azure StorageAzure Storage for hosting persistent network information and coordinating leasing
  • ログとパフォーマンスの統計情報を集約するための Azure MonitorAzure Monitor for aggregating logs and performance statistics
  • プライベート VNet 間の VPN 接続を可能にするための VNet ゲートウェイ (オプション)VNet Gateway (optional) for allowing VPN connections across private VNets

既定では、サブスクリプションとクラウド間の接続を簡単にするために、RPC とピアリング エンドポイントにはパブリック IP を使用してアクセスできます。By default, the RPC and peering endpoints are accessible over public IP to enable simplified connectivity across subscriptions and clouds. アプリケーション レベルのアクセス制御には、Parity のアクセス許可コントラクトを使用できます。For application level access-controls, you can use Parity's permissioning contracts. サブスクリプション間接続に VNet ゲートウェイを利用する、VPN の背後にデプロイされたネットワークがサポートされています。Networks deployed behind VPNs, which leverage VNet gateways for cross-subscription connectivity are supported. VPN と VNet のデプロイはより複雑であるため、ソリューションのプロトタイプを作成するときは、パブリック IP モデルから始めることをお勧めします。Since VPN and VNet deployments are more complex, you may want to start with a public IP model when prototyping a solution.

信頼性とモジュール性を実現するために、Docker コンテナーを使用します。Docker containers are used for reliability and modularity. バージョン管理されたイメージを各デプロイの一部としてホストして使用するために、Azure Container Registry を使用します。Azure Container Registry is used to host and serve versioned images as part of each deployment. コンテナー イメージは以下で構成されます。The container images consist of:

  • オーケストレーター - ID とガバナンス コントラクトを生成します。Orchestrator - Generates identities and governance contracts. ID ストアに ID を格納します。Stores identities in an identity store.
  • Parity クライアント - ID ストアから ID をリースします。Parity client - Leases identity from the identity store. ピアを検出し、接続します。Discovers and connects to peers.
  • EthStats エージェント - RPC 経由でローカル ログと統計を収集し、情報を Azure Monitor にプッシュします。EthStats Agent - Collects local logs and stats via RPC and pushes information to Azure Monitor.
  • ガバナンス DApp - ガバナンス コントラクトを操作するための Web インターフェイスです。Governance DApp - Web interface for interacting with Governance contracts.

検証ノードValidator nodes

Proof-of-Authority プロトコルでは、バリデーター ノードが従来のマイナー ノードの代わりとなります。In the proof-of-authority protocol, validator nodes take the place of traditional miner nodes. 各検証コントロールには、ブロック作成プロセスへの参加を可能にする一意の Ethereum ID があります。Each validator has a unique Ethereum identity allowing it to participate in the block creation process. 各コンソーシアム メンバーは、geo 冗長性のために、5 つのリージョンで 2 つ以上のバリデーター ノードをプロビジョニングできます。Each consortium member can provision two or more validator nodes across five regions, for geo-redundancy. バリデーター ノードは他のバリデーター ノードと通信して、基礎となる分散型台帳の状態についてコンセンサスを形成します。Validator nodes communicate with other validator nodes to come to consensus on the state of the underlying distributed ledger. ネットワークへの公正な参加を保証するために、各コンソーシアム メンバーは、ネットワーク上の最初のメンバーよりも多くの検証コントロールを使用することを禁止されています。To ensure fair participation on the network, each consortium member is prohibited from using more validators than the first member on the network. たとえば、最初のメンバーが 3 つの検証コントロールをデプロイした場合、各メンバーが使用できる検証コントロールは最大 3 つに限られます。For example, if the first member deploys three validators, each member can only have up to three validators.

ID ストアIdentity store

ID ストアは、生成された Ethereum ID を安全に保持するために各メンバーのサブスクリプションにデプロイされます。An identity store is deployed in each member's subscription that securely holds the generated Ethereum identities. 検証コントロールごとに、オーケストレーション コンテナーによって Ethereum 秘密キーが生成され、Azure Key Vault に格納されます。For each validator, the orchestration container generates an Ethereum private key and stores it in Azure Key Vault.

Ethereum コンソーシアム ネットワークのデプロイDeploy Ethereum consortium network

このチュートリアルでは、マルチパーティー Ethereum コンソーシアム ネットワークを作成すると仮定します。In this walk through, let's assume you are creating a multi-party Ethereum consortium network. 次のフローは、マルチパーティー デプロイの例を示しています。The following flow is an example of a multi-party deployment:

  1. 3 人のメンバーが、MetaMask を使用してそれぞれ Ethereum アカウントを生成しますThree members each generate an Ethereum account using MetaMask
  2. メンバー A が、パブリック Ethereum アドレスを指定して Ethereum PoA をデプロイしますMember A deploys Ethereum PoA, providing their Ethereum public address
  3. メンバー A が、メンバー Bメンバー C にコンソーシアムの URL を提供しますMember A provides the consortium URL to Member B and Member C
  4. メンバー Bメンバー C が、自分たちのパブリック Ethereum アドレスとメンバー A のコンソーシアムの URL を入力して Ethereum PoA をデプロイしますMember B and Member C deploy, Ethereum PoA, providing their Ethereum Public Address and Member A's consortium URL
  5. メンバー A が、メンバー B を管理者とする投票をしますMember A votes in Member B as an admin
  6. メンバー Aメンバー B の両方が、メンバー C を管理者とする投票をしますMember A and Member B both vote Member C as an admin

以下のセクションでは、ネットワークで最初のメンバーのフットプリントを構成する方法について説明します。The next sections show you how to configure the first member's footprint in the network.

リソースを作成するCreate resource

Azure portal で、左上隅にある [リソースの作成] を選択します。In the Azure portal, select Create a resource in the upper left-hand corner.

[ブロックチェーン] > [Ethereum Proof-of-Authority Consortium (preview)](Ethereum Proof-of-Authority Consortium (プレビュー)) を選択します。Select Blockchain > Ethereum Proof-of-Authority Consortium (preview).

基本Basics

[基本] では、デプロイの標準パラメーターの値を指定します。Under Basics, specify values for standard parameters for any deployment.

基本

パラメーターParameter 説明Description 値の例Example value
Create a new network or join existing network?(新しいネットワークの作成または既存のネットワークへの参加)Create a new network or join existing network 新しいコンソーシアム ネットワークを作成することも、既存のコンソーシアム ネットワークに参加することもできます。You can create a new consortium network or join a pre-existing consortium network. 既存のネットワークに参加するには、追加のパラメーターが必要です。Joining an existing network requires additional parameters. 新規作成Create new
電子メール アドレスEmail Address デプロイの完了時に、デプロイに関する情報を含む電子メール通知が送信されます。You receive an email notification when your deployment completes with information about your deployment. 有効な電子メール アドレスA valid email address
VM ユーザー名VM user name デプロイされた各 VM の管理者ユーザー名Administrator username of each deployed VM 1 から 64 文字の英数字1-64 alphanumeric characters
認証の種類Authentication type 仮想マシンに対して認証する方法。The method to authenticate to the virtual machine. PasswordPassword
PasswordPassword デプロイされた各仮想マシンの管理者アカウントのパスワード。The password for the administrator account for each of the virtual machines deployed. すべての VM に最初は同じパスワードが設定されます。All VMs initially have the same password. パスワードはプロビジョニング後に変更できます。You can change the password after provisioning. 12 - 72 文字12-72 characters
サブスクリプションSubscription コンソーシアム ネットワークをデプロイするサブスクリプションThe subscription to which to deploy the consortium network
リソース グループResource Group コンソーシアム ネットワークをデプロイするリソース グループThe resource group to which to deploy the consortium network. myResourceGroupmyResourceGroup
LocationLocation リソース グループの Azure リージョン。The Azure region for resource group. 米国西部 2West US 2

[OK] を選択します。Select OK.

Deployment regions (デプロイ リージョン)Deployment regions

[Deployment regions](デプロイ リージョン) では、リージョン数と各リージョンの場所を指定します。Under Deployment regions, specify the number of regions and locations for each. 最大 5 つのリージョンにデプロイできます。You can deploy in maximum of five regions. 1 つ目のリージョンは、 [基本] セクションのリソース グループの場所と一致する必要があります。The first region should match the resource group location from Basics section. 開発またはテスト用のネットワークでは、メンバーごとに 1 つのリージョンを使用できます。For development or test networks, you can use a single region per member. 運用環境では、高可用性を確保するために、2 つ以上のリージョンにデプロイします。For production, deploy across two or more regions for high-availability.

[Deployment regions](デプロイ リージョン)

パラメーターParameter 説明Description 値の例Example value
Number of region(s) (リージョン数)Number of region(s) コンソーシアム ネットワークをデプロイするリージョンの数Number of regions to deploy the consortium network 22
First region (リージョン 1)First region コンソーシアム ネットワークをデプロイする 1 つ目のリージョンFirst region to deploy the consortium network 米国西部 2West US 2
Second region (リージョン 2)Second region コンソーシアム ネットワークをデプロイする 2 つ目のリージョン。Second region to deploy the consortium network. リージョン数が 2 以上の場合、追加のリージョンが表示されます。Additional regions are visible when number of regions is two or greater. 米国東部 2East US 2

[OK] を選択します。Select OK.

Network size and performance (ネットワークのサイズとパフォーマンス)Network size and performance

[Network Size and Performance](ネットワークのサイズとパフォーマンス) では、コンソーシアム ネットワークのサイズを入力します。Under Network size and performance, specify inputs for the size of the consortium network. 検証ノードのストレージ サイズにより、ブロックチェーンの可能なサイズが決まります。The validator node storage size dictates the potential size of the blockchain. サイズはデプロイ後に変更できます。The size can be changed after deployment.

Network size and performance (ネットワークのサイズとパフォーマンス)

パラメーターParameter 説明Description 値の例Example value
Number of load balanced validator nodes (負荷分散型バリデータ ノードの数)Number of load balanced validator nodes ネットワークの一部としてプロビジョニングする検証ノードの数。The number of validator nodes to provision as part of the network. 22
Validator node storage performance (バリデーター ノード ストレージのパフォーマンス)Validator node storage performance デプロイされる各検証ノードのマネージド ディスクの種類。The type of managed disk for each of the deployed validator nodes. 価格の詳細については、ストレージの価格に関するページをご覧ください。For details on pricing, see storage pricing Standard SSDStandard SSD
Validator node virtual machine size (バリデーター ノードの仮想マシンのサイズ)Validator node virtual machine size バリデーター ノードに使用される仮想マシンのサイズ。The virtual machine size used for validator nodes. 価格の詳細については、仮想マシンの価格に関するページをご覧ください。For details on pricing, see virtual machine pricing Standard D2 v3Standard D2 v3

仮想マシンとストレージ層はネットワークのパフォーマンスに影響します。Virtual machine and storage tier affect network performance. 次の表を参考にして、コスト効率を選択してください。Use the following table to help choose cost efficiency:

仮想マシン SKUVirtual Machine SKU ストレージ層Storage Tier PricePrice スループットThroughput LatencyLatency
F1F1 Standard SSDStandard SSD lowlow lowlow highhigh
D2_v3D2_v3 Standard SSDStandard SSD medium medium medium
F16sF16s Premium SSDPremium SSD highhigh highhigh lowlow

[OK] を選択します。Select OK.

Ethereum settings (Ethereum の設定)Ethereum settings

[Ethereum Settings](Ethereum の設定) では、Ethereum 関連の構成設定を指定します。Under Ethereum Settings, specify Ethereum-related configuration settings.

Ethereum settings (Ethereum の設定)

パラメーターParameter 説明Description 値の例Example value
Consortium Member ID (コンソーシアム メンバー ID)Consortium Member ID コンソーシアム ネットワークに参加する各メンバーに関連付けられている ID。The ID associated with each member participating in the consortium network. 競合を回避するように IP アドレス空間を構成するために使用されます。It's used to configure IP address spaces to avoid collision. プライベート ネットワークの場合、メンバー ID は同じネットワーク内のさまざまな組織間で一意である必要があります。For a private network, Member ID should be unique across different organizations in the same network. 同じ組織が複数のリージョンにデプロイする場合でも、一意のメンバー ID が必要です。A unique member ID is needed even when the same organization deploys to multiple regions. 競合が発生しないように他の参加メンバーと共有する必要があるため、このパラメーターの値を書き留めておきます。Make note of the value of this parameter since you need to share it with other joining members to ensure there’s no collision. 有効な範囲は 0 から 255 です。The valid range is 0 through 255. 00
ネットワーク IDNetwork ID デプロイされているコンソーシアム Ethereum ネットワークのネットワーク ID。The network ID for the consortium Ethereum network being deployed. 各 Ethereum ネットワークには独自のネットワーク ID があり、1 はパブリック ネットワークの ID を示します。Each Ethereum network has its own Network ID, with 1 being the ID for the public network. 有効な範囲は 5 から 999,999,999 です。The valid range is 5 through 999,999,999 1010101010101010
Admin Ethereum Address (管理者 Ethereum アドレス)Admin Ethereum Address PoA ガバナンスに参加するために使用される Ethereum アカウントのアドレス。The Ethereum account address used for participating in PoA governance. MetaMask を使用して Ethereum アドレスを生成できます。You can use MetaMask to generate an Ethereum address.
詳細オプションAdvanced Options Ethereum 設定の詳細オプションAdvanced options for Ethereum settings [有効化]Enable
Deploy using Public IP?(パブリック IP を使用してデプロイ)Deploy using Public IP [Private VNet](プライベート VNet) を選択した場合、ネットワークは VNet ゲートウェイの背後にデプロイされ、ピアリング アクセスが削除されます。If Private VNet is selected, the network is deployed behind a VNet Gateway and removes peering access. プライベート VNet では、接続に互換性を持たせるために、すべてのメンバーが VNet ゲートウェイを使用する必要があります。For Private VNet, all members must use a VNet Gateway for the connection to be compatible. パブリック IPPublic IP
Block Gas Limit(ブロック ガスの制限)Block Gas Limit ネットワークの開始ブロック ガスの制限。The starting block gas limit of the network. 5000000050000000
ブロック再シール期間 (秒)Block Reseal Period (sec) ネットワーク上のトランザクションがない場合に空のブロックが作成される頻度。The frequency at which empty blocks will be created when there are no transactions on the network. 頻度が高いとパフォーマンスが向上しますが、ストレージ コストが増加します。A higher frequency will have faster finality but increased storage costs. 1515
Transaction Permission Contract(トランザクションのアクセス許可コントラクト)Transaction Permission Contract トランザクションのアクセス許可コントラクトのバイトコード。Bytecode for the Transaction Permissioning contract. スマート コントラクトのデプロイと実行を、許可された Ethereum アカウントのリストのみに制限します。Restricts smart contract deployment and execution to a permitted list of Ethereum accounts.

[OK] を選択します。Select OK.

監視Monitoring

[監視] では、ネットワークのログ リソースを構成できます。Monitoring allows you to configure a log resource for your network. 監視エージェントは、ネットワークから有用なメトリックとログを収集して表示し、ネットワークの正常性やデバッグの問題をすばやく確認できるようにします。The monitoring agent collects and surfaces useful metrics and logs from your network providing the ability to quickly check the network health or debug issues.

Azure Monitor

パラメーターParameter 説明Description 値の例Example value
監視Monitoring 監視を有効にするオプションOption to enable monitoring [有効化]Enable
既存の Azure Monitor ログへの接続Connect to existing Azure Monitor logs 新しい Azure Monitor ログ インスタンスを作成するか、既存のインスタンスに参加するオプションOption to create a new Azure Monitor logs instance or join an existing instance 新規作成Create new
LocationLocation 新しいインスタンスがデプロイされるリージョンThe region where the new instance is deployed East USEast US
既存のログ分析ワークスペース ID (既存の Azure Monitor ログへの接続 = 既存に参加)Existing log analytics workspace ID (Connect to existing Azure Monitor logs = Join Existing) 既存の Azure Monitor ログ インスタンスのワークスペース IDWorkspace ID of the existing Azure Monitor logs instance NANA
既存のログ分析主キー (既存の Azure Monitor ログへの接続 = 既存に参加)Existing log analytics primary key (Connect to existing Azure Monitor logs = Join Existing) 既存の Azure Monitor ログ インスタンスへの接続に使用される主キーThe primary key used to connect to the existing Azure Monitor logs instance NANA

[OK] を選択します。Select OK.

まとめSummary

概要の各項目をクリックして、指定した内容を確認し、基本的なデプロイ前検証を実行します。Click through the summary to review the inputs specified and run basic pre-deployment validation. デプロイの前に、テンプレートとパラメーターをダウンロードできます。Before deploying, you can download the template and parameters.

[作成] を選択してデプロイします。Select Create to deploy.

デプロイに VNet ゲートウェイが含まれている場合は、デプロイに最大 45 から 50 分かかることがあります。If the deployment includes VNet Gateways, the deployment can take up 45 to 50 minutes.

デプロイの出力Deployment output

デプロイが完了したら、Azure portal を使用して必要なパラメーターにアクセスできます。Once the deployment has completed, you can access the necessary parameters using the Azure portal.

確認の電子メールConfirmation email

電子メール アドレスを指定した場合 ([基本] セクション)、デプロイの情報とこのドキュメントへのリンクを含む電子メールが送信されます。If you provide an email address (Basics Section), an email is sent that includes the deployment information and links to this documentation.

デプロイの電子メール

ポータルPortal

デプロイが正常に完了し、すべてのリソースがプロビジョニングされると、リソース グループ内の出力パラメーターを表示できます。Once the deployment has completed successfully and all resources have been provisioned, you can view the output parameters in your resource group.

  1. ポータルで目的のリソース グループに移動します。Go to your resource group in the portal.

  2. [概要] > [デプロイ] を選択します。Select Overview > Deployments.

    リソース グループの概要

  3. [microsoft-azure-blockchain.azure-blockchain-ether-...] デプロイを選択します。Select the microsoft-azure-blockchain.azure-blockchain-ether-... deployment.

  4. [出力] セクションを選択します。Select the Outputs section.

    デプロイの出力

コンソーシアムの拡張Growing the consortium

コンソーシアムを拡張するには、まず物理ネットワークを接続する必要があります。To expand your consortium, you must first connect the physical network. VPN の背後にデプロイする場合は、「VNet ゲートウェイの接続」を参照し、新しいメンバーのデプロイの一部としてネットワーク接続を構成します。If deploying behind a VPN, see the section Connecting VNet Gateway configure the network connection as part of the new member deployment. デプロイが完了したら、ガバナンス DApp を使用してネットワーク管理者になります。Once your deployment completes, use the Governance DApp to become a network admin.

新しいメンバーのデプロイNew member deployment

次の情報を参加するメンバーと共有します。Share the following information with the joining member. この情報は、デプロイ後の電子メールまたはポータルのデプロイの出力で確認できます。The information is found in your post-deployment email or in the portal deployment output.

  • Consortium Data URL (コンソーシアム データの URL)Consortium Data URL
  • デプロイ済みのノード数The number of nodes you deployed
  • VNet ゲートウェイのリソース ID (VPN を使用する場合)VNet Gateway Resource ID (if using VPN)

デプロイするメンバーは、ネットワーク プレゼンスをデプロイするときに、次のガイダンスに従って同じ Ethereum Proof-of-Authority Consortium ソリューション テンプレートを使用する必要があります。The deploying member should use the same Ethereum Proof-of-Authority consortium solution template when deploying their network presence using the following guidance:

  • [Join existing](既存に参加) を選択しますSelect Join Existing
  • 公正な代表制を保証するために、残りのメンバーと同数の検証ノードを選択しますChoose the same number of validator nodes as the rest of the members on the network to ensure fair representation
  • 同じ管理者 Ethereum アドレスを使用しますUse the same Admin Ethereum address
  • [Ethereum Settings](Ethereum の設定) で提供されたコンソーシアム データの URL を使用しますUse the provided Consortium Data Url in the Ethereum Settings
  • ネットワークの残りの部分が VPN の背後にある場合は、詳細セクションで [Private VNet](プライベート VNet) を選択しますIf the rest of the network is behind a VPN, select Private VNet under the advanced section

VNet ゲートウェイの接続Connecting VNet gateways

このセクションは、プライベート VNet を使用してデプロイした場合にのみ必要となります。This section is only required if you deployed using a private VNet. パブリック IP アドレスを使用している場合は、このセクションをスキップしてかまいません。You can skip this section if you are using public IP addresses.

プライベート ネットワークの場合、さまざまなメンバーが VNet ゲートウェイ接続を介して接続されます。For a private network, the different members are connected via VNet gateway connections. メンバーがネットワークに参加してトランザクション トラフィックを表示する前に、既存のメンバーが最終的な構成を VPN ゲートウェイで実行し、接続を受け入れる必要があります。Before a member can join the network and see transaction traffic, an existing member must do a final configuration on their VPN gateway to accept the connection. 参加メンバーの Ethereum ノードは、接続が確立するまで実行されません。The Ethereum nodes of the joining member won't run until a connection is established. 単一障害点が生じる可能性を減らすには、コンソーシアムに冗長ネットワーク接続を作成します。To reduce chances of a single point of failure, create redundant network connections in the consortium.

新しいメンバーのデプロイ後に、既存のメンバーは新しいメンバーへの VNet ゲートウェイ接続を設定して、双方向接続を完成させる必要があります。After the new member deploys, the existing member must complete the bi-directional connection by setting up a VNet gateway connection to the new member. 既存のメンバーには以下が必要です。The existing member needs:

  • 接続するメンバーの VNet ゲートウェイのリソース ID。The VNet gateway ResourceID of the connecting member. デプロイの出力」をご覧ください。See deployment output.
  • 共有接続キー。The shared connection key.

既存のメンバーは、次の PowerShell スクリプトを実行して接続を完成させる必要があります。The existing member must run the following PowerShell script to complete the connection. ポータルの右上のナビゲーション バーにある Azure Cloud Shell を使用できます。You can use Azure Cloud Shell located in the top-right navigation bar in the portal.

Cloud Shell

$MyGatewayResourceId = "<EXISTING_MEMBER_RESOURCEID>"
$OtherGatewayResourceId = "<NEW_MEMBER_RESOURCEID]"
$ConnectionName = "Leader2Member"
$SharedKey = "<NEW_MEMBER_KEY>"

## $myGatewayResourceId tells me what subscription I am in, what ResourceGroup and the VNetGatewayName
$splitValue = $MyGatewayResourceId.Split('/')
$MySubscriptionid = $splitValue[2]
$MyResourceGroup = $splitValue[4]
$MyGatewayName = $splitValue[8]

## $otherGatewayResourceid tells me what the subscription and VNet GatewayName are
$OtherGatewayName = $OtherGatewayResourceId.Split('/')[8]
$Subscription=Select-AzSubscription -SubscriptionId $MySubscriptionid

## create a PSVirtualNetworkGateway instance for the gateway I want to connect to
$OtherGateway=New-Object Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkGateway
$OtherGateway.Name = $OtherGatewayName
$OtherGateway.Id = $OtherGatewayResourceId
$OtherGateway.GatewayType = "Vpn"
$OtherGateway.VpnType = "RouteBased"

## get a PSVirtualNetworkGateway instance for my gateway
$MyGateway = Get-AzVirtualNetworkGateway -Name $MyGatewayName -ResourceGroupName $MyResourceGroup

## create the connection
New-AzVirtualNetworkGatewayConnection -Name $ConnectionName -ResourceGroupName $MyResourceGroup -VirtualNetworkGateway1 $MyGateway -VirtualNetworkGateway2 $OtherGateway -Location $MyGateway.Location -ConnectionType Vnet2Vnet -SharedKey $SharedKey -EnableBgp $True

サービスの監視Service monitoring

Azure Monitor ポータルを表示するには、デプロイ電子メールにあるリンク先にアクセスするか、デプロイの出力でパラメーター [OMS_PORTAL_URL] を見つけます。You can locate your Azure Monitor portal either by following the link in the deployment email or locating the parameter in the deployment output [OMS_PORTAL_URL].

ポータルには、まず、高レベルのネットワーク統計情報とノードの概要が表示されます。The portal will first display high-level network statistics and node overview.

監視のカテゴリ

[Node Overview](ノードの概要) を選択すると、ノードごとのインフラストラクチャ統計が表示されます。Selecting Node Overview shows you per-node infrastructure statistics.

ノードの統計

[Network Stats](ネットワークの統計) を選択すると、Ethereum ネットワークの統計が表示されます。Selecting Network Stats shows you Ethereum network statistics.

ネットワークの統計

サンプル Kusto クエリSample Kusto queries

監視ログのクエリを実行して、エラーを調査したり、しきい値のアラートを設定したりできます。You can query the monitoring logs to investigate failures or setup threshold alerting. "ログ検索" ツールで実行できるクエリの例を以下に示します。The following queries are examples you can run in the Log Search tool:

複数の検証コントロール クエリによって報告されたリスト ブロックは、チェーンのフォークを見つける際に役立ちます。List blocks that have been reported by more than one validator query can be useful to help find chain forks.

MinedBlock_CL
| summarize DistinctMiners = dcount(BlockMiner_s) by BlockNumber_d, BlockMiner_s
| where DistinctMiners > 1

指定した検証ノードの、5 分間のバケットで平均された平均ピア数を取得します。Get average peer count for a specified validator node averaged over 5-minute buckets.

let PeerCountRegex = @"Syncing with peers: (\d+) active, (\d+) confirmed, (\d+)";
ParityLog_CL
| where Computer == "vl-devn3lgdm-reg1000001"
| project RawData, TimeGenerated
| where RawData matches regex PeerCountRegex
| extend ActivePeers = extract(PeerCountRegex, 1, RawData, typeof(int))
| summarize avg(ActivePeers) by bin(TimeGenerated, 5m)

SSH アクセスSSH access

セキュリティ上の理由から、既定では、SSH ポートのアクセスはネットワーク グループ セキュリティ ルールによって 拒否されます。For security reasons, the SSH port access is denied by a network group security rule by default. PoA ネットワークの仮想マシン インスタンスにアクセスするには、次のセキュリティ ルールを [許可] に変更する必要があります。To access the virtual machine instances in the PoA network, you need to change the following security is rule to Allow.

  1. Azure portal で、デプロイされているリソース グループの [概要] セクションに移動します。Go to the Overview section of the deployed resource group in the Azure portal.

    SSH の概要

  2. アクセスする VM のリージョンの [ネットワーク セキュリティ グループ] を選択します。Select the Network Security Group for the region of the VM you are want to access.

    SSH の NSG

  3. [allow-ssh] ルールを選択します。Select the allow-ssh rule.

    ssh-allow

  4. [アクション][許可] に変更します。Change Action to Allow

    SSH 有効化を許可

  5. [保存] を選択します。Select Save. 変更が適用されるまでに数分かかることがあります。Changes may take a few minutes to apply.

指定した管理者ユーザー名とパスワード/SSH キーを使用して、検証ノードの仮想マシンに SSH 経由でリモート接続できます。You can remotely connect to the virtual machines for the validator nodes via SSH with your provided admin username and password/SSH key. 最初の検証ノードにアクセスするための SSH コマンドは、テンプレートのデプロイの出力に示されます。The SSH command to access the first validator node is listed in the template deployment output. 次に例を示します。For example:

ssh -p 4000 poaadmin\@leader4vb.eastus.cloudapp.azure.com.

追加のトランザクション ノードを取得するには、ポート番号を 1 ずつ増やします。To get to additional transaction nodes, increment the port number by one.

複数のリージョンにデプロイした場合は、コマンドを、そのリージョン内のロード バランサーの DNS 名または IP アドレスに変更します。If you deployed to more than one region, change the command to the DNS name or IP address of the load balancer in that region. 他のリージョンの DNS 名または IP アドレスを見つけるには、名前付け規則 *****-lbpip-reg# が使用されたリソースを見つけ、その DNS 名と IP アドレスのプロパティを確認します。To find the DNS name or IP address of the other regions, find the resource with the naming convention *****-lbpip-reg# and view its DNS name and IP address properties.

Azure Traffic Manager の負荷分散Azure Traffic Manager load balancing

Azure Traffic Manager を使用すると、異なるリージョン内の複数のデプロイ間で着信トラフィックをルーティングすることにより、PoA ネットワークのダウンタイムを短縮し、応答性を向上できます。Azure Traffic Manager can help reduce downtime and improve responsiveness of the PoA network by routing incoming traffic across multiple deployments in different regions. 組み込みの正常性チェックと自動再ルーティングにより、RPC エンドポイントとガバナンス DApp の高可用性を確保できます。Built-in health checks and automatic rerouting help ensure high availability of the RPC endpoints and the Governance DApp. この機能は、複数のリージョンにデプロイ済みで稼働準備ができている場合に便利です。This feature is useful if you have deployed to multiple regions and are production ready.

Traffic Manager を使用して、自動フェールオーバーによって PoA ネットワークの可用性を向上させます。Use Traffic Manager to improve PoA network availability with automatic failover. また、Traffic Manager を使用して、ネットワーク待機時間が最も短い Azure の場所にエンド ユーザーをルーティングすることによって、ネットワークの応答性を高めることもできます。You can also use Traffic Manager to increase your networks responsiveness by routing end users to the Azure location with lowest network latency.

Traffic Manager プロファイルを作成すると、プロファイルの DNS 名を使用してネットワークにアクセスできます。If you decide to create a Traffic Manager profile, you can use the DNS name of the profile to access your network. また、他のコンソーシアム メンバーがネットワークに追加されたら、そのメンバーがデプロイしたバリデーター間の負荷分散に Traffic Manager を使用できます。Once other consortium members have been added to the network, the Traffic Manager can also be used to load balance across their deployed validators.

Traffic Manager プロファイルの作成Creating a Traffic Manager profile

  1. Azure portal で、左上隅にある [リソースの作成] を選択します。In the Azure portal, select Create a resource in the upper left-hand corner.

  2. [Traffic Manager プロファイル] を検索します。Search for Traffic Manager profile.

    Azure Traffic Manager の検索

    プロファイルに一意の名前を付け、PoA のデプロイに使用されたリソース グループを選択します。Give the profile a unique name and select the Resource Group that was used for the PoA deployment.

  3. [作成] を選択してデプロイします。Select Create to deploy.

    Traffic Manager の作成

  4. デプロイしたら、リソース グループでインスタンスを選択します。Once deployed, select the instance in the resource group. Traffic Manager にアクセスするための DNS 名は、[概要] タブで確認できます。The DNS name to access the traffic manager can be found in the Overview tab.

    Traffic Manager の DNS の確認

  5. [エンドポイント] タブを選択し、 [追加] ボタンを選択します。Choose the Endpoints tab and select the Add button.

  6. エンドポイントに一意の名前を付けます。Give the endpoint a unique name.

  7. [ターゲット リソースの種類] で、 [パブリック IP アドレス] を選択します。For Target resource type, choose Public IP address.

  8. 1 つ目のリージョンのロード バランサーのパブリック IP アドレスを選択します。Choose the public IP address of the first region's load balancer.

    Traffic Manager のルーティング

同じ手順を、デプロイ済みのネットワークのリージョンごとに繰り返します。Repeat for each region in the deployed network. エンドポイントは、状態が [有効] になると自動的に読み込まれ、Traffic Manager の DNS 名でリージョン負荷分散されます。Once the endpoints are in the enabled status, they are automatically load and region balanced at the DNS name of the traffic manager. これで、この記事の他の手順で [CONSORTIUM_DATA_URL] パラメーターの代わりにこの DNS を使用できます。You can now use this DNS name in place of the [CONSORTIUM_DATA_URL] parameter in other steps of the article.

データ APIData API

各コンソーシアム メンバーは、他のメンバーがネットワークに接続するために必要な情報をホストします。Each consortium member hosts the necessary information for others to connect to the network. 接続を容易にするために、各メンバーはデータ API エンドポイントで一連の接続情報をホストします。To enable the ease of connectivity, each member hosts a set of connection information at the data API endpoint.

既存のメンバーは、メンバーのデプロイの前に [CONSORTIUM_DATA_URL] を提供します。The existing member provides the [CONSORTIUM_DATA_URL] before the member's deployment. デプロイ時に、参加するメンバーは次のエンドポイントで JSON インターフェイスから情報を取得します。Upon deployment, a joining member will retrieve information from the JSON interface at the following endpoint:

<CONSORTIUM_DATA_URL>/networkinfo

応答には、参加するメンバーに役立つ情報 (ジェネシス ブロック、検証コントロール セットのコントラクト ABI、ブートノード) と、既存のメンバーに役立つ情報 (検証コントロールのアドレス) が含まれています。The response contains information useful for joining members (Genesis block, Validator Set contract ABI, bootnodes) and information useful to the existing member (validator addresses). この標準化を使用して、複数のクラウド プロバイダーにわたってコンソーシアムを拡張できます。You can use this standardization to extend the consortium across cloud providers. この API では、次の構造を持つ JSON 形式の応答が返されます。This API returns a JSON formatted response with the following structure:

{
  "$id": "",
  "type": "object",
  "definitions": {},
  "$schema": "https://json-schema.org/draft-07/schema#",
  "properties": {
    "majorVersion": {
      "$id": "/properties/majorVersion",
      "type": "integer",
      "title": "This schema’s major version",
      "default": 0,
      "examples": [
        0
      ]
    },
    "minorVersion": {
      "$id": "/properties/minorVersion",
      "type": "integer",
      "title": "This schema’s minor version",
      "default": 0,
      "examples": [
        0
      ]
    },
    "bootnodes": {
      "$id": "/properties/bootnodes",
      "type": "array",
      "items": {
        "$id": "/properties/bootnodes/items",
        "type": "string",
        "title": "This member’s bootnodes",
        "default": "",
        "examples": [
          "enode://a348586f0fb0516c19de75bf54ca930a08f1594b7202020810b72c5f8d90635189d72d8b96f306f08761d576836a6bfce112cfb6ae6a3330588260f79a3d0ecb@10.1.17.5:30300",
          "enode://2d8474289af0bb38e3600a7a481734b2ab19d4eaf719f698fe885fb239f5d33faf217a860b170e2763b67c2f18d91c41272de37ac67386f80d1de57a3d58ddf2@10.1.17.4:30300"
        ]
      }
    },
    "valSetContract": {
      "$id": "/properties/valSetContract",
      "type": "string",
      "title": "The ValidatorSet Contract Source",
      "default": "",
      "examples": [
        "pragma solidity 0.4.21;\n\nimport \"./SafeMath.sol\";\nimport \"./Utils.sol\";\n\ncontract ValidatorSet …"
      ]
    },
    "adminContract": {
      "$id": "/properties/adminContract",
      "type": "string",
      "title": "The AdminSet Contract Source",
      "default": "",
      "examples": [
        "pragma solidity 0.4.21;\nimport \"./SafeMath.sol\";\nimport \"./SimpleValidatorSet.sol\";\nimport \"./Admin.sol\";\n\ncontract AdminValidatorSet is SimpleValidatorSet { …"
      ]
    },
    "adminContractABI": {
      "$id": "/properties/adminContractABI",
      "type": "string",
      "title": "The Admin Contract ABI",
      "default": "",
      "examples": [
        "[{\"constant\":false,\"inputs\":[{\"name\":\"proposedAdminAddress\",\"type\":\"address\"},…"
      ]
    },
    "paritySpec": {
      "$id": "/properties/paritySpec",
      "type": "string",
      "title": "The Parity client spec file",
      "default": "",
      "examples": [
        "\n{\n \"name\": \"PoA\",\n \"engine\": {\n \"authorityRound\": {\n \"params\": {\n \"stepDuration\": \"2\",\n \"validators\" : {\n \"safeContract\": \"0x0000000000000000000000000000000000000006\"\n },\n \"gasLimitBoundDivisor\": \"0x400\",\n \"maximumExtraDataSize\": \"0x2A\",\n \"minGasLimit\": \"0x2FAF080\",\n \"networkID\" : \"0x9a2112\"\n }\n }\n },\n \"params\": {\n \"gasLimitBoundDivisor\": \"0x400\",\n \"maximumExtraDataSize\": \"0x2A\",\n \"minGasLimit\": \"0x2FAF080\",\n \"networkID\" : \"0x9a2112\",\n \"wasmActivationTransition\": \"0x0\"\n },\n \"genesis\": {\n \"seal\": {\n \"authorityRound\": {\n \"step\": \"0x0\",\n \"signature\": \"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\n }\n },\n \"difficulty\": \"0x20000\",\n \"gasLimit\": \"0x2FAF080\"\n },\n \"accounts\": {\n \"0x0000000000000000000000000000000000000001\": { \"balance\": \"1\", \"builtin\": { \"name\": \"ecrecover\", \"pricing\": { \"linear\": { \"base\": 3000, \"word\": 0 } } } },\n \"0x0000000000000000000000000000000000000002\": { \"balance\": \"1\", \"builtin\": { \"name\": \"sha256\", \"pricing\": { \"linear\": { \"base\": 60, \"word\": 12 } } } },\n \"0x0000000000000000000000000000000000000003\": { \"balance\": \"1\", \"builtin\": { \"name\": \"ripemd160\", \"pricing\": { \"linear\": { \"base\": 600, \"word\": 120 } } } },\n \"0x0000000000000000000000000000000000000004\": { \"balance\": \"1\", \"builtin\": { \"name\": \"identity\", \"pricing\": { \"linear\": { \"base\": 15, \"word\": 3 } } } },\n \"0x0000000000000000000000000000000000000006\": { \"balance\": \"0\", \"constructor\" : \"…\" }\n }\n}"
      ]
    },
    "errorMessage": {
      "$id": "/properties/errorMessage",
      "type": "string",
      "title": "Error message",
      "default": "",
      "examples": [
        ""
      ]
    },
    "addressList": {
      "$id": "/properties/addressList",
      "type": "object",
      "properties": {
        "addresses": {
          "$id": "/properties/addressList/properties/addresses",
          "type": "array",
          "items": {
            "$id": "/properties/addressList/properties/addresses/items",
            "type": "string",
            "title": "This member’s validator addresses",
            "default": "",
            "examples": [
              "0x00a3cff0dccc0ecb6ae0461045e0e467cff4805f",
              "0x009ce13a7b2532cbd89b2d28cecd75f7cc8c0727"
            ]
          }
        }
      }
    }
  }
}

ガバナンス DAppGovernance DApp

Proof-of-Authority の中核をなすのは分散型ガバナンスです。At the heart of proof-of-authority is decentralized governance. Proof-of-Authority は、ネットワーク機関の許可済みリストによってネットワークの正常性を維持するため、この許可リストに変更を加えるための公正なメカニズムを提供することが重要です。Since proof-of-authority relies upon a permitted list of network authorities to keep the network healthy, it's important to provide a fair mechanism to make modifications to this permission list. 各デプロイには、この許可済みリストのオンチェーン ガバナンスのための一連のスマート コントラクトとポータルが付属しています。Each deployment comes with a set of smart-contracts and portal for on-chain governance of this permitted list. 提案された変更がコンソーシアム メンバーによる投票で過半数に達すると、変更が適用されます。Once a proposed change reaches a majority vote by consortium members, the change is enacted. 投票により、新しいコンセンサス参加者の追加や侵害を受けた参加者の削除を透明な方法で行うことができ、誠実なネットワークが促進されます。Voting allows new consensus participants to be added or compromised participants to be removed in a transparent way that encourages an honest network.

ガバナンス DApp は、ネットワーク上の機関を管理するために使用される、事前にデプロイされたスマート コントラクトのセットと Web アプリケーションです。The governance DApp is a set of pre-deployed smart contracts and a web application that are used to govern the authorities on the network. 機関は管理 ID と検証ノードに分けられます。Authorities are broken up into admin identities and validator nodes. 管理者は、コンセンサスへの参加を一連の検証ノードに委任する権限を持ちます。Admins have the power to delegate consensus participation to a set of validator nodes. また、管理者は、他の管理者のネットワーク参加またはネットワーク脱退に投票することもできます。Admins also may vote other admins into or out of the network.

ガバナンス DApp

  • 分散型ガバナンス: ネットワーク機関での変更は、一部の管理者によるオンチェーン投票を通じて管理されます。Decentralized Governance: Changes in network authorities are administered through on-chain voting by select administrators.
  • 検証コントロールへの委任: 機関は、各 PoA デプロイに設定されている検証ノードを管理できます。Validator Delegation: Authorities can manage their validator nodes that are set up in each PoA deployment.
  • 監査可能な変更履歴: 各変更はブロックチェーンに記録され、透明性と監査機能が提供されます。Auditable Change History: Each change is recorded on the blockchain providing transparency and auditability.

ガバナンスの概要Getting started with governance

ガバナンス DApp を使用して任意の種類のトランザクションを実行するには、Ethereum ウォレットを使用する必要があります。To perform any kind of transactions through the Governance DApp, you need to use an Ethereum wallet. 最も簡単な方法は、MetaMask などのブラウザー内ウォレットを使用することですが、これらのスマート コントラクトはネットワークにデプロイされているため、ガバナンス コントラクトとのやり取りを自動化することもできます。The most straightforward approach is to use an in-browser wallet such as MetaMask; however, because these smart contracts are deployed on the network you may also automate your interactions to the Governance contract.

MetaMask をインストールした後、ブラウザーのガバナンス DApp に移動します。After installing MetaMask, navigate to the Governance DApp in the browser. URL は、Azure portal を使用してデプロイの出力で見つけることができます。You can locate the URL through Azure portal in the deployment output. ブラウザー内ウォレットがインストールされていない場合、アクションを実行することはできませんが、管理者の状態を表示することは可能です。If you don't have an in-browser wallet installed you won't be able to perform any actions; however, you can view the administrator state.

管理者になるBecoming an admin

ネットワークにデプロイされた最初のメンバーが自動的に管理者になり、そのパリティ ノードが検証コントロールとしてリストされます。If you're the first member that deployed on the network, then you automatically become an admin and your parity nodes are listed as validators. ネットワークに参加している場合は、既存の管理者セットの大多数 (50% 超) によって管理者として投票される必要があります。If you're joining the network, you need to get voted in as an admin by a majority (greater than 50%) of the existing admin set. 管理者にならないことを選択をした場合でも、ノードはブロックチェーンを同期し、検証しますが、ブロック作成プロセスに参加することはありません。If you choose not to become an admin, your nodes still sync and validate the blockchain; however, they don't participate in the block creation process. 管理者になるための投票プロセスを開始するには、 [申請] を選択し、Ethereum アドレスおよび別名を入力します。To start the voting process to become an admin, select Nominate and enter your Ethereum address and alias.

申請

候補Candidates

[候補] タブを選択すると、現在の管理者候補が表示されます。Selecting the Candidates tab shows you the current set of candidate administrators. 候補者が現在の管理者による投票の過半数に達すると、その候補者は管理者に昇格します。候補者に投票するには、その行を選択し、 [投票] を選択します。Once a candidate reaches a majority vote by the current admins, the candidate gets promoted to an admin. To vote on a candidate, select the row and select Vote in. 投票について気が変わった場合は、候補者を選択し、 [Rescind vote](投票の取り消し) を選択します。If you change your mind on a vote, select the candidate and select Rescind vote.

候補

管理者Admins

[管理者] タブでは、現在の管理者が表示され、反対投票を行うことができます。The Admins tab shows the current set of admins and provides you the ability to vote against. 管理者が 50% を超える支持を失うと、ネットワークの管理者から削除されます。Once an admin loses more than 50% support, they are removed as an admin on the network. その管理者が所有している検証ノードは検証コントロールのステータスを失い、ネットワークのトランザクション ノードになります。Any validator nodes that the admin owns lose validator status and become transaction nodes on the network. 管理者が削除される理由はさまざまですが、事前にポリシーに同意するかどうかはコンソーシアム次第です。An admin may be removed for any number of reasons; however, it's up to the consortium to agree on a policy in advance.

管理者

検証コントロールValidators

[検証コントロール] タブを選択すると、インスタンスに現在デプロイされているパリティ ノードとその現在のステータス (ノードのタイプ) が表示されます。Selecting the Validators tab displays the current deployed parity nodes for the instance and their current status (Node type). このビューは現在デプロイされているコンソーシアム メンバーを表しているので、このリストに含まれる検証コントロール セットはコンソーシアム メンバーごとに異なります。Each consortium member has a different set of validators in this list, since this view represents the current deployed consortium member. インスタンスが新しくデプロイされ、検証コントロールを追加していない場合は、 [Add Validators](検証コントロールの追加) オプションが表示されます。If the instance is newly deployed and you haven't added your validators, you get the option to Add Validators. 検証コントロールを追加すると、リージョン負荷分散されたパリティ ノードのセットが自動的に選択され、検証コントロール セットに割り当てられます。Adding validators automatically chooses a regionally balanced set of parity nodes and assigns them to your validator set. 許可されている容量を超えるノードをデプロイした場合、残りのノードはネットワークのトランザクション ノードになります。If you have deployed more nodes than the allowed capacity, the remaining nodes become transaction nodes on the network.

検証コントロールそれぞれのアドレスは Azure の ID ストアによって自動的に割り当てられます。The address of each validator is automatically assigned via the identity store in Azure. ノードがダウンした場合は、その ID が放棄されるので、デプロイ内の別のノードに引き継ぐことができます。If a node goes down, it relinquishes its identity, allowing another node in your deployment to take its place. このプロセスにより、コンセンサスへの参加の高可用性が確保されます。This process ensures that your consensus participation is highly available.

検証コントロール

コンソーシアム名Consortium name

管理者はコンソーシアム名を更新できます。Any admin may update the consortium name. 左上の歯車アイコンを選択してコンソーシアム名を更新します。Select the gear icon in the top left to update the consortium name.

アカウント メニューAccount menu

右上には、Ethereum アカウントの別名と ID があります。On the top-right, is your Ethereum account alias and identicon. 管理者は別名を更新できます。If you're an admin, you have the ability to update your alias.

Account

Ethereum の開発Ethereum development

スマート コントラクトをコンパイル、デプロイ、テストするために、Ethereum の開発で検討できるオプションを次に示します。To compile, deploy, and test smart contracts, here are a few options you can consider for Ethereum development:

  • Truffle Suite - クライアントベースの Ethereum 開発環境Truffle Suite - Client-based Ethereum development environment
  • Ethereum Remix - ブラウザベースのローカルの Ethereum 開発環境Ethereum Remix - Browser-based and local Ethereum development environment

スマート コントラクトをコンパイル、デプロイ、実行するCompile, deploy, and execute smart contract

次の例では、単純なスマート コントラクトを作成します。In the following example, you create a simple smart contract. Truffle を使用して、スマート コントラクトをコンパイルし、ブロックチェーン ネットワークにデプロイします。You use Truffle to compile and deploy the smart contract to your blockchain network. デプロイしたら、トランザクションを介してスマート コントラクト関数を呼び出します。Once deployed, you call a smart contract function via a transaction.

前提条件Prerequisites

  • Python 2.7.15 をインストールする。Install Python 2.7.15. Truffle と Web3 には Python が必要です。Python is needed for Truffle and Web3. Python をパスに含めるインストール オプションを選択します。Select the install option to include Python in your path.
  • Truffle v5.0.5 をインストールします (npm install -g truffle@v5.0.5)。Install Truffle v5.0.5 npm install -g truffle@v5.0.5. Truffle では、Node.jsGit など、いくつかのツールがインストールされている必要があります。Truffle requires several tools to be installed including Node.js, Git. 詳細については、Truffle のドキュメントをご覧ください。For more information, see Truffle documentation.

Truffle プロジェクトを作成するCreate Truffle project

スマート コントラクトをコンパイルしてデプロイするには、Truffle プロジェクトを作成しておく必要があります。Before you can compile and deploy a smart contract, you need to create a Truffle project.

  1. コマンド プロンプトまたはシェルを開きます。Open a command prompt or shell.

  2. HelloWorld という名前のフォルダーを作成します。Create a folder named HelloWorld.

  3. ディレクトリを新しい HelloWorld フォルダーに変更します。Change directory to the new HelloWorld folder.

  4. truffle init コマンドを使用して、新しい Truffle プロジェクトを初期化します。Initialize a new Truffle project using the command truffle init.

    新しい Truffle プロジェクトの作成

スマート コントラクトを追加するAdd a smart contract

Truffle プロジェクトの contracts サブディレクトリにスマート コントラクトを作成します。Create your smart contracts in the contracts subdirectory of your Truffle project.

  1. Truffle プロジェクトの contracts サブディレクトリに、postBox.sol という名前のファイルを作成します。Create a file in the named postBox.sol in the contracts subdirectory of your Truffle project.

  2. postBox.sol に次の Solidity コードを追加します。Add the following Solidity code to postBox.sol.

    pragma solidity ^0.5.0;
    
    contract postBox {
        string message;
        function postMsg(string memory text) public {
            message = text;
        }
        function getMsg() public view returns (string memory) {
            return message;
        }
    }
    

Truffle を使用してスマート コントラクトをデプロイするDeploy smart contract using Truffle

Truffle プロジェクトには、ブロックチェーン ネットワーク接続の詳細の構成ファイルが含まれています。Truffle projects contain a configuration file for blockchain network connection details. この構成ファイルを変更して、ネットワークの接続情報を含めます。Modify the configuration file to include the connection information for your network.

警告

Ethereum 秘密キーをネットワーク経由で送信することは絶対にしないでください。Never send your Ethereum private key over the network. 必ず、最初に各トランザクションに署名してから、署名済みのトランザクションをネットワークで送信するようにしてください。Ensure that each transaction is signed locally first and the signed transaction is sent over the network.

  1. ブロックチェーン ネットワークのデプロイ時に使用される Ethereum 管理者アカウントのニーモニック フレーズが必要です。You need the mnemonic phrase for the Ethereum admin account used when deploying your blockchain network. MetaMask を使用してアカウントを作成した場合は、MetaMask からニーモニックを取得できます。If you used MetaMask to create the account, you can retrieve the mnemonic from MetaMask. MetaMask 拡張機能の右上にある管理者アカウント アイコンを選択し、 [Settings](設定) > [Security & Privacy](セキュリティとプライバシー) > [Reveal Seed Words](シード ワードの表示) を選択します。Select the administrator account icon on the top right of the MetaMask extension and select Settings > Security & Privacy > Reveal Seed Words.

  2. Truffle プロジェクトの truffle-config.js の内容を次の内容に置き換えます。Replace the contents of truffle-config.js in your Truffle project with the following content. プレースホルダーのエンドポイント値とニーモニック値を置き換えます。Replace the placeholder endpoint and mnemonic values.

    const HDWalletProvider = require("truffle-hdwallet-provider");
    const rpc_endpoint = "<Ethereum RPC endpoint>";
    const mnemonic = "Twelve words you can find in MetaMask > Security & Privacy > Reveal Seed Words";
    
    module.exports = {
      networks: {
        development: {
          host: "localhost",
          port: 8545,
          network_id: "*" // Match any network id
        },
        poa: {
          provider: new HDWalletProvider(mnemonic, rpc_endpoint),
          network_id: 10101010,
          gasPrice : 0
        }
      }
    };
    
  3. Truffle HD Wallet プロバイダーを使用しているので、npm install truffle-hdwallet-provider --save コマンドを使用してプロジェクトにモジュールをインストールします。Since we are using the Truffle HD Wallet provider, install the module in your project using the command npm install truffle-hdwallet-provider --save.

Truffle では、移行スクリプトを使用して、スマート コントラクトをブロックチェーン ネットワークにデプロイします。Truffle uses migration scripts to deploy smart contracts to a blockchain network. 新しいスマート コントラクトをデプロイするには、移行スクリプトが必要です。You need a migration script to deploy your new smart contract.

  1. 新しいコントラクトをデプロイするための新しい移行を追加します。Add a new migration to deploy the new contract. Truffle プロジェクトの migrations サブディレクトリに、2_deploy_contracts.js ファイルを作成します。Create file 2_deploy_contracts.js in the migrations subdirectory of the Truffle project.

    var postBox = artifacts.require("postBox");
    
    module.exports = deployer => {
        deployer.deploy(postBox);
    };
    
  2. Truffle 移行コマンドを使用して、PoA ネットワークにデプロイします。Deploy to the PoA network using the Truffle migrate command. Truffle プロジェクト ディレクトリのコマンド プロンプトで、次のコマンドを実行します。At the command prompt in the Truffle project directory, run:

    truffle migrate --network poa
    

スマート コントラクト関数を呼び出すCall a smart contract function

スマート コントラクトがデプロイされたので、関数を呼び出すトランザクションを送信できます。Now that your smart contract is deployed, you can send a transaction to call a function.

  1. Truffle プロジェクト ディレクトリに、sendtransaction.js という名前の新しいファイルを作成します。In the Truffle project directory, create a new file named sendtransaction.js.

  2. sendtransaction.js に次の内容を追加します。Add the following contents to sendtransaction.js.

    var postBox = artifacts.require("postBox");
    
    module.exports = function(done) {
      console.log("Getting the deployed version of the postBox smart contract")
      postBox.deployed().then(function(instance) {
        console.log("Calling postMsg function for contract ", instance.address);
        return instance.postMsg("Hello, blockchain!");
      }).then(function(result) {
        console.log("Transaction hash: ", result.tx);
        console.log("Request complete");
        done();
      }).catch(function(e) {
        console.log(e);
        done();
      });
    };
    
  3. Truffle 実行コマンドを使用してスクリプトを実行します。Execute the script using the Truffle execute command.

    truffle exec sendtransaction.js --network poa
    

    トランザクションを介して関数を呼び出すスクリプトの実行

WebAssembly (WASM) のサポートWebAssembly (WASM) support

新しくデプロイされた PoA ネットワークでは、WebAssembly のサポートが既に有効になっています。WebAssembly support is already enabled for you on newly deployed PoA networks. これにより、Web-Assembly (Rust、C、C++) にトランスパイルされる任意の言語でスマート コントラクトの開発を実行できます。It allows for smart-contract development in any language that transpiles to Web-Assembly (Rust, C, C++). 詳細については、次を参照してください。Parity による WebAssembly の概要およびParity Technologies 提供のチュートリアルFor more information, see: Parity Overview of WebAssembly and Tutorial from Parity Tech

よく寄せられる質問FAQ

送信しなかった多数のトランザクションがネットワーク上にあることに気づきました。I notice there are many transactions on the network that I didn't send. これはどこから生じたものですか?Where are these coming from?

パーソナル API をロック解除することは安全ではありません。It is insecure to unlock the personal API. ボットはロック解除された Ethereum アカウントを待機しており、資金を流出させようと試みます。Bots listen for unlocked Ethereum accounts and attempt to drain the funds. ボットはこれらのアカウントが実際の ether を含んでいると想定し、最初に残高を奪おうとします。The bot assumes these accounts contain real-ether and attempt to be the first to siphon the balance. ネットワーク上でパーソナル API を有効にしないでください。Do not enable the personal API on the network. 代わりに、MetaMask などのウォレットを使用して手動で、またはプログラムで、トランザクションに事前に署名します。Instead pre-sign the transactions either manually using a wallet like MetaMask or programmatically.

VM に SSH 接続するにはどうすればよいですか?How to SSH onto a VM?

SSH ポートはセキュリティ上の理由で公開されません。The SSH port is not exposed for security reasons. このガイドに従って SSH ポートを有効化してください。Follow this guide to enable the SSH port.

監査メンバーまたはトランザクション ノードを設定するにはどうすればよいですか?How do I set up an audit member or transaction nodes?

トランザクション ノードは、ネットワークとピアリングされていても、コンセンサスには参加していない一連の Parity クライアントです。Transaction nodes are a set of parity clients that are peered with the network but are not participating in consensus. これらのノードを使用しても、Ethereum トランザクションを送信し、スマート コントラクトの状態を読み取ることは可能です。These nodes can still be used to submit Ethereum transactions and read the smart contract state. このメカニズムは、ネットワーク上の権限のないコンソーシアム メンバーに監査機能を提供するために機能します。This mechanism works for providing auditability to non-authority consortium members on the network. これを実現するには、「コンソーシアムの拡張」の手順に従います。To achieve this, follow the steps in Growing the Consortium.

MetaMask トランザクションに長時間かかっているのはなぜですか?Why are MetaMask transactions taking a long time?

トランザクションが正しい順序で受信されるようにするために、各 Ethereum トランザクションには増分される nonce が付けられています。To ensure transactions are received in the correct order, each Ethereum transaction comes with an incrementing nonce. 別のネットワークで MetaMask のアカウントを使用した場合、nonce 値をリセットする必要があります。If you've used an account in MetaMask on a different network, you need to reset the nonce value. 設定アイコン (3 本のバー)、[設定]、[アカウントのリセット] の順にクリックします。Click on the settings icon (three-bars), Settings, Reset Account. トランザクションの履歴がクリアされ、トランザクションを再送信できるようになります。The transaction history will be cleared and now you can resubmit the transaction.

MetaMask でガスの料金を指定する必要がありますか?Do I need to specify gas fee in MetaMask?

Ether は proof-of-authority コンソーシアムの目的では動作しません。Ether doesn't serve a purpose in proof-of-authority consortium. そのため、MetaMask でトランザクションを送信するときに、ガスの料金を指定する必要はありません。Hence, there is no need to specify gas fee when submitting transactions in MetaMask.

Azure OMS のプロビジョニングに失敗したためにデプロイに失敗した場合はどうすればよいですか?What should I do if my deployment fails due to failure to provision Azure OMS?

監視はオプション機能です。Monitoring is an optional feature. Azure Monitor リソースを正常にプロビジョニングできないためにデプロイが失敗するというまれなケースでは、Azure Monitor なしで再デプロイできます。In some rare cases where your deployment fails because of inability to successfully provision Azure Monitor resource, you can redeploy without Azure Monitor.

パブリック IP のデプロイは、プライベート ネットワークのデプロイと互換性がありますか?Are public IP deployments compatible with private network deployments?

いいえ。No. ピアリングには双方向通信が必要であるため、ネットワーク全体がパブリックまたはプライベートのいずれかである必要があります。Peering requires two-way communication so the entire network must either be public or private.

Proof-of-Authority の予想されるトランザクション スループットはどのくらいですか?What is the expected transaction throughput of Proof-of-Authority?

トランザクションのスループットは、トランザクションの種類とネットワーク トポロジに大きく依存します。The transaction throughput will be highly dependent upon the types of transactions and the network topology. 単純なトランザクションでは、複数の領域にデプロイされているネットワークで、1 秒あたり平均 400 トランザクションをベンチマークしました。Using simple transactions, we've benchmarked an average of 400 transactions per second with a network deployed across multiple regions.

スマート コントラクト イベントをサブスクライブする方法は?How do I subscribe to smart contract events?

Ethereum の Proof-of-Authority は Web ソケットをサポートするようになりました。Ethereum Proof-of-Authority now supports web-sockets. デプロイの出力を確認して、Web ソケットの URL とポートを見つけてください。Check your deployment output to locate the web-socket URL and port.

次のステップNext steps

その他の Azure Blockchain ソリューションについては、Azure Blockchain のドキュメントをご覧ください。For more Azure Blockchain solutions, see the Azure Blockchain documentation.