イーサリアムチュートリアル–イーサリアムの詳細!



このイーサリアムチュートリアルでは、アーキテクチャの観点からイーサリアムについて説明し、DAPPSとDAOを構築するための最大のプラットフォームを構成する方法についても説明します。

イーサリアム チュートリアル:

このイーサリアムチュートリアルブログでは、イーサリアムのアーキテクチャの内部動作について説明し、簡単なイーサリアムの実装についても説明します。 スマートコントラクト

イーサリアムは、将来B2Cエンタープライズの大部分にサービスを提供するプログラム可能なブロックチェーンだと思います。イーサリアムは、開発者に、ビットコインブロックチェーンのような事前定義された操作に制限するのではなく、ブロックチェーンで実行される複雑なモデルを作成する自由を与えます。





このアプローチにより、イーサリアムは、暗号通貨を含むがこれに限定されない、多数の分散型アプリケーションおよび組織のためのプラットフォームになりました。

この「EthereumTutorial」ブログの実行を通じて、さまざまなトピックを徹底的に取り上げます。これらのトピックは次のとおりです。



インストラクターがトピックを詳細に説明したイーサリアムチュートリアルのこの記録をご覧ください。 これは、この概念をよりよく理解するのに役立ちます。

イーサリアムチュートリアル|イーサリアムスマートコントラクト|エドゥレカ

イーサリアムチュートリアル:イーサリアムアカウント

イーサリアムネットワークには、次の2種類のアカウントがあります。



  • 外部アカウント
  • 契約アカウント

これらのアカウントは、外部アカウントと契約アカウントの両方で「状態オブジェクト」と呼ばれ、イーサリアムネットワークの「状態」を構成します。すべての状態オブジェクトには、明確に定義された状態があります。外部アカウントの場合、状態はアカウントの残高で構成されますが、契約アカウントの場合、状態はメモリストレージと残高によって定義されます。

外部アカウントを単にアカウントと呼びます。これらのアカウントは、すべての通常のユーザー、マイナー、自動エージェントなどを含むネットワークの外部エージェントによって所有されます。

これらのアカウントは通常、RSAなどの公開鍵暗号化アルゴリズムを使用して制御されます。外部アカウントの主な目的は、ユーザーがイーサリアムブロックチェーンと対話するための媒体として機能することです。

一方、コントラクトアカウントは、特定のアドレスのブロックチェーンに存在するコードのコレクションです。これらのコントラクトは、外部アカウントによって、または特定の行動を促すフレーズの機能を介して他のコントラクトによって呼び出されます。これらのコントラクトは、Solidity、Serpent、LLLなどの高レベルのスクリプト言語で記述されています。イーサリアムブロックチェーンに存在するすべてのコントラクトは、イーサリアム固有のバイナリ形式であるEVM(Ethereum Virtual Machine)バイトコードと呼ばれる特定の形式で保存されます。

EVMバイトコードについて説明したので、EVMについて説明するのは公平です。

イーサリアムチュートリアル:イーサリアム仮想マシン

イーサリアムは、素朴な方法で、分散型アプリケーションの開発の柱となった一連の一般化されたプロトコルを定義します。この中心にあるのは、イーサリアム仮想マシンです。次の図は、アーキテクチャを説明しています。

イーサリアムアーキテクチャ-イーサリアムチュートリアル-Edureka

イーサリアム仮想マシンは完全にサンドボックス化されているだけでなく、完全に分離されていることに注意することが重要です。これは、現在EVMで実行されているコードがネットワークまたはファイルシステムにアクセスできず、他のコントラクトに控えめにアクセスできることを意味します。

プラットフォームのコアを理解したところで、ネットワークノードについて詳しく見ていきましょう。

イーサリアムチュートリアル:イーサリアムネットワーク

イーサリアムネットワークはパブリックブロックチェーンネットワークです。これは、ネットワーク上で実行されるすべての分散型ピアツーピアアプリケーションおよび組織の基盤を形成します。ネットワークは、フルノードとライトウェイトノードの2種類のノードで構成されています。

フルノード ジェネシスブロック以降のトランザクションの履歴全体が含まれます。これらは、ブロックチェーンネットワークの整合性の本格的な証拠です。フルノードには、イーサリアムの仕様によって設定されたルールに従って検証されたすべてのトランザクションが含まれている必要があります。

軽量ノード 一方、ブロックチェーン全体のサブセットのみが含まれます。これらのタイプのノードは、主に軽量である必要がある電子ウォレットで使用されるため、ブロックチェーン全体をノードに保存することはできません。対照的に、これらのノードはすべてのブロックまたはトランザクションを検証するわけではなく、現在のブロックチェーン状態のコピーを持っていない可能性があります。彼らは完全なノードに依存して、不足している詳細を提供します(または単に特定の機能を欠いています)。ライトノードの利点は、起動と実行がはるかに高速で、計算量やメモリに制約のあるデバイスで実行でき、ストレージをほとんど消費しないことです。

すべてのパブリックブロックチェーンには通貨が付加されています。イーサリアムも例外ではありません。イーサリアムの暗号通貨を詳しく見てみましょう。

イーサリアムチュートリアル:エーテルとガス

イーサリアムは、イーサリアムネットワークでのトランザクションの支払いに使用される暗号通貨の名前です。一般的なトランザクションやサービスの支払いに加えて、Etherはガスの購入にも使用されます。ガスはEVM内の計算の支払いにも使用されます。

エーテルはメートル法の単位であり、取引やガスの正確な支払いに役立つ多くの金種があります。最小の金種、別名ベースユニットはWeiと呼ばれます。宗派とその特定の名前は、以下の表に示されています。

単位魏の価値
wei1 wei1
クウェイ1e3 wei1,000
ムウェイ1e6 wei1,000,000
ニット1e9 wei1,000,000,000
microEther1e12 wei1,000,000,000,000
ミリエーテル1e15 wei1,000,000,000,000,000
エーテル1e18 wei1,000,000,000,000,000,000

前に説明したように、EVMはネットワークにデプロイされたコードの実行を担当します。では、誰かがEVMで無限ループを実行し、そのメモリを完全に過負荷にするのを防ぐにはどうすればよいでしょうか。これがガスの概念の出番です。

ガスは、ネットワーク上の計算リソースに支払うためのメトリックとして使用されます。ネットワーク上のすべての契約には、計算に使用できるガスの最大量が設定されています。これは「 ガス制限 」その他の関連するガス用語は次のとおりです。

  • ガス価格 :これは、Etherやその他の金種のようなトークンに関するガスのコストです。ガスの価値を安定させるために、ガス価格は変動値であり、トークンまたは通貨のコストが変動した場合、ガス価格は同じ実際の値を維持するように変化します。
  • ガス代 :これは事実上、特定のトランザクションまたはプログラム(契約と呼ばれる)を実行するために支払う必要のあるガスの量です。

したがって、誰かが永久に実行されるコードを実行しようとすると、コントラクトは最終的にガス制限を超え、コントラクトを呼び出したトランザクション全体が以前の状態にロールバックされます。


通貨について理解できたので、新しい通貨を生成するプロセスを見てみましょう。

イーサリアムチュートリアル:マイニング

イーサリアムは、他のパブリックブロックチェーンテクノロジーと同様に、インセンティブベースのモデルを通じてセキュリティを確保します。これは、プルーフオブワークメカニズムと呼ばれます。次の図は、イーサリアムマイニングがどのように機能するかを示しています。

ソートアルゴリズムc ++

より技術的な観点から、使用されるプルーフオブワークアルゴリズムはEthashと呼ばれ、Dagger-Hashimotoアルゴリズムに触発されたハッシュアルゴリズムです。

イーサリアムの実用的なアーキテクチャを見て、それが不可欠な要素について説明したので、実際の問題とそれを解決するためのイーサリアムのアプローチを見てみましょう。

イーサリアムチュートリアル:分散型クラウドファンディングのユースケース

問題文 :ビジネスを成功させるための良い「アイデア」は、今日の世界のすべてではありません。アイデアを実行するには、多くの資金と努力が必要です。ここで「Kickstarter」のような組織が登場します。彼らはプロジェクトを実行に移すためにプロジェクトへの寄付に必要な公開をプロジェクトに提供しますが、そのような動機の集中型アーキテクチャには、主に報酬の処理方法に欠点があります。一元化された機関がすべての決定を行うため、システムは次のようなルールになりがちです。

  • キャンペーンの締め切りを逃した人はもう入場できません
  • 気が変わったドナーは出られない

アプローチ

下の図で説明されているように、問題に対処するために分散型の方法論を採用しています。

解決

上記の問題ステートメントの堅牢性スマートコントラクトは次のとおりです。

pragma solidity ^ 0.4.16インターフェイストークン{関数転送(アドレスレシーバー、uint金額)}契約クラウドセール{アドレスパブリック受益者uintパブリックファンディングゴールuintパブリックamountRaiseduintパブリック期限uintパブリック価格トークンパブリックtoken報酬マッピング(アドレス=> uint256)public balanceOf bool FundingGoalReached = false bool cloudsaleClosed = false event GoalReached(address receive、uint totalAmountRaised)event FundTransfer(address backer、uint amount、bool isContribution)/ ** * Constrctor関数**所有者を設定します* / function Crowdsale(address ifSuccessfulSendTo //アドレス資金調達が成功したときの所有者のuintfundingGoalInEthers // uintdurationInMinutesを上げるための目標額//与えられた時間uintetherCostOfEachToken //エーテルアドレスの株式コストaddressOfTokenUsedAsReward //トークンアドレス){受益者= ifSuccessfulSendTo FundingGoal = FundingGoalInEthers * 1エーテル期限=今+ durationInMinutes * 1分価格= etherCostOfEachToken * 1エーテルからkenReward = token(addressOfTokenUsedAsReward)} / ***フォールバック関数**名前のない関数は、誰かが契約に資金を送るたびに呼び出されるデフォルトの関数です* / function()payable {require(!crowdsaleClosed)uint amount = msg。値balanceOf [msg.sender] + =金額amountRaised + =金額tokenReward.transfer(msg.sender、amount / price)FundTransfer(msg.sender、amount、true)}修飾子afterDeadline(){if(now = FundingGoal){fundingGoalReached = true GoalReached(beneficiary、amountRaised)} cloudsaleClosed = true} / ***資金を引き出す**目標または期限に達したかどうかを確認し、達した場合は、資金調達の目標に達した場合、*全額を送信します受益者に。目標が達成されなかった場合、各寄稿者は寄稿した金額を*引き出すことができます。 * / function safeWithdrawal()afterDeadline {if(!fundingGoalReached){uint amount = balanceOf [msg.sender] balanceOf [msg.sender] = 0 if(amount> 0){if(msg.sender.send(amount)){ FundTransfer(msg.sender、amount、false)} else {balanceOf [msg.sender] = amount}}} if(fundingGoalReached && beneficiary == msg.sender){if(beneficiary.send(amountRaised)){FundTransfer(beneficiary、 amountRaised、false)} else {//受益者に資金を送金できない場合は、資金提供者の残高のロックを解除しますfundingGoalReached = false}}}}

堅牢性の学習に興味がある場合は、次のブログをご覧ください。 、開発に使用されますパーソナライズスマートコントラクト。

Blockchainを学び、Blockchain Technologiesでキャリアを築きたい場合は、 インストラクター主導のライブトレーニングと実際のプロジェクト経験が付属しています。このトレーニングは、Blockchainを深く理解し、主題をマスターするのに役立ちます。

質問がありますか?コメント欄に記載してください できるだけ早くご連絡いたします。