#テストネットにDappsをデプロイする。(DappsでHello world) 

[前記事に戻る](https://qiita.com/NT1123/private/1386c16db48d993f5910)

最後に実際DappsをテストネットRopstenにデプロイを実施し、その動作を確認します。

#6 テストネットにDappsをデプロイする。
ここでは、テストネットRopstenにDappsをDeployします。

#6.1 INFURAに登録する。

テストネットやメインネットにDappsをDeployを実施する前にINFURAに登録する必要があります。INFURAとはEthereumのメインネットやテストネットのノードをホスティングし、deployに必要なend pointやAPIを提供するサービスです。

（１）[INFURA](https://infura.io/)にアクセスを行い、アカウントを作ります。
（２）「Creeate New Project」でProjectを作ります。
（３）VIEW PROJECTをクリックします。
![32.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/bad914b1-73e1-888b-b846-24453f156a14.jpeg)
（４）PROJECT IDをコピペします。
![33.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/75936266-8756-27a1-cb86-49b71094f011.jpeg)
（５）METAMASK(Wallet)に紐づくニーモニックをsecretファイルに記入します。
・METAMASKからニーモニックを取得する方法は[こちら](https://medium.com/@cryptoplanet.io/metamask%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-76568ab4efd3)
・secretファイルの配置場所は、[こちら]
(https://camo.qiitausercontent.com/bd6be80fb7d47555a5a8f0a2b952698d7b5e04e1/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3135303232332f34616331363035362d383337662d393733332d633734382d3839663337306463633036342e6a706567)を確認してください。
（６）truffle-config.jsを編集します。
<b>下記に箇条書きした作業を実施してください。</b>
・infuraKeyは（４）で取得したPROJECT IDを充てます。
・ropstenに関係する箇所のコメントを外し、有効化します。
・provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/(INFURAのサイトで読み取ったProjectIDを充てる)`)の箇所、(INFURAのサイトで読み取ったProjectIDを充てるに(４）で取得したPROJECT IDを充てます。


```javascript:/truffle-config.js
/**
 * Use this file to configure your truffle project. It's seeded with some
 * common settings for different networks and features like migrations,
 * compilation and testing. Uncomment the ones you need or modify
 * them to suit your project as necessary.
 *
 * More information about configuration can be found at:
 *
 * truffleframework.com/docs/advanced/configuration
 *
 * To deploy via Infura you'll need a wallet provider (like truffle-hdwallet-provider)
 * to sign your transactions before they're sent to a remote public node. Infura accounts
 * are available for free at: infura.io/register.
 *
 * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate
 * public/private key pairs. If you're publishing your code to GitHub make sure you load this
 * phrase from a file you've .gitignored so it doesn't accidentally become public.
 *
 */

const HDWalletProvider = require('truffle-hdwallet-provider');
const infuraKey = "(INFURAのサイトで読み取ったProjectIDを充てる)"; 
const fs = require('fs');
const mnemonic = fs.readFileSync("./secret").toString().trim(); //sectreファイルに書き込んだニーモニックを読み取る

module.exports = {
 /**
  * Networks define how you connect to your ethereum client and let you set the
  * defaults web3 uses to send transactions. If you don't specify one truffle
  * will spin up a development blockchain for you on port 9545 when you
  * run `develop` or `test`. You can ask a truffle command to use a specific
  * network from the command line, e.g
  *
  * $ truffle test --network <network-name>
  */

 networks: {
   // Useful for testing. The `development` name is special - truffle uses it by default
   // if it's defined here and no other network is specified at the command line.
   // You should run a client (like ganache-cli, geth or parity) in a separate terminal
   // tab if you use this network and you must also set the `host`, `port` and `network_id`
   // options below to some value.
   //
   // development: {
   //  host: "127.0.0.1",     // Localhost (default: none)
   //  port: 8545,            // Standard Ethereum port (default: none)
   //  network_id: "*",       // Any network (default: none)
   // },

   // Another network with more advanced options...
   // advanced: {
     // port: 8777,             // Custom port
     // network_id: 1342,       // Custom network
     // gas: 8500000,           // Gas sent with each transaction (default: ~6700000)
     // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei)
     // from: <address>,        // Account to send txs from (default: accounts[0])
     // websockets: true        // Enable EventEmitter interface for web3 (default: false)
   // },

   // Useful for deploying to a public network.
   // NB: It's important to wrap the provider as a function.
    ropsten: {
      provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/(INFURAのサイトで読み取ったProjectIDを充てる)`),
      network_id: 3,       // Ropsten's id
      gas: 5500000,        // Ropsten has a lower block limit than mainnet
      confirmations: 2,    // # of confs to wait between deployments. (default: 0)
      timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
      skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
    },

   // Useful for private networks
   // private: {
     // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),
     // network_id: 2111,   // This network is yours, in the cloud.
     // production: true    // Treats this network as if it was a public net. (default: false)
   // }
 },

 // Set default mocha options here, use special reporters etc.
 mocha: {
   // timeout: 100000
 },

 // Configure your compilers
 compilers: {
   solc: {
     // version: "0.5.1",    // Fetch exact version from solc-bin (default: truffle's version)
     // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
     // settings: {          // See the solidity docs for advice about optimization and evmVersion
     //  optimizer: {
     //    enabled: false,
     //    runs: 200
     //  },
     //  evmVersion: "byzantium"
     // }
   }
 }
}

```

#6.2 テストネットRopstenにDeployする
いよいよ、作成したDappsをテストネットRopstenにDeployします。
下記が実行結果です。


[TESTNET Ropsten](https://ropsten.etherscan.io/)のサイトより下記ログで表示されたtransaction hashを検索を行い見つかればDappsがDeployされております。

```console:/metit
C:\Users\Takeshi\metit>truffle console --network ropsten
truffle(ropsten)> migrate

Compiling your contracts...
===========================
> Compiling .\contracts\Hello.sol
> Compiling .\contracts\Migrations.sol
> Artifacts written to C:\Users\Takeshi\metit\build\contracts
> Compiled successfully using:
   - solc: 0.5.8+commit.23d335f2.Emscripten.clang


Starting migrations...
======================
> Network name:    'ropsten'
> Network id:      3
> Block gas limit: 0x7a1200


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0xc...
   > Blocks: 2            Seconds: 9
   > contract address:    0xC...
   > block number:        6561014
   > block timestamp:     1570930458
   > account:             0x8...
   > balance:             0.94735578
   > gas used:            223305
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0044661 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 6561016)
   > confirmation number: 2 (block: 6561017)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:           0.0044661 ETH


1568469596_deploy_hello.js
==========================

   Deploying 'Hello'
   -----------------
   > transaction hash:    0xf......(全体略)
   > Blocks: 0            Seconds: 21
   > contract address:    0x1......(全体略)
   > block number:        6561020
   > block timestamp:     1570930507
   > account:             0x8......(全体略)
   > balance:             0.94158834
   > gas used:            246009
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00492018 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 6561021)
   > confirmation number: 2 (block: 6561022)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00492018 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.00938628 ETH
```

Deployがうまくいかないときは一度build以下のデータを消すと、正常にDeployができることもあるようです。[参照](https://qiita.com/sot528/items/5933549bad33ee6a0474)

#6.3　コントラクトアドレスの書き換え

前節6.2で実施したDeployのログに表示されたコントラクトアドレスをコピーしてdemo.jsのsmartContractAddressの値を書き換えてください。smartContractAddressはロカールブロックチェーンにDeployしたときに得られたコントラクトアドレスのままになっているはずなので、それをテストネットRopstenにDeployしたときに得られたコントラクトアドレスに書き換えます。[demo.jsの画像はこちら](https://camo.qiitausercontent.com/ca42db43c364aa4a404d2544242e67b5aa35be4b/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3135303232332f33646531383339362d663136372d656232632d353366302d3762356337326637373065362e6a706567)


#6.4　動作を確認
ローカルブロックチェーンにDappsをデプロイし、動作確認を実施した[こちら]
(https://qiita.com/NT1123/items/1386c16db48d993f5910#53-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B)の記事通りにすれば、Dappsの動作が確認できると思います。