見出し画像

ganache-cliとTruffle(備忘録)

ganache-cli

・ganache-cliのデータの残し方
ただ、アカウントデータは残らないのかも?
途中からアカウントに残高が入らない状態が続いてmigrateできなくなった

$ganache-cli --db /save


・truffleの使い方

・truffle config
ganache-cliへのデプロイを行う際は、truffle configにネットワークの設定を書き込む必要がある。既存でコメントアウトされているものを有効化するだけで問題なし。ネットワークポートを「8545」に切り替えるだけでganacheには対応できるはず。developmentに書くことでデフォルトでganacheに対応する。もし、対応させたくない場合は他の場所にdevelopmentをganacheに変更することでgethなども使用する際には便利に行うことができる。

networks:{
    development: {
     host: "127.0.0.1",     // Localhost (default: none)
     port: 8545,            // Standard Ethereum port (default: none)
     network_id: "*"
    },
}

もし、developmentに記述しない場合。
各コマンドに以下を加えることでネットワークを指定して実行することが可能。

--network ganache


・truffle compile
コントラクトを作成したら行う。コンパイルを行うことによって


/truffle/build/contracts

にコントラクト名の「.js」ファイルが作成される。基本的にエラーが無ければ通るはず。

truffle compile --reset

で全体のコンパイルを初期化して行うことができるので予期せぬエラーが頻発する場合は試すのもあり。

・truffle test
コンパイル後に行う。テストを行うためにmigrateファイルを作成する必要がある。基本的にはMigrationの初期ファイルをそのままコピペするだけで通るので高度なことをしないのであれば問題ない。

const Migrations = artifacts.require("ファイル名(拡張子なし)");

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

・truffle migrate
テストを行わなくてもできる。ただ、テストは自動で行われているのでMigrationファイルを用意しないと通らない。


・躓いたこと

gas不足によるエラー

Error: Error: Error:  *** Deployment Failed ***

"Migrations" could not deploy due to insufficient funds
  * Account:  0x46A4bF924e8691E1cb9e31e9fEA3Aeb44CeE7216
  * Balance:  0 wei
  * Message:  Returned error: sender doesn't have enough funds to send tx. The upfront cost is: 30000000000 and the sender's account only has: 0
  * Try:
     + Using an adequately funded account
     + If you are using a local Geth node, verify that your node is synced.

   at Object.run (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:96:1)
   at processTicksAndRejections (internal/process/task_queues.js:93:5)

ganacheにコントラクトをデプロイする際にmigrateコマンドを実行した際に起こった。
指定アカウントにgasがないことによって引き起こされていることはわかったが、なぜgasがないのかがわからなかった。
ganache-cliは基本的に実行時にアカウントが自動生成されるので、gasがないなんてことはないはずなのだがエラーが何度も表示された。

・解決策

--dbをつけずに実行
ganache起動時に「--db /save」を必ず入れていたため、それが過去のブロックを参照していて新しく追加されたアカウントに対応できていないのでは?と思い、外してみるとmigtrateが通った。

データが残らないので毎回migrateしてアドレスを取得し、abiを書き換えないと試作システムのテストができないので今後も解決策を模索する。

この記事が気に入ったらサポートをしてみませんか?