イーサリアム用にSolidityを用いてスマートコントラクトを作ろうとしている人向け。
Remix(Ethereum IDE)などでビルドすると以下のようなエラーが出た
Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it “abstract” is sufficient.
これはエラーではなく警告なので、ぶっちゃけそのままでも大丈夫です。
それでも、なんかスッキリしないのでこの警告を解消する方法が知りたい人はこの記事が役に立つと思います。
あとついでに以下の警告が出た場合の解決策も提示します。
Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing “SPDX-License-Identifier:
これら2つの警告は簡単に解消できるのでやってみてください。
“Visibility for constructor is ignored”の解決方法
これはコンストラクタにpublicやexternalを指定しているのが原因と考えられます。
contract My is ERC20 {
constructor(uint256 initialSupply) public ERC20("Liberation", "LIB") {
_mint(msg.sender, initialSupply);
}
}
例えば上記のコードのようなかんじです。赤いアンダーラインを引いている部分にpublicっていうのがあります。
解決方法は簡単で、このpublicってやつをただ消してやるだけです。
あなたの書いているSolidityのコードをチェックしてみればconstructorの部分にpublicかexternalが書かれていると思います。
それを消すだけでこのエラーは解決するかと思います。
Solidityの公式ドキュメントには以下のように書かれています。
Visibility (public
/ external
) is not needed for constructors anymore:
つまり、Visiblityはもう必要とされなくなったってことです。(=もうコードに書かなくてもよい)
”SPDX license identifier not provided”の解決方法
ついでに「Warning: SPDX license identifier not provided in source file」の警告を解決する方法をご紹介します。
これは単純に書いたコードのライセンスに関する定義がないよっていう警告です。
これはあなたが書いたコードのsolファイルの1行目に以下の記載をすればよいです。
// SPDX-License-Identifier: MIT
これだけです。以下が例です。
pragma solidity ^0.7.5;
contract TestContract {
// Some logic
}
上記のようなコードを書いたとする。これにライセンス記載を追加する。
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.5;
contract TestContract {
// Some logic
}
MITライセンスでいいならこんなかんじになります。
もし他のライセンスを指定したいときはMITの部分を「GPL-3.0-or-later」とか任意のライセンスに変更してあげます。
ライセンスの指定の仕方はSPDX License Listに記載があります。(Identifierの部分)