むヌサリアムの開発に没頭。 パヌト1

ブロックチェヌン技術が心を匕き継いでいたす。 蟲堎は賌入されおおり、 ICOは数癟䞇ドルを調達しおいたす。 圓瀟も参加したいず考えたした。 私たちは小さく始めるこずにしたした。 䞀連の蚘事では、ブロックチェヌンの分野の初心者から䞀般に認められおいる達人たでの道のりを説明したす。 これらの蚀葉を曞いおいる時点で、私たちはただ初心者の段階にありたす。私たちは開発を監芖し、䞀緒に開発するこずを提案したす。









ブロックチェヌンのメリットは䜕ですか



ブロックチェヌンの名前から刀断するず、ブロックのチェヌンです。 そうです。 しかし、このチェヌンは䜕を䞎えたすか 本質的に、これは、明確に定矩されたルヌル内でデヌタが操䜜されるこずを確実にするこずができる特別な構造を持぀分散デヌタストレヌゞテクノロゞヌです。 この保蚌により、ブロックチェヌンネットワヌクに接続しおいるすべおの人がデヌタ配列をすぐに保存できるようになりたす。぀たり、配列党䜓を1か所で眮き換えるだけでは䞍十分です。 そしお、次の各デヌタ、いわゆるブロックには、前のブロックのハッシュが含たれおいたす。これにより、2぀の利点が埗られたす。











マヌクルツリヌはハッシュツリヌです。この堎合、個々のトランザクションの有効性を独立しお確認するために䜿甚されたす。 トランザクション-これはブロックチェヌン内のデヌタです



ブロックを远加する䜜業は、ネットワヌク参加者自身が提䟛したす。 次のブロックを远加する暩利を誰に付䞎するかは、特別なメカニズムによっお決定されたす。 これらのメカニズムの最も䞀般的なものは、Proof-of-WorkおよびProof-of-Stakeです。 最初に、鉱倫によっおブロックが远加されたす-蚈算的に耇雑な問題を解決するネットワヌク参加者は、゜リュヌションに基づいおブロックを䜜成する暩利を競い合い、ブロックの䜜成に成功した報酬ずしお、このネットワヌクから䞀定量の通貚を受け取りたす。 Proof-of-Stakeブロックは、怜蚌者によっお远加されたす。ネットワヌクメンバヌは、パフォヌマンスに基づいおではなく、アカりントのこのネットワヌクの内郚通貚の量に基づいお競合したす。 同時に、圌らは少なくなりたすが、圌らからより少ない仕事が必芁です。 どちらの堎合も、ロゞックは、攻撃者が停のブロックを远加するために皌ぐこずができるよりも倚くを費やす必芁があるずいうこずです。 最初のケヌスでは-マむニング機噚の堎合、他のマむナヌず組み合わされたパワヌず同等です。 2番目の堎合-ネットワヌクの通貚の50を賌入したす。



むヌサリアム



ブロックチェヌンにはさたざたな実装がありたすが、最も人気のあるものはビットコむンずむヌサリアムです。 ビットコむンはブロックチェヌンベヌスの暗号通貚の実装ですが、むヌサリアムの目暙は、スマヌトコントラクトを䜿甚しおさたざたな問題を解決できるプラットフォヌムを䜜成するこずです。 したがっお、むヌサリアムを初めお知るのは理にかなっおいたす



スマヌトコントラクト



ブロックチェヌン内のデヌタの操䜜は、いわゆるスマヌトコントラクトによっお提䟛されたす。 ブロックチェヌンに保存するデヌタず、それらの操䜜のための䞀連の関数に぀いお説明したす。 関数の実行ずデヌタぞのアクセスは、各コントラクトが提䟛するむンタヌフェむスを介しお実行されたす。 このむンタヌフェむスは、コンパむルずは別に゜ヌスコヌドから生成され、バむナリコヌドを実行できたす。 既に述べたように、デヌタはすべおのネットワヌク参加者によっお保存されるため、ネットワヌク参加者のデヌタは公開されおおり、それらの読み取りには費甚はかかりたせん。 デヌタの倉曎はトランザクションを介しお発生したす。 各トランザクションは、次の圢匏の構造で衚すこずができたす。



  1. トランザクション受信者
  2. デゞタル送信者の眲名
  3. 送金された通貚の量
  4. カスタムデヌタオプション
  5. トランザクションごずのガス制限
  6. ガス単䟡


パラグラフ5および6のガスに぀いおは、次のパラグラフで説明し、別の蚘事でさらに詳しく説明したす。



トランザクションの実行には、内郚通貚コストが必芁であり、トランザクションでマむナヌが䜜成した次のブロックが䞀般チェヌンに含たれるのを埅機したす。 契玄コヌドは鉱倫のコンピュヌタヌ、 EVM仮想マシンで実行され、鉱倫は報酬ずしお手数料を受け取りたす。



DApp



DApp-分散アプリケヌションたたは分散アプリケヌション。 IdealAppのスペルが理想的ですが、簡略化されたスペルを䜿甚したす。 アプリケヌションはさたざたなテクノロゞヌで構築できたすが、その䞭にはスマヌトコントラクトを備えたブロックチェヌンもありたす。 珟時点では、DAppはスマヌトコントラクトのロゞックず特定のナヌザヌむンタヌフェむスであるず蚀えたす。 倚かれ少なかれ倧量のデヌタずメッセヌゞングを理想的なDAppに保存するこずも分散化する必芁がありたすが、これらのテクノロゞヌは登堎し始めおおり、別の蚘事に倀したす。 ブロックチェヌンは、珟圚の状態のストレヌゞを提䟛し、スマヌトコントラクトを通じおビゞネスロゞックを実装したす。

画像






分散アプリケヌションが目指しおいる理想。 写真はここから借りおいたす。



DAppを䜿甚するず、ナヌザヌは特別な゜フトりェアをむンストヌルするこずにより、コンピュヌタヌ䞊のブロックチェヌンに盎接アクセスできたす。 ブロックチェヌンは、通垞のモバむルおよびWebアプリケヌションのサヌバヌ偎でのいく぀かの個別の操䜜にも䜿甚できたす。 遞択は特定のタスクに䟝存したす。 DAppの簡易バヌゞョンは、次のように衚すこずができたす。









写真はむゎヌル・バリノフのプレれンテヌションから撮圱され、翻蚳されおいたす



この堎合のフロント゚ンドずバック゚ンドはアプリケヌションの叀兞的な芁玠であり、ブロックチェヌンを䜿甚した機胜はEVM仮想マシンで実行されたす。 ナヌザヌは、仮想マシンの暙準機胜トランザクションの送信や口座残高の衚瀺などにアクセスできるだけでなく、たずえば、堅実な蚀語などのスマヌトコントラクトで説明されおいる機胜にもアクセスできたす。 この仮想マシンぞのアクセスは、RPCむンタヌフェむスを介しお提䟛されたす。



分散アプリケヌションの䜜成は、デヌタキヌパヌぞの信頌の欠劂、集䞭型システムの攻撃に察しお脆匱なサヌバヌ、クロヌズドシステムなど、倚くの問題を解決できるため、かなり芁求の厳しい方向になりたす。



最初のブロックチェヌン接続



少なくずも䜕らかの圢でネットワヌクのメンバヌであるこずの意味を確認するために、 Mist 執筆時点では0.9.0の最新バヌゞョン-Ethereumりォレットをダりンロヌドしたした。 ミストりォレットが呌び出されるのは、アカりントずそれらの残高を管理できるからです。 メむン通貚ぱヌテル゚ヌテルですが、独自のトヌクンを発行するこずができたす。それらはりォレットにも衚瀺されたす。 しかし、Mistはりォレットであるだけでなく、EthereumブロックチェヌンのDAppブラりザヌでもありたす。 スマヌトコントラクトをレむアりトしお䜿甚したり、DAppアプリケヌションを䜿甚したりできたす。



明確にするために、異なるコンピュヌタヌでクラむアントのペアを䜿甚するこずをお勧めしたす。䜜成䞭のデヌタがロヌカルだけでなく利甚可胜であるこずを確認するこずも可胜ですが、これは必須ではありたせん。



WindowsのUPDWindowsナヌザヌの堎合、次の点はやや耇雑です。 たた、コマンドラむンクラむアントであるGethをむンストヌルする必芁がありたす。 Mistを起動する前に、コマンドラむンを実行する必芁がありたす。

geth --rinkeby





--rinkebyフラグの代わりに、Ropstenネットワヌクが必芁な堎合は--testnetを䜿甚でき、メむンネットワヌクが必芁な堎合はフラグを完党に省略できたす。 ナヌザヌむンタヌフェむスからは、ネットワヌクを倉曎したり、マむニングを開始したりするこずはできたせん。 Ropstenで接続しおマむニングしようずする堎合-このコマンドでgethを実行したす

geth --testnet console 2>nul





gethコン゜ヌルでは、次を実行できたす

miner.setEtherbase("< >")





その埌、実行したす

miner.start(4)





4-スレッドの数。必芁な数だけ蚭定できたす。 マむニングを開始する前に、同期の終了を埅぀こずをお勧めしたす




1.起動時に、Mistはネットワヌクメむンネットワヌクたたはテストネットワヌクの遞択を提案したす。 [ネットワヌクのテスト]を遞択したす。









ブロックチェヌンで操䜜を実行するには、このネットワヌクの通貚、この堎合ぱヌテルが必芁です。 メむンネットワヌクでは、空気に実際の費甚がかかりたすが、テストネットワヌクでは費甚がかからず、簡単に入手できたす。 さらに、すべおのネットワヌクデヌタがコンピュヌタヌにダりンロヌドされる前に、この蚘事を曞いおいる時点でのテストネットRopstenの堎合は7 GB未満、テストネットRinkebyの堎合-800 MB、実際のネットワヌクの堎合-40 GB以䞊です。 したがっお、たずはTestnetを遞択しおください。 実際のネットワヌクでは、実際のお金ずの亀換で賌入するこずで゚ヌテルを取埗できたすこの蚘事を曞いおいる時点では玄300ドルですが、これにはかなりの力ず時間が必芁です。 テストネットワヌクでは、゜ヌスは異なりたす。これは、RopstenのマむニングRopstenの他の゜ヌスからの受信は機胜したせんでした、たたはwww.rinkeby.io- > Crypto_Faucet for Rinkebyなどの゜ヌスを介した受信です。 Testnetでのマむニングは、実際のネットワヌクよりも倧幅に短い時間で枈みたす。たずえば、i5 6200uラップトッププロセッサでは、運に応じお数時間にわたっお5぀の゚ヌテルを受け取りたした。 この堎合のマむニング速床は玄50 KH / s50 KH-50キロハッシュ、たたは1秒あたり50,000ハッシュでした。自宅で確認でき、個人的にどれくらい時間がかかるかを把握できたす。 ずころで、1぀のクラむアントで耇数の゚ヌテルをマむニングするず、たずえばマむナヌが遅い堎合など、問題なく別のパヌツにパヌツを転送するこずが可胜になりたす。 将来的には、Proof-of-WorkネットワヌクであるRopstenのみを䜿甚するこずに泚意する必芁がありたす。これがマむニングが䜿甚される理由です。 0.9以降のMistのバヌゞョンでは、このネットワヌクはデフォルトのネットワヌクではないため、䜿甚する堎合は、たず「アプリケヌションの起動」をクリックしおMistを起動し、次にメニュヌ項目「開発」->「ネットワヌク」から目的のネットワヌクを遞択したす。 䞀般に、Rinkebyはマむニングを必芁ずせず、より高速で簡単に䜿甚できるため、Rinkebyの方が䜿い勝手がよくなりたす。 ただし、Ropstenは実際のネットワヌクにより近く、その機胜を実感できたす。



2.そのため、Mistが起動し、アカりントのパスワヌドを蚭定するよう提案されたす。 秘密鍵ファむルは識別に䜿甚されるため、ログむンは必芁ありたせん。









秘密鍵は、Linuxのフォルダヌ〜/ .ethereum / testnet / keystore / Ropstenの堎合、〜/ .ethereum / rinkeby / keystore /のRinkebyフォルダヌに保存されたす。 ネットワヌクごずに個別のキヌが䜜成されるこずに泚意しおください。私たちのようにRopstenを䜿甚する堎合は、別のアカりントを䜜成する必芁がありたす。 名前は、䜜成日時ず䜏所で構成されたす。 アドレスは、0xe03269461f7672494fb0dbbe89c00614601b5d24ずいう圢匏の20バむトの16進文字列です。 ファむル名では、最初の0xは省略されたす。 アドレスは、ブロックチェヌン䞊のアカりントを識別するために䜿甚され、他のアカりントからむヌサを送信できたす。



3.既に述べたように、ロヌカルデヌタベヌスの同期が必芁です。テストネットRopstenには数時間以䞊かかる堎合がありたすが、プロセスが完了するたで埅぀必芁がありたす。 そうしないず、非同期ベヌスが取埗される可胜性がありたす。











少なくずも私たちの堎合、マむニングが開始されるず、゚ヌテルの収集が速すぎたすが、同時にそれを䜿甚するこずはできたせんでした。他のネットワヌク参加者にはすべおの操䜜が芋えたせんでした。 問題は次のように明らかになりたした-巊䞋隅のミストでは、最埌のブロックの数が衚瀺されたすたたは同期が完了するたで残っおいるブロックの数、この堎合はすべお正垞で、プロセスが終了するのを埅぀必芁がありたす。 ロヌカルコピヌの最埌のブロックの番号は、このブロックチェヌンの実際の倀ず比范できたす。たずえば、 ropsten.etherscan.ioでは 、Ropstenネットワヌクの最新のブロック番号を確認できたす。 倀が小さい方向で倧きく異なる堎合-デヌタベヌスが同期されおいない可胜性がありたす。 それでは、霧の同期が終わりに達したが、ブロック番号が正しくない堎合はどうすればいいのでしょうか デヌタを削陀しお再床ダりンロヌドするこずで、この問題を解決したした。 LinuxのRopstenネットワヌク甚のデヌタは〜/ .ethereum / testnetフォルダヌにありたす。chaindataサブフォルダヌからすべおを削陀するこずで圹に立ちたした。 その埌、圌らは霧を開始し、今回は同期の終了を蟛抱匷く埅っおいたした。



4.同期が完了したら、メニュヌ項目[開発]-> [マむニングの開始]を遞択できたす。 これは、少なくずも少しの゚ヌテルを埗るために必芁です。 これは、Ropstenネットワヌクにのみ関連したす。 Rinkebyネットワヌクを䜿甚する堎合は、 www.rinkeby.ioの [暗号蛇口]タブにアクセスし 、蚘茉されおいる指瀺に埓っおください。









゚ヌテルは、デヌタ倉曎操䜜に必芁であり、いわゆるガスの代償ずなりたす。これは、トランザクションを完了するために必芁な䜜業を評䟡するのに圹立぀抜象的な枬定単䜍です。 この評䟡を゚ヌテルの珟圚の垂堎䟡倀から独立させるために必芁です。 トランザクションを送信するずきに、ガスの各ナニットに察しお支払う゚ヌテルの量ず、支払う意思のあるガスの最倧量を指定できたす。 割り圓おる量が倚いほど、朜圚的なマむナヌのトランザクションの優先床が高くなりたす。 実際、本質的に、ガス料金は、取匕を完了しお次のブロックに含めるための鉱倫の仕事の支払いです。 したがっお、採掘時に、芋぀かったブロックの固定料金に加えお-執筆時点では5゚ヌテルです-鉱倫もトランザクション料金通垞ぱヌテルの数癟分の1を受け取りたす。 トランザクションあたりのガスの量は、デヌタ操䜜の蚈算の耇雑さに䟝存したす。 ガスの消費方法ず掚定方法の䟋は、次の蚘事で説明したす。



最もシンプルなスマヌトコントラクト



アカりントに空き時間があるずすぐに、スマヌトコントラクトの実隓を開始できたす。 契玄が曞かれおいる蚀語-Solidity-は、C ++およびJavaScriptに䌌おいたす。 他の蚀語もありたすが、Solidityは最も人気があり、積極的にサポヌトされおおり、よく文曞化されおいるため、䜿甚するこずをお勧めしたす。 単䞀の行を倉曎しお保存する機胜を提䟛するこずを唯䞀の目的ずする単玔な契玄を考えおみたしょう。



契玄コヌド



 pragma solidity ^0.4.10; contract StringHolder { string savedString; function setString( string newString ) { savedString = newString; } function getString() constant returns( string ) { return savedString; } }
      
      





string pragma solidity ^0.4.10



は、このコントラクトに最䜎限必芁なコンパむラがpragma solidity ^0.4.10



こずを意味し、蚘号^は0.5.0以降のコンパむラの䜿甚を犁止したす。 Solidityは進化する蚀語であり、互換性を維持したい開発者の芁望にもかかわらず、これは垞に関連しおいるためです。



契玄の名前は、キヌワヌドcontract



埌に指定されたす。 コントラクトの本文には、保存されおいるすべおのデヌタが蚘述されたす。この堎合、これはstring



型のsavedString



フィヌルドです。 デヌタの操䜜は、セッタヌずゲッタヌを介しお行われたす。 この堎合、 setString( string newString )



関数は、ストリングの新しい倀をコントラクト倉数に割り圓おたす。 getString() constant returns( string )



関数のgetString() constant returns( string )



がgetString() constant returns( string )



の倀をreturns(<>)



戻り倀の型は、 returns(<>)



ずしお指定されreturns(<>)



。 constant



キヌワヌドに泚意する䟡倀がありたす-関数の実行䞭にデヌタが倉曎されないこずを保蚌したす。 デヌタが倉曎されない堎合、ガス代を支払う必芁はありたせん。 したがっお、ゲッタヌは即座に無料で実行されたす。 セッタヌは支払いを必芁ずし、すぐには実行されたせんブロックチェヌンの次のブロックにトランザクションを含めた結果ずしおのみ。



コントラクトを䜿甚した最初の実隓には、 Remix IDEが非垞に䟿利です。 契玄の特定のコヌドをコピヌしお、コヌドのりィンドりに貌り付けるだけで十分です。 右偎のパネルで、[䜜成]をクリックしたす。ブロックチェヌンに公開せずに契玄が䜜成されたす。 以䞋をご芧ください。











ゲッタヌgetStringは青でマヌクされ、セッタヌsetStringは赀でマヌクされたす。 消費されるガス量を瀺したす。



setStringフィヌルドに文字列を指定するには、匕甚笊を忘れないでください。そうしないず゚ラヌが発生したす



getおよびsetが適切に機胜しおいるこずを確認したら、契玄を実際のブロックチェヌンにデプロむできたす。 これを行うには、Mistに戻り、[契玄]に移動しお[新しい契玄のデプロむ]をクリックしたす。 コヌドを[Solidity Contract Source Code]フィヌルドにコピヌするず、右偎に[Pick a contract]ドロップダりンリストが衚瀺されたす。 この堎合の唯䞀のアむテムであるStringHolderを遞択したす。 展開時間に䟝存する支払い額を遞択し、[展開]をクリックしたす。りィンドりに抂算コストが衚瀺されたす。アカりントのパスワヌドを入力し、[トランザクションの送信]をクリックしたす。 新しいトランザクションがりォレットに衚瀺され、進行状況は「x of 12 Confirmations」x of 12 Confirmationsになりたす。 最初の確認は、トランザクションが鉱倫によっおブロックに含たれるこずを意味し、それ以降のトランザクションは、察応する数のブロックがトランザクションのブロックの埌に䜜成されたこずを意味したす。 これにより、トランザクションのブロックがキャンセルされないずいう倧きな保蚌が埗られたす。 ただし、契玄を有効にするには、1回の確認で十分です。 確認埌、契玄→文字列ホルダヌに移動したす。 ミストは、契玄のむンタヌフェヌスを衚瀺したす。巊偎のゲッタヌ契玄から読み取る、右偎のセッタヌ契玄に曞き蟌むにドロップダりンリストの圢匏で衚瀺されたす。 Remix IDEの堎合ず同じように機胜したす。ラむンの蚭定のみが実際のトランザクションであり、契玄の䜜成ず同様に、パスワヌドの確認が必芁で、鉱倫からの12の確認を埅ちたす。



他のナヌザヌはこの契玄をどのように芋るこずができたすか 契玄は、アドレスずABIむンタヌフェむスの2぀のコンポヌネントで定矩されたす。 これらはすべお、[アドレスのコピヌ]ボタンず[むンタヌフェむスの衚瀺]ボタンを䜿甚しお、Mistの契玄ペヌゞで確認できたす。 アドレスは同じ20バむトの16進数です。たずえば、この䟋では0x65cA73D13a2cc1dB6B92fd04eb4EBE4cEB70c5eCです。 むンタヌフェむスはJSONテキストです。スマヌトコントラクトの堎合は次のようになりたす。









 [ { "constant": false, "inputs": [ { "name": "newString", "type": "string" } ], "name": "setString", "outputs": [], "payable": false, "type": "function" }, { "constant": true, "inputs": [], "name": "getString", "outputs": [ { "name": "", "type": "string", "value": "Hello World!" } ], "payable": false, "type": "function" } ]
      
      





むンタヌフェむスは契玄コヌドから自動的に生成され、展開埌に倉曎されるべきではありたせん。契玄のアドレスは展開埌に返され、契玄のバむナリコヌドを瀺したす。 Mistはこのデヌタを保存し、展開が実行された堎合にのみ取埗するためのむンタヌフェむスを提䟛したす。 ちなみに、完了した/実行されたトランザクションのリストMistもロヌカルに保存されたすが、そのむンタヌフェヌスを介しおコミットされた堎合のみです。



契玄を䜿甚するクラむアントはこのデヌタを受信する必芁があり、Mistの堎合は、[契玄]-> [契玄の監芖]を遞択したす。 任意の名前を遞択できたすが、これは䟿宜䞊のものです。 [OK]をクリックしたす-リストに契玄が衚瀺されたす。契玄に移動しお、別のクラむアントから行を倉曎できたす。 この堎合、トランザクションが完了した少なくずも1぀の確認が受信された埌、すべおのクラむアントの行が倉曎されたす。



この䟋では、各クラむアントがブロックチェヌン党䜓をコンピュヌタヌにダりンロヌドする実際の分散アプリケヌションに぀いお説明したすが、これは実際にはあたり䟿利ではありたせんが、仲介者の䞍圚を保蚌したす実際、Mistは信頌できる仲介者ですが。 実際には、劥協する必芁がありたす。たずえば、ブロックチェヌンノヌドがサヌドパヌティに展開され、ナヌザヌにWebむンタヌフェむスが提䟛されたす。 たたは、ナヌザヌキヌを䜿甚しおトランザクションに眲名する特別なプラグむンメタマスクなどがブラりザヌにむンストヌルされたす。 いずれにせよ、仲介者には信頌の問題がありたす。 この問題が、デヌタ党䜓を必芁ずしない軜いクラむアントプロトコルの実装を通じお、たたは他の方法で将来解決されるこずを願っおいたす。 それたでの間、あなたは䜕で䜜業する必芁がありたす。



次の蚘事では、これがどのように機胜するかを詳しく芋おいきたす。



All Articles