#はじめに
Etherscanにスマートコントラクトのコードを登録する方法です。Testnetも登録対応しているのでデプロイした際はコード登録を習慣付けて置くと、後から見返した時にどのコントラクトが何の内容か把握しやすいのでオススメです。
#Etherscanにコードを登録する
#truffle-flattenerのインストール
OpenZepplinなどライブラリを使用している場合、使用しているimportを全て1つのファイルに記述しないといけません。
そのため、1つのファイルに生成してくれる便利なツールがあります。
solidity(solc)をインストール
$ brew update
$ brew upgrade
$ brew tap ethereum/ethereum
$ brew install solidity
truffle-flattenerをインストール
$ npm install truffle-flattener -g
例えばこのようなコントラクトがあるとして、
pragma solidity ^0.5.0;
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";
contract MyToken is ERC20, ERC20Detailed {
string public _name = "KTcoin";
string public _symbol = "KTC";
uint8 public _decimals = 18;
address account = msg.sender;
uint initialSupply = 100*(10**18);
constructor() ERC20Detailed( _name, _symbol, _decimals) public {
_mint(account, initialSupply);
}
}
このように使用します。
$ truffle-flattener contracts/MyToken.sol > contracts/Output.sol
このように出力されます。
pragma solidity ^0.5.0;
// File: /Users/code/erc20_sample/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
interface IERC20 {
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
...省略
// File: contracts/MyToken.sol
contract MyToken is ERC20, ERC20Detailed {
string public _name = "KTcoin";
string public _symbol = "KTC";
uint8 public _decimals = 18;
address account = msg.sender;
uint initialSupply = 100*(10**18);
constructor() ERC20Detailed( _name, _symbol, _decimals) public {
_mint(account, initialSupply);
}
}
#Ethescanに登録
デプロイしたコントラクトのコードから Verify and Publishをクリックします。
コンパイラタイプ、コンパイラバージョン、ライセンスをデプロイした時のものに選択します。
Enter the Solidity Contract Code below にデプロイしたコードを入力します。
デプロイ時、コンストラクターに引数を入れている場合は、ABIエンコードした引数をConstructor Arguments ABI-encoded欄に入力します。
ABI-encodedはこちらで変換可能です。
https://abi.hashex.org/
Publishを押し、コードが一致すれば登録が完了します。
#参考にさせて頂きました