Ethereum-quick-guide
イーサリアム-はじめに
Bitcoinの大成功は、独自の通貨を作成するいくつかの人々の心に関心を集めました。 デジタル通貨であるビットコインが提供する利点を見ると、人々は自分のアプリケーションでブロックチェーンの概念を使用したいと考えていました。 人々は、物理的な契約から、拒否、透明性、セキュリティなどのいくつかの問題が発生するスマートデジタル契約に移行したいと考えていました。 自動的に対処されます。 この取り組みの結果、イーサリアムが作成されました。これは、スマートコントラクトをサポートする分散ブロックチェーンアプリケーションを作成するための一般的なプラットフォームです。
このチュートリアルでは、Ethereumプラットフォームで分散アプリケーション(DAPP)を作成する方法を学習します。 より具体的には、コントラクトを作成し、ローカルブロックチェーンでテストし、最終的に詳細なテストと商用使用のために外部ブロックチェーンに展開する方法を学習します。 コントラクト開発用のオブジェクト指向言語である Solidity を使用します。 また、契約の開発とテスト用のオープンソースIDEである Remix も使用します。 テスト済みの契約を外部ブロックチェーンにデプロイするには、 Ganache を使用します。 コントラクトと対話するには、クライアントアプリケーションが必要です。 MyEtherWallet を使用して、そのようなクライアントごとにウォレットを作成します。 契約作成者が契約を公開します。 他のクライアントは、契約で提供されるインターフェースを使用して連絡先の値を確認し、契約の一部を実行するために作成者にお金を送ります。
それでは、契約書を書くことから始めましょう。
イーサリアム-スマートコントラクト
契約を開発およびテストするために利用可能ないくつかのツールがあります。 最もシンプルなツールの1つは、公式のEthereumサイト自体で提供されています。 このツールは Remix と呼ばれ、これを契約開発に使用します。
契約開発のためのリミックス
ブラウザに次のURLを入力して、Remix IDEを開きます。
次の画面が表示されます。
中央のウィンドウに、サンプルのSolidityコードであるデフォルトコードが表示されます。 このコードエディターで契約コードを入力します。 コードは自動コンパイルされる場合があります。 コードのコンパイルに成功すると、同じIDEでコードを実行できます。 コントラクトメソッドを実行すると、同じIDEウィンドウに結果が表示されます。 コードをデバッグし、プロジェクトを単体テストする機能があります。 これらは、以下のIDEスクリーンショットに示すように、右上のメニューバーに表示されます。 これらのオプションはまもなく使用します。
これで、契約の作成を開始します。
イーサリアム-契約書作成のための堅牢性
Solidityは、契約書作成のために特に開発されたオブジェクト指向言語です。 これは、C ++、Python、およびJavaScriptから特性を継承する高レベル言語です。 Solidityコンパイラは、ソースコードを、Ethereum Virtual Machine(EVM)で実行されるバイトコードにコンパイルします。
Solidity構文をすばやく理解するには、IDEのサンプルコードを参照してください。
pragma solidity >=0.4.22 <0.6.0;
contract Ballot {
最初の行は、コンパイラーへのディレクティブです。 2行目は、契約の定義を開始します。 契約内では、次のような変数を宣言します-
address chairperson;
*Proposal* などの構造を定義し、これらの構造アイテムの配列を作成することもできます。 コードウィンドウでこれを調べます。
次に、コントラクトをインスタンス化するときに呼び出されるコンストラクターを定義できます。
constructor(uint8 _numProposals) public {
コンストラクターの後に、いくつかのメソッド、つまりコントラクトメソッドを定義します。 サンプル契約では、 giveRightToVote は次の構文を持つそのようなメソッドの1つです-
function giveRightToVote(address toVoter) public {
*public* キーワードを使用すると、このメソッドを、契約にアクセスできるすべてのクライアントがパブリックに呼び出すことができます。
同様に、サンプルコントラクトでは、 delegate、vote 、および winningProposal という3つのメソッドをさらに定義しています。 Solidity構文を理解するには、これらを調べてください。 これらは、独自の契約を作成するための前提条件です。 Solidityの完全な構文の説明は、このチュートリアルの範囲外です。 Ethereum-developing-mycontract
Ethereum-契約のコンパイル
完全な契約コードを書いたら、このIDEでコンパイルするのは簡単です。 以下のスクリーンショットに示すように、IDEの Autocompile チェックボックスをクリックするだけです-
または、タイトル「* Start to compile」*のボタンをクリックして、契約をコンパイルすることもできます。
入力ミスがある場合は、コードウィンドウで修正します。 コードがエラーなしで完全にコンパイルされていることを確認してください。 これで、契約を展開する準備が整いました。
イーサリアム-契約の展開
この章では、イーサリアムに契約を展開する方法を学びます。 [実行]メニューオプションをクリックして、契約を展開します。 次の画面が表示されます。
強調表示されたリストボックスに契約名が表示されます。 この下に、 Deploy ボタンがあり、それをクリックして契約をデプロイします。 契約は、Remix組み込みのブロックチェーンに展開されます。 画面の下部に展開された契約が表示されます。 これは、以下のスクリーンショットの強調表示された部分で確認できます。
この強調表示された領域に3つのメソッド名が存在することに注意してください。 次に、コントラクトメソッドを実行して、コントラクトと対話します。
イーサリアム-契約との対話
デプロイされた契約をクリックすると、契約によって提供されるさまざまなパブリックメソッドが表示されます。 これは、以下のスクリーンショットに示されています。
最初のメソッド*送信*には、その前に編集ボックスが含まれています。 ここで、コントラクトメソッドに必要なパラメーターを入力します。 他の2つのメソッドはパラメーターを取りません。
送金
ここで、契約ウィンドウに表示される*送信*関数の前に100などの金額を入力します。 [送信]ボタンをクリックします。 これにより、コントラクトの send メソッドが実行され、コントラクトの value フィールドの値が減少し、 amount フィールドの値が増加します。
契約価値の調査
前回の*送金*アクションにより、契約額が100減少しました。 これで、コントラクトの getBalance メソッドを呼び出すことでこれを調べることができます。 以下のスクリーンショットに示すように、 getBalance ボタンをクリックすると出力が表示されます-
契約の*値*は900に削減されました。
収集した金額を調べる
このセクションでは、この契約でこれまでに収集された金額を調べます。 このためには、 getAmount ボタンをクリックします。 次の画面が表示されます。
*amount* フィールドの値が0から100に変更されました。
いくつかの*送信*操作を試行し、コントラクトの value および amount フィールドを調べて、デプロイされたコントラクトが期待どおりに実行されていると結論付けます。
イーサリアム-リミックスの制限
これまでに使用したRemix IDEは、契約の開発と初期テストに十分です。 実際の契約の場合、さまざまなパラメーターに対して機能をテストする必要があります。 Remixは、実際の(テスト以外の)ユーザーアカウントを作成して、それらの間で資金を移動することはできません。 Remixによって作成されたブロックチェーンの構成を制御することはできません。 トランザクションの実行を監視することさえできません。
Remixはいくつかの高度な操作を逃しています。 したがって、これらすべての機能を提供するより洗練されたブロックチェーンに契約を展開する必要があります。 そのようなブロックチェーンの1つが Ganache で、これについては後の章で説明します。
イーサリアム-ブロックチェーンのガナッシュ
Ganacheは、Solidity契約をテストするための個人的なイーサリアムブロックチェーンのセットアップに使用されます。 Remixと比較すると、より多くの機能を提供します。 Ganacheを使用すると、機能について学習できます。 Ganacheの使用を開始する前に、ローカルマシンにブロックチェーンをダウンロードしてインストールする必要があります。
Ganacheをダウンロードする
次のURLからGanacheをダウンロードできます-
https://truffleframework.com/ganache
Ganacheはいくつかのプラットフォームで利用可能です。 このチュートリアル全体をMacで開発およびテストしました。 したがって、以下のスクリーンショットはMacのインストールを示しています。 上記のインストールURLを開くと、マシンのOSが自動的に検出され、適切なバイナリインストールが表示されます。 以下のスクリーンショットは、Macのインストールを示しています。
[ダウンロード]ボタンをクリックすると、Macインストール用のDMGファイルのダウンロードが開始されます。
Ganacheのインストール
ダウンロードフォルダで「Ganache-2.0.0.dmg」を見つけてダブルクリックし、Ganacheをインストールします。 インストールが成功すると、次の画面が表示されます-
GanacheアイコンをApplicationフォルダーにドラッグします。 現在、GanacheはMac上のアプリケーションとして利用できます。
他のOSを使用している場合は、インストールを成功させるための指示に従ってください。
ガナッシュの開始
Applicationフォルダで Ganache を見つけ、そのアイコンをダブルクリックしてGanacheを起動します。
Ganacheデスクトップ
Ganacheが起動すると、Ganache画面が次のように表示されます-
QUICKSTARTをクリックしてGanacheを起動します。 以下に示すように、Ganacheコンソールが表示されます-
上のスクリーンショットのコンソールには、残高が100 ETHの2つのユーザーアカウントが表示されています(Ether-Ethereumプラットフォームでの取引通貨)。 また、各アカウントのトランザクション数がゼロであることも示しています。 ユーザーはこれまでトランザクションを実行していないため、このカウントは明らかにゼロです。
ここで、Ganacheのいくつかの重要な画面の概要を取得します。これらは、私たちに直接関連しています。 Ethereum-ganache-server-settings
イーサリアム-クイックウォークスルー
ここで、Ganacheデスクトップで利用可能なものを簡単に理解します。 デスクトップの上部にはいくつかのメニューオプションがあり、そのうちのいくつかはすぐに関連します。 メニューバーは、以下のスクリーンショットで強調表示されています-
*TRANSACTIONS* メニューをクリックすると、これまでに実行されたすべてのトランザクションが表示されます。 すぐにトランザクションを実行します。 さて、上記の画面に戻って、時々取引を確認してください。 典型的なトランザクション画面は以下のとおりです-
同様に、 BLOCKS メニューをクリックすると、さまざまなマイニングブロックが表示されます。 次のスクリーンショットを検討して、BLOCKSメニューがどのように見えるかを理解してください-
*LOGS* メニューをクリックします。 システムログが開きます。 ここで、Ethereum Blockchainで実行したさまざまな操作を調べることができます。
ここで、Ganacheを使用してプライベートEthereumブロックチェーンを設定する方法を理解したので、このブロックチェーンを使用するクライアントをいくつか作成します。
イーサリアム-MyEtherWallet
クライアントアプリケーションの場合は、 MyEtherWallet を使用します。
次のURLから MyEtherWallet ソフトウェアをダウンロードします−
https://github.com/kvhnuke/etherwallet/releases/tag/v3.21.06
必要に応じて、ダウンロードしたファイルを解凍し、 indexl を開きます。 新しいウォレットを作成するための次のインターフェースが表示されます。
イーサリアム-ウォレットの作成
この章では、イーサリアムウォレットの作成方法を学びます。 新しいウォレットを作成するには、選択したパスワードを入力し、「新しいウォレットを作成」ボタンをクリックします。 そうすると、ウォレットが作成されます。 デジタルウォレットとは、基本的に、安全な場所に保管する必要がある公開/秘密キーペアの生成です。 ウォレットの作成は、次の画面になります-
- 「キーストアファイルのダウンロード(UTC/JSON)」*ボタンをクリックして、生成されたキーを保存します。 ここで、「わかりました」をクリックします。 [続行] *ボタン。 以下のスクリーンショットに示すように、秘密鍵が画面に表示されます-
- 「ペーパーウォレットの印刷」*ボタンをクリックして、ウォレットの秘密キーの物理的な記録を保持します。 後でウォレットのロックを解除するために必要になります。 次の画面が表示されます。 この出力を失わないでください。
ウォレットのロックを解除するには、*「住所を保存」*ボタンをクリックします。 次の画面が表示されます。
上記の画面で強調表示されているように、秘密鍵オプションを使用してウォレットのロックを解除できます。 前のスクリーンショットの秘密キーをカットアンドペーストして、[ロック解除]ボタンをクリックします。 ウォレットのロックが解除され、画面の下部にメッセージが表示されます。 現時点ではウォレットには何も含まれていないため、この時点ではウォレットのロック解除はあまり役に立ちません。
ウォレットをGanacheブロックチェーンに接続する
これでウォレットが作成されました。このウォレットは、ブロックチェーンへのクライアントインターフェイスです。 前のレッスンで開始したGanacheブロックチェーンにウォレットを添付します。 これを行うには、以下のスクリーンショットに示すように、*ネットワーク*ドロップダウンボックスをクリックします-
リストの一番下に移動します。 *「カスタムネットワーク/ノードの追加」*のオプションが表示されます。 このアイテムを選択します。
これで、Ganacheサーバーのアドレスとリッスンしているポートを尋ねる画面が表示されます。
Ganacheサーバーの詳細(http://127.0.0.1およびポート: 8545 )を入力します。 これらは、Ganacheサーバーのセットアップで設定した値です。 このノードに任意の*名前*を付けます。 *「カスタムノードの保存と使用」ボタンをクリックします。 画面の下部に接続されたメッセージが表示されます。 この時点で、ウォレットはGanacheブロックチェーンに正常に接続されています。
これで、この接続されたブロックチェーンに契約を展開する準備ができました。
イーサリアム-契約の展開
契約を展開するには、以下のスクリーンショットに示すように*契約*メニューオプションを選択します-
この画面で契約のバイトコードを入力する必要があります。 Solidity契約コードをコンパイルすると、EVMで実行されるバイトコードが生成されたことを思い出してください。 次に、このバイトコードを Remix IDE から取得する必要があります。
Remix IDE画面に移動すると、以前に入力した契約がコードウィンドウに表示されます。 そうでない場合は、コードウィンドウで契約を再入力します。 次のスクリーンショットに示すように、バイトコードボタンをクリックします-
コンパイルされたソースのバイトコードは、他の情報とともにクリップボードにコピーされます。 コピーしたコードをお気に入りのテキストエディターに貼り付けます。 以下は、テキストエディタのスクリーンショットです-
*object* タグの値には、目的のバイトコードが含まれています。 囲んでいる引用符をコピーしないように注意してコピーしてください。 バイトコードは本当に長いので、必ず最後のバイトまでコピーしてください。 次に、以下に示すように、このバイトコードを *Deploy Contract* 画面に貼り付けます-
*Gas Limit* フィールドは自動的に設定されます。
[ガス制限]フィールドの下に、ウォレットにアクセスするための選択項目があります。
ここで、この契約がデプロイされるGanacheアカウントの Private Key を使用してウォレットにアクセスします。 この秘密鍵を取得するには、 Ganache ウィンドウに戻ります。 以下に示すように、最初のアカウントの*キー*アイコンをクリックします-
次のスクリーンショットに示すように、ユーザーアカウント#1の秘密キーが表示されます-
この秘密鍵をコピーして、以下に示すように「Paste Your Private Key」セクションに貼り付けます-
画面の下部に*「ロック解除」*ボタンが表示されます。 ロックを解除すると、画面の下部に「成功」メッセージが表示されます。 この時点で、ウォレットはGanacheブロックチェーンのアカウント#1に接続されています。
これで、契約に署名してデプロイする準備が整いました。 以下のスクリーンショットに示すように、「* Sign Sign」*ボタンをクリックします-
トランザクションに署名すると、 Raw および Signed トランザクションの両方が生成および表示されます。 Ganacheブロックチェーンに契約を展開するには、*「Deploy Contract」*ボタンをクリックします。 Ganache Blockchainのアカウント#1ユーザーによって契約が展開されることを忘れないでください。 したがって、アカウント#1のユーザーが契約の作成者になります。 契約を展開する前に、公共の実際のイーサリアムブロックチェーンにこの契約を展開する場合、実際のお金がかかる可能性があるため、トランザクションを確認するように求められます。 ローカルマシンで実行されている現在のプライベートブロックチェーンでは、実際のお金は関係ありません。 以下のスクリーンショットに示すように、*トランザクションを作成*ボタンをクリックします-
Ganacheコンソールを調べます。以下のスクリーンショットに示すように、アカウント#1のETH残高が減少していることがわかります-
次に、以下のスクリーンショットに示すように、 TRANSACTIONS メニューをクリックします-
取引の詳細が表示されます。
この画面には、契約の公開アドレスが表示されます。 住所は上のスクリーンショットでマークされています。 このアドレスを公開して、他の人にあなたの契約がこの指定されたアドレスで利用可能であることを知らせます。 次のステップで必要になるので、参照用にこの契約アドレスをコピーします。
イーサリアム-デプロイされた契約との対話
これで、デプロイした契約を操作する準備が整いました。 MyEtherWalletデスクトップに戻り、以下のスクリーンショットに示すように「契約と対話する」タブをクリックします-
以前にコピーした契約アドレスを*「契約アドレス」フィールドに貼り付けます。 また、上記の画面に契約の「ABI/JSONインターフェイス」*を貼り付ける必要があります。
*ABI* を取得するには、 *Remix* ウィンドウに移動し、以下のスクリーンショットに示すように *ABI* ボタンをクリックします。
ABI/JSONインターフェースがクリップボードにコピーされます。 これをお気に入りのエディターに貼り付けて、生成されたインターフェースを調べます。これは以下に示されています-
ABI/JSON Interface
[
{
"constant": false,
"inputs": [
{
"name": "newDeposit",
"type": "uint256"
}
],
"name": "send",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"name": "initialAmount",
"type": "uint256"
},
{
"name": "initialValue",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [],
"name": "getAmount",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getBalance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]
このJSONを MyEtherWallet インターフェースに貼り付けた後、以下に示すように、JSONインターフェースの下のACCESSボタンがアクティブになります。
[アクセス]ボタンをクリックして、契約にアクセスします。
- アクセス*ボタンをクリックすると、Remixエディターのように画面に契約アドレスと機能選択ドロップダウンが表示されます。 これは、以下のスクリーンショットに示されています-
Remixデプロイメントの場合のように、契約のさまざまな機能を確認できます。 連絡先は、外部のGanacheブロックチェーンに展開されることに注意してください。 getAmount 関数を確認してください。 Amountの値はゼロになり、 getBalance には1000の残高が表示されます。
お金を送ってみてください。 金額を入力するための textedit コントロールが表示されます。 契約書を作成するとき、いくつかの「ガス」が使用され、ブロックチェーンに書き込む前にトランザクションを確認するように求められます。 Ganacheサーバーで設定したマイニングタイミングに応じて、トランザクションは短時間で実行されます。 この後、契約の value および amount フィールドを再検査して、これらが実際に変更されていることを確認できます。
Ganacheデスクトップを調べて、これまでに実行したトランザクションを表示できます。 サンプル出力を以下に示します-
これまで、あなたは契約の作成者であり、契約の執行者でもありました。 他の人があなたの契約を使用することを期待するので、これはあまり意味がありません。 このために、Ganache Blockchainの別のクライアントを作成し、新しく作成したアカウント#2からアカウント#1の契約作成者にお金を送金します。
イーサリアム-契約ユーザーの作成
この章では、イーサリアムでの契約ユーザーの作成について学びます。 公開された契約のユーザーを作成するには、前の手順で使用していた同じGanacheブロックチェーンに接続された別の MyEtherWallet クライアントを作成します。 MyEtherWallet 画面に移動して、新しいウォレットを作成します。
[契約]メニューをクリックし、前のケースと同様に[契約との対話]オプションを選択します。 この新しいユーザーは、既に公開されているコントラクトと単に対話し、自分のコントラクトを展開しないことに注意してください。 前のケースで使用した契約アドレスとABIを指定します。
ここで、 Access ボタンをクリックして、 send メソッドを呼び出します。 要求されたら、送信する100 ETHなどの値を入力します。 トランザクションを送信します。 提出すると、次の画面が表示されます。
この新しいクライアントをGanacheブロックチェーンに接続するには、Ganacheコンソールにアクセスしてください。 次のスクリーンショットに示すように、アカウント#2の鍵アイコンをクリックします-
アカウント#2の秘密鍵を取得します。
ここに示すように、受け取ったキーをコピーして、新しく作成したウォレットで使用します-
[ロック解除]ボタンをクリックしてウォレットを接続します。
ウォレットが正常にロック解除されたら、目的の送信トランザクションを記述します。
- 「トランザクションの生成」ボタンをクリックして、トランザクションを生成します。
トランザクションを*作成*し、ブロックチェーンに反映されるまでしばらく待ちます。 ここで、*“ getAmount” *を実行すると、表示される量は200になります。
「getBalance」*を実行します。 *value フィールドは800になります。
トランザクションログを調べて、さまざまなユーザーによって実行されたさまざまなトランザクションを確認します。
イーサリアム-概要
Solidityで独自のデジタル契約を作成する方法を学びました。 Remix IDEでコントラクトインターフェイスを開発およびテストしました。 さらにマルチユーザーテストを行うために、この契約をGanache Blockchainにデプロイしました。 Ganacheでは、2つのユーザーアカウントを作成しました。 最初のアカウントは、契約の公開に使用されました。 2番目のアカウントは、契約を消費するために使用されました。
次は何ですか?
このプロセス全体で使用したGanacheブロックチェーンは、マシンのプライベートおよびローカルです。 契約の機能に完全に満足したら、実際のイーサリアムブロックチェーンでの公開に進むことができます。 ただし、そのためには実際のお金を使う必要があります。 デモアプリケーションでは、Ganacheの各ユーザーアカウントのデフォルトとして1000 ETHを使用しました。 現実のブロックチェーンに契約を展開する場合、自国の通貨をETHに変換してETHを購入する必要があります。 この通貨はウォレットに保存され、お望みの方法で使用できます。