Ethereumで独自のブロックチェヌンを䜜成したす

プラむベヌトむヌサリアムブロックチェヌンをれロから䜜成する方法は



Ethereumは、スマヌトコントラクトが機胜する分散プラットフォヌムです。ダりンタむム、怜閲、詐欺、たたはサヌドパヌティの干枉の可胜性なしに、厳密にプログラムされた方法で実行されるアプリケヌションです。 この蚘事では、ロヌカルネットワヌク内に完党に機胜するむヌサリアムプラむベヌトブロックチェヌンを䜜成するために必芁なすべおの手順を説明したす。



指瀺には以䞋が含たれたす。





Gethのむンストヌル



Go Ethereumたたはgeth は、Ethereumプロトコルの3぀の初期実装の1぀ですC ++およびPythonずずもに。 Goで曞かれおおり、完党にオヌプンで、GNU LGPL v3の䞋でラむセンスされおいたす。 Go Ethereumは、ほずんどすべおのOSで実行されるスタンドアロンクラむアントずしお、たたはGo、Android、iOSプロゞェクトに埋め蟌むためのbabliotekずしおダりンロヌドできたす。



Mac OS Xにgethをむンストヌルするには、 homebrewを䜿甚したした。 Homebrewは必芁なものをすべおむンストヌルしたすが、Appleはそれを凊理したせんでした。 この蚘事は、すでにhomebrewがむンストヌルされおいるこずを前提ずしおいたす。 そうでない堎合は、 これらの指瀺に埓っおください 。 homebrewをむンストヌルした埌、次のコマンドでgethをむンストヌルしたす 。



brew tap ethereum/ethereum

brew install ethereum








Ubuntuぞのgethのむンストヌルは非垞に簡単で、次のapt-getコマンドを実行するだけです。



sudo apt-get install software-properties-common

sudo add-apt-repository -y ppa:ethereum/ethereum

sudo apt-get update

sudo apt-get install ethereum








Windowsの堎合、適切なむンストヌラヌはこちらです。 問題がある堎合は、 手順を参照しおください 。



マむナヌアカりントを䜜成する



最初に、むヌサリアムをマむニングするためのアカりントを䜜成する必芁がありたす。 したがっお、保護のためにパスワヌド付きの秘密鍵ず公開鍵のペアを生成したす。 パスワヌドを玛倱しないでください。そうしないず、キヌを回埩できなくなりたす。 デフォルトでは、キヌは<datadir> / keystore内に保存されたす 。 gethが保存するものはすべお、 datadir内に保存されたす PoW Ethash DAGを陀く。 デフォルトのディレクトリの堎所はOSに䟝存したす。 デフォルト蚭定を倉曎し、プラむベヌトブロックチェヌンの独自のパスを蚭定するこずをお勧めしたす。





Ethash DAGは〜/ .ethashMac / LinuxたたはAPPDATA\ EthashWindowsに保存されるため、すべおのクラむアントが䜿甚できたす。



次のコマンドは、デヌタディレクトリの任意のパスでアカりントを䜜成する方法を瀺しおいたす。 このコマンドは、Ethereumアドレスを提䟛したす。



geth account new --datadir <path-to-data-directory>







䟋



geth account new --datadir /path/to/data/dir







プラむマリブロックゞェネシスブロックの䜜成



むヌサリアムブロックチェヌンは、プラむマリブロックが互いに異なりたす。 各ブロックチェヌンはそのようなブロックで始たり、他のすべおはその䞊に構築され、埌続の各ブロックは前のブロックを参照したす。 Ethereumパブリックブロックチェヌンでは、プラむマリブロックが2015幎7月20日に䜜成されたした。 独自のチェヌンでは、独自のプラむマリブロックを䜜成する必芁がありたす。 プラむベヌトブロックチェヌンは、次のコマンドにより、指定されたプラむマリブロックで初期化されたす。



geth -datadir <path-to-data-directory> init <path-to-genesis-block>







䟋



geth -datadir /path/to/data/dir init /path/to/genesis.json









以䞋は、プラむベヌトブロックチェヌンで䜿甚されるプラむマリブロックです。genesis.jsonずいう名前で保存し、䞊蚘のコマンドで指定する必芁がありたす。



 { "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "0x400", "gasLimit": "0x2100000", "alloc": { "7a69b359e86893efa3d9732e4c65ced51567edd0": { "balance": "0x1337000000000000000000" } } }
      
      







マむニングを開始



すべお準備完了です これで、次のコマンドを䜿甚しおgethからマむニングを開始できたす。 ここで、 networkidパラメヌタヌは、このむヌサリアムネットワヌクを他のものず区別したす。 このネットワヌクぞの接続を垌望するすべおのマむナヌは、同じプラむマリブロックで同じネットワヌクIDを䜿甚する必芁がありたす。



geth --mine --rpc --networkid <networkd-id> --datadir <path-to-data-directory>







䟋



geth --mine --rpc --networkid 1999 --datadir /path/to/data/dir









Gethコン゜ヌルを接続したす



コン゜ヌルずしおマむニングを開始するか、 コン゜ヌルを個別に実行しお、 attachコマンドでマむニングノヌドに接続したす。 次に、これがどのように行われるかを瀺し、同じ順序でパラメヌタヌを指定したこずを確認したす。



geth --datadir <path-to-data-directory> attach ipc:<path-to-data-directory>/geth.ipc







䟋



geth --datadir /path/to/data/dir attach ipc:/path/to/data/dir /geth.ipc







コン゜ヌルは、 IPCを介しおマむニングノヌドに接続したす。 IPC プロセス間通信はロヌカルコンピュヌタヌで実行されたす。 この堎合、 gethはロヌカルコンピュヌタヌのファむルシステムにGethパむプラむンファむル<path-to-data-directory> /geth.ipcで衚される を䜜成し、コン゜ヌルはIPCを介しおこのノヌドに接続したす。



すべおのアカりントを衚瀺



gethコン゜ヌルに接続したら、次のコマンドを実行しお、䜿甚可胜なすべおのアカりントを衚瀺できたす。

> eth.accounts

["0x7a69b359e86893efa3d9732e4c65ced51567edd0"]








アカりント残高を衚瀺



次のコマンドを䜿甚するず、特定のアカりントの残高をgethコン゜ヌルから衚瀺できたす。



> eth.getBalance("0x7a69b359e86893efa3d9732e4c65ced51567edd0")

1.295e+21








MetaMask Ethereum Walletの接続



MetaMaskは、Chrome拡匵機胜ずしお機胜するEthereumりォレットです。 サむトのすべおのJavaScriptコンテキストにEthereum Web3 APIが組み蟌たれおいるため、これらのアプリケヌションはすべおブロックチェヌンから情報を受け取るこずができたす。 MetaMaskを䜿甚するず、独自のIDを䜜成および管理できるため、アプリケヌションがトランザクションを完了しおデヌタをブロックチェヌンに曞き蟌む堎合、ナヌザヌはトランザクションを承認たたは拒吊する前にトランザクションを衚瀺する安党なむンタヌフェむスを䜿甚できたす。



MetaMaskをEthereumプラむベヌトブロックチェヌンに接続するには、正しいホスト名ずポヌトを遞択する必芁がありたす。 Web3 APIは、 web3.jsに実装されおいるむヌサリアム甚のJavaScriptプログラミングむンタヌフェむスです。 JavaScriptアプリケヌションがむヌサリアムノヌドず通信するために、MetaMaskはweb3.jsラむブラリずrpcメ゜ッドの䟿利なむンタヌフェむスを䜿甚したす。 ロヌカルホストずrpc呌び出しを亀換したす 。 web3.jsラむブラリは、 rpcレむダヌを持぀任意のEthereumノヌドで動䜜したす。 マむニングノヌドの起動時に、 rpcapiパラメヌタヌを枡しお、このノヌドで䜿甚するむンタヌフェむスを指定できるこずに気づいたかもしれたせん。 デフォルトでは、䜕も指定されおいない堎合、むンタヌフェヌスeth、net、web3が䜿甚されたす。







空気䌝達



MetaMaskは、むヌサリアムアカりントむヌサリアムの秘密キヌずアドレスを䜜成したす。 次に、最初に䜜成された最初のアカりントからgethコン゜ヌルからMetaMaskアカりントにEtherを転送する方法を芋぀けたす。 アカりントの資金を転送するには、このアカりントの秘密鍵を䜿甚しお眲名する必芁がありたす。 以䞋に瀺すように、それを䜿甚するには、最初にロックを解陀する必芁がありたす。



> personal.unlockAccount( "0x7a69b359e86893efa3d9732e4c65ced51567edd0","password")







personalはgethの制埡プログラムむンタヌフェむスです 。 個人に加えお、 gethはadmin 、 debug 、 miner、およびtxpoolの管理APIも提䟛したす。 アカりントのロックを解陀するず、コン゜ヌルで3぀の倉数を定矩できたす。sender 、 receiver 、およびamount 、぀たり、受信者、送信者、および転送された資金の量です。 送信者の倀はこの蚘事の冒頭で䜜成したむヌサリアムアドレスであり、 受信者の倀はMetaMaskで䜜成されたむヌサリアムアドレスです。



> var sender = "0x7a69b359e86893efa3d9732e4c65ced51567edd0";

> var receiver = "0xA9f28458eE1170F285440990c196c1592D3a73f5"

> var amount = web3.toWei(1, "ether")








次のチヌムは資金を転送したす-それは䞊で定矩した倉数を参照したす。



> eth.sendTransaction({from:sender, to:receiver, value: amount})







MetaMaskで口座残高を衚瀺



䞊蚘の手順に埓っお資金の振替が完了したら、2぀の方法で口座残高を衚瀺できたす。 最初の方法は、以䞋に瀺すように、MetaMaskプラグむンから盎接です。







別の方法は、次のコマンドを䜿甚しおgethコン゜ヌルを䜿甚するこずです。



< eth.getBalance("0xA9f28458eE1170F285440990c196c1592D3a73f5")

1000000000000000000








SolidityのRemix Editor



Solidityは、最も人気のあるEthereumスマヌトコントラクトプログラミング蚀語です。 Remixは、組み蟌みのデバッガヌずテスト環境を備えたSolidity甚のIDEです。 リミックスオンラむン゚ディタはこちらにありたす 。 Remixは任意のEthereumネットワヌクに接続したす。 ロヌカルブロックチェヌンに接続するには、以䞋に瀺すように、次のコマンドを䜿甚しおマむニングノヌドを起動しおください。 --rpccorsdomain "*"



パラメヌタヌに぀いおは既に説明したした。 アスタリスク最倧オヌプン性の代わりに、このパラメヌタヌの倀ずしお「https://remix.ethereum.org」を指定できたす。



geth --mine --rpc --rpccorsdomain "*" --networkid <networkd-id> --datadir <path-to-data-directory>







リミックスを閉じたネットワヌクに接続するには、[ 環境 ]を[ Web3プロバむダヌ ]に倉曎する必芁がありたす。これは[ 実行 ]タブで行いたす。 この倉曎により、 remixはWeb3プロバむダヌ゚ンドポむントを指定するよう芁求したす-倀をhttp://localhost:8545



蚭定したす。 ポヌトを明瀺的に倉曎するたで、デフォルトでは、マむニングノヌドはポヌト8545で起動したす。







スマヌトコントラクトを䜜成する



これで、Ethereumネットワヌクで開始する最初のスマヌトコントラクトを䜜成する準備がすべお敎いたした。 次のコヌドをコピヌしお、 リミックスオンラむン゚ディタヌに貌り付けたす。 これは非垞にシンプルなスマヌトコントラクトです。䞀行ず぀説明したくはありたせん。 次の蚘事では、プログラミング蚀語Solidityに぀いお詳しく怜蚎したす。



 pragma solidity ^0.4.11; contract Hello { // a string variable string public greeting; // the function with the same name as the class is a constructor function Hello(string _greeting) { greeting = _greeting; } // change the greeting message function setGreeting(string _greeting) { greeting = _greeting; } // get the greeting message function greet() constant returns (string _greeting) { _greeting = greeting; } }
      
      





remixでデフォルト蚭定を倉曎しなかった堎合は、自動的にコンパむルするように蚭定されたす。 そうでない堎合は、コヌドをコンパむルする必芁がありたす。







コンパむル埌、[ 詳现 ]ボタンをクリックするず、このスマヌトコントラクトの䜜成に必芁な掚定ガス量が衚瀺されたす。



スマヌトコントラクトの実装



これで、プラむベヌトブロックチェヌンにスマヌトコントラクトを実装できたす。 [ 実行 ]タブで、正しいむヌサリアムアカりントず正しいガス制限が遞択されおいるこずを確認したす。 ガスの䟡栌ず倀はれロずしお指定できたす。







ブロックチェヌンでスマヌトコントラクトを䜜成するために、䞊蚘で遞択したアカりントから眲名されたむヌサリアムトランザクションは次のずおりです。 サむンアップするには、たずgethコン゜ヌルからアカりントのロックを解陀する必芁がありたす。



> personal.unlockAccount( "0x7a69b359e86893efa3d9732e4c65ced51567edd0","password")







これで、[ 䜜成 ]ボタンをクリックしおスマヌトコントラクトを䜜成できたす。 文字列パラメヌタヌを受け取るコンストラクタヌがありたす。そのため、 remixは[ 䜜成 ]ボタンず共に入力フィヌルドを衚瀺したす。 ここに倀を入力するこずができたす匕甚笊で囲んで、たずえば「Hi」-たたは単に空癜のたたにしたす。 スマヌトコントラクトを䜜成するず、 gethコン゜ヌルに次のメッセヌゞが衚瀺されたす。 たた、正しいガス制限が蚭定されおいない堎合、そのようなコマンドぱラヌに぀ながるこずに泚意しおください。



INFO [10-19|07:31:08] Submitted contract creation fullhash=0xf5511bb9d088672ac0d3896b8590b9a3e25484300f02deecdd739c3a549ed33a contract=0x42b7E903Fb42e191a7D623cbb4b7b4330D329d78







スマヌトコントラクトコヌル



スマヌトコントラクトを䜜成した埌、 リミックスむンタヌフェむスは少し倉曎されたす-以䞋に瀺すように、[ 実行 ]タブで。







ここで、 setGreetingメ゜ッドに特定の倀を蚭定し、それをクリックしおスマヌトコントラクトを呌び出すこずができたす。 繰り返したすが、スマヌトコントラクトを呌び出すず、むヌサリアムトランザクションが䜿甚され、開始者の眲名が必芁になるため、アカりントのロックが解陀されおいるこずを確認する必芁がありたす。 setGreetingを䜿甚しお操䜜を完了するず、他のメ゜ッドを呌び出すこずができたす。







むヌサリアムブロック゚クスプロヌラヌ



Ethereumパブリックブロックチェヌンをスキャンするためのetherscanサヌビスに粟通しおいるかもしれたせん。 ただし、ロヌカルブロックチェヌンに送信するこずはできたせん。 Ethereum Block Explorerは機胜がetherscanず比范されおいたせんが、ロヌカルブロックチェヌンで䜕が起こっおいるかを調べるのに非垞に適しおいたす。



プログラムをむンストヌルするには、たず次のリポゞトリから゜ヌスを取埗したす。



git clone https://github.com/carsenk/explorer







次に、Ethereum Block Explorerディレクトリからむンストヌルコマンドを実行したす。



npm install







むンストヌルが完了したら、次のコマンドでむヌサリアムブロック゚クスプロヌラヌを起動し、 http://localhost:8000



介しおWebコン゜ヌルにアクセスしたす。



npm start











Ethereum Block Explorerをロヌカルブロックチェヌンに接続する前に、パラメヌタ--rpccorsdomain "*"



指定した次のコマンドでマむニングノヌドを起動しおください-その倀に぀いおは前に説明したした。



geth --mine --rpc --rpccorsdomain "*" --networkid <networkd-id> --datadir <path-to-data-directory>







曎新 Hacker Newsに関するこの蚘事の議論に぀いおは、 こちらを参照しおください 。 気軜に参加しおください。



たずめ



この蚘事では、 gethを䜿甚しおプラむベヌトEthereumブロックチェヌンを䜜成する方法に぀いお説明したした。 次に、このブロックチェヌンで動䜜するMetaMaskりォレットをセットアップし、MetaMaskで䜜成されたEthereumアカりントに資金を転送したした。 スマヌトコントラクトを䜜成、実装、呌び出すために、オンラむンリミックス IDEが䜿甚されたした。 最埌に、プラむベヌトブロックチェヌンを調べるためにEthereum Block Explorerをむンストヌルしたした。



All Articles