Ethereumアプリ開発フレームワークTruffleでテストネットに接続する仕方

Ethereumアプリ開発フレームワークTruffleでテストネットに接続する仕方

接続可能なテストネット

TestnetDescriptionID
Ropstenproof-of-workの唯一のテストネット。予測できないブロック時間と頻繁なチェーンの再編成があります。同時に、メインネットに最もよく似ているのはチェーンです。3
RinkebyA proof-of-authority ネットワーク。 これは、新しいブロックが、プルーフオブワークを提供するマイナーではなく、事前定義された信頼できるノードのセットによって追加されることを意味します。 Gethクライアントでのみ機能し、ブロック時間は15秒です。4
KovanAnother proof-of-authorityネットワーク 、ただし、これはパリティクライアントでのみ実行され、ブロック時間は4秒です。42
Goerliこれも a proof-of-authority ネットワーク, ただし、GethクライアントとParityクライアントの両方と互換性があり、ブロック時間は15秒です。5

MainnetはID=1をリザーブ

Ethereumアプリ開発フレームワークTruffleでテストネットに接続する仕方

テストネットに接続するには

  • テストネットノードを入手する
  • 新しいアカウントを作成する
  • Truffle構成ファイルでネットワーク構成を更新します
  • テストアカウントに資金を提供する

が必要である。

テストノードにアクセスする、用意する。

テストネットに接続された独自のGethがノードを起動できますが、テストネットにアクセスする最も簡単な方法は、Infuraなどのパブリックノードサービスを使用することです。Infuraは、無料プランと有料プランの両方を介して、すべてのテストネットとメインネットワークのパブリックノードへのアクセスを提供します。

新規アカウントの作成

下記のコマンドでアカウントが作成されフェーズ( mnemonics )の獲得ができます。メタマスクのものを使用もできます。

$ npx mnemonics
planet auto sign choice ...

自分のプロジェクトの作成

Truffleのプロジェクトを持っていること、もし持っていなかった場合下記で作成できます。

$ mkdir myproject && cd myproject
$ npm init -y
$ npm i truffle
$ npx truffle init

自分のプロジェクトの作成

こちらcontract from the OpenZeppelin Learn guides を利用

contractフォルダ内にBox.solを新規作成、内容は下記。

// contracts/Box.sol
// SPDX-License-Identifier: MIT
// from: https://docs.openzeppelin.com/learn/developing-smart-contracts#setting-up-a-solidity-project
pragma solidity ^0.6.0;


contract Box {
    uint256 private value;

    // Emitted when the stored value changes
    event ValueChanged(uint256 newValue);

    // Stores a new value in the contract
    function store(uint256 newValue) public {
        value = newValue;
        emit ValueChanged(newValue);
    }

    // Reads the last stored value
    function retrieve() public view returns (uint256) {
        return value;
    }
}

migrationsフォルダ内に2_deploy.jsを作成して

// migrations/2_deploy.js
// SPDX-License-Identifier: MIT
const Box = artifacts.require("Box");

module.exports = function(deployer) {
  deployer.deploy(Box);
};

ネットワークの調整

パブリックノードを使用しているため、すべてのトランザクションにローカルで署名する必要があります。これを行うには@truffle / hdwallet-providerを使用し、mnemonicで設定します。また、Infuraエンドポイントを使用してテストネットワークに接続する方法をプロバイダーに説明します。

まずはプロバイダーをインストール

$ npm install --save-dev @truffle/hdwallet-provider

truffle-config.jsのコンフィグ

const { projectId, mnemonic } = require('./secrets.json');
const HDWalletProvider = require('@truffle/hdwallet-provider');

module.exports = {

  networks: {
    development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
    },
    // 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/${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 )
    },
   },
 };

最初の行で、secrets.jsonファイルからプロジェクトIDと mnemonic をロードしていることに注意してください。これは次のようになりますが、独自の値を使用します。必ず.gitignoreを確認してください。

{
    "mnemonic": "planet auto sign choice ...",
    "projectId": "305c137050..."
}
ヒント:secrets.jsonファイルの代わりに、プロジェクトに必要なシークレット管理ソリューションを使用できます。一般的で単純なオプションは、環境変数としてシークレットを挿入するためにdotenvを使用することです。

これで、Ropstenネットワークで使用可能なアカウントを一覧表示することにより、この構成が機能していることをテストできます。使用したmnemonicによって異なるため、異なることを覚えておいてください。
$ npx truffle console --network ropsten
truffle(ropsten)> await web3.eth.getAccounts()
[
  '0xb022FFdC8F9156BcaA9818cb7B9658364758B5De',
  '0xa9372cde6f32f7EC77FB4962d6C292611dF30117',
  '0xB568d2240E1d3D08c52488d2ceb4e2525aD0F38c',
...
]

infuraでもできます。

$ npx truffle console --network ropsten
truffle(ropsten)> await web3.eth.getBalance('0xb022FFdC8F9156BcaA9818cb7B9658364758B5De')
'0'

テストアカウントにテスト用のFund

ほとんどの公開テストネットにはfaucetがあります。少量のテストEtherを無料で提供するサイトです。 Ropstenを使用している場合は、Ropsten Faucetにアクセスして資金を入手してください。または、MetaMaskFaucetを使用して、MetaMaskアカウントに直接資金を要求することもできます。

$ npx truffle migrate --network ropsten

Compiling your contracts...
===========================
> Compiling ./contracts/Box.sol
> Compiling ./contracts/Migrations.sol
> Artifacts written to /home/abcoathup/projects/forum/myproject/build/contracts
> Compiled successfully using:
   - solc: 0.6.7+commit.b8d736ae.Emscripten.clang



Starting migrations...
======================
> Network name:    'ropsten'
> Network id:      3
> Block gas limit: 8000029 (0x7a121d)


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

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0xb3ae2fe5eb982b747ec3bca0530692245cdc02d0e4bbab0fd5d30c3ec9213097
   > Blocks: 2            Seconds: 17
   > contract address:    0x27fbe63444eC4B5F97217DAC66f1b0CdcF9c4859
   > block number:        7983802
   > block timestamp:     1590647318
   > account:             0xb022FFdC8F9156BcaA9818cb7B9658364758B5De
   > balance:             0.99342436
   > gas used:            164391 (0x28227)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00328782 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 7983803)
   > confirmation number: 3 (block: 7983805)

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


2_deploy.js
===========

   Deploying 'Box'
   ---------------
   > transaction hash:    0xed23f94b7fec11934d504e3caf04279e6223a43aba0133ce2bbc32d2d50fb702
   > Blocks: 2            Seconds: 9
   > contract address:    0x98C6f9aeAB681568988cd8CCD5B86AdaE380672F
   > block number:        7983812
   > block timestamp:     1590647396
   > account:             0xb022FFdC8F9156BcaA9818cb7B9658364758B5De
   > balance:             0.99041172
   > gas used:            108291 (0x1a703)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00216582 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 7983813)
   > confirmation number: 2 (block: 7983814)

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


Summary
=======
> Total deployments:   2
> Final cost:          0.00545364 ETH
$ npx truffle console --network ropsten
truffle(ropsten)> box = await Box.deployed()
truffle(ropsten)> await box.store('42')
{
  tx: '0x3d125322e7d0738d554424085197e9d94b8280849cdac6c3010ea426427928ec',
  receipt: {
    blockHash: '0xf35a7f53e502f524adda3bca18878982e20e775072038e74e3502f078c684714',
    blockNumber: 7983886,
    contractAddress: null,
    cumulativeGasUsed: 42513,
    from: '0xb022ffdc8f9156bcaa9818cb7b9658364758b5de',
    gasUsed: 42513,
    logs: [ [Object] ],
    logsBloom: '0x40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000400000000000000000000000000000',
    status: true,
    to: '0x98c6f9aeab681568988cd8ccd5b86adae380672f',
    transactionHash: '0x3d125322e7d0738d554424085197e9d94b8280849cdac6c3010ea426427928ec',
    transactionIndex: 0,
    rawLogs: [ [Object] ]
  },
  logs: [
    {
      address: '0x98C6f9aeAB681568988cd8CCD5B86AdaE380672F',
      blockHash: '0xf35a7f53e502f524adda3bca18878982e20e775072038e74e3502f078c684714',
      blockNumber: 7983886,
      logIndex: 0,
      removed: false,
      transactionHash: '0x3d125322e7d0738d554424085197e9d94b8280849cdac6c3010ea426427928ec',
      transactionIndex: 0,
      id: 'log_e38e9ac8',
      event: 'ValueChanged',
      args: [Result]
    }
  ]
}

テストネットを利用したデプロイ

Truffleを使用してテストネットワークRinkebyにNFTをデプロイ!

今回の参考

Connecting to Public Test Networks with Truffle

コメントを残す

メールアドレスが公開されることはありません。